Fix reserve over allocating underlying buffer (#560)

Fixes calls to `reserve` when the underlying shared buffer was already
big enough to fit the requested capacity. Previously a new even larger
buffer was created anyways. This could eventually lead to an OOM
condition.
This commit is contained in:
Matt Schulte
2022-07-30 11:16:32 +02:00
committed by GitHub
parent 38fd42acba
commit d6e1999d97
2 changed files with 32 additions and 1 deletions
+4 -1
View File
@@ -670,7 +670,10 @@ impl BytesMut {
// Compare the condition in the `kind == KIND_VEC` case above
// for more details.
if v_capacity >= new_cap && offset >= len {
if v_capacity >= new_cap + offset {
self.cap = new_cap;
// no copy is necessary
} else if v_capacity >= new_cap && offset >= len {
// The capacity is sufficient, and copying is not too much
// overhead: reclaim the buffer!