@@ -41,9 +41,11 @@ class StringLengthConflationConfiguration extends DataFlow::Configuration {
41
41
}
42
42
43
43
override predicate isSink ( DataFlow:: Node node , string flowstate ) {
44
- exists ( CallExpr call , string funcName , string paramName , int arg |
44
+ exists (
45
+ AbstractFunctionDecl funcDecl , CallExpr call , string funcName , string paramName , int arg
46
+ |
45
47
// arguments to method calls...
46
- exists ( string className , ClassDecl c , AbstractFunctionDecl f |
48
+ exists ( string className , ClassDecl c |
47
49
(
48
50
// `NSRange.init`
49
51
className = "NSRange" and
@@ -71,10 +73,10 @@ class StringLengthConflationConfiguration extends DataFlow::Configuration {
71
73
paramName = "at"
72
74
) and
73
75
c .getName ( ) = className and
74
- c .getAMember ( ) = f and // TODO: will this even work if its defined in a parent class?
75
- call .getFunction ( ) .( ApplyExpr ) .getStaticTarget ( ) = f and
76
- f .getName ( ) = funcName and
77
- f .getParam ( pragma [ only_bind_into ] ( arg ) ) .getName ( ) = paramName and
76
+ c .getAMember ( ) = funcDecl and // TODO: will this even work if its defined in a parent class?
77
+ call .getFunction ( ) .( ApplyExpr ) .getStaticTarget ( ) = funcDecl and
78
+ funcDecl .getName ( ) = funcName and
79
+ funcDecl .getParam ( pragma [ only_bind_into ] ( arg ) ) .getName ( ) = paramName and
78
80
call .getArgument ( pragma [ only_bind_into ] ( arg ) ) .getExpr ( ) = node .asExpr ( ) and
79
81
flowstate = "String" // `String` length flowing into `NSString`
80
82
)
@@ -83,8 +85,9 @@ class StringLengthConflationConfiguration extends DataFlow::Configuration {
83
85
// `NSMakeRange`
84
86
funcName = "NSMakeRange(_:_:)" and
85
87
paramName = [ "loc" , "len" ] and
86
- call .getStaticTarget ( ) .getName ( ) = funcName and
87
- call .getStaticTarget ( ) .getParam ( pragma [ only_bind_into ] ( arg ) ) .getName ( ) = paramName and
88
+ call .getStaticTarget ( ) = funcDecl and
89
+ funcDecl .getName ( ) = funcName and
90
+ funcDecl .getParam ( pragma [ only_bind_into ] ( arg ) ) .getName ( ) = paramName and
88
91
call .getArgument ( pragma [ only_bind_into ] ( arg ) ) .getExpr ( ) = node .asExpr ( ) and
89
92
flowstate = "String" // `String` length flowing into `NSString`
90
93
or
@@ -110,12 +113,9 @@ class StringLengthConflationConfiguration extends DataFlow::Configuration {
110
113
funcName = [ "formIndex(_:offsetBy:)" , "formIndex(_:offsetBy:limitBy:)" ] and
111
114
paramName = "distance"
112
115
) and
113
- call .getFunction ( ) .( ApplyExpr ) .getStaticTarget ( ) .getName ( ) = funcName and
114
- call .getFunction ( )
115
- .( ApplyExpr )
116
- .getStaticTarget ( )
117
- .getParam ( pragma [ only_bind_into ] ( arg ) )
118
- .getName ( ) = paramName and
116
+ call .getFunction ( ) .( ApplyExpr ) .getStaticTarget ( ) = funcDecl and
117
+ funcDecl .getName ( ) = funcName and
118
+ funcDecl .getParam ( pragma [ only_bind_into ] ( arg ) ) .getName ( ) = paramName and
119
119
call .getArgument ( pragma [ only_bind_into ] ( arg ) ) .getExpr ( ) = node .asExpr ( ) and
120
120
flowstate = "NSString" // `NSString` length flowing into `String`
121
121
)
0 commit comments