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