File tree Expand file tree Collapse file tree 2 files changed +18
-2
lines changed
swift/Sources/FlatBuffers
tests/swift/Tests/Flatbuffers Expand file tree Collapse file tree 2 files changed +18
-2
lines changed Original file line number Diff line number Diff line change @@ -303,12 +303,12 @@ public struct FlatBufferBuilder {
303
303
var isAlreadyAdded : Int ?
304
304
305
305
let vt2 = _bb. memory. advanced ( by: _bb. writerIndex)
306
- let len2 = vt2. load ( fromByteOffset : 0 , as : Int16 . self )
306
+ let len2 = vt2. bindMemory ( to : Int16 . self , capacity : 1 ) . pointee
307
307
308
308
for index in stride ( from: 0 , to: _vtables. count, by: 1 ) {
309
309
let position = _bb. capacity &- Int ( _vtables [ index] )
310
310
let vt1 = _bb. memory. advanced ( by: position)
311
- let len1 = _bb . read ( def : Int16 . self, position : position )
311
+ let len1 = vt1 . bindMemory ( to : Int16 . self, capacity : 1 ) . pointee
312
312
if len2 != len1 || 0 != memcmp ( vt1, vt2, Int ( len2) ) { continue }
313
313
314
314
isAlreadyAdded = Int ( _vtables [ index] )
Original file line number Diff line number Diff line change @@ -120,6 +120,22 @@ final class FlatBuffersTests: XCTestCase {
120
120
XCTAssertEqual ( scalarTable. justEnum, . one)
121
121
XCTAssertNil ( scalarTable. maybeEnum)
122
122
}
123
+
124
+ func testAlignmentCrash( ) {
125
+ var builder = FlatBufferBuilder ( initialSize: 256 )
126
+
127
+ // Create two identical tables to trigger vtable deduplication
128
+ let str1 = builder. create ( string: " test " )
129
+ let start1 = builder. startTable ( with: 1 )
130
+ builder. add ( offset: str1, at: 0 )
131
+ _ = builder. endTable ( at: start1)
132
+
133
+ // Second table triggers vtable comparison where crash occurs
134
+ let str2 = builder. create ( string: " crash " )
135
+ let start2 = builder. startTable ( with: 1 )
136
+ builder. add ( offset: str2, at: 0 )
137
+ _ = builder. endTable ( at: start2) // ← Crashes here on ARM64
138
+ }
123
139
}
124
140
125
141
class Country {
You can’t perform that action at this time.
0 commit comments