Commit 96f1de5b authored by Matt Caswell's avatar Matt Caswell
Browse files

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: default avatarRich Salz <rsalz@openssl.org>
parent f3cab0b1
Loading
Loading
Loading
Loading
+9 −3
Original line number Diff line number Diff line
@@ -423,9 +423,15 @@ _dopr(char **sbuffer,
            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);
        if (*truncated)
            currlen = *maxlen - 1;
    }
    if(!doapr_outch(sbuffer, buffer, &currlen, maxlen, '\0'))
        return 0;
    *retlen = currlen - 1;