From: Matt Caswell Date: Wed, 3 Oct 2018 14:27:31 +0000 (+0100) Subject: Fix the BIO callback return code handling X-Git-Tag: OpenSSL_1_1_1a~128 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=90893527fc72189b17f1319aa735ecd5762aa7ca;p=openssl Fix the BIO callback return code handling The BIO callback handling incorrectly wrote over the return code passed to the callback, meaning that an incorrect result was (eventually) returned to the caller. Fixes #7343 Reviewed-by: Tim Hudson (Merged from https://github.com/openssl/openssl/pull/7344) (cherry picked from commit d97ce8d9a0619c1d9d1222dc1b44dbebb58dd966) --- diff --git a/crypto/bio/bio_lib.c b/crypto/bio/bio_lib.c index 95eef7d4bf..ca375b911a 100644 --- a/crypto/bio/bio_lib.c +++ b/crypto/bio/bio_lib.c @@ -52,7 +52,7 @@ static long bio_call_callback(BIO *b, int oper, const char *argp, size_t len, argi = (int)len; } - if (inret && (oper & BIO_CB_RETURN) && bareoper != BIO_CB_CTRL) { + if (inret > 0 && (oper & BIO_CB_RETURN) && bareoper != BIO_CB_CTRL) { if (*processed > INT_MAX) return -1; inret = *processed; @@ -60,7 +60,7 @@ static long bio_call_callback(BIO *b, int oper, const char *argp, size_t len, ret = b->callback(b, oper, argp, argi, argl, inret); - if (ret >= 0 && (oper & BIO_CB_RETURN) && bareoper != BIO_CB_CTRL) { + if (ret > 0 && (oper & BIO_CB_RETURN) && bareoper != BIO_CB_CTRL) { *processed = (size_t)ret; ret = 1; }