mirror of
https://github.com/openssl/openssl.git
synced 2026-01-25 02:56:43 +00:00
b64_ctrl(): Do not try to call EVP_Encode functions when not writing
The BIO_CTRL_FLUSH should just forward the call to the underlying BIOs when not writing. Reviewed-by: Saša Nedvědický <sashan@openssl.org> Reviewed-by: Paul Dale <paul.dale@oracle.com> Reviewed-by: Matt Caswell <matt@openssl.org> MergeDate: Mon Jan 19 14:20:35 2026 (Merged from https://github.com/openssl/openssl/pull/29550)
This commit is contained in:
@@ -469,19 +469,20 @@ static long b64_ctrl(BIO *b, int cmd, long num, void *ptr)
|
||||
ret = BIO_ctrl(next, cmd, num, ptr);
|
||||
break;
|
||||
case BIO_CTRL_FLUSH:
|
||||
/* do a final write */
|
||||
again:
|
||||
while (ctx->buf_len != ctx->buf_off) {
|
||||
i = b64_write(b, NULL, 0);
|
||||
if (i < 0)
|
||||
return i;
|
||||
}
|
||||
if (ctx->encode != B64_NONE
|
||||
&& EVP_ENCODE_CTX_num(ctx->base64) != 0) {
|
||||
ctx->buf_off = 0;
|
||||
EVP_EncodeFinal(ctx->base64, ctx->buf, &(ctx->buf_len));
|
||||
/* push out the bytes */
|
||||
goto again;
|
||||
if (ctx->encode == B64_ENCODE) {
|
||||
/* do a final write */
|
||||
again:
|
||||
while (ctx->buf_len != ctx->buf_off) {
|
||||
i = b64_write(b, NULL, 0);
|
||||
if (i < 0)
|
||||
return i;
|
||||
}
|
||||
if (EVP_ENCODE_CTX_num(ctx->base64) != 0) {
|
||||
ctx->buf_off = 0;
|
||||
EVP_EncodeFinal(ctx->base64, ctx->buf, &(ctx->buf_len));
|
||||
/* push out the bytes */
|
||||
goto again;
|
||||
}
|
||||
}
|
||||
/* Finally flush the underlying BIO */
|
||||
ret = BIO_ctrl(next, cmd, num, ptr);
|
||||
|
||||
Reference in New Issue
Block a user