Skip to content

Commit 234f17b

Browse files
committed
Swift: Use PointerType in data flow's 'modifiable' predicate.
1 parent 3249cee commit 234f17b

File tree

4 files changed

+12
-11
lines changed

4 files changed

+12
-11
lines changed

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ private import codeql.swift.dataflow.Ssa
77
private import codeql.swift.controlflow.BasicBlocks
88
private import codeql.swift.dataflow.FlowSummary as FlowSummary
99
private import codeql.swift.dataflow.internal.FlowSummaryImpl as FlowSummaryImpl
10+
private import codeql.swift.frameworks.StandardLibrary.PointerTypes
1011

1112
/** Gets the callable in which this node occurs. */
1213
DataFlowCallable nodeGetEnclosingCallable(NodeImpl n) { result = n.getEnclosingCallable() }
@@ -212,7 +213,7 @@ private predicate modifiable(Argument arg) {
212213
or
213214
arg.getExpr().getType() instanceof NominalType
214215
or
215-
arg.getLabel() = "ptr"
216+
arg.getExpr().getType() instanceof PointerType
216217
}
217218

218219
predicate modifiableParam(ParamDecl param) {

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -158,13 +158,13 @@ func taintThroughData() {
158158
let dataTainted19 = source() as! Data
159159
let pointerTainted19 = UnsafeMutablePointer<UInt8>.allocate(capacity: 0)
160160
dataTainted19.copyBytes(to: pointerTainted19, count: 0)
161-
sink(arg: pointerTainted19) // $ MISSING: tainted=158
161+
sink(arg: pointerTainted19) // $ tainted=158
162162

163163
// ";Data;true;copyBytes(to:from:);;;Argument[-1];Argument[0];taint",
164164
let dataTainted20 = source() as! Data
165165
let pointerTainted20 = UnsafeMutablePointer<UInt8>.allocate(capacity: 0)
166166
dataTainted20.copyBytes(to: pointerTainted20, from: 0..<1)
167-
sink(arg: pointerTainted20) // $ MISSING: tainted=164
167+
sink(arg: pointerTainted20) // $ tainted=164
168168

169169
// ";Data;true;flatMap(_:);;;Argument[-1];ReturnValue;taint",
170170
let dataTainted21 = source() as! Data

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

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -318,14 +318,14 @@ func taintThroughInterpolatedStrings() {
318318
harmless.getCharacters(ptr1, range: myRange)
319319
sink(arg: ptr1)
320320
sourceNSString().getCharacters(ptr1, range: myRange)
321-
sink(arg: ptr1) // $ MISSING: tainted=
321+
sink(arg: ptr1) // $ tainted=320
322322

323323
var ptr2 = (nil as UnsafeMutablePointer<unichar>?)!
324324
sink(arg: ptr2)
325325
harmless.getCharacters(ptr2)
326326
sink(arg: ptr2)
327327
sourceNSString().getCharacters(ptr2)
328-
sink(arg: ptr2) // $ MISSING: tainted=
328+
sink(arg: ptr2) // $ tainted=327
329329

330330
var ptr3 = (nil as UnsafeMutableRawPointer?)!
331331
sink(arg: ptr3)
@@ -339,14 +339,14 @@ func taintThroughInterpolatedStrings() {
339339
harmless.getCString(ptr4, maxLength: 128, encoding: 0)
340340
sink(arg: ptr4)
341341
sourceNSString().getCString(ptr4, maxLength: 128, encoding: 0)
342-
sink(arg: ptr4) // $ MISSING: tainted=
342+
sink(arg: ptr4) // $ tainted=341
343343

344344
var ptr5 = (nil as UnsafeMutablePointer<CChar>?)!
345345
sink(arg: ptr5)
346346
harmless.getCString(ptr5)
347347
sink(arg: ptr5)
348348
sourceNSString().getCString(ptr5)
349-
sink(arg: ptr5) // $ MISSING: tainted=
349+
sink(arg: ptr5) // $ tainted=348
350350

351351
sink(arg: harmless.enumerateLines({
352352
line, stop in
@@ -363,18 +363,18 @@ func taintThroughInterpolatedStrings() {
363363
var outLongest = (nil as AutoreleasingUnsafeMutablePointer<NSString?>?)!
364364
var outArray = (nil as AutoreleasingUnsafeMutablePointer<NSArray?>?)!
365365
if (str10.completePath(into: outLongest, caseSensitive: false, matchesInto: outArray, filterTypes: nil) > 0) {
366-
sink(arg: outLongest) // $ MISSING: tainted=
366+
sink(arg: outLongest) // $ tainted=362
367367
sink(arg: outLongest.pointee) // $ MISSING: tainted=
368368
sink(arg: outLongest.pointee!) // $ MISSING: tainted=
369-
sink(arg: outArray) // $ MISSING: tainted=
369+
sink(arg: outArray) // $ tainted=362
370370
sink(arg: outArray.pointee) // $ MISSING: tainted=
371371
sink(arg: outArray.pointee!) // $ MISSING: tainted=
372372
}
373373

374374
var str11 = sourceNSString()
375375
var outBuffer = (nil as UnsafeMutablePointer<CChar>?)!
376376
if (str11.getFileSystemRepresentation(outBuffer, maxLength: 256)) {
377-
sink(arg: outBuffer) // $ MISSING: tainted=
377+
sink(arg: outBuffer) // $ tainted=374
378378
sink(arg: outBuffer.pointee) // $ MISSING: tainted=
379379
}
380380

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,6 @@ func testMutatingMyPointerInCall(ptr: MyPointer) {
9696

9797
taintMyPointer(ptr: ptr) // mutates `ptr` pointee with a tainted value
9898

99-
sink(arg: ptr.pointee) // $ tainted=87
99+
sink(arg: ptr.pointee) // $ MISSING: tainted=87
100100
sink(arg: ptr)
101101
}

0 commit comments

Comments
 (0)