Skip to content

Commit ed3d3e4

Browse files
committed
Swift: fix regression.
1 parent 73f279d commit ed3d3e4

File tree

3 files changed

+9
-3
lines changed

3 files changed

+9
-3
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
@@ -155,7 +155,7 @@ class StringLengthConflationConfiguration extends DataFlow::Configuration {
155155
or
156156
// `String.index`
157157
funcName = ["index(_:offsetBy:)", "index(_:offsetBy:limitBy:)"] and
158-
paramName = "n"
158+
paramName = ["n", "distance"]
159159
or
160160
// `String.formIndex`
161161
funcName = ["formIndex(_:offsetBy:)", "formIndex(_:offsetBy:limitBy:)"] and

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ edges
22
| StringLengthConflation2.swift:35:36:35:38 | .count : | StringLengthConflation2.swift:35:36:35:46 | ... .-(_:_:) ... |
33
| StringLengthConflation2.swift:37:34:37:36 | .count : | StringLengthConflation2.swift:37:34:37:44 | ... .-(_:_:) ... |
44
| StringLengthConflation.swift:36:30:36:37 | len : | StringLengthConflation.swift:36:93:36:93 | len |
5+
| StringLengthConflation.swift:60:47:60:50 | .length : | StringLengthConflation.swift:60:47:60:59 | ... ./(_:_:) ... |
56
| StringLengthConflation.swift:66:33:66:36 | .length : | StringLengthConflation.swift:66:33:66:45 | ... ./(_:_:) ... |
67
| StringLengthConflation.swift:72:33:72:35 | .count : | StringLengthConflation.swift:36:30:36:37 | len : |
78
| StringLengthConflation.swift:96:28:96:31 | .length : | StringLengthConflation.swift:96:28:96:40 | ... .-(_:_:) ... |
@@ -18,6 +19,7 @@ edges
1819
| StringLengthConflation.swift:138:36:138:38 | .count : | StringLengthConflation.swift:138:36:138:46 | ... .-(_:_:) ... |
1920
| StringLengthConflation.swift:144:28:144:30 | .count : | StringLengthConflation.swift:144:28:144:38 | ... .-(_:_:) ... |
2021
| file://:0:0:0:0 | .length : | StringLengthConflation.swift:53:43:53:46 | .length |
22+
| file://:0:0:0:0 | .length : | StringLengthConflation.swift:60:47:60:50 | .length : |
2123
| file://:0:0:0:0 | .length : | StringLengthConflation.swift:66:33:66:36 | .length : |
2224
| file://:0:0:0:0 | .length : | StringLengthConflation.swift:96:28:96:31 | .length : |
2325
| file://:0:0:0:0 | .length : | StringLengthConflation.swift:100:27:100:30 | .length : |
@@ -36,6 +38,8 @@ nodes
3638
| StringLengthConflation.swift:54:43:54:50 | .count | semmle.label | .count |
3739
| StringLengthConflation.swift:55:43:55:51 | .count | semmle.label | .count |
3840
| StringLengthConflation.swift:56:43:56:60 | .count | semmle.label | .count |
41+
| StringLengthConflation.swift:60:47:60:50 | .length : | semmle.label | .length : |
42+
| StringLengthConflation.swift:60:47:60:59 | ... ./(_:_:) ... | semmle.label | ... ./(_:_:) ... |
3943
| StringLengthConflation.swift:66:33:66:36 | .length : | semmle.label | .length : |
4044
| StringLengthConflation.swift:66:33:66:45 | ... ./(_:_:) ... | semmle.label | ... ./(_:_:) ... |
4145
| StringLengthConflation.swift:72:33:72:35 | .count | semmle.label | .count |
@@ -80,6 +84,8 @@ subpaths
8084
| StringLengthConflation.swift:54:43:54:50 | .count | StringLengthConflation.swift:54:43:54:50 | .count | StringLengthConflation.swift:54:43:54:50 | .count | This String.utf8 length is used in a String, but it may not be equivalent. |
8185
| StringLengthConflation.swift:55:43:55:51 | .count | StringLengthConflation.swift:55:43:55:51 | .count | StringLengthConflation.swift:55:43:55:51 | .count | This String.utf16 length is used in a String, but it may not be equivalent. |
8286
| StringLengthConflation.swift:56:43:56:60 | .count | StringLengthConflation.swift:56:43:56:60 | .count | StringLengthConflation.swift:56:43:56:60 | .count | This String.unicodeScalars length is used in a String, but it may not be equivalent. |
87+
| StringLengthConflation.swift:60:47:60:59 | ... ./(_:_:) ... | StringLengthConflation.swift:60:47:60:50 | .length : | StringLengthConflation.swift:60:47:60:59 | ... ./(_:_:) ... | This NSString length is used in a String, but it may not be equivalent. |
88+
| StringLengthConflation.swift:60:47:60:59 | ... ./(_:_:) ... | file://:0:0:0:0 | .length : | StringLengthConflation.swift:60:47:60:59 | ... ./(_:_:) ... | This NSString length is used in a String, but it may not be equivalent. |
8389
| StringLengthConflation.swift:66:33:66:45 | ... ./(_:_:) ... | StringLengthConflation.swift:66:33:66:36 | .length : | StringLengthConflation.swift:66:33:66:45 | ... ./(_:_:) ... | This NSString length is used in a String, but it may not be equivalent. |
8490
| StringLengthConflation.swift:66:33:66:45 | ... ./(_:_:) ... | file://:0:0:0:0 | .length : | StringLengthConflation.swift:66:33:66:45 | ... ./(_:_:) ... | This NSString length is used in a String, but it may not be equivalent. |
8591
| StringLengthConflation.swift:72:33:72:35 | .count | StringLengthConflation.swift:72:33:72:35 | .count | StringLengthConflation.swift:72:33:72:35 | .count | This String length is used in an NSString, but it may not be equivalent. |

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ func NSMakeRange(_ loc: Int, _ len: Int) -> NSRange { return NSRange(location: l
4242
func test(s: String) {
4343
let ns = NSString(string: s)
4444
let nms = NSMutableString(string: s)
45-
45+
4646
print("'\(s)'")
4747
print("count \(s.count) length \(ns.length)")
4848
print("utf8.count \(s.utf8.count) utf16.count \(s.utf16.count) unicodeScalars.count \(s.unicodeScalars.count)")
@@ -57,7 +57,7 @@ func test(s: String) {
5757
print("String.Index '\(ix1.encodedOffset)' / '\(ix2.encodedOffset)' '\(ix3.encodedOffset)' '\(ix4.encodedOffset)' '\(ix5.encodedOffset)'")
5858

5959
let ix6 = s.index(s.startIndex, offsetBy: s.count / 2) // GOOD
60-
let ix7 = s.index(s.startIndex, offsetBy: ns.length / 2) // BAD: NSString length used in String.Index [NOT DETECTED]
60+
let ix7 = s.index(s.startIndex, offsetBy: ns.length / 2) // BAD: NSString length used in String.Index
6161
print("index '\(ix6.encodedOffset)' / '\(ix7.encodedOffset)'")
6262

6363
var ix8 = s.startIndex

0 commit comments

Comments
 (0)