If we request more bytes to be allocated than double what we have already
written, then we grow the buffer by the wrong amount.
Reviewed-by: Emilia Käsper <emilia@openssl.org>
if (pkt->buf->length - pkt->written < len) {
size_t newlen;
+ size_t reflen;
- if (pkt->buf->length > SIZE_MAX / 2) {
+ reflen = (len > pkt->buf->length) ? len : pkt->buf->length;
+
+ if (reflen > SIZE_MAX / 2) {
newlen = SIZE_MAX;
} else {
- newlen = (pkt->buf->length == 0) ? DEFAULT_BUF_SIZE
- : pkt->buf->length * 2;
+ newlen = reflen * 2;
+ if (newlen < DEFAULT_BUF_SIZE)
+ newlen = DEFAULT_BUF_SIZE;
}
if (BUF_MEM_grow(pkt->buf, newlen) == 0)
return 0;