Stop CreateUninitializedVector returning a pointer to invalid memory.
CreateUninitializedVector was performing the following actions: 1. call StartVector. 2. call make_space, and set buf to point to the reserved space. 3. call EndVector. The problem is that a call to EndVector can ultimately call make_space, which if the buffer is full, will cause a reallocation, invalidating the value stored in buf. So setting buf needs to be delayed until after EndVector. The following code, when run under valgrind shows a write to free'd memory before the change, but no such error after: int main() { flatbuffers::FlatBufferBuilder fbb(128); char *buf = nullptr; fbb.CreateUninitializedVector(128, &buf); *buf = 0; }
Showing
Please
register
or
sign in
to comment