|
| 1 | + |
| 2 | +// --- stubs --- |
| 3 | + |
| 4 | +struct Data { |
| 5 | + init<S>(_ elements: S) { count = 0 } |
| 6 | + |
| 7 | + func withUnsafeBytes<ResultType, ContentType>(_ body: (UnsafePointer<ContentType>) throws -> ResultType) rethrows -> ResultType { |
| 8 | + return 0 as! ResultType//body(0 as UnsafePointer<ContentType>()) |
| 9 | + } |
| 10 | + |
| 11 | + var count: Int |
| 12 | +} |
| 13 | + |
| 14 | +var SQLITE_OK : Int32 = 0 |
| 15 | + |
| 16 | +func sqlite3_key_v2( |
| 17 | + _ db: OpaquePointer?, |
| 18 | + _ zDbName: UnsafePointer<CChar>?, |
| 19 | + _ pKey: UnsafeRawPointer?, |
| 20 | + _ nKey: Int32 |
| 21 | + ) -> Int32 { return SQLITE_OK } |
| 22 | + |
| 23 | +func sqlite3_rekey_v2( |
| 24 | + _ db: OpaquePointer?, |
| 25 | + _ zDbName: UnsafePointer<CChar>?, |
| 26 | + _ pKey: UnsafeRawPointer?, |
| 27 | + _ nKey: Int32 |
| 28 | + ) -> Int32 { return SQLITE_OK } |
| 29 | + |
| 30 | +// --- tests --- |
| 31 | + |
| 32 | +func test_sqlite3_c_api(db: OpaquePointer?, myVarKey: Data) { |
| 33 | + let myConstKey = Data("abcdef123456") |
| 34 | + |
| 35 | + // SQLite (C API) Encryption Extension |
| 36 | + myVarKey.withUnsafeBytes { buffer in |
| 37 | + _ = sqlite3_key_v2(db, "dbname", buffer, Int32(myVarKey.count)) |
| 38 | + _ = sqlite3_rekey_v2(db, "dbname", buffer, Int32(myVarKey.count)) |
| 39 | + } |
| 40 | + myConstKey.withUnsafeBytes { buffer in |
| 41 | + _ = sqlite3_key_v2(db, "dbname", buffer, Int32(myVarKey.count)) // BAD [NOT DETECTED] |
| 42 | + _ = sqlite3_rekey_v2(db, "dbname", buffer, Int32(myVarKey.count)) // BAD [NOT DETECTED] |
| 43 | + } |
| 44 | +} |
0 commit comments