Skip to content

Commit 426bdc0

Browse files
committed
Swift: Add test cases. Before the changes, we don't catch the cases for return values from the closures.
1 parent 55ec27f commit 426bdc0

File tree

1 file changed

+21
-9
lines changed
  • swift/ql/test/library-tests/dataflow/taint/libraries

1 file changed

+21
-9
lines changed

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)