Skip to content

Commit 8989210

Browse files
committed
Swift: Fix some details so that the test works.
1 parent 30557eb commit 8989210

File tree

3 files changed

+49
-7
lines changed

3 files changed

+49
-7
lines changed

swift/ql/test/qlpack.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,6 @@ name: codeql-swift-tests
22
version: 0.0.0
33
dependencies:
44
codeql/swift-all: "*"
5+
codeql/swift-queries: "*"
56
tests: .
67
extractor: swift
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
| TODO |

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

Lines changed: 47 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,47 @@
11

2+
// --- stubs ---
3+
4+
func print(_ items: Any...) {}
5+
6+
typealias unichar = UInt16
7+
8+
class NSString
9+
{
10+
init(string: String) { length = string.count }
11+
12+
func character(at: Int) -> unichar { return 0 }
13+
func substring(from: Int) -> String { return "" }
14+
func substring(to: Int) -> String { return "" }
15+
16+
var length: Int
17+
}
18+
19+
class NSMutableString
20+
{
21+
init(string: String) { length = string.count }
22+
23+
func character(at: Int) -> unichar { return 0 }
24+
func substring(from: Int) -> String { return "" }
25+
func substring(to: Int) -> String { return "" }
26+
func insert(_: String, at: Int) {}
27+
28+
var length: Int
29+
}
30+
31+
class NSRange
32+
{
33+
init(location: Int, length: Int) { self.description = "" }
34+
35+
var description: String
36+
}
37+
38+
func NSMakeRange(_ loc: Int, _ len: Int) -> NSRange { return NSRange(location: loc, length: len) }
39+
40+
// --- tests ---
41+
242
func test(s: String) {
3-
/*let ns = NSString(string: s)
4-
let nms = NSString(string: s)
43+
let ns = NSString(string: s)
44+
let nms = NSMutableString(string: s)
545

646
print("'\(s)'")
747
print("count \(s.count) length \(ns.length)")
@@ -58,27 +98,27 @@ func test(s: String) {
5898

5999
let nstr1 = ns.character(at: ns.length - 1) // GOOD
60100
let nmstr1 = nms.character(at: nms.length - 1) // GOOD
61-
let nstr2 = ns.character(at: s.count - 1) // BAD: String length used in NString
101+
let nstr2 = ns.character(at: s.count - 1) // BAD: String length used in NSString
62102
let nmstr2 = nms.character(at: s.count - 1) // BAD: String length used in NString
63103
print("character '\(nstr1)' '\(nmstr1)' / '\(nstr2)' '\(nmstr2)'")
64104

65105
let nstr3 = ns.substring(from: ns.length - 1) // GOOD
66106
let nmstr3 = nms.substring(from: nms.length - 1) // GOOD
67-
let nstr4 = ns.substring(from: s.count - 1) // BAD: String length used in NString
107+
let nstr4 = ns.substring(from: s.count - 1) // BAD: String length used in NSString
68108
let nmstr4 = nms.substring(from: s.count - 1) // BAD: String length used in NString
69109
print("substring from '\(nstr3)' '\(nmstr3)' / '\(nstr4)' '\(nmstr4)'")
70110

71111
let nstr5 = ns.substring(to: ns.length - 1) // GOOD
72112
let nmstr5 = nms.substring(to: nms.length - 1) // GOOD
73-
let nstr6 = ns.substring(to: s.count - 1) // BAD: String length used in NString
113+
let nstr6 = ns.substring(to: s.count - 1) // BAD: String length used in NSString
74114
let nmstr6 = nms.substring(to: s.count - 1) // BAD: String length used in NString
75115
print("substring to '\(nstr5)' '\(nmstr5)' / '\(nstr6)' '\(nmstr6)'")
76116

77117
let nmstr7 = NSMutableString(string: s)
78118
nmstr7.insert("*", at: nms.length - 1) // GOOD
79119
let nmstr8 = NSMutableString(string: s)
80-
nmstr8.insert("*", at: s.count - 1) // BAD: String length used in NString
81-
print("insert '\(nmstr7)' / '\(nmstr8)'")*/
120+
nmstr8.insert("*", at: s.count - 1) // BAD: String length used in NSString
121+
print("insert '\(nmstr7)' / '\(nmstr8)'")
82122
}
83123

84124
// `begin :thumbsup: end`, with thumbs up emoji and skin tone modifier

0 commit comments

Comments
 (0)