Skip to content

Commit 9474e63

Browse files
committed
Swift: Clean up isSink (4 - move common code out).
1 parent b136790 commit 9474e63

File tree

1 file changed

+60
-64
lines changed

1 file changed

+60
-64
lines changed

swift/ql/src/queries/Security/CWE-135/StringLengthConflation.ql

Lines changed: 60 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -44,80 +44,76 @@ class StringLengthConflationConfiguration extends DataFlow::Configuration {
4444
exists(
4545
AbstractFunctionDecl funcDecl, CallExpr call, string funcName, string paramName, int arg
4646
|
47-
// arguments to method calls...
48-
exists(string className, ClassDecl c |
47+
(
48+
// arguments to method calls...
49+
exists(string className, ClassDecl c |
50+
(
51+
// `NSRange.init`
52+
className = "NSRange" and
53+
funcName = "init(location:length:)" and
54+
paramName = ["location", "length"]
55+
or
56+
// `NSString.character`
57+
className = ["NSString", "NSMutableString"] and
58+
funcName = "character(at:)" and
59+
paramName = "at"
60+
or
61+
// `NSString.character`
62+
className = ["NSString", "NSMutableString"] and
63+
funcName = "substring(from:)" and
64+
paramName = "from"
65+
or
66+
// `NSString.character`
67+
className = ["NSString", "NSMutableString"] and
68+
funcName = "substring(to:)" and
69+
paramName = "to"
70+
or
71+
// `NSMutableString.insert`
72+
className = "NSMutableString" and
73+
funcName = "insert(_:at:)" and
74+
paramName = "at"
75+
) and
76+
c.getName() = className and
77+
c.getAMember() = funcDecl and // TODO: will this even work if its defined in a parent class?
78+
call.getFunction().(ApplyExpr).getStaticTarget() = funcDecl and
79+
flowstate = "String" // `String` length flowing into `NSString`
80+
)
81+
or
82+
// arguments to function calls...
83+
// `NSMakeRange`
84+
funcName = "NSMakeRange(_:_:)" and
85+
paramName = ["loc", "len"] and
86+
call.getStaticTarget() = funcDecl and
87+
flowstate = "String" // `String` length flowing into `NSString`
88+
or
89+
// arguments to function calls...
4990
(
50-
// `NSRange.init`
51-
className = "NSRange" and
52-
funcName = "init(location:length:)" and
53-
paramName = ["location", "length"]
91+
// `String.dropFirst`, `String.dropLast`, `String.removeFirst`, `String.removeLast`
92+
funcName = ["dropFirst(_:)", "dropLast(_:)", "removeFirst(_:)", "removeLast(_:)"] and
93+
paramName = "k"
5494
or
55-
// `NSString.character`
56-
className = ["NSString", "NSMutableString"] and
57-
funcName = "character(at:)" and
58-
paramName = "at"
95+
// `String.prefix`, `String.suffix`
96+
funcName = ["prefix(_:)", "suffix(_:)"] and
97+
paramName = "maxLength"
5998
or
60-
// `NSString.character`
61-
className = ["NSString", "NSMutableString"] and
62-
funcName = "substring(from:)" and
63-
paramName = "from"
99+
// `String.Index.init`
100+
funcName = "init(encodedOffset:)" and
101+
paramName = "offset"
64102
or
65-
// `NSString.character`
66-
className = ["NSString", "NSMutableString"] and
67-
funcName = "substring(to:)" and
68-
paramName = "to"
103+
// `String.index`
104+
funcName = ["index(_:offsetBy:)", "index(_:offsetBy:limitBy:)"] and
105+
paramName = "n"
69106
or
70-
// `NSMutableString.insert`
71-
className = "NSMutableString" and
72-
funcName = "insert(_:at:)" and
73-
paramName = "at"
107+
// `String.formIndex`
108+
funcName = ["formIndex(_:offsetBy:)", "formIndex(_:offsetBy:limitBy:)"] and
109+
paramName = "distance"
74110
) and
75-
c.getName() = className and
76-
c.getAMember() = funcDecl and // TODO: will this even work if its defined in a parent class?
77111
call.getFunction().(ApplyExpr).getStaticTarget() = funcDecl and
78-
funcDecl.getName() = funcName and
79-
funcDecl.getParam(pragma[only_bind_into](arg)).getName() = paramName and
80-
call.getArgument(pragma[only_bind_into](arg)).getExpr() = node.asExpr() and
81-
flowstate = "String" // `String` length flowing into `NSString`
82-
)
83-
or
84-
// arguments to function calls...
85-
// `NSMakeRange`
86-
funcName = "NSMakeRange(_:_:)" and
87-
paramName = ["loc", "len"] and
88-
call.getStaticTarget() = funcDecl and
89-
funcDecl.getName() = funcName and
90-
funcDecl.getParam(pragma[only_bind_into](arg)).getName() = paramName and
91-
call.getArgument(pragma[only_bind_into](arg)).getExpr() = node.asExpr() and
92-
flowstate = "String" // `String` length flowing into `NSString`
93-
or
94-
// arguments to function calls...
95-
(
96-
// `String.dropFirst`, `String.dropLast`, `String.removeFirst`, `String.removeLast`
97-
funcName = ["dropFirst(_:)", "dropLast(_:)", "removeFirst(_:)", "removeLast(_:)"] and
98-
paramName = "k"
99-
or
100-
// `String.prefix`, `String.suffix`
101-
funcName = ["prefix(_:)", "suffix(_:)"] and
102-
paramName = "maxLength"
103-
or
104-
// `String.Index.init`
105-
funcName = "init(encodedOffset:)" and
106-
paramName = "offset"
107-
or
108-
// `String.index`
109-
funcName = ["index(_:offsetBy:)", "index(_:offsetBy:limitBy:)"] and
110-
paramName = "n"
111-
or
112-
// `String.formIndex`
113-
funcName = ["formIndex(_:offsetBy:)", "formIndex(_:offsetBy:limitBy:)"] and
114-
paramName = "distance"
112+
flowstate = "NSString" // `NSString` length flowing into `String`
115113
) and
116-
call.getFunction().(ApplyExpr).getStaticTarget() = funcDecl and
117114
funcDecl.getName() = funcName and
118115
funcDecl.getParam(pragma[only_bind_into](arg)).getName() = paramName and
119-
call.getArgument(pragma[only_bind_into](arg)).getExpr() = node.asExpr() and
120-
flowstate = "NSString" // `NSString` length flowing into `String`
116+
call.getArgument(pragma[only_bind_into](arg)).getExpr() = node.asExpr()
121117
)
122118
}
123119

0 commit comments

Comments
 (0)