Merge pull request #3113 from thomasbiang/assimp_gltf2_exporter

Fix gltf2 exporter memory crash
pull/3124/head^2
Kim Kulling 2020-04-02 20:39:59 +02:00 committed by GitHub
commit 210f40e984
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 10 additions and 5 deletions

View File

@ -508,18 +508,23 @@ inline size_t Buffer::AppendData(uint8_t *data, size_t length) {
} }
inline void Buffer::Grow(size_t amount) { inline void Buffer::Grow(size_t amount) {
if (amount <= 0) return; if (amount <= 0) {
return;
}
// Capacity is big enough
if (capacity >= byteLength + amount) { if (capacity >= byteLength + amount) {
byteLength += amount; byteLength += amount;
return; return;
} }
// Shift operation is standard way to divide integer by 2, it doesn't cast it to float back and forth, also works for odd numbers, // Just allocate data which we need
// originally it would look like: static_cast<size_t>(capacity * 1.5f) capacity = byteLength + amount;
capacity = std::max(capacity + (capacity >> 1), byteLength + amount);
uint8_t *b = new uint8_t[capacity]; uint8_t *b = new uint8_t[capacity];
if (mData) memcpy(b, mData.get(), byteLength); if (nullptr != mData) {
memcpy(b, mData.get(), byteLength);
}
mData.reset(b, std::default_delete<uint8_t[]>()); mData.reset(b, std::default_delete<uint8_t[]>());
byteLength += amount; byteLength += amount;
} }