The branch master has been updated
       via  d65d2963839433bb4f15525df37d0f4f799466e5 (commit)
      from  0c7ec1d2c3a47235ed1e5f9c65769955a41b8b26 (commit)


- Log -----------------------------------------------------------------
commit d65d2963839433bb4f15525df37d0f4f799466e5
Author: Pauli <pa...@openssl.org>
Date:   Mon Jun 21 10:33:10 2021 +1000

    asn1: properly clean up on failed BIO creation
    
    Fixes coverity 1486070 through 1486077 and 1486079
    
    Reviewed-by: Shane Lontis <shane.lon...@oracle.com>
    Reviewed-by: Tomas Mraz <to...@openssl.org>
    (Merged from https://github.com/openssl/openssl/pull/15841)

-----------------------------------------------------------------------

Summary of changes:
 crypto/asn1/asn1_parse.c | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/crypto/asn1/asn1_parse.c b/crypto/asn1/asn1_parse.c
index a131713d73..04d7ef66cf 100644
--- a/crypto/asn1/asn1_parse.c
+++ b/crypto/asn1/asn1_parse.c
@@ -27,6 +27,7 @@ static int asn1_print_info(BIO *bp, long offset, int depth, 
int hl, long len,
     int pop_f_prefix = 0;
     long saved_indent = -1;
     int i = 0;
+    BIO *bio = NULL;
 
     if (constructed & V_ASN1_CONSTRUCTED)
         p = "cons: ";
@@ -43,7 +44,8 @@ static int asn1_print_info(BIO *bp, long offset, int depth, 
int hl, long len,
     }
     if (bp != NULL) {
         if (BIO_set_prefix(bp, str) <= 0) {
-            if ((bp = BIO_push(BIO_new(BIO_f_prefix()), bp)) == NULL)
+            if ((bio = BIO_new(BIO_f_prefix())) == NULL
+                    || (bp = BIO_push(bio, bp)) == NULL)
                 goto err;
             pop_f_prefix = 1;
         }
@@ -72,10 +74,9 @@ static int asn1_print_info(BIO *bp, long offset, int depth, 
int hl, long len,
  err:
     if (saved_indent >= 0)
         BIO_set_indent(bp, saved_indent);
-    if (pop_f_prefix) {
+    if (pop_f_prefix)
         BIO_pop(bp);
-        BIO_free(bp);
-    }
+    BIO_free(bio);
     return i;
 }
 

Reply via email to