dynbuf: never allocate larger than "toobig"

As dynbufs always have a fixed maximum size which they are not allowed
to grow larger than, making sure that it never allocates a larger buffer
makes sure the buffer does not allocate memory that will never be used.

Closes #10845
This commit is contained in:
Daniel Stenberg 2023-03-27 13:02:08 +02:00
Родитель c1d6fe2aaa
Коммит 5a10f48778
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 5CC908FDB71E12C2
1 изменённых файлов: 7 добавлений и 1 удалений

Просмотреть файл

@ -76,6 +76,7 @@ static CURLcode dyn_nappend(struct dynbuf *s,
DEBUGASSERT(s->toobig);
DEBUGASSERT(indx < s->toobig);
DEBUGASSERT(!s->leng || s->bufr);
DEBUGASSERT(a <= s->toobig);
if(fit > s->toobig) {
Curl_dyn_free(s);
@ -84,7 +85,9 @@ static CURLcode dyn_nappend(struct dynbuf *s,
else if(!a) {
DEBUGASSERT(!indx);
/* first invoke */
if(fit < MIN_FIRST_ALLOC)
if(MIN_FIRST_ALLOC > s->toobig)
a = s->toobig;
else if(fit < MIN_FIRST_ALLOC)
a = MIN_FIRST_ALLOC;
else
a = fit;
@ -92,6 +95,9 @@ static CURLcode dyn_nappend(struct dynbuf *s,
else {
while(a < fit)
a *= 2;
if(a > s->toobig)
/* no point in allocating a larger buffer than this is allowed to use */
a = s->toobig;
}
if(a != s->allc) {