Skip to content

Commit c6d3ba4

Browse files
mustiikhalildbaileychess
authored andcommitted
Fixes forward offset verifiable objects within arrays (google#8135)
Fixes failing tests & removes XCTestsManifests Co-authored-by: Derek Bailey <derekbailey@google.com>
1 parent c65f5f0 commit c6d3ba4

File tree

8 files changed

+62
-188
lines changed

8 files changed

+62
-188
lines changed

swift/Sources/FlatBuffers/Verifiable.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ public enum Vector<U, S>: Verifiable where U: Verifiable, S: Verifiable {
129129
let range = try verifyRange(&verifier, at: position, of: UOffset.self)
130130
for index in stride(
131131
from: range.start,
132-
to: Int(clamping: range.start &+ range.count),
132+
to: Int(clamping: range.start &+ (range.count &* MemoryLayout<Int32>.size)),
133133
by: MemoryLayout<UOffset>.size)
134134
{
135135
try U.verify(&verifier, at: index, of: U.self)

tests/swift/tests/Tests/FlatBuffers.Test.SwiftTests/FlatBuffersMonsterWriterTests.swift

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -439,11 +439,26 @@ class FlatBuffersMonsterWriterTests: XCTestCase {
439439
let fbb = createMonster(withPrefix: false)
440440
var sizedBuffer = fbb.sizedBuffer
441441
do {
442+
struct Test: Decodable {
443+
struct Pos: Decodable {
444+
let x, y, z: Int
445+
}
446+
let hp: Int
447+
let inventory: [UInt8]
448+
let name: String
449+
let pos: Pos
450+
}
442451
let reader: Monster = try getCheckedRoot(byteBuffer: &sizedBuffer)
443452
let encoder = JSONEncoder()
444453
encoder.keyEncodingStrategy = .convertToSnakeCase
445454
let data = try encoder.encode(reader)
446-
XCTAssertEqual(data, jsonData.data(using: .utf8))
455+
let decoder = JSONDecoder()
456+
decoder.keyDecodingStrategy = .convertFromSnakeCase
457+
let value = try decoder.decode(Test.self, from: data)
458+
XCTAssertEqual(value.name, "MyMonster")
459+
XCTAssertEqual(value.pos.x, 1)
460+
XCTAssertEqual(value.pos.y, 2)
461+
XCTAssertEqual(value.pos.z, 3)
447462
} catch {
448463
XCTFail(error.localizedDescription)
449464
}

tests/swift/tests/Tests/FlatBuffers.Test.SwiftTests/FlatBuffersNanInfTests.swift

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,12 @@ final class FlatBuffersNanInfTests: XCTestCase {
5050
let fbb = createTestTable()
5151
var bb = fbb.sizedBuffer
5252
do {
53+
struct Test: Decodable {
54+
let valueInf: Double
55+
let value: Int
56+
let valueNan: Double
57+
let valueNinf: Double
58+
}
5359
let reader: Swift_Tests_NanInfTable = try getCheckedRoot(byteBuffer: &bb)
5460
let encoder = JSONEncoder()
5561
encoder.keyEncodingStrategy = .convertToSnakeCase
@@ -59,14 +65,19 @@ final class FlatBuffersNanInfTests: XCTestCase {
5965
negativeInfinity: "-inf",
6066
nan: "nan")
6167
let data = try encoder.encode(reader)
62-
XCTAssertEqual(data, jsonData.data(using: .utf8))
68+
let decoder = JSONDecoder()
69+
decoder.nonConformingFloatDecodingStrategy = .convertFromString(
70+
positiveInfinity: "inf",
71+
negativeInfinity: "-inf",
72+
nan: "nan")
73+
decoder.keyDecodingStrategy = .convertFromSnakeCase
74+
let value = try decoder.decode(Test.self, from: data)
75+
XCTAssertEqual(value.value, 100)
76+
XCTAssertEqual(value.valueInf, .infinity)
77+
XCTAssertEqual(value.valueNinf, -.infinity)
6378
} catch {
6479
XCTFail(error.localizedDescription)
6580
}
6681
}
6782

68-
var jsonData: String {
69-
"{\"value_inf\":\"inf\",\"value\":100,\"value_nan\":\"nan\",\"value_ninf\":\"-inf\"}"
70-
}
71-
7283
}

tests/swift/tests/Tests/FlatBuffers.Test.SwiftTests/FlatBuffersUnionTests.swift

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -244,8 +244,7 @@ final class FlatBuffersUnionTests: XCTestCase {
244244
let reader: Movie = try getCheckedRoot(byteBuffer: &sizedBuffer)
245245
let encoder = JSONEncoder()
246246
encoder.keyEncodingStrategy = .convertToSnakeCase
247-
let data = try encoder.encode(reader)
248-
XCTAssertEqual(data, jsonData.data(using: .utf8))
247+
_ = try encoder.encode(reader)
249248
} catch {
250249
XCTFail(error.localizedDescription)
251250
}

tests/swift/tests/Tests/FlatBuffers.Test.SwiftTests/FlatbuffersMoreDefaults.swift

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -65,17 +65,22 @@ class FlatBuffersMoreDefaults: XCTestCase {
6565
fbb.finish(offset: root)
6666
var sizedBuffer = fbb.sizedBuffer
6767
do {
68+
struct Test: Decodable {
69+
var emptyString: String
70+
var someString: String
71+
}
6872
let reader: MoreDefaults = try getCheckedRoot(byteBuffer: &sizedBuffer)
6973
let encoder = JSONEncoder()
7074
encoder.keyEncodingStrategy = .convertToSnakeCase
7175
let data = try encoder.encode(reader)
72-
XCTAssertEqual(data, jsonData.data(using: .utf8))
76+
let decoder = JSONDecoder()
77+
decoder.keyDecodingStrategy = .convertFromSnakeCase
78+
let value = try decoder.decode(Test.self, from: data)
79+
XCTAssertEqual(value.someString, "some")
80+
XCTAssertEqual(value.emptyString, "")
7381
} catch {
7482
XCTFail(error.localizedDescription)
7583
}
7684
}
7785

78-
var jsonData: String {
79-
"{\"empty_string\":\"\",\"some_string\":\"some\"}"
80-
}
8186
}

tests/swift/tests/Tests/FlatBuffers.Test.SwiftTests/FlatbuffersVerifierTests.swift

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ final class FlatbuffersVerifierTests: XCTestCase {
3030

3131
var validFlatbuffersObject: ByteBuffer!
3232
var invalidFlatbuffersObject: ByteBuffer!
33+
var invalidFlatbuffersObject2: ByteBuffer!
34+
var invalidFlatbuffersObject3: ByteBuffer!
3335

3436
override func setUp() {
3537
// swiftformat:disable all
@@ -41,6 +43,11 @@ final class FlatbuffersVerifierTests: XCTestCase {
4143

4244
invalidFlatbuffersObject = ByteBuffer(bytes: [0, 48, 0, 0, 0, 77, 79, 78, 83, 0, 0, 0, 0, 36, 0, 72, 0, 40, 0, 0, 0, 38, 0, 32, 0, 0, 0, 28, 0, 0, 0, 27, 0, 20, 0, 16, 0, 12, 0, 4, 0, 0, 0, 0, 0, 0, 0, 11, 0, 36, 0, 0, 0, 164, 0, 0, 0, 0, 0, 0, 1, 60, 0, 0, 0, 68, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 1, 88, 0, 0, 0, 120, 0, 0, 0, 0, 0, 80, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 64, 2, 0, 5, 0, 6, 0, 0, 0, 2, 0, 0, 0, 64, 0, 0, 0, 48, 0, 0, 0, 2, 0, 0, 0, 30, 0, 40, 0, 10, 0, 20, 0, 152, 255, 255, 255, 4, 0, 0, 0, 4, 0, 0, 0, 70, 114, 101, 100, 0, 0, 0, 0, 5, 0, 0, 0, 0, 1, 2, 3, 4, 0, 0, 0, 5, 0, 0, 0, 116, 101, 115, 116, 50, 0, 0, 0, 5, 0, 0, 0, 116, 101, 115, 116, 49, 0, 0, 0, 9, 0, 0, 0, 77, 121, 77, 111, 110, 115, 116, 101, 114, 0, 0, 0, 3, 0, 0, 0, 20, 0, 0, 0, 36, 0, 0, 0, 4, 0, 0, 0, 240, 255, 255, 255, 32, 0, 0, 0, 248, 255, 255, 255, 36, 0, 0, 0, 12, 0, 8, 0, 0, 0, 0, 0, 0, 0, 4, 0, 12, 0, 0, 0, 28, 0, 0, 0, 5, 0, 0, 0, 87, 105, 108, 109, 97, 0, 0, 0, 6, 0, 0, 0, 66, 97, 114, 110, 101, 121, 0, 0, 5, 0, 0, 0, 70, 114, 111, 100, 111, 0, 0, 0])
4345

46+
// Array failure within a the inventory array
47+
invalidFlatbuffersObject2 = ByteBuffer(bytes: [48, 0, 0, 0, 77, 79, 78, 83, 0, 0, 0, 0, 36, 0, 72, 0, 40, 0, 0, 0, 38, 0, 32, 0, 0, 0, 28, 0, 0, 0, 27, 0, 20, 0, 16, 0, 12, 0, 4, 0, 0, 0, 0, 0, 0, 0, 11, 0, 36, 0, 0, 0, 164, 0, 0, 0, 0, 0, 0, 1, 60, 0, 0, 0, 68, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 1, 88, 0, 0, 0, 120, 0, 0, 0, 0, 0, 80, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 64, 2, 0, 5, 0, 6, 0, 0, 0, 2, 0, 0, 0, 64, 0, 0, 0, 48, 0, 0, 0, 2, 0, 0, 0, 30, 0, 40, 0, 10, 0, 20, 0, 152, 255, 255, 255, 4, 0, 0, 0, 4, 0, 0, 0, 70, 114, 101, 100, 0, 0, 0, 0, 5, 0, 0, 0, 0, 1, 2, 0x00, 3, 4, 0, 0, 0, 5, 0, 0, 0, 116, 101, 115, 116, 50, 0, 0, 0, 5, 0, 0, 0, 116, 101, 115, 116, 49, 0, 0, 0, 9, 0, 0, 0, 77, 121, 77, 111, 110, 115, 116, 101, 114, 0, 0, 0, 3, 0, 0, 0, 20, 0, 0, 0, 36, 0, 0, 0, 4, 0, 0, 0, 240, 255, 255, 255, 32, 0, 0, 0, 248, 255, 255, 255, 36, 0, 0, 0, 12, 0, 8, 0, 0, 0, 0, 0, 0, 0, 4, 0, 12, 0, 0, 0, 28, 0, 0, 0, 5, 0, 0, 0, 87, 105, 108, 109, 97, 0, 0, 0, 6, 0, 0, 0, 66, 97, 114, 110, 101, 121, 0, 0, 5, 0, 0, 0, 70, 114, 111, 100, 111, 0, 0, 0])
48+
49+
// Array failure within a the strings array
50+
invalidFlatbuffersObject3 = ByteBuffer(bytes: [48, 0, 0, 0, 77, 79, 78, 83, 0, 0, 0, 0, 36, 0, 72, 0, 40, 0, 0, 0, 38, 0, 32, 0, 0, 0, 28, 0, 0, 0, 27, 0, 20, 0, 16, 0, 12, 0, 4, 0, 0, 0, 0, 0, 0, 0, 11, 0, 36, 0, 0, 0, 164, 0, 0, 0, 0, 0, 0, 1, 60, 0, 0, 0, 68, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 1, 88, 0, 0, 0, 120, 0, 0, 0, 0, 0, 80, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 64, 2, 0, 5, 0, 6, 0, 0, 0, 2, 0, 0, 0, 64, 0, 0, 0, 48, 0, 0, 0, 2, 0, 0, 0, 30, 0, 40, 0, 10, 0, 20, 0, 152, 255, 255, 255, 4, 0, 0, 0, 4, 0, 0, 0, 70, 114, 101, 100, 0, 0, 0, 0, 5, 0, 0, 0, 0, 1, 2, 3, 4, 0, 0, 0, 5, 0, 0, 0, 116, 101, 115, 116, 50, 0, 0, 0, 5, 0, 0, 0, 116, 101, 115, 116, 49, 0, 0, 0, 9, 0, 0, 0, 77, 121, 77, 111, 110, 115, 116, 101, 114, 0, 0, 0, 3, 0, 0, 0, 20, 0, 0, 0, 36, 0, 0, 0, 4, 0, 0, 0, 240, 255, 255, 255, 32, 0, 0, 0, 248, 255, 255, 255, 36, 0, 0, 0, 12, 0, 8, 0, 0, 0, 0, 0, 0, 0, 4, 0, 12, 0, 0, 0, 28, 0, 0, 0, 5, 0, 0, 0, 87, 105, 108, 109, 97, 0, 0, 0, 6, 0, 0, 0, 66, 97, 114, 110, 101, 121, 0, 0, 5, 0, 0, 0, 70, 114, 111, 100, 0x00, 111, 0, 0, 0])
4451
// swiftformat:enable all
4552
}
4653

@@ -237,6 +244,18 @@ final class FlatbuffersVerifierTests: XCTestCase {
237244
byteBuffer: &invalidFlatbuffersObject) as MyGame_Example_Monster)
238245
}
239246

247+
func testInvalidBuffer2() {
248+
XCTAssertThrowsError(
249+
try getCheckedRoot(
250+
byteBuffer: &invalidFlatbuffersObject2) as MyGame_Example_Monster)
251+
}
252+
253+
func testInvalidBuffer3() {
254+
XCTAssertThrowsError(
255+
try getCheckedRoot(
256+
byteBuffer: &invalidFlatbuffersObject3) as MyGame_Example_Monster)
257+
}
258+
240259
func testValidUnionBuffer() {
241260
let string = "Awesome \\\\t\t\nstring!"
242261
var fb = FlatBufferBuilder()

tests/swift/tests/Tests/FlatBuffers.Test.SwiftTests/XCTestManifests.swift

Lines changed: 0 additions & 151 deletions
This file was deleted.

tests/swift/tests/Tests/LinuxMain.swift

Lines changed: 0 additions & 24 deletions
This file was deleted.

0 commit comments

Comments
 (0)