Skip to content

Commit 84594e6

Browse files
authored
Merge pull request #14682 from geoffw0/filepathclosure
Swift: Correct a couple of FilePath models.
2 parents e0c89a7 + 426bdc0 commit 84594e6

File tree

2 files changed

+25
-11
lines changed
  • swift/ql

2 files changed

+25
-11
lines changed

swift/ql/lib/codeql/swift/frameworks/StandardLibrary/FilePath.qll

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,10 @@ private class FilePathSummaries extends SummaryModelCsv {
3131
";FilePath;true;init(root:_:);;;Argument[0..1];ReturnValue;taint",
3232
";FilePath;true;init(root:components:);;;Argument[0..1];ReturnValue;taint",
3333
";FilePath;true;encode(to:);;;Argument[-1];Argument[0];taint",
34-
";FilePath;true;withCString(_:);;;Argument[-1];Argument[0].Parameter[0];taint",
35-
";FilePath;true;withPlatformString(_:);;;Argument[-1];Argument[0].Parameter[0];taint",
34+
";FilePath;true;withCString(_:);;;Argument[-1];Argument[0].Parameter[0].CollectionElement;taint",
35+
";FilePath;true;withCString(_:);;;Argument[0].ReturnValue;ReturnValue;taint",
36+
";FilePath;true;withPlatformString(_:);;;Argument[-1];Argument[0].Parameter[0].CollectionElement;taint",
37+
";FilePath;true;withPlatformString(_:);;;Argument[0].ReturnValue;ReturnValue;taint",
3638
";FilePath;true;append(_:);;;Argument[0];Argument[-1];taint",
3739
";FilePath;true;appending(_:);;;Argument[-1..0];ReturnValue;taint",
3840
";FilePath;true;lexicallyNormalized();;;Argument[-1];ReturnValue;taint",

swift/ql/test/library-tests/dataflow/taint/libraries/files.swift

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -94,14 +94,14 @@ func sourceString() -> String { return "" }
9494
func sourceCCharArray() -> [CChar] { return [] }
9595
func sourceCString() -> UnsafePointer<CChar> { return (nil as UnsafePointer<CChar>?)! }
9696
func sourceDecoder() -> Decoder { return (nil as Decoder?)! }
97-
9897
func sink(filePath: FilePath) { }
9998
func sink(string: String) { }
10099
func sink(component: FilePath.Component) { }
101100
func sink(root: FilePath.Root) { }
102101
func sink(componentView: FilePath.ComponentView) { }
103102
func sink(encoder: Encoder) { }
104103
func sink<T>(ptr: UnsafePointer<T>) { }
104+
func sink<T>(arg: T) { }
105105

106106
func test_files(e1: Encoder) {
107107
// --- FilePath.Root, FilePath.Component ---
@@ -148,39 +148,51 @@ func test_files(e1: Encoder) {
148148
sink(filePath: tainted.lexicallyResolving(clean)!) // $ tainted=133
149149
sink(filePath: clean.lexicallyResolving(tainted)!) // $ tainted=133
150150

151-
let _ = clean.withCString({
151+
let result1 = clean.withCString({
152152
ptr in
153153
sink(ptr: ptr)
154+
sink(arg: ptr[0])
155+
return sourceString()
154156
})
155-
let _ = tainted.withCString({
157+
sink(string: result1) // $ tainted=155
158+
let result2 = tainted.withCString({
156159
ptr in
157160
sink(ptr: ptr) // $ tainted=133
161+
sink(arg: ptr[0]) // $ tainted=133
162+
return ""
158163
})
164+
sink(string: result2)
159165

160-
let _ = clean.withPlatformString({
166+
let result3 = clean.withPlatformString({
161167
ptr in
162168
sink(ptr: ptr)
169+
sink(arg: ptr[0])
163170
sink(string: String(platformString: ptr))
164171
sink(string: String(validatingPlatformString: ptr)!)
172+
return sourceString()
165173
})
166-
let _ = tainted.withPlatformString({
174+
sink(string: result3) // $ tainted=172
175+
let result4 = tainted.withPlatformString({
167176
ptr in
168177
sink(ptr: ptr) // $ tainted=133
178+
sink(arg: ptr[0]) // $ tainted=133
169179
sink(string: String(platformString: ptr)) // $ tainted=133
170180
sink(string: String(validatingPlatformString: ptr)!) // $ tainted=133
181+
return ""
171182
})
183+
sink(string: result4)
172184

173185
var fp1 = FilePath("")
174186
sink(filePath: fp1)
175187
fp1.append(sourceString())
176-
sink(filePath: fp1) // $ tainted=175
188+
sink(filePath: fp1) // $ tainted=187
177189
fp1.append("")
178-
sink(filePath: fp1) // $ tainted=175
190+
sink(filePath: fp1) // $ tainted=187
179191

180192
sink(filePath: clean.appending(""))
181-
sink(filePath: clean.appending(sourceString())) // $ tainted=181
193+
sink(filePath: clean.appending(sourceString())) // $ tainted=193
182194
sink(filePath: tainted.appending("")) // $ tainted=133
183-
sink(filePath: tainted.appending(sourceString())) // $ tainted=133 tainted=183
195+
sink(filePath: tainted.appending(sourceString())) // $ tainted=133 tainted=195
184196

185197
// --- FilePath member variables ---
186198

0 commit comments

Comments
 (0)