@@ -17,21 +17,59 @@ private class NumericSummaries extends SummaryModelCsv {
1717 ";;false;numericCast(_:);;;Argument[0];ReturnValue;taint" ,
1818 ";;false;unsafeDowncast(_:to:);;;Argument[0];ReturnValue;taint" ,
1919 ";;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" ,
2028 ";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.
2231 ";BinaryInteger;true;init(_:);;;Argument[0];ReturnValue;taint" ,
2332 ";BinaryInteger;true;init(clamping:);;;Argument[0];ReturnValue;taint" ,
2433 ";BinaryInteger;true;init(truncatingIfNeeded:);;;Argument[0];ReturnValue;taint" ,
2534 ";BinaryInteger;true;init(_:format:lenient:);;;Argument[0];ReturnValue;taint" ,
2635 ";BinaryInteger;true;init(_:strategy:);;;Argument[0];ReturnValue;taint" ,
2736 ";BinaryInteger;true;formatted();;;Argument[-1];ReturnValue;taint" ,
2837 ";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" ,
3040 ";FixedWidthInteger;true;init(littleEndian:);;;Argument[0];ReturnValue;taint" ,
3141 ";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" ,
3250 ";FloatingPoint;true;init(_:);;;Argument[0];ReturnValue;taint" ,
3351 ";FloatingPoint;true;init(sign:exponent:significand:);;;Argument[1..2];ReturnValue;taint" ,
3452 ";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" ,
3573 ]
3674 }
3775}
@@ -44,10 +82,40 @@ private class NumericFieldsInheritTaint extends TaintInheritingContent,
4482 DataFlow:: Content:: FieldContent
4583{
4684 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+ )
52120 }
53121}
0 commit comments