diff --git a/include/flatbuffers/flexbuffers.h b/include/flatbuffers/flexbuffers.h index dceaa3b41..4dd71ae1b 100644 --- a/include/flatbuffers/flexbuffers.h +++ b/include/flatbuffers/flexbuffers.h @@ -1522,7 +1522,8 @@ class Builder FLATBUFFERS_FINAL_CLASS { Type vector_type = FBT_KEY; // Check bit widths and types for all elements. for (size_t i = start; i < stack_.size(); i += step) { - auto elem_width = stack_[i].ElemWidth(buf_.size(), i + prefix_elems); + auto elem_width = + stack_[i].ElemWidth(buf_.size(), i - start + prefix_elems); bit_width = (std::max)(bit_width, elem_width); if (typed) { if (i == start) { diff --git a/tests/test.cpp b/tests/test.cpp index 408194482..87a11691d 100644 --- a/tests/test.cpp +++ b/tests/test.cpp @@ -2885,6 +2885,17 @@ void FlexBuffersTest() { // And from FlexBuffer back to JSON: auto jsonback = jroot.ToString(); TEST_EQ_STR(jsontest, jsonback.c_str()); + + slb.Clear(); + slb.Vector([&]() { + for (int i = 0; i < 130; ++i) slb.Add(static_cast(255)); + slb.Vector([&]() { + for (int i = 0; i < 130; ++i) slb.Add(static_cast(255)); + slb.Vector([] {}); + }); + }); + slb.Finish(); + TEST_EQ(slb.GetSize(), 664); } void FlexBuffersDeprecatedTest() {