mirror of
https://github.com/google/flatbuffers.git
synced 2026-07-06 08:16:56 +00:00
Add test for nested buffer verifier (#7252)
* Add test for nested buffer verifier * switch to base API
This commit is contained in:
@@ -342,7 +342,7 @@ if(MSVC)
|
||||
/WX
|
||||
/wd4512 # C4512: assignment operator could not be generated
|
||||
/wd4316 # C4316: object allocated on the heap may not be aligned
|
||||
|
||||
/wd4456 # C4456: hides previous local declaration
|
||||
$<$<CXX_COMPILER_ID:CLANG>:
|
||||
/D_CRT_SECURE_NO_WARNINGS
|
||||
>
|
||||
@@ -359,7 +359,6 @@ else()
|
||||
-Wold-style-cast
|
||||
-Wimplicit-fallthrough
|
||||
-Wextra-semi
|
||||
-Werror=shadow
|
||||
-fsigned-char
|
||||
-Wnon-virtual-dtor
|
||||
|
||||
|
||||
@@ -4179,6 +4179,63 @@ void FieldIdentifierTest() {
|
||||
#endif
|
||||
}
|
||||
|
||||
void NestedVerifierTest() {
|
||||
// Create a nested monster.
|
||||
flatbuffers::FlatBufferBuilder nested_builder;
|
||||
FinishMonsterBuffer(
|
||||
nested_builder,
|
||||
CreateMonster(nested_builder, nullptr, 0, 0,
|
||||
nested_builder.CreateString("NestedMonster")));
|
||||
|
||||
// Verify the nested monster
|
||||
flatbuffers::Verifier verifier(nested_builder.GetBufferPointer(),
|
||||
nested_builder.GetSize());
|
||||
TEST_EQ(true, VerifyMonsterBuffer(verifier));
|
||||
|
||||
{
|
||||
// Create the outer monster.
|
||||
flatbuffers::FlatBufferBuilder builder;
|
||||
|
||||
// Add the nested monster as a vector of bytes.
|
||||
auto nested_monster_bytes = builder.CreateVector(
|
||||
nested_builder.GetBufferPointer(), nested_builder.GetSize());
|
||||
|
||||
auto name = builder.CreateString("OuterMonster");
|
||||
|
||||
MonsterBuilder mon_builder(builder);
|
||||
mon_builder.add_name(name);
|
||||
mon_builder.add_testnestedflatbuffer(nested_monster_bytes);
|
||||
FinishMonsterBuffer(builder, mon_builder.Finish());
|
||||
|
||||
// Verify the root monster, which includes verifing the nested monster
|
||||
flatbuffers::Verifier verifier(builder.GetBufferPointer(),
|
||||
builder.GetSize());
|
||||
TEST_EQ(true, VerifyMonsterBuffer(verifier));
|
||||
}
|
||||
|
||||
{
|
||||
// Create the outer monster.
|
||||
flatbuffers::FlatBufferBuilder builder;
|
||||
|
||||
// Purposely invalidate the nested flatbuffer setting its length to 1, an
|
||||
// invalid length.
|
||||
uint8_t invalid_nested_buffer[1];
|
||||
auto nested_monster_bytes = builder.CreateVector(invalid_nested_buffer, 1);
|
||||
|
||||
auto name = builder.CreateString("OuterMonster");
|
||||
|
||||
MonsterBuilder mon_builder(builder);
|
||||
mon_builder.add_name(name);
|
||||
mon_builder.add_testnestedflatbuffer(nested_monster_bytes);
|
||||
FinishMonsterBuffer(builder, mon_builder.Finish());
|
||||
|
||||
// Verify the root monster fails, since the included nested monster fails.
|
||||
flatbuffers::Verifier verifier(builder.GetBufferPointer(),
|
||||
builder.GetSize());
|
||||
TEST_EQ(false, VerifyMonsterBuffer(verifier));
|
||||
}
|
||||
}
|
||||
|
||||
void ParseIncorrectMonsterJsonTest() {
|
||||
std::string schemafile;
|
||||
TEST_EQ(flatbuffers::LoadFile((test_data_path + "monster_test.bfbs").c_str(),
|
||||
@@ -4364,6 +4421,7 @@ int FlatBufferTests() {
|
||||
FixedLengthArraySpanTest();
|
||||
StructUnionTest();
|
||||
WarningsAsErrorsTest();
|
||||
NestedVerifierTest();
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user