In certain cases, no encoding has been set up for the b64 filter. In
authorRichard Levitte <levitte@openssl.org>
Thu, 11 Oct 2001 19:43:45 +0000 (19:43 +0000)
committerRichard Levitte <levitte@openssl.org>
Thu, 11 Oct 2001 19:43:45 +0000 (19:43 +0000)
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.

crypto/evp/bio_b64.c

index af6fa2ae8f241260c8e2d3db492e6b0bcb43c16d..f12eac1b55a06b37a49d1d579f1b65d7edb9fca0 100644 (file)
@@ -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),