Push calloc() of ndef_aux down as far as possible and
authortb <tb@openbsd.org>
Wed, 15 Mar 2023 06:28:55 +0000 (06:28 +0000)
committertb <tb@openbsd.org>
Wed, 15 Mar 2023 06:28:55 +0000 (06:28 +0000)
pull the setting of the ex_arg up, so we can do error
checking.

ok jsing

lib/libcrypto/asn1/bio_ndef.c

index 7c8428f..606b08a 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: bio_ndef.c,v 1.18 2023/03/15 06:22:42 tb Exp $ */
+/* $OpenBSD: bio_ndef.c,v 1.19 2023/03/15 06:28:55 tb Exp $ */
 /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
  * project.
  */
@@ -110,9 +110,6 @@ BIO_new_NDEF(BIO *out, ASN1_VALUE *val, const ASN1_ITEM *it)
                goto err;
        }
 
-       if ((ndef_aux = calloc(1, sizeof(NDEF_SUPPORT))) == NULL)
-               goto err;
-
        if ((asn_bio = BIO_new(BIO_f_asn1())) == NULL)
                goto err;
 
@@ -125,6 +122,13 @@ BIO_new_NDEF(BIO *out, ASN1_VALUE *val, const ASN1_ITEM *it)
        if (BIO_asn1_set_suffix(asn_bio, ndef_suffix, ndef_suffix_free) <= 0)
                goto err;
 
+       if ((ndef_aux = calloc(1, sizeof(*ndef_aux))) == NULL)
+               goto err;
+       if (BIO_ctrl(asn_bio, BIO_C_SET_EX_ARG, 0, ndef_aux) <= 0) {
+               free(ndef_aux);
+               goto err;
+       }
+
        /* Now let callback prepend any digest, cipher etc BIOs
         * ASN1 structure needs.
         */
@@ -142,14 +146,11 @@ BIO_new_NDEF(BIO *out, ASN1_VALUE *val, const ASN1_ITEM *it)
        ndef_aux->boundary = sarg.boundary;
        ndef_aux->out = asn_bio;
 
-       BIO_ctrl(asn_bio, BIO_C_SET_EX_ARG, 0, ndef_aux);
-
        return sarg.ndef_bio;
 
  err:
        BIO_pop(pop_bio);
        BIO_free(asn_bio);
-       free(ndef_aux);
        return NULL;
 }