Merge pull request #81917 from AThousandShips/alloc_fix

Fix allocation size overflow check in `CowData`
This commit is contained in:
Rémi Verschelde 2023-09-20 13:09:55 +02:00
commit c36f6f87e6
No known key found for this signature in database
GPG key ID: C3336907360768E1

View file

@ -90,6 +90,10 @@ private:
} }
_FORCE_INLINE_ bool _get_alloc_size_checked(size_t p_elements, size_t *out) const { _FORCE_INLINE_ bool _get_alloc_size_checked(size_t p_elements, size_t *out) const {
if (unlikely(p_elements == 0)) {
*out = 0;
return true;
}
#if defined(__GNUC__) #if defined(__GNUC__)
size_t o; size_t o;
size_t p; size_t p;
@ -101,13 +105,12 @@ private:
if (__builtin_add_overflow(o, static_cast<size_t>(32), &p)) { if (__builtin_add_overflow(o, static_cast<size_t>(32), &p)) {
return false; // No longer allocated here. return false; // No longer allocated here.
} }
return true;
#else #else
// Speed is more important than correctness here, do the operations unchecked // Speed is more important than correctness here, do the operations unchecked
// and hope for the best. // and hope for the best.
*out = _get_alloc_size(p_elements); *out = _get_alloc_size(p_elements);
return true;
#endif #endif
return *out;
} }
void _unref(void *p_data); void _unref(void *p_data);