Skip to content

Commit c3a8da4

Browse files
committed
Swift: Use getABaseTypeDecl() to improve StringLengthConflation.ql.
1 parent b471b51 commit c3a8da4

File tree

3 files changed

+6
-2
lines changed

3 files changed

+6
-2
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ class StringLengthConflationConfiguration extends DataFlow::Configuration {
135135
paramName = "at"
136136
) and
137137
c.getName() = className and
138-
c.getAMember() = funcDecl and
138+
c.getABaseTypeDecl*().(ClassDecl).getAMember() = funcDecl and
139139
call.getStaticTarget() = funcDecl and
140140
flowstate = "NSString"
141141
)

swift/ql/test/query-tests/Security/CWE-135/StringLengthConflation.expected

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
edges
2+
| StringLengthConflation2.swift:35:36:35:38 | .count : | StringLengthConflation2.swift:35:36:35:46 | ... .-(_:_:) ... |
23
| StringLengthConflation2.swift:37:34:37:36 | .count : | StringLengthConflation2.swift:37:34:37:44 | ... .-(_:_:) ... |
34
| StringLengthConflation.swift:36:30:36:37 | len : | StringLengthConflation.swift:36:93:36:93 | len |
45
| StringLengthConflation.swift:60:47:60:50 | .length : | StringLengthConflation.swift:60:47:60:59 | ... ./(_:_:) ... |
@@ -27,6 +28,8 @@ edges
2728
| file://:0:0:0:0 | .length : | StringLengthConflation.swift:114:23:114:26 | .length : |
2829
| file://:0:0:0:0 | .length : | StringLengthConflation.swift:120:22:120:25 | .length : |
2930
nodes
31+
| StringLengthConflation2.swift:35:36:35:38 | .count : | semmle.label | .count : |
32+
| StringLengthConflation2.swift:35:36:35:46 | ... .-(_:_:) ... | semmle.label | ... .-(_:_:) ... |
3033
| StringLengthConflation2.swift:37:34:37:36 | .count : | semmle.label | .count : |
3134
| StringLengthConflation2.swift:37:34:37:44 | ... .-(_:_:) ... | semmle.label | ... .-(_:_:) ... |
3235
| StringLengthConflation.swift:36:30:36:37 | len : | semmle.label | len : |
@@ -73,6 +76,7 @@ nodes
7376
| file://:0:0:0:0 | .length : | semmle.label | .length : |
7477
subpaths
7578
#select
79+
| StringLengthConflation2.swift:35:36:35:46 | ... .-(_:_:) ... | StringLengthConflation2.swift:35:36:35:38 | .count : | StringLengthConflation2.swift:35:36:35:46 | ... .-(_:_:) ... | This String length is used in an NSString, but it may not be equivalent. |
7680
| StringLengthConflation2.swift:37:34:37:44 | ... .-(_:_:) ... | StringLengthConflation2.swift:37:34:37:36 | .count : | StringLengthConflation2.swift:37:34:37:44 | ... .-(_:_:) ... | This String length is used in an NSString, but it may not be equivalent. |
7781
| StringLengthConflation.swift:36:93:36:93 | len | StringLengthConflation.swift:72:33:72:35 | .count : | StringLengthConflation.swift:36:93:36:93 | len | This String length is used in an NSString, but it may not be equivalent. |
7882
| StringLengthConflation.swift:53:43:53:46 | .length | StringLengthConflation.swift:53:43:53:46 | .length | StringLengthConflation.swift:53:43:53:46 | .length | This NSString length is used in a String, but it may not be equivalent. |

swift/ql/test/query-tests/Security/CWE-135/StringLengthConflation2.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ func test(s: String) {
3232
let ns = NSString(string: s)
3333

3434
let nstr1 = ns.substring(from: ns.length - 1) // GOOD
35-
let nstr2 = ns.substring(from: s.count - 1) // BAD: String length used in NSString [NOT DETECTED]
35+
let nstr2 = ns.substring(from: s.count - 1) // BAD: String length used in NSString
3636
let nstr3 = ns.substring(to: ns.length - 1) // GOOD
3737
let nstr4 = ns.substring(to: s.count - 1) // BAD: String length used in NSString
3838
print("substrings '\(nstr1)' '\(nstr2)' / '\(nstr3)' '\(nstr4)'")

0 commit comments

Comments
 (0)