Skip to content

Commit 8621216

Browse files
committed
have vtables consider size
1 parent 067bfdb commit 8621216

File tree

1 file changed

+5
-4
lines changed

1 file changed

+5
-4
lines changed

python/flatbuffers/builder.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -230,8 +230,10 @@ def WriteVtable(self):
230230
vtKey.append(elem)
231231

232232
vtKey = tuple(vtKey)
233-
vt2Offset = self.vtables.get(vtKey)
234-
if vt2Offset is None:
233+
# calculate the size of the object
234+
objectSize = UOffsetTFlags.py_type(objectOffset - self.objectEnd)
235+
vt2Offset, vt2Size = self.vtables.get(vtKey) or (None, None)
236+
if vt2Offset is None or vt2Size != objectSize:
235237
# Did not find a vtable, so write this one to the buffer.
236238

237239
# Write out the current vtable in reverse , because
@@ -259,7 +261,6 @@ def WriteVtable(self):
259261
# The two metadata fields are written last.
260262

261263
# First, store the object bytesize:
262-
objectSize = UOffsetTFlags.py_type(objectOffset - self.objectEnd)
263264
self.PrependVOffsetT(VOffsetTFlags.py_type(objectSize))
264265

265266
# Second, store the vtable bytesize:
@@ -275,7 +276,7 @@ def WriteVtable(self):
275276

276277
# Finally, store this vtable in memory for future
277278
# deduplication:
278-
self.vtables[vtKey] = self.Offset()
279+
self.vtables[vtKey] = (self.Offset(), objectSize)
279280
else:
280281
# Found a duplicate vtable.
281282
objectStart = SOffsetTFlags.py_type(len(self.Bytes) - objectOffset)

0 commit comments

Comments
 (0)