mirror of
https://github.com/google/flatbuffers.git
synced 2026-06-13 00:04:29 +00:00
Made the verifier catch zero-offsets.
Zero offsets are non-sensical in FlatBuffers (since offsets are relative to themselves) but were allowed by the verifier. This could cause buffers made up of all zeroes to be interpreted as correct buffers with an empty root object. Generally, not allowing such offsets will make the verifier more likely to catch problems earlier. Change-Id: I54010bea29721b326ff8e5348fcd9fe78e5e7506 Tested: on Linux.
This commit is contained in:
@@ -433,7 +433,7 @@ struct Stat FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
|
||||
}
|
||||
bool Verify(flatbuffers::Verifier &verifier) const {
|
||||
return VerifyTableStart(verifier) &&
|
||||
VerifyField<flatbuffers::uoffset_t>(verifier, VT_ID) &&
|
||||
VerifyOffset(verifier, VT_ID) &&
|
||||
verifier.Verify(id()) &&
|
||||
VerifyField<int64_t>(verifier, VT_VAL) &&
|
||||
VerifyField<uint16_t>(verifier, VT_COUNT) &&
|
||||
@@ -778,27 +778,27 @@ struct Monster FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
|
||||
VerifyField<Vec3>(verifier, VT_POS) &&
|
||||
VerifyField<int16_t>(verifier, VT_MANA) &&
|
||||
VerifyField<int16_t>(verifier, VT_HP) &&
|
||||
VerifyFieldRequired<flatbuffers::uoffset_t>(verifier, VT_NAME) &&
|
||||
VerifyOffsetRequired(verifier, VT_NAME) &&
|
||||
verifier.Verify(name()) &&
|
||||
VerifyField<flatbuffers::uoffset_t>(verifier, VT_INVENTORY) &&
|
||||
VerifyOffset(verifier, VT_INVENTORY) &&
|
||||
verifier.Verify(inventory()) &&
|
||||
VerifyField<int8_t>(verifier, VT_COLOR) &&
|
||||
VerifyField<uint8_t>(verifier, VT_TEST_TYPE) &&
|
||||
VerifyField<flatbuffers::uoffset_t>(verifier, VT_TEST) &&
|
||||
VerifyOffset(verifier, VT_TEST) &&
|
||||
VerifyAny(verifier, test(), test_type()) &&
|
||||
VerifyField<flatbuffers::uoffset_t>(verifier, VT_TEST4) &&
|
||||
VerifyOffset(verifier, VT_TEST4) &&
|
||||
verifier.Verify(test4()) &&
|
||||
VerifyField<flatbuffers::uoffset_t>(verifier, VT_TESTARRAYOFSTRING) &&
|
||||
VerifyOffset(verifier, VT_TESTARRAYOFSTRING) &&
|
||||
verifier.Verify(testarrayofstring()) &&
|
||||
verifier.VerifyVectorOfStrings(testarrayofstring()) &&
|
||||
VerifyField<flatbuffers::uoffset_t>(verifier, VT_TESTARRAYOFTABLES) &&
|
||||
VerifyOffset(verifier, VT_TESTARRAYOFTABLES) &&
|
||||
verifier.Verify(testarrayoftables()) &&
|
||||
verifier.VerifyVectorOfTables(testarrayoftables()) &&
|
||||
VerifyField<flatbuffers::uoffset_t>(verifier, VT_ENEMY) &&
|
||||
VerifyOffset(verifier, VT_ENEMY) &&
|
||||
verifier.VerifyTable(enemy()) &&
|
||||
VerifyField<flatbuffers::uoffset_t>(verifier, VT_TESTNESTEDFLATBUFFER) &&
|
||||
VerifyOffset(verifier, VT_TESTNESTEDFLATBUFFER) &&
|
||||
verifier.Verify(testnestedflatbuffer()) &&
|
||||
VerifyField<flatbuffers::uoffset_t>(verifier, VT_TESTEMPTY) &&
|
||||
VerifyOffset(verifier, VT_TESTEMPTY) &&
|
||||
verifier.VerifyTable(testempty()) &&
|
||||
VerifyField<uint8_t>(verifier, VT_TESTBOOL) &&
|
||||
VerifyField<int32_t>(verifier, VT_TESTHASHS32_FNV1) &&
|
||||
@@ -809,15 +809,15 @@ struct Monster FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
|
||||
VerifyField<uint32_t>(verifier, VT_TESTHASHU32_FNV1A) &&
|
||||
VerifyField<int64_t>(verifier, VT_TESTHASHS64_FNV1A) &&
|
||||
VerifyField<uint64_t>(verifier, VT_TESTHASHU64_FNV1A) &&
|
||||
VerifyField<flatbuffers::uoffset_t>(verifier, VT_TESTARRAYOFBOOLS) &&
|
||||
VerifyOffset(verifier, VT_TESTARRAYOFBOOLS) &&
|
||||
verifier.Verify(testarrayofbools()) &&
|
||||
VerifyField<float>(verifier, VT_TESTF) &&
|
||||
VerifyField<float>(verifier, VT_TESTF2) &&
|
||||
VerifyField<float>(verifier, VT_TESTF3) &&
|
||||
VerifyField<flatbuffers::uoffset_t>(verifier, VT_TESTARRAYOFSTRING2) &&
|
||||
VerifyOffset(verifier, VT_TESTARRAYOFSTRING2) &&
|
||||
verifier.Verify(testarrayofstring2()) &&
|
||||
verifier.VerifyVectorOfStrings(testarrayofstring2()) &&
|
||||
VerifyField<flatbuffers::uoffset_t>(verifier, VT_TESTARRAYOFSORTEDSTRUCT) &&
|
||||
VerifyOffset(verifier, VT_TESTARRAYOFSORTEDSTRUCT) &&
|
||||
verifier.Verify(testarrayofsortedstruct()) &&
|
||||
verifier.EndTable();
|
||||
}
|
||||
|
||||
@@ -50,7 +50,7 @@ struct TableInFirstNS FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
|
||||
}
|
||||
bool Verify(flatbuffers::Verifier &verifier) const {
|
||||
return VerifyTableStart(verifier) &&
|
||||
VerifyField<flatbuffers::uoffset_t>(verifier, VT_FOO_TABLE) &&
|
||||
VerifyOffset(verifier, VT_FOO_TABLE) &&
|
||||
verifier.VerifyTable(foo_table()) &&
|
||||
VerifyField<int8_t>(verifier, VT_FOO_ENUM) &&
|
||||
VerifyField<NamespaceA::NamespaceB::StructInNestedNS>(verifier, VT_FOO_STRUCT) &&
|
||||
@@ -117,9 +117,9 @@ struct TableInC FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
|
||||
}
|
||||
bool Verify(flatbuffers::Verifier &verifier) const {
|
||||
return VerifyTableStart(verifier) &&
|
||||
VerifyField<flatbuffers::uoffset_t>(verifier, VT_REFER_TO_A1) &&
|
||||
VerifyOffset(verifier, VT_REFER_TO_A1) &&
|
||||
verifier.VerifyTable(refer_to_a1()) &&
|
||||
VerifyField<flatbuffers::uoffset_t>(verifier, VT_REFER_TO_A2) &&
|
||||
VerifyOffset(verifier, VT_REFER_TO_A2) &&
|
||||
verifier.VerifyTable(refer_to_a2()) &&
|
||||
verifier.EndTable();
|
||||
}
|
||||
@@ -172,7 +172,7 @@ struct SecondTableInA FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
|
||||
}
|
||||
bool Verify(flatbuffers::Verifier &verifier) const {
|
||||
return VerifyTableStart(verifier) &&
|
||||
VerifyField<flatbuffers::uoffset_t>(verifier, VT_REFER_TO_C) &&
|
||||
VerifyOffset(verifier, VT_REFER_TO_C) &&
|
||||
verifier.VerifyTable(refer_to_c()) &&
|
||||
verifier.EndTable();
|
||||
}
|
||||
|
||||
@@ -261,11 +261,11 @@ struct Movie FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
|
||||
bool Verify(flatbuffers::Verifier &verifier) const {
|
||||
return VerifyTableStart(verifier) &&
|
||||
VerifyField<uint8_t>(verifier, VT_MAIN_CHARACTER_TYPE) &&
|
||||
VerifyField<flatbuffers::uoffset_t>(verifier, VT_MAIN_CHARACTER) &&
|
||||
VerifyOffset(verifier, VT_MAIN_CHARACTER) &&
|
||||
VerifyCharacter(verifier, main_character(), main_character_type()) &&
|
||||
VerifyField<flatbuffers::uoffset_t>(verifier, VT_CHARACTERS_TYPE) &&
|
||||
VerifyOffset(verifier, VT_CHARACTERS_TYPE) &&
|
||||
verifier.Verify(characters_type()) &&
|
||||
VerifyField<flatbuffers::uoffset_t>(verifier, VT_CHARACTERS) &&
|
||||
VerifyOffset(verifier, VT_CHARACTERS) &&
|
||||
verifier.Verify(characters()) &&
|
||||
VerifyCharacterVector(verifier, characters(), characters_type()) &&
|
||||
verifier.EndTable();
|
||||
|
||||
Reference in New Issue
Block a user