@@ -17,21 +17,59 @@ private class NumericSummaries extends SummaryModelCsv {
17
17
";;false;numericCast(_:);;;Argument[0];ReturnValue;taint" ,
18
18
";;false;unsafeDowncast(_:to:);;;Argument[0];ReturnValue;taint" ,
19
19
";;false;unsafeBitCast(_:to:);;;Argument[0];ReturnValue;taint" ,
20
+ ";;false;numericCast(_:);;;Argument[0];ReturnValue;taint" ,
21
+ ";;false;min(_:_:);;;Argument[0..1];ReturnValue;taint" ,
22
+ ";;false;min(_:_:_:_:);;;Argument[0..2];ReturnValue;taint" ,
23
+ ";;false;min(_:_:_:_:);;;Argument[3].CollectionElement;ReturnValue;taint" ,
24
+ ";;false;max(_:_:);;;Argument[0..1];ReturnValue;taint" ,
25
+ ";;false;max(_:_:_:_:);;;Argument[0..2];ReturnValue;taint" ,
26
+ ";;false;max(_:_:_:_:);;;Argument[3].CollectionElement;ReturnValue;taint" ,
27
+ ";;false;abs(_:);;;Argument[0];ReturnValue;taint" ,
20
28
";Numeric;true;init(exactly:);;;Argument[0];ReturnValue.OptionalSome;value" ,
21
- ";Numeric;true;init(bitPattern:);;;Argument[0];ReturnValue;taint" ,
29
+ ";Numeric;true;init(bitPattern:);;;Argument[0];ReturnValue;taint" , // actually implemented in Int, UInt, Double etc.
30
+ ";Numeric;true;init(truncating:);;;Argument[0];ReturnValue;taint" , // actually implemented in Int, UInt, Double etc.
22
31
";BinaryInteger;true;init(_:);;;Argument[0];ReturnValue;taint" ,
23
32
";BinaryInteger;true;init(clamping:);;;Argument[0];ReturnValue;taint" ,
24
33
";BinaryInteger;true;init(truncatingIfNeeded:);;;Argument[0];ReturnValue;taint" ,
25
34
";BinaryInteger;true;init(_:format:lenient:);;;Argument[0];ReturnValue;taint" ,
26
35
";BinaryInteger;true;init(_:strategy:);;;Argument[0];ReturnValue;taint" ,
27
36
";BinaryInteger;true;formatted();;;Argument[-1];ReturnValue;taint" ,
28
37
";BinaryInteger;true;formatted(_:);;;Argument[-1];ReturnValue;taint" ,
29
- ";FixedWidthInteger;true;init(_:radix:);;;Argument[0];ReturnValue;taint" ,
38
+ ";BinaryInteger;true;quotientAndRemainder(dividingBy:);;;Argument[-1..0];ReturnValue.TupleElement[0..1];taint" ,
39
+ ";FixedWidthInteger;true;init(_:radix:);;;Argument[0];ReturnValue.OptionalSome;taint" ,
30
40
";FixedWidthInteger;true;init(littleEndian:);;;Argument[0];ReturnValue;taint" ,
31
41
";FixedWidthInteger;true;init(bigEndian:);;;Argument[0];ReturnValue;taint" ,
42
+ ";FixedWidthInteger;true;addingReportingOverflow(_:);;;Argument[-1..0];ReturnValue.TupleElement[0];taint" ,
43
+ ";FixedWidthInteger;true;subtractingReportingOverflow(_:);;;Argument[-1..0];ReturnValue.TupleElement[0];taint" ,
44
+ ";FixedWidthInteger;true;multipliedReportingOverflow(by:);;;Argument[-1..0];ReturnValue.TupleElement[0];taint" ,
45
+ ";FixedWidthInteger;true;dividedReportingOverflow(by:);;;Argument[-1..0];ReturnValue.TupleElement[0];taint" ,
46
+ ";FixedWidthInteger;true;remainderReportingOverflow(dividingBy:);;;Argument[-1..0];ReturnValue.TupleElement[0];taint" ,
47
+ ";FixedWidthInteger;true;dividingFullWidth(_:);;;Argument[-1];ReturnValue.TupleElement[0..1];taint" ,
48
+ ";FixedWidthInteger;true;dividingFullWidth(_:);;;Argument[1].TupleElement[0..1];ReturnValue.TupleElement[0..1];taint" ,
49
+ ";FixedWidthInteger;true;multipliedFullWidth(by:);;;Argument[-1..0];ReturnValue.TupleElement[0..1];taint" ,
32
50
";FloatingPoint;true;init(_:);;;Argument[0];ReturnValue;taint" ,
33
51
";FloatingPoint;true;init(sign:exponent:significand:);;;Argument[1..2];ReturnValue;taint" ,
34
52
";FloatingPoint;true;init(signOf:magnitudeOf:);;;Argument[1];ReturnValue;taint" ,
53
+ ";FloatingPoint;true;addProduct(_:_:);;;Argument[-1..1];Argument[-1];taint" ,
54
+ ";FloatingPoint;true;addingProduct(_:_:);;;Argument[-1..1];ReturnValue;taint" ,
55
+ ";FloatingPoint;true;formRemainder(dividingBy:);;;Argument[-1..0];Argument[-1];taint" ,
56
+ ";FloatingPoint;true;remainder(dividingBy:);;;Argument[-1..0];ReturnValue;taint" ,
57
+ ";FloatingPoint;true;formTruncatingRemainder(dividingBy:);;;Argument[-1..0];Argument[-1];taint" ,
58
+ ";FloatingPoint;true;truncatingRemainder(dividingBy:);;;Argument[-1..0];ReturnValue;taint" ,
59
+ ";FloatingPoint;true;rounded();;;Argument[-1];ReturnValue;taint" ,
60
+ ";FloatingPoint;true;rounded(_:);;;Argument[-1];ReturnValue;taint" ,
61
+ ";FloatingPoint;true;squareRoot();;;Argument[-1];ReturnValue;taint" ,
62
+ ";FloatingPoint;true;maximum(_:_:);;;Argument[0..1];ReturnValue;taint" ,
63
+ ";FloatingPoint;true;maximumMagnitude(_:_:);;;Argument[0..1];ReturnValue;taint" ,
64
+ ";FloatingPoint;true;minimum(_:_:);;;Argument[0..1];ReturnValue;taint" ,
65
+ ";FloatingPoint;true;minimumMagnitude(_:_:);;;Argument[0..1];ReturnValue;taint" ,
66
+ ";BinaryFloatingPoint;true;init(sign:exponentBitPattern:significandBitPattern:);;;Argument[0..2];ReturnValue;taint" ,
67
+ ";BinaryFloatingPoint;true;init(_:format:lenient:);;;Argument[0];ReturnValue;taint" ,
68
+ ";BinaryFloatingPoint;true;init(_:strategy:);;;Argument[0];ReturnValue;taint" ,
69
+ ";BinaryFloatingPoint;true;formatted();;;Argument[-1];ReturnValue;taint" ,
70
+ ";BinaryFloatingPoint;true;formatted(_:);;;Argument[-1];ReturnValue;taint" ,
71
+ ";Strideable;true;advanced(by:);;;Argument[-1..0];ReturnValue;taint" ,
72
+ ";Strideable;true;distance(to:);;;Argument[-1..0];ReturnValue;taint" ,
35
73
]
36
74
}
37
75
}
@@ -44,10 +82,40 @@ private class NumericFieldsInheritTaint extends TaintInheritingContent,
44
82
DataFlow:: Content:: FieldContent
45
83
{
46
84
NumericFieldsInheritTaint ( ) {
47
- this .getField ( ) .hasQualifiedName ( "FixedWidthInteger" , [ "littleEndian" , "bigEndian" ] )
48
- or
49
- this .getField ( )
50
- .hasQualifiedName ( [ "Double" , "Float" , "Float80" , "FloatingPoint" ] ,
51
- [ "exponent" , "significand" ] )
85
+ exists ( string className , string fieldName |
86
+ (
87
+ (
88
+ className = "FixedWidthInteger" and
89
+ fieldName = [ "littleEndian" , "bigEndian" ]
90
+ )
91
+ or
92
+ (
93
+ className = [ "Double" , "Float" , "Float80" , "FloatingPoint" ] and
94
+ fieldName = [ "exponent" , "significand" ]
95
+ )
96
+ or
97
+ (
98
+ className = "BinaryInteger" and
99
+ fieldName = "words"
100
+ )
101
+ or
102
+ (
103
+ className = "Numeric" and
104
+ fieldName = [ "magnitude" , "byteSwapped" ]
105
+ )
106
+ or
107
+ (
108
+ className = "BinaryFloatingPoint" and
109
+ fieldName = [ "binade" , "exponentBitPattern" , "significandBitPattern" ]
110
+ )
111
+ ) and
112
+ exists ( FieldDecl fieldDecl , Decl declaringDecl , TypeDecl namedTypeDecl |
113
+ namedTypeDecl .getFullName ( ) = className and
114
+ fieldDecl .getName ( ) = fieldName and
115
+ declaringDecl .getAMember ( ) = fieldDecl and
116
+ declaringDecl .asNominalTypeDecl ( ) = namedTypeDecl .getADerivedTypeDecl * ( ) and
117
+ this .getField ( ) = fieldDecl
118
+ )
119
+ )
52
120
}
53
121
}
0 commit comments