mirror of
https://github.com/google/flatbuffers.git
synced 2026-06-24 17:26:10 +00:00
Fixes a bug that made a copy of the changing vars within the verifier leading to an incorrect count (#8451)
Removes all the unneeded keyword (mutating) from verifier Adds tests to verify depth
This commit is contained in:
@@ -65,9 +65,6 @@ final class FlatBuffersVectors: XCTestCase {
|
||||
var b = FlatBufferBuilder(initialSize: 100)
|
||||
let o = b.createVector(ofStructs: vector)
|
||||
b.finish(offset: o)
|
||||
vector.withUnsafeBytes { pointer in
|
||||
print(Array(pointer))
|
||||
}
|
||||
// swiftformat:disable all
|
||||
XCTAssertEqual(b.sizedByteArray, [4, 0, 0, 0, 3, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64, 0, 0, 128, 64, 0, 0, 160, 64, 0, 0, 192, 64, 0, 0, 224, 64, 0, 0, 0, 65, 0, 0, 16, 65])
|
||||
// swiftformat:enable all
|
||||
|
||||
@@ -75,7 +75,7 @@ final class FlatbuffersVerifierTests: XCTestCase {
|
||||
}
|
||||
|
||||
func testVerifierCheckAlignment() {
|
||||
var verifier = try! Verifier(buffer: &buffer)
|
||||
let verifier = try! Verifier(buffer: &buffer)
|
||||
do {
|
||||
try verifier.isAligned(position: 20, type: Int.self)
|
||||
} catch {
|
||||
@@ -85,7 +85,7 @@ final class FlatbuffersVerifierTests: XCTestCase {
|
||||
}
|
||||
XCTAssertNoThrow(try verifier.isAligned(position: 16, type: Int.self))
|
||||
|
||||
var newVerifer = try! Verifier(buffer: &buffer, checkAlignment: false)
|
||||
let newVerifer = try! Verifier(buffer: &buffer, checkAlignment: false)
|
||||
XCTAssertNoThrow(try newVerifer.isAligned(position: 16, type: Int.self))
|
||||
}
|
||||
|
||||
@@ -112,7 +112,7 @@ final class FlatbuffersVerifierTests: XCTestCase {
|
||||
}
|
||||
|
||||
func testPositionInBuffer() {
|
||||
var verifier = try! Verifier(buffer: &buffer)
|
||||
let verifier = try! Verifier(buffer: &buffer)
|
||||
XCTAssertNoThrow(try verifier.inBuffer(position: 0, of: Int64.self))
|
||||
XCTAssertNoThrow(try verifier.inBuffer(position: 24, of: Int64.self))
|
||||
XCTAssertThrowsError(try verifier.inBuffer(position: -9, of: Int64.self))
|
||||
@@ -134,6 +134,9 @@ final class FlatbuffersVerifierTests: XCTestCase {
|
||||
var verifier = try! Verifier(buffer: &validFlatbuffersObject)
|
||||
|
||||
var tableVerifer = try! verifier.visitTable(at: 48)
|
||||
XCTAssertEqual(verifier.depth, 1)
|
||||
XCTAssertEqual(verifier.tableCount, 1)
|
||||
|
||||
XCTAssertNoThrow(try tableVerifer.visit(
|
||||
field: 4,
|
||||
fieldName: "Vec",
|
||||
@@ -210,6 +213,8 @@ final class FlatbuffersVerifierTests: XCTestCase {
|
||||
error as! FlatbuffersErrors,
|
||||
.missAlignedPointer(position: 25, type: "UInt16"))
|
||||
}
|
||||
tableVerifer.finish()
|
||||
XCTAssertEqual(verifier.depth, 0)
|
||||
}
|
||||
|
||||
func testVerifyUnionVectors() {
|
||||
@@ -291,7 +296,51 @@ final class FlatbuffersVerifierTests: XCTestCase {
|
||||
XCTAssertNoThrow(try getCheckedRoot(byteBuffer: &buf) as Movie)
|
||||
}
|
||||
|
||||
func testNestedTables() throws {
|
||||
var builder = FlatBufferBuilder()
|
||||
let name = builder.create(string: "Monster")
|
||||
|
||||
let enemy = MyGame_Example_Monster.createMonster(
|
||||
&builder,
|
||||
nameOffset: name)
|
||||
let currentName = builder.create(string: "Main name")
|
||||
let monster = MyGame_Example_Monster.createMonster(
|
||||
&builder,
|
||||
nameOffset: currentName,
|
||||
enemyOffset: enemy)
|
||||
builder.finish(offset: monster)
|
||||
|
||||
var sizedBuffer = builder.sizedBuffer
|
||||
var verifier = try! Verifier(buffer: &sizedBuffer)
|
||||
var tableVerifer = try! verifier.visitTable(
|
||||
at: try getOffset(at: 0, within: verifier))
|
||||
XCTAssertEqual(verifier.depth, 1)
|
||||
XCTAssertEqual(verifier.tableCount, 1)
|
||||
|
||||
let position = try tableVerifer.dereference(28)!
|
||||
|
||||
var nestedTable = try verifier.visitTable(
|
||||
at: try getOffset(at: position, within: verifier))
|
||||
|
||||
XCTAssertEqual(verifier.depth, 2)
|
||||
XCTAssertEqual(verifier.tableCount, 2)
|
||||
nestedTable.finish()
|
||||
XCTAssertEqual(verifier.depth, 1)
|
||||
XCTAssertEqual(verifier.tableCount, 2)
|
||||
tableVerifer.finish()
|
||||
XCTAssertEqual(verifier.depth, 0)
|
||||
XCTAssertEqual(verifier.tableCount, 2)
|
||||
}
|
||||
|
||||
func add(buffer: inout ByteBuffer, v: Int32, p: Int) {
|
||||
buffer.write(value: v, index: p)
|
||||
}
|
||||
|
||||
private func getOffset(
|
||||
at value: Int,
|
||||
within verifier: Verifier) throws -> Int
|
||||
{
|
||||
let offset: UOffset = try verifier.getValue(at: value)
|
||||
return Int(clamping: (Int(offset) &+ 0).magnitude)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user