Swift: Test for pointer types.

This commit is contained in:
Geoffrey White
2023-03-02 18:36:42 +00:00
parent 9423c21d46
commit 589e0af20a
3 changed files with 65 additions and 0 deletions

View File

@@ -0,0 +1,26 @@
class MyClass {
init() {
val = 0
}
var val: Int
}
func test() {
var p1: UnsafePointer<Int>
var p2: UnsafeMutablePointer<UInt8>
var p3: UnsafeBufferPointer<String>
var p4: UnsafeMutableBufferPointer<MyClass>
var p5: UnsafeRawPointer
var p6: UnsafeMutableRawPointer
var p7: UnsafeRawBufferPointer
var p8: UnsafeMutableRawBufferPointer
var op: OpaquePointer // C-interop
var aump: AutoreleasingUnsafeMutablePointer<UInt8> // ObjC-interop
var um: Unmanaged<MyClass> // C-interop
var cvlp: CVaListPointer // varargs list pointer
var mbp: ManagedBufferPointer<Int, MyClass>
}

View File

@@ -0,0 +1,13 @@
| pointers.swift:11:6:11:6 | p1 | UnsafePointer<Int> | UnsafeTypedPointerType |
| pointers.swift:12:6:12:6 | p2 | UnsafeMutablePointer<UInt8> | UnsafeTypedPointerType |
| pointers.swift:13:6:13:6 | p3 | UnsafeBufferPointer<String> | UnsafeTypedPointerType |
| pointers.swift:14:6:14:6 | p4 | UnsafeMutableBufferPointer<MyClass> | UnsafeTypedPointerType |
| pointers.swift:15:6:15:6 | p5 | UnsafeRawPointer | UnsafeRawPointerType |
| pointers.swift:16:6:16:6 | p6 | UnsafeMutableRawPointer | UnsafeRawPointerType |
| pointers.swift:17:6:17:6 | p7 | UnsafeRawBufferPointer | UnsafeRawPointerType |
| pointers.swift:18:6:18:6 | p8 | UnsafeMutableRawBufferPointer | UnsafeRawPointerType |
| pointers.swift:20:6:20:6 | op | OpaquePointer | OpaquePointerType |
| pointers.swift:21:6:21:6 | aump | AutoreleasingUnsafeMutablePointer<UInt8> | AutoreleasingUnsafeMutablePointerType |
| pointers.swift:22:6:22:6 | um | Unmanaged<MyClass> | UnmanagedType |
| pointers.swift:23:6:23:6 | cvlp | CVaListPointer | CVaListPointerType |
| pointers.swift:25:6:25:6 | mbp | ManagedBufferPointer<Int, MyClass> | ManagedBufferPointerType |

View File

@@ -0,0 +1,26 @@
import swift
import codeql.swift.frameworks.StandardLibrary.PointerTypes
string describe(Type t) {
t instanceof BuiltinRawPointerType and result = "BuiltinRawPointerType"
or
t instanceof UnsafeTypedPointerType and result = "UnsafeTypedPointerType"
or
t instanceof UnsafeRawPointerType and result = "UnsafeRawPointerType"
or
t instanceof OpaquePointerType and result = "OpaquePointerType"
or
t instanceof AutoreleasingUnsafeMutablePointerType and result = "AutoreleasingUnsafeMutablePointerType"
or
t instanceof UnmanagedType and result = "UnmanagedType"
or
t instanceof CVaListPointerType and result = "CVaListPointerType"
or
t instanceof ManagedBufferPointerType and result = "ManagedBufferPointerType"
}
from VarDecl v, Type t
where
v.getLocation().getFile().getBaseName() != "" and
t = v.getType()
select v, t.toString(), strictconcat(describe(t), ", ")