mirror of
https://github.com/google/flatbuffers.git
synced 2026-06-06 21:37:36 +00:00
Size verifier fix 2 (#8740)
* Fixes to make SizeVerifier work. In particular change all the places in the Flatbuffers library and generated code that were using `Verifier` to instead use `VerifierTemplate<TrackBufferSize>` and wrap them all inside `template <bool TrackBufferSize = false>`. Also add unit tests for SizeVerifier. * Format using `sh scripts/clang-format-git.sh` * Use `B` rather than `TrackBufferSize` for the name of the template parameter. * Update generated files.
This commit is contained in:
@@ -1279,6 +1279,35 @@ void NestedVerifierTest() {
|
||||
}
|
||||
}
|
||||
|
||||
void SizeVerifierTest() {
|
||||
// Create a monster.
|
||||
flatbuffers::FlatBufferBuilder builder;
|
||||
FinishMonsterBuffer(builder,
|
||||
CreateMonster(builder, nullptr, 0, 0,
|
||||
builder.CreateString("NestedMonster")));
|
||||
size_t length = builder.GetSize();
|
||||
const uint8_t* data = builder.GetBufferPointer();
|
||||
|
||||
// Verify the monster, using SizeVerifier.
|
||||
// We verify in several ways, using several different API functions/methods,
|
||||
// to ensure that all of these APIs are tested.
|
||||
flatbuffers::SizeVerifier size_verifier(data,
|
||||
FLATBUFFERS_MAX_BUFFER_SIZE - 1);
|
||||
{
|
||||
TEST_EQ(true, VerifyMonsterBuffer(size_verifier));
|
||||
}
|
||||
{
|
||||
TEST_EQ(true, size_verifier.VerifyBuffer<Monster>());
|
||||
}
|
||||
{
|
||||
const MyGame::Example::Monster* my_buffer = GetMonster(data);
|
||||
TEST_EQ(true, my_buffer->Verify(size_verifier));
|
||||
}
|
||||
|
||||
// Verify that the size verifier computed the correct size.
|
||||
TEST_EQ(length, size_verifier.GetComputedSize());
|
||||
}
|
||||
|
||||
template <class T, class Container>
|
||||
void TestIterators(const std::vector<T>& expected, const Container& tested) {
|
||||
TEST_ASSERT(tested.rbegin().base() == tested.end());
|
||||
@@ -1750,6 +1779,7 @@ int FlatBufferTests(const std::string& tests_data_path) {
|
||||
FlatbuffersIteratorsTest();
|
||||
WarningsAsErrorsTest();
|
||||
NestedVerifierTest();
|
||||
SizeVerifierTest();
|
||||
PrivateAnnotationsLeaks();
|
||||
JsonUnsortedArrayTest();
|
||||
VectorSpanTest();
|
||||
|
||||
Reference in New Issue
Block a user