aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWouter van Oortmerssen <aardappel@gmail.com>2019-02-07 16:34:25 -0800
committerWouter van Oortmerssen <aardappel@gmail.com>2019-02-07 16:34:25 -0800
commitcc7f9b89f3795b44bb7ec38ac96c15f95e1c7d24 (patch)
treeda90a920ce396088079313b8afdd8ec6b487ec4b
parent600f3fbcd4ef38b15398b1273f90697587b5a1d1 (diff)
downloadflatbuffers-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.h36
-rw-r--r--tests/test.cpp28
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);