From 8ef6ee2a3e7f5c85e41fff07bf731fdb3b4bbc38 Mon Sep 17 00:00:00 2001 From: Wouter van Oortmerssen Date: Fri, 7 Nov 2014 14:36:49 -0800 Subject: [PATCH] Fixed required field checking incorrectly using unsigned offsets. Reported by: https://github.com/google/flatbuffers/issues/99 Change-Id: Ia26da95bbac189836c257fa85f3bec1b153b6207 Tested: on Linux. --- include/flatbuffers/flatbuffers.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/flatbuffers/flatbuffers.h b/include/flatbuffers/flatbuffers.h index 191f70b92..32cb8e8e4 100644 --- a/include/flatbuffers/flatbuffers.h +++ b/include/flatbuffers/flatbuffers.h @@ -515,7 +515,7 @@ class FlatBufferBuilder { uoffset_t EndTable(uoffset_t start, voffset_t numfields) { // Write the vtable offset, which is the start of any Table. // We fill it's value later. - auto vtableoffsetloc = PushElement(0); + auto vtableoffsetloc = PushElement(0); // Write a vtable, which consists entirely of voffset_t elements. // It starts with the number of offsets, followed by a type id, followed // by the offsets themselves. In reverse: @@ -564,7 +564,7 @@ class FlatBufferBuilder { // just been constructed. template void Required(Offset table, voffset_t field) { auto table_ptr = buf_.data_at(table.o); - auto vtable_ptr = table_ptr - ReadScalar(table_ptr); + auto vtable_ptr = table_ptr - ReadScalar(table_ptr); bool ok = ReadScalar(vtable_ptr + field) != 0; // If this fails, the caller will show what field needs to be set. assert(ok);