diff --git a/include/private/memory.h b/include/private/memory.h index caa4bb564..754803b15 100644 --- a/include/private/memory.h +++ b/include/private/memory.h @@ -31,6 +31,8 @@ xmlCleanupMemoryInternal(void); */ static XML_INLINE int xmlGrowCapacity(int capacity, size_t elemSize, int min, int max) { + int extra; + if (capacity <= 0) { #ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION (void) min; @@ -44,10 +46,13 @@ xmlGrowCapacity(int capacity, size_t elemSize, int min, int max) { ((size_t) capacity > SIZE_MAX / 2 / elemSize)) return(-1); - if (capacity > max / 2) + /* Grow by 50% */ + extra = (capacity + 1) / 2; + + if (capacity > max - extra) return(max); - return(capacity * 2); + return(capacity + extra); } #endif /* XML_MEMORY_H_PRIVATE__ */