From: Richard Levitte Date: Thu, 11 Oct 2001 19:38:40 +0000 (+0000) Subject: In certain cases, no encoding has been set up for the b64 filter. In X-Git-Tag: OpenSSL_0_9_6c~26^2~131 X-Git-Url: https://git.openssl.org/?p=openssl.git;a=commitdiff_plain;h=67d0738aba4988a239d57f6cd7aa36cf27df1f92 In certain cases, no encoding has been set up for the b64 filter. In such cases, a flush should *not* attempt to finalise the encoding, as the EVP_ENCODE_CTX structure will only be filled with garbage. For the same reason, do the same check when a wpending is performed. --- diff --git a/crypto/evp/bio_b64.c b/crypto/evp/bio_b64.c index af6fa2ae8f..f12eac1b55 100644 --- a/crypto/evp/bio_b64.c +++ b/crypto/evp/bio_b64.c @@ -465,7 +465,8 @@ static long b64_ctrl(BIO *b, int cmd, long num, void *ptr) break; case BIO_CTRL_WPENDING: /* More to write in buffer */ ret=ctx->buf_len-ctx->buf_off; - if ((ret == 0) && (ctx->base64.num != 0)) + if ((ret == 0) && (ctx->encode != B64_NONE) + && (ctx->base64.num != 0)) ret=1; else if (ret <= 0) ret=BIO_ctrl(b->next_bio,cmd,num,ptr); @@ -500,7 +501,7 @@ again: goto again; } } - else if (ctx->base64.num != 0) + else if (ctx->encode != B64_NONE && ctx->base64.num != 0) { ctx->buf_off=0; EVP_EncodeFinal(&(ctx->base64),