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.
parent e93a5652
...@@ -1650,8 +1650,9 @@ class Verifier FLATBUFFERS_FINAL_CLASS { ...@@ -1650,8 +1650,9 @@ class Verifier FLATBUFFERS_FINAL_CLASS {
} }
// Call T::Verify, which must be in the generated code for this type. // Call T::Verify, which must be in the generated code for this type.
return Verify<uoffset_t>(start) && auto o = VerifyOffset(start);
reinterpret_cast<const T *>(start + ReadScalar<uoffset_t>(start))-> return o &&
reinterpret_cast<const T *>(start + o)->
Verify(*this) Verify(*this)
#ifdef FLATBUFFERS_TRACK_VERIFIER_BUFFER_SIZE #ifdef FLATBUFFERS_TRACK_VERIFIER_BUFFER_SIZE
&& GetComputedSize() && GetComputedSize()
...@@ -1674,6 +1675,13 @@ class Verifier FLATBUFFERS_FINAL_CLASS { ...@@ -1674,6 +1675,13 @@ class Verifier FLATBUFFERS_FINAL_CLASS {
VerifyBufferFromStart<T>(identifier, buf_ + sizeof(uoffset_t)); VerifyBufferFromStart<T>(identifier, buf_ + sizeof(uoffset_t));
} }
uoffset_t VerifyOffset(const uint8_t *start) const {
if (!Verify<uoffset_t>(start)) return false;
auto o = ReadScalar<uoffset_t>(start);
Check(o != 0);
return o;
}
// Called at the start of a table to increase counters measuring data // Called at the start of a table to increase counters measuring data
// structure depth and amount, and possibly bails out with false if // structure depth and amount, and possibly bails out with false if
// limits set by the constructor have been hit. Needs to be balanced // limits set by the constructor have been hit. Needs to be balanced
...@@ -1850,12 +1858,24 @@ class Table { ...@@ -1850,12 +1858,24 @@ class Table {
// VerifyField for required fields. // VerifyField for required fields.
template<typename T> bool VerifyFieldRequired(const Verifier &verifier, template<typename T> bool VerifyFieldRequired(const Verifier &verifier,
voffset_t field) const { voffset_t field) const {
auto field_offset = GetOptionalFieldOffset(field); auto field_offset = GetOptionalFieldOffset(field);
return verifier.Check(field_offset != 0) && return verifier.Check(field_offset != 0) &&
verifier.Verify<T>(data_ + field_offset); verifier.Verify<T>(data_ + field_offset);
} }
// Versions for offsets.
bool VerifyOffset(const Verifier &verifier, voffset_t field) const {
auto field_offset = GetOptionalFieldOffset(field);
return !field_offset || verifier.VerifyOffset(data_ + field_offset);
}
bool VerifyOffsetRequired(const Verifier &verifier, voffset_t field) const {
auto field_offset = GetOptionalFieldOffset(field);
return verifier.Check(field_offset != 0) &&
verifier.VerifyOffset(data_ + field_offset);
}
private: private:
// private constructor & copy constructor: you obtain instances of this // private constructor & copy constructor: you obtain instances of this
// class by pointing to existing data only // class by pointing to existing data only
......
...@@ -150,9 +150,9 @@ struct KeyValue FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table { ...@@ -150,9 +150,9 @@ struct KeyValue FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
} }
bool Verify(flatbuffers::Verifier &verifier) const { bool Verify(flatbuffers::Verifier &verifier) const {
return VerifyTableStart(verifier) && return VerifyTableStart(verifier) &&
VerifyFieldRequired<flatbuffers::uoffset_t>(verifier, VT_KEY) && VerifyOffsetRequired(verifier, VT_KEY) &&
verifier.Verify(key()) && verifier.Verify(key()) &&
VerifyField<flatbuffers::uoffset_t>(verifier, VT_VALUE) && VerifyOffset(verifier, VT_VALUE) &&
verifier.Verify(value()) && verifier.Verify(value()) &&
verifier.EndTable(); verifier.EndTable();
} }
...@@ -234,12 +234,12 @@ struct EnumVal FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table { ...@@ -234,12 +234,12 @@ struct EnumVal FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
} }
bool Verify(flatbuffers::Verifier &verifier) const { bool Verify(flatbuffers::Verifier &verifier) const {
return VerifyTableStart(verifier) && return VerifyTableStart(verifier) &&
VerifyFieldRequired<flatbuffers::uoffset_t>(verifier, VT_NAME) && VerifyOffsetRequired(verifier, VT_NAME) &&
verifier.Verify(name()) && verifier.Verify(name()) &&
VerifyField<int64_t>(verifier, VT_VALUE) && VerifyField<int64_t>(verifier, VT_VALUE) &&
VerifyField<flatbuffers::uoffset_t>(verifier, VT_OBJECT) && VerifyOffset(verifier, VT_OBJECT) &&
verifier.VerifyTable(object()) && verifier.VerifyTable(object()) &&
VerifyField<flatbuffers::uoffset_t>(verifier, VT_UNION_TYPE) && VerifyOffset(verifier, VT_UNION_TYPE) &&
verifier.VerifyTable(union_type()) && verifier.VerifyTable(union_type()) &&
verifier.EndTable(); verifier.EndTable();
} }
...@@ -336,18 +336,18 @@ struct Enum FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table { ...@@ -336,18 +336,18 @@ struct Enum FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
} }
bool Verify(flatbuffers::Verifier &verifier) const { bool Verify(flatbuffers::Verifier &verifier) const {
return VerifyTableStart(verifier) && return VerifyTableStart(verifier) &&
VerifyFieldRequired<flatbuffers::uoffset_t>(verifier, VT_NAME) && VerifyOffsetRequired(verifier, VT_NAME) &&
verifier.Verify(name()) && verifier.Verify(name()) &&
VerifyFieldRequired<flatbuffers::uoffset_t>(verifier, VT_VALUES) && VerifyOffsetRequired(verifier, VT_VALUES) &&
verifier.Verify(values()) && verifier.Verify(values()) &&
verifier.VerifyVectorOfTables(values()) && verifier.VerifyVectorOfTables(values()) &&
VerifyField<uint8_t>(verifier, VT_IS_UNION) && VerifyField<uint8_t>(verifier, VT_IS_UNION) &&
VerifyFieldRequired<flatbuffers::uoffset_t>(verifier, VT_UNDERLYING_TYPE) && VerifyOffsetRequired(verifier, VT_UNDERLYING_TYPE) &&
verifier.VerifyTable(underlying_type()) && verifier.VerifyTable(underlying_type()) &&
VerifyField<flatbuffers::uoffset_t>(verifier, VT_ATTRIBUTES) && VerifyOffset(verifier, VT_ATTRIBUTES) &&
verifier.Verify(attributes()) && verifier.Verify(attributes()) &&
verifier.VerifyVectorOfTables(attributes()) && verifier.VerifyVectorOfTables(attributes()) &&
VerifyField<flatbuffers::uoffset_t>(verifier, VT_DOCUMENTATION) && VerifyOffset(verifier, VT_DOCUMENTATION) &&
verifier.Verify(documentation()) && verifier.Verify(documentation()) &&
verifier.VerifyVectorOfStrings(documentation()) && verifier.VerifyVectorOfStrings(documentation()) &&
verifier.EndTable(); verifier.EndTable();
...@@ -481,9 +481,9 @@ struct Field FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table { ...@@ -481,9 +481,9 @@ struct Field FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
} }
bool Verify(flatbuffers::Verifier &verifier) const { bool Verify(flatbuffers::Verifier &verifier) const {
return VerifyTableStart(verifier) && return VerifyTableStart(verifier) &&
VerifyFieldRequired<flatbuffers::uoffset_t>(verifier, VT_NAME) && VerifyOffsetRequired(verifier, VT_NAME) &&
verifier.Verify(name()) && verifier.Verify(name()) &&
VerifyFieldRequired<flatbuffers::uoffset_t>(verifier, VT_TYPE) && VerifyOffsetRequired(verifier, VT_TYPE) &&
verifier.VerifyTable(type()) && verifier.VerifyTable(type()) &&
VerifyField<uint16_t>(verifier, VT_ID) && VerifyField<uint16_t>(verifier, VT_ID) &&
VerifyField<uint16_t>(verifier, VT_OFFSET) && VerifyField<uint16_t>(verifier, VT_OFFSET) &&
...@@ -492,10 +492,10 @@ struct Field FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table { ...@@ -492,10 +492,10 @@ struct Field FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
VerifyField<uint8_t>(verifier, VT_DEPRECATED) && VerifyField<uint8_t>(verifier, VT_DEPRECATED) &&
VerifyField<uint8_t>(verifier, VT_REQUIRED) && VerifyField<uint8_t>(verifier, VT_REQUIRED) &&
VerifyField<uint8_t>(verifier, VT_KEY) && VerifyField<uint8_t>(verifier, VT_KEY) &&
VerifyField<flatbuffers::uoffset_t>(verifier, VT_ATTRIBUTES) && VerifyOffset(verifier, VT_ATTRIBUTES) &&
verifier.Verify(attributes()) && verifier.Verify(attributes()) &&
verifier.VerifyVectorOfTables(attributes()) && verifier.VerifyVectorOfTables(attributes()) &&
VerifyField<flatbuffers::uoffset_t>(verifier, VT_DOCUMENTATION) && VerifyOffset(verifier, VT_DOCUMENTATION) &&
verifier.Verify(documentation()) && verifier.Verify(documentation()) &&
verifier.VerifyVectorOfStrings(documentation()) && verifier.VerifyVectorOfStrings(documentation()) &&
verifier.EndTable(); verifier.EndTable();
...@@ -647,18 +647,18 @@ struct Object FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table { ...@@ -647,18 +647,18 @@ struct Object FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
} }
bool Verify(flatbuffers::Verifier &verifier) const { bool Verify(flatbuffers::Verifier &verifier) const {
return VerifyTableStart(verifier) && return VerifyTableStart(verifier) &&
VerifyFieldRequired<flatbuffers::uoffset_t>(verifier, VT_NAME) && VerifyOffsetRequired(verifier, VT_NAME) &&
verifier.Verify(name()) && verifier.Verify(name()) &&
VerifyFieldRequired<flatbuffers::uoffset_t>(verifier, VT_FIELDS) && VerifyOffsetRequired(verifier, VT_FIELDS) &&
verifier.Verify(fields()) && verifier.Verify(fields()) &&
verifier.VerifyVectorOfTables(fields()) && verifier.VerifyVectorOfTables(fields()) &&
VerifyField<uint8_t>(verifier, VT_IS_STRUCT) && VerifyField<uint8_t>(verifier, VT_IS_STRUCT) &&
VerifyField<int32_t>(verifier, VT_MINALIGN) && VerifyField<int32_t>(verifier, VT_MINALIGN) &&
VerifyField<int32_t>(verifier, VT_BYTESIZE) && VerifyField<int32_t>(verifier, VT_BYTESIZE) &&
VerifyField<flatbuffers::uoffset_t>(verifier, VT_ATTRIBUTES) && VerifyOffset(verifier, VT_ATTRIBUTES) &&
verifier.Verify(attributes()) && verifier.Verify(attributes()) &&
verifier.VerifyVectorOfTables(attributes()) && verifier.VerifyVectorOfTables(attributes()) &&
VerifyField<flatbuffers::uoffset_t>(verifier, VT_DOCUMENTATION) && VerifyOffset(verifier, VT_DOCUMENTATION) &&
verifier.Verify(documentation()) && verifier.Verify(documentation()) &&
verifier.VerifyVectorOfStrings(documentation()) && verifier.VerifyVectorOfStrings(documentation()) &&
verifier.EndTable(); verifier.EndTable();
...@@ -768,17 +768,17 @@ struct Schema FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table { ...@@ -768,17 +768,17 @@ struct Schema FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
} }
bool Verify(flatbuffers::Verifier &verifier) const { bool Verify(flatbuffers::Verifier &verifier) const {
return VerifyTableStart(verifier) && return VerifyTableStart(verifier) &&
VerifyFieldRequired<flatbuffers::uoffset_t>(verifier, VT_OBJECTS) && VerifyOffsetRequired(verifier, VT_OBJECTS) &&
verifier.Verify(objects()) && verifier.Verify(objects()) &&
verifier.VerifyVectorOfTables(objects()) && verifier.VerifyVectorOfTables(objects()) &&
VerifyFieldRequired<flatbuffers::uoffset_t>(verifier, VT_ENUMS) && VerifyOffsetRequired(verifier, VT_ENUMS) &&
verifier.Verify(enums()) && verifier.Verify(enums()) &&
verifier.VerifyVectorOfTables(enums()) && verifier.VerifyVectorOfTables(enums()) &&
VerifyField<flatbuffers::uoffset_t>(verifier, VT_FILE_IDENT) && VerifyOffset(verifier, VT_FILE_IDENT) &&
verifier.Verify(file_ident()) && verifier.Verify(file_ident()) &&
VerifyField<flatbuffers::uoffset_t>(verifier, VT_FILE_EXT) && VerifyOffset(verifier, VT_FILE_EXT) &&
verifier.Verify(file_ext()) && verifier.Verify(file_ext()) &&
VerifyField<flatbuffers::uoffset_t>(verifier, VT_ROOT_TABLE) && VerifyOffset(verifier, VT_ROOT_TABLE) &&
verifier.VerifyTable(root_table()) && verifier.VerifyTable(root_table()) &&
verifier.EndTable(); verifier.EndTable();
} }
......
...@@ -239,16 +239,16 @@ struct Monster FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table { ...@@ -239,16 +239,16 @@ struct Monster FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
VerifyField<Vec3>(verifier, VT_POS) && VerifyField<Vec3>(verifier, VT_POS) &&
VerifyField<int16_t>(verifier, VT_MANA) && VerifyField<int16_t>(verifier, VT_MANA) &&
VerifyField<int16_t>(verifier, VT_HP) && VerifyField<int16_t>(verifier, VT_HP) &&
VerifyField<flatbuffers::uoffset_t>(verifier, VT_NAME) && VerifyOffset(verifier, VT_NAME) &&
verifier.Verify(name()) && verifier.Verify(name()) &&
VerifyField<flatbuffers::uoffset_t>(verifier, VT_INVENTORY) && VerifyOffset(verifier, VT_INVENTORY) &&
verifier.Verify(inventory()) && verifier.Verify(inventory()) &&
VerifyField<int8_t>(verifier, VT_COLOR) && VerifyField<int8_t>(verifier, VT_COLOR) &&
VerifyField<flatbuffers::uoffset_t>(verifier, VT_WEAPONS) && VerifyOffset(verifier, VT_WEAPONS) &&
verifier.Verify(weapons()) && verifier.Verify(weapons()) &&
verifier.VerifyVectorOfTables(weapons()) && verifier.VerifyVectorOfTables(weapons()) &&
VerifyField<uint8_t>(verifier, VT_EQUIPPED_TYPE) && VerifyField<uint8_t>(verifier, VT_EQUIPPED_TYPE) &&
VerifyField<flatbuffers::uoffset_t>(verifier, VT_EQUIPPED) && VerifyOffset(verifier, VT_EQUIPPED) &&
VerifyEquipment(verifier, equipped(), equipped_type()) && VerifyEquipment(verifier, equipped(), equipped_type()) &&
verifier.EndTable(); verifier.EndTable();
} }
...@@ -382,7 +382,7 @@ struct Weapon FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table { ...@@ -382,7 +382,7 @@ struct Weapon FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
} }
bool Verify(flatbuffers::Verifier &verifier) const { bool Verify(flatbuffers::Verifier &verifier) const {
return VerifyTableStart(verifier) && return VerifyTableStart(verifier) &&
VerifyField<flatbuffers::uoffset_t>(verifier, VT_NAME) && VerifyOffset(verifier, VT_NAME) &&
verifier.Verify(name()) && verifier.Verify(name()) &&
VerifyField<int16_t>(verifier, VT_DAMAGE) && VerifyField<int16_t>(verifier, VT_DAMAGE) &&
verifier.EndTable(); verifier.EndTable();
......
...@@ -1110,7 +1110,12 @@ class CppGenerator : public BaseGenerator { ...@@ -1110,7 +1110,12 @@ class CppGenerator : public BaseGenerator {
code_.SetValue("REQUIRED", field.required ? "Required" : ""); code_.SetValue("REQUIRED", field.required ? "Required" : "");
code_.SetValue("SIZE", GenTypeSize(field.value.type)); code_.SetValue("SIZE", GenTypeSize(field.value.type));
code_.SetValue("OFFSET", GenFieldOffsetName(field)); code_.SetValue("OFFSET", GenFieldOffsetName(field));
code_ += "{{PRE}}VerifyField{{REQUIRED}}<{{SIZE}}>(verifier, {{OFFSET}})\\"; if (IsScalar(field.value.type.base_type) || IsStruct(field.value.type)) {
code_ +=
"{{PRE}}VerifyField{{REQUIRED}}<{{SIZE}}>(verifier, {{OFFSET}})\\";
} else {
code_ += "{{PRE}}VerifyOffset{{REQUIRED}}(verifier, {{OFFSET}})\\";
}
switch (field.value.type.base_type) { switch (field.value.type.base_type) {
case BASE_TYPE_UNION: { case BASE_TYPE_UNION: {
...@@ -1764,7 +1769,7 @@ class CppGenerator : public BaseGenerator { ...@@ -1764,7 +1769,7 @@ class CppGenerator : public BaseGenerator {
code += "_fbb.CreateVectorOfNativeStructs<"; code += "_fbb.CreateVectorOfNativeStructs<";
code += WrapInNameSpace(*vector_type.struct_def) + ">"; code += WrapInNameSpace(*vector_type.struct_def) + ">";
} else { } else {
code += "_fbb.CreateVectorOfStructs"; code += "_fbb.CreateVectorOfStructs";
} }
code += "(" + value + ")"; code += "(" + value + ")";
} else { } else {
......
...@@ -433,7 +433,7 @@ struct Stat FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table { ...@@ -433,7 +433,7 @@ struct Stat FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
} }
bool Verify(flatbuffers::Verifier &verifier) const { bool Verify(flatbuffers::Verifier &verifier) const {
return VerifyTableStart(verifier) && return VerifyTableStart(verifier) &&
VerifyField<flatbuffers::uoffset_t>(verifier, VT_ID) && VerifyOffset(verifier, VT_ID) &&
verifier.Verify(id()) && verifier.Verify(id()) &&
VerifyField<int64_t>(verifier, VT_VAL) && VerifyField<int64_t>(verifier, VT_VAL) &&
VerifyField<uint16_t>(verifier, VT_COUNT) && VerifyField<uint16_t>(verifier, VT_COUNT) &&
...@@ -778,27 +778,27 @@ struct Monster FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table { ...@@ -778,27 +778,27 @@ struct Monster FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
VerifyField<Vec3>(verifier, VT_POS) && VerifyField<Vec3>(verifier, VT_POS) &&
VerifyField<int16_t>(verifier, VT_MANA) && VerifyField<int16_t>(verifier, VT_MANA) &&
VerifyField<int16_t>(verifier, VT_HP) && VerifyField<int16_t>(verifier, VT_HP) &&
VerifyFieldRequired<flatbuffers::uoffset_t>(verifier, VT_NAME) && VerifyOffsetRequired(verifier, VT_NAME) &&
verifier.Verify(name()) && verifier.Verify(name()) &&
VerifyField<flatbuffers::uoffset_t>(verifier, VT_INVENTORY) && VerifyOffset(verifier, VT_INVENTORY) &&
verifier.Verify(inventory()) && verifier.Verify(inventory()) &&
VerifyField<int8_t>(verifier, VT_COLOR) && VerifyField<int8_t>(verifier, VT_COLOR) &&
VerifyField<uint8_t>(verifier, VT_TEST_TYPE) && VerifyField<uint8_t>(verifier, VT_TEST_TYPE) &&
VerifyField<flatbuffers::uoffset_t>(verifier, VT_TEST) && VerifyOffset(verifier, VT_TEST) &&
VerifyAny(verifier, test(), test_type()) && VerifyAny(verifier, test(), test_type()) &&
VerifyField<flatbuffers::uoffset_t>(verifier, VT_TEST4) && VerifyOffset(verifier, VT_TEST4) &&
verifier.Verify(test4()) && verifier.Verify(test4()) &&
VerifyField<flatbuffers::uoffset_t>(verifier, VT_TESTARRAYOFSTRING) && VerifyOffset(verifier, VT_TESTARRAYOFSTRING) &&
verifier.Verify(testarrayofstring()) && verifier.Verify(testarrayofstring()) &&
verifier.VerifyVectorOfStrings(testarrayofstring()) && verifier.VerifyVectorOfStrings(testarrayofstring()) &&
VerifyField<flatbuffers::uoffset_t>(verifier, VT_TESTARRAYOFTABLES) && VerifyOffset(verifier, VT_TESTARRAYOFTABLES) &&
verifier.Verify(testarrayoftables()) && verifier.Verify(testarrayoftables()) &&
verifier.VerifyVectorOfTables(testarrayoftables()) && verifier.VerifyVectorOfTables(testarrayoftables()) &&
VerifyField<flatbuffers::uoffset_t>(verifier, VT_ENEMY) && VerifyOffset(verifier, VT_ENEMY) &&
verifier.VerifyTable(enemy()) && verifier.VerifyTable(enemy()) &&
VerifyField<flatbuffers::uoffset_t>(verifier, VT_TESTNESTEDFLATBUFFER) && VerifyOffset(verifier, VT_TESTNESTEDFLATBUFFER) &&
verifier.Verify(testnestedflatbuffer()) && verifier.Verify(testnestedflatbuffer()) &&
VerifyField<flatbuffers::uoffset_t>(verifier, VT_TESTEMPTY) && VerifyOffset(verifier, VT_TESTEMPTY) &&
verifier.VerifyTable(testempty()) && verifier.VerifyTable(testempty()) &&
VerifyField<uint8_t>(verifier, VT_TESTBOOL) && VerifyField<uint8_t>(verifier, VT_TESTBOOL) &&
VerifyField<int32_t>(verifier, VT_TESTHASHS32_FNV1) && VerifyField<int32_t>(verifier, VT_TESTHASHS32_FNV1) &&
...@@ -809,15 +809,15 @@ struct Monster FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table { ...@@ -809,15 +809,15 @@ struct Monster FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
VerifyField<uint32_t>(verifier, VT_TESTHASHU32_FNV1A) && VerifyField<uint32_t>(verifier, VT_TESTHASHU32_FNV1A) &&
VerifyField<int64_t>(verifier, VT_TESTHASHS64_FNV1A) && VerifyField<int64_t>(verifier, VT_TESTHASHS64_FNV1A) &&
VerifyField<uint64_t>(verifier, VT_TESTHASHU64_FNV1A) && VerifyField<uint64_t>(verifier, VT_TESTHASHU64_FNV1A) &&
VerifyField<flatbuffers::uoffset_t>(verifier, VT_TESTARRAYOFBOOLS) && VerifyOffset(verifier, VT_TESTARRAYOFBOOLS) &&
verifier.Verify(testarrayofbools()) && verifier.Verify(testarrayofbools()) &&
VerifyField<float>(verifier, VT_TESTF) && VerifyField<float>(verifier, VT_TESTF) &&
VerifyField<float>(verifier, VT_TESTF2) && VerifyField<float>(verifier, VT_TESTF2) &&
VerifyField<float>(verifier, VT_TESTF3) && VerifyField<float>(verifier, VT_TESTF3) &&
VerifyField<flatbuffers::uoffset_t>(verifier, VT_TESTARRAYOFSTRING2) && VerifyOffset(verifier, VT_TESTARRAYOFSTRING2) &&
verifier.Verify(testarrayofstring2()) && verifier.Verify(testarrayofstring2()) &&
verifier.VerifyVectorOfStrings(testarrayofstring2()) && verifier.VerifyVectorOfStrings(testarrayofstring2()) &&
VerifyField<flatbuffers::uoffset_t>(verifier, VT_TESTARRAYOFSORTEDSTRUCT) && VerifyOffset(verifier, VT_TESTARRAYOFSORTEDSTRUCT) &&
verifier.Verify(testarrayofsortedstruct()) && verifier.Verify(testarrayofsortedstruct()) &&
verifier.EndTable(); verifier.EndTable();
} }
......
...@@ -50,7 +50,7 @@ struct TableInFirstNS FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table { ...@@ -50,7 +50,7 @@ struct TableInFirstNS FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
} }
bool Verify(flatbuffers::Verifier &verifier) const { bool Verify(flatbuffers::Verifier &verifier) const {
return VerifyTableStart(verifier) && return VerifyTableStart(verifier) &&
VerifyField<flatbuffers::uoffset_t>(verifier, VT_FOO_TABLE) && VerifyOffset(verifier, VT_FOO_TABLE) &&
verifier.VerifyTable(foo_table()) && verifier.VerifyTable(foo_table()) &&
VerifyField<int8_t>(verifier, VT_FOO_ENUM) && VerifyField<int8_t>(verifier, VT_FOO_ENUM) &&
VerifyField<NamespaceA::NamespaceB::StructInNestedNS>(verifier, VT_FOO_STRUCT) && VerifyField<NamespaceA::NamespaceB::StructInNestedNS>(verifier, VT_FOO_STRUCT) &&
...@@ -117,9 +117,9 @@ struct TableInC FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table { ...@@ -117,9 +117,9 @@ struct TableInC FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
} }
bool Verify(flatbuffers::Verifier &verifier) const { bool Verify(flatbuffers::Verifier &verifier) const {
return VerifyTableStart(verifier) && return VerifyTableStart(verifier) &&
VerifyField<flatbuffers::uoffset_t>(verifier, VT_REFER_TO_A1) && VerifyOffset(verifier, VT_REFER_TO_A1) &&
verifier.VerifyTable(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.VerifyTable(refer_to_a2()) &&
verifier.EndTable(); verifier.EndTable();
} }
...@@ -172,7 +172,7 @@ struct SecondTableInA FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table { ...@@ -172,7 +172,7 @@ struct SecondTableInA FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
} }
bool Verify(flatbuffers::Verifier &verifier) const { bool Verify(flatbuffers::Verifier &verifier) const {
return VerifyTableStart(verifier) && return VerifyTableStart(verifier) &&
VerifyField<flatbuffers::uoffset_t>(verifier, VT_REFER_TO_C) && VerifyOffset(verifier, VT_REFER_TO_C) &&
verifier.VerifyTable(refer_to_c()) && verifier.VerifyTable(refer_to_c()) &&
verifier.EndTable(); verifier.EndTable();
} }
......
...@@ -261,11 +261,11 @@ struct Movie FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table { ...@@ -261,11 +261,11 @@ struct Movie FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
bool Verify(flatbuffers::Verifier &verifier) const { bool Verify(flatbuffers::Verifier &verifier) const {
return VerifyTableStart(verifier) && return VerifyTableStart(verifier) &&
VerifyField<uint8_t>(verifier, VT_MAIN_CHARACTER_TYPE) && 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()) && VerifyCharacter(verifier, main_character(), main_character_type()) &&
VerifyField<flatbuffers::uoffset_t>(verifier, VT_CHARACTERS_TYPE) && VerifyOffset(verifier, VT_CHARACTERS_TYPE) &&
verifier.Verify(characters_type()) && verifier.Verify(characters_type()) &&
VerifyField<flatbuffers::uoffset_t>(verifier, VT_CHARACTERS) && VerifyOffset(verifier, VT_CHARACTERS) &&
verifier.Verify(characters()) && verifier.Verify(characters()) &&
VerifyCharacterVector(verifier, characters(), characters_type()) && VerifyCharacterVector(verifier, characters(), characters_type()) &&
verifier.EndTable(); verifier.EndTable();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment