mirror of
https://github.com/openssl/openssl.git
synced 2024-12-26 10:24:04 +08:00
BIO_printf() can fail to print the last character
If the string to print is exactly 2048 character long (excluding the NULL terminator) then BIO_printf will chop off the last byte. This is because it has filled its static buffer but hasn't yet allocated a dynamic buffer. In cases where we don't have a dynamic buffer we need to truncate but that is not the case for BIO_printf(). We need to check whether we are able to have a dynamic buffer buffer deciding to truncate. Reviewed-by: Rich Salz <rsalz@openssl.org>
This commit is contained in:
parent
93879f8eed
commit
416a5b6c92
@ -363,9 +363,15 @@ _dopr(char **sbuffer,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
|
* We have to truncate if there is no dynamic buffer and we have filled the
|
||||||
|
* static buffer.
|
||||||
|
*/
|
||||||
|
if (buffer == NULL) {
|
||||||
*truncated = (currlen > *maxlen - 1);
|
*truncated = (currlen > *maxlen - 1);
|
||||||
if (*truncated)
|
if (*truncated)
|
||||||
currlen = *maxlen - 1;
|
currlen = *maxlen - 1;
|
||||||
|
}
|
||||||
if(!doapr_outch(sbuffer, buffer, &currlen, maxlen, '\0'))
|
if(!doapr_outch(sbuffer, buffer, &currlen, maxlen, '\0'))
|
||||||
return 0;
|
return 0;
|
||||||
*retlen = currlen - 1;
|
*retlen = currlen - 1;
|
||||||
|
Loading…
Reference in New Issue
Block a user