diff options
author | nemerle <nemerle5@gmail.com> | 2018-05-17 00:35:47 +0200 |
---|---|---|
committer | nemerle <nemerle5@gmail.com> | 2018-05-17 00:35:47 +0200 |
commit | 2bbe6144ff4eb6b68b8b06144bca21bffdf1e8b5 (patch) | |
tree | be75a0a379ac6fdd10fd6eb5af0403f1fc6b4516 /core | |
parent | 41f79a6f14843406ea3c7f464a899fdc290e4bb0 (diff) |
Fix PoolAllocator::resize for too large p_new_size
The code had a subtle signed/unsigned bug -
```cpp
if( signed - unsigned < 0)
// signed - unsigned is unsigned in c++, so
if( unsigned < 0)
// and thus the if block will never be executed
```
Thus all the following code would be ran, including unnecessary retries
of compacting the pool.
Diffstat (limited to 'core')
-rw-r--r-- | core/pool_allocator.cpp | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/core/pool_allocator.cpp b/core/pool_allocator.cpp index 017586b92a..8952314212 100644 --- a/core/pool_allocator.cpp +++ b/core/pool_allocator.cpp @@ -359,7 +359,7 @@ Error PoolAllocator::resize(ID p_mem, int p_new_size) { //p_new_size = align(p_new_size) int _free = free_mem; // - static_area_size; - if ((_free + aligned(e->len)) - alloc_size < 0) { + if (uint32_t(_free + aligned(e->len)) < alloc_size) { mt_unlock(); ERR_FAIL_V(ERR_OUT_OF_MEMORY); }; |