Skip to content

Commit 0d79430

Browse files
committed
Swift: Generalize subscript assignment storeStep.
1 parent 245f475 commit 0d79430

File tree

4 files changed

+16
-16
lines changed

4 files changed

+16
-16
lines changed

swift/ql/lib/codeql/swift/dataflow/internal/DataFlowPrivate.qll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1075,12 +1075,12 @@ predicate storeStep(Node node1, ContentSet c, Node node2) {
10751075
c.isSingleton(any(Content::CollectionContent ac))
10761076
)
10771077
or
1078-
// array assignment `a[n] = x`
1078+
// subscript assignment `a[n] = x`
10791079
exists(AssignExpr assign, SubscriptExpr subscript |
10801080
node1.asExpr() = assign.getSource() and
10811081
node2.(PostUpdateNode).getPreUpdateNode().asExpr() = subscript.getBase() and
10821082
subscript = assign.getDest() and
1083-
subscript.getBase().getType() instanceof ArrayType and
1083+
not any(DictionarySubscriptNode n).getExpr() = subscript and
10841084
c.isSingleton(any(Content::CollectionContent ac))
10851085
)
10861086
or

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

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -310,13 +310,13 @@ func taintThroughData() {
310310
buffer in
311311

312312
buffer[0] = source() as! UInt8
313-
sink(arg: buffer)
314-
sink(arg: buffer[0]) // $ MISSING: tainted=312
313+
sink(arg: buffer) // $ tainted=312
314+
sink(arg: buffer[0]) // $ tainted=312
315315

316316
return source() as! Int
317317
})
318318
sink(arg: result46!) // $ tainted=316
319-
sink(arg: data46) // $ MISSING: tainted=312
319+
sink(arg: data46) // $ tainted=312
320320

321321
let dataTainted47 = source() as! Data
322322
let result47 = dataTainted47.withUnsafeBytes({
@@ -334,11 +334,11 @@ func taintThroughData() {
334334
buffer in
335335

336336
buffer[0] = source() as! UInt8
337-
sink(arg: buffer)
338-
sink(arg: buffer[0]) // $ MISSING: tainted=336
337+
sink(arg: buffer) // $ tainted=336
338+
sink(arg: buffer[0]) // $ tainted=336
339339

340340
return source() as! Int
341341
})
342342
sink(arg: result48) // $ tainted=340
343-
sink(arg: data48) // $ MISSING: tainted=336
343+
sink(arg: data48) // $ tainted=336
344344
}

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -151,12 +151,12 @@ func taintCollections(array: inout Array<Int>, contiguousArray: inout Contiguous
151151
})
152152

153153
contiguousArray[0] = source2()
154-
sink(arg: contiguousArray)
155-
sink(arg: contiguousArray[0]) // $ MISSING: tainted=153
154+
sink(arg: contiguousArray) // $ tainted=153
155+
sink(arg: contiguousArray[0]) // $ tainted=153
156156
contiguousArray.withContiguousStorageIfAvailable({
157157
buffer in
158-
sink(arg: buffer)
159-
sink(arg: buffer[0]) // $ MISSING: tainted=153
158+
sink(arg: buffer) // $ tainted=153
159+
sink(arg: buffer[0]) // $ tainted=153
160160
})
161161

162162
dictionary[0] = source2()

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,8 @@ func taintBuffer(buffer: UnsafeMutableBufferPointer<UInt8>) {
5959

6060
buffer[0] = sourceUInt8()
6161

62-
sink(arg: buffer[0]) // $ MISSING: tainted=60
63-
sink(arg: buffer)
62+
sink(arg: buffer[0]) // $ tainted=60
63+
sink(arg: buffer) // $ tainted=60
6464
}
6565

6666
func testMutatingBufferInCall(ptr: UnsafeMutablePointer<UInt8>) {
@@ -71,8 +71,8 @@ func testMutatingBufferInCall(ptr: UnsafeMutablePointer<UInt8>) {
7171

7272
taintBuffer(buffer: buffer) // mutates `buffer` contents with a tainted value
7373

74-
sink(arg: buffer[0]) // $ MISSING: tainted=60
75-
sink(arg: buffer)
74+
sink(arg: buffer[0]) // $ tainted=60
75+
sink(arg: buffer) // $ tainted=60
7676

7777
}
7878

0 commit comments

Comments
 (0)