From 1d60824d56d1e4d4b56e6acf98079a46789d6292 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=98=D1=81=D0=BA=D0=B0=D0=BD=D0=B4=D0=B0=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=20=D0=95=D0=B3=D0=BE=D1=80?= Date: Tue, 26 Feb 2019 01:27:42 +0300 Subject: [PATCH] Lua library: fix vtable reuse. (#5214) Fixed a bug that prevented vtable reuse during buffer construction in the lua library. Also fixed a bug in vtable equality check that was revealed after the first fix. --- lua/flatbuffers/builder.lua | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/lua/flatbuffers/builder.lua b/lua/flatbuffers/builder.lua index 51f0797e0..2fb22204d 100644 --- a/lua/flatbuffers/builder.lua +++ b/lua/flatbuffers/builder.lua @@ -34,7 +34,7 @@ local function vtableEqual(a, objectStart, b) end for i, elem in ipairs(a) do - local x = VOffsetT:Unpack(b, i * VOffsetT.bytewidth) + local x = string.unpack(VOffsetT.packFmt, b, 1 + (i - 1) * VOffsetT.bytewidth) if x ~= 0 or elem ~= 0 then local y = objectStart - elem if x ~= y then @@ -96,11 +96,13 @@ function mt:WriteVtable() i = i - 1 end + i = #self.vtables while i >= 1 do local vt2Offset = self.vtables[i] local vt2Start = #self.bytes - vt2Offset - local vt2len = VOffsetT:Unpack(self.bytes, vt2Start) + local vt2lenstr = self.bytes:Slice(vt2Start, vt2Start+1) + local vt2Len = string.unpack(VOffsetT.packFmt, vt2lenstr, 1) local metadata = VtableMetadataFields * VOffsetT.bytewidth local vt2End = vt2Start + vt2Len @@ -364,4 +366,4 @@ function mt:Place(x, flags) self.bytes:Set(d, h) end -return m \ No newline at end of file +return m