diff options
author | Wouter van Oortmerssen <aardappel@gmail.com> | 2019-02-07 16:34:25 -0800 |
---|---|---|
committer | Wouter van Oortmerssen <aardappel@gmail.com> | 2019-02-07 16:34:25 -0800 |
commit | cc7f9b89f3795b44bb7ec38ac96c15f95e1c7d24 (patch) | |
tree | da90a920ce396088079313b8afdd8ec6b487ec4b | |
parent | 600f3fbcd4ef38b15398b1273f90697587b5a1d1 (diff) | |
download | flatbuffers-cc7f9b89f3795b44bb7ec38ac96c15f95e1c7d24.tar.gz |
Made FLATBUFFERS_TRACK_VERIFIER_BUFFER_SIZE #ifdef out less
This is to protect against cases where part of a project is
compiled with or without this flag, making for very fragile
and hard to find bugs, such as sizeof(Verifier) changing.
Change-Id: I01c895cdc5b44f860e4b0b9c9613bff1983e2b9d
See: https://bugs.chromium.org/p/chromium/issues/detail?id=929847
-rw-r--r-- | include/flatbuffers/flatbuffers.h | 36 | ||||
-rw-r--r-- | tests/test.cpp | 28 |
2 files changed, 32 insertions, 32 deletions
diff --git a/include/flatbuffers/flatbuffers.h b/include/flatbuffers/flatbuffers.h index 062c7f5b..8e7d264e 100644 --- a/include/flatbuffers/flatbuffers.h +++ b/include/flatbuffers/flatbuffers.h @@ -1977,13 +1977,9 @@ class Verifier FLATBUFFERS_FINAL_CLASS { depth_(0), max_depth_(_max_depth), num_tables_(0), - max_tables_(_max_tables) - // clang-format off - #ifdef FLATBUFFERS_TRACK_VERIFIER_BUFFER_SIZE - , upper_bound_(0) - #endif - , check_alignment_(_check_alignment) - // clang-format on + max_tables_(_max_tables), + upper_bound_(0), + check_alignment_(_check_alignment) { FLATBUFFERS_ASSERT(size_ < FLATBUFFERS_MAX_BUFFER_SIZE); } @@ -2174,17 +2170,21 @@ class Verifier FLATBUFFERS_FINAL_CLASS { return true; } - // clang-format off - #ifdef FLATBUFFERS_TRACK_VERIFIER_BUFFER_SIZE // Returns the message size in bytes size_t GetComputedSize() const { - uintptr_t size = upper_bound_; - // Align the size to uoffset_t - size = (size - 1 + sizeof(uoffset_t)) & ~(sizeof(uoffset_t) - 1); - return (size > size_) ? 0 : size; + // clang-format off + #ifdef FLATBUFFERS_TRACK_VERIFIER_BUFFER_SIZE + uintptr_t size = upper_bound_; + // Align the size to uoffset_t + size = (size - 1 + sizeof(uoffset_t)) & ~(sizeof(uoffset_t) - 1); + return (size > size_) ? 0 : size; + #else + // Must turn on FLATBUFFERS_TRACK_VERIFIER_BUFFER_SIZE for this to work. + FLATBUFFERS_ASSERT(false); + return 0; + #endif + // clang-format on } - #endif - // clang-format on private: const uint8_t *buf_; @@ -2193,11 +2193,7 @@ class Verifier FLATBUFFERS_FINAL_CLASS { uoffset_t max_depth_; uoffset_t num_tables_; uoffset_t max_tables_; - // clang-format off - #ifdef FLATBUFFERS_TRACK_VERIFIER_BUFFER_SIZE - mutable size_t upper_bound_; - #endif - // clang-format on + mutable size_t upper_bound_; bool check_alignment_; }; diff --git a/tests/test.cpp b/tests/test.cpp index 509db6c7..ad0c1824 100644 --- a/tests/test.cpp +++ b/tests/test.cpp @@ -210,18 +210,22 @@ void AccessFlatBufferTest(const uint8_t *flatbuf, size_t length, flatbuffers::Verifier verifier(flatbuf, length); TEST_EQ(VerifyMonsterBuffer(verifier), true); - std::vector<uint8_t> test_buff; - test_buff.resize(length * 2); - std::memcpy(&test_buff[0], flatbuf, length); - std::memcpy(&test_buff[length], flatbuf, length); - - flatbuffers::Verifier verifier1(&test_buff[0], length); - TEST_EQ(VerifyMonsterBuffer(verifier1), true); - TEST_EQ(verifier1.GetComputedSize(), length); - - flatbuffers::Verifier verifier2(&test_buff[length], length); - TEST_EQ(VerifyMonsterBuffer(verifier2), true); - TEST_EQ(verifier2.GetComputedSize(), length); + // clang-format off + #ifdef FLATBUFFERS_TRACK_VERIFIER_BUFFER_SIZE + std::vector<uint8_t> test_buff; + test_buff.resize(length * 2); + std::memcpy(&test_buff[0], flatbuf, length); + std::memcpy(&test_buff[length], flatbuf, length); + + flatbuffers::Verifier verifier1(&test_buff[0], length); + TEST_EQ(VerifyMonsterBuffer(verifier1), true); + TEST_EQ(verifier1.GetComputedSize(), length); + + flatbuffers::Verifier verifier2(&test_buff[length], length); + TEST_EQ(VerifyMonsterBuffer(verifier2), true); + TEST_EQ(verifier2.GetComputedSize(), length); + #endif + // clang-format on TEST_EQ(strcmp(MonsterIdentifier(), "MONS"), 0); TEST_EQ(MonsterBufferHasIdentifier(flatbuf), true); |