From ff687ae9c1df7909744e36f3dde05e10202e9542 Mon Sep 17 00:00:00 2001 From: Doug Muir Date: Mon, 22 Oct 2018 16:14:44 -0700 Subject: [PATCH] Make alignment checking optional. (#5011) --- include/flatbuffers/flatbuffers.h | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/include/flatbuffers/flatbuffers.h b/include/flatbuffers/flatbuffers.h index b6f3681..82837f8 100644 --- a/include/flatbuffers/flatbuffers.h +++ b/include/flatbuffers/flatbuffers.h @@ -1901,7 +1901,7 @@ inline bool BufferHasIdentifier(const void *buf, const char *identifier, bool si class Verifier FLATBUFFERS_FINAL_CLASS { public: Verifier(const uint8_t *buf, size_t buf_len, uoffset_t _max_depth = 64, - uoffset_t _max_tables = 1000000) + uoffset_t _max_tables = 1000000, bool _check_alignment = true) : buf_(buf), size_(buf_len), depth_(0), @@ -1912,6 +1912,7 @@ class Verifier FLATBUFFERS_FINAL_CLASS { #ifdef FLATBUFFERS_TRACK_VERIFIER_BUFFER_SIZE , upper_bound_(0) #endif + , check_alignment_(_check_alignment) // clang-format on { FLATBUFFERS_ASSERT(size_ < FLATBUFFERS_MAX_BUFFER_SIZE); @@ -1944,7 +1945,7 @@ class Verifier FLATBUFFERS_FINAL_CLASS { } template bool VerifyAlignment(size_t elem) const { - return (elem & (sizeof(T) - 1)) == 0; + return (elem & (sizeof(T) - 1)) == 0 || !check_alignment_; } // Verify a range indicated by sizeof(T). @@ -2127,6 +2128,7 @@ class Verifier FLATBUFFERS_FINAL_CLASS { mutable size_t upper_bound_; #endif // clang-format on + bool check_alignment_; }; // Convenient way to bundle a buffer and its length, to pass it around -- 2.7.4