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:
Fergus Henderson
2025-11-24 12:11:32 +00:00
committed by GitHub
parent 7ea8db05d8
commit 20548ff3b6
30 changed files with 588 additions and 305 deletions

View File

@@ -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();