fuzz/asn1.c: Add missing check for BIO_new
authorJiasheng Jiang <jiasheng@iscas.ac.cn>
Sat, 12 Feb 2022 11:27:09 +0000 (19:27 +0800)
committerDr. Matthias St. Pierre <matthias.st.pierre@ncp-e.com>
Sun, 20 Feb 2022 12:06:17 +0000 (13:06 +0100)
Since the BIO_new may fail, the 'bio' could be NULL pointer and be used.
Therefore, it should be better to check it and skip the print if fails.

Signed-off-by: Jiasheng Jiang <jiasheng@iscas.ac.cn>
Reviewed-by: Tomas Mraz <tomas@openssl.org>
Reviewed-by: Paul Dale <pauli@openssl.org>
Reviewed-by: Matthias St. Pierre <Matthias.St.Pierre@ncp-e.com>
(Merged from https://github.com/openssl/openssl/pull/17690)

(cherry picked from commit d43597c718dd6e4f2b18d5cec1eb791503a18988)

fuzz/asn1.c

index 8ce9a57c255dfff31cf2ad37d74d30ebe7a8df85..1db219c3585deea12a2dff054e981d83980557b9 100644 (file)
@@ -218,8 +218,10 @@ static ASN1_PCTX *pctx;
         int len2; \
         BIO *bio = BIO_new(BIO_s_null()); \
         \
-        PRINT(bio, type); \
-        BIO_free(bio); \
+        if (bio != NULL) { \
+            PRINT(bio, type); \
+            BIO_free(bio); \
+        } \
         len2 = I2D(type, &der); \
         if (len2 != 0) {} \
         OPENSSL_free(der); \
@@ -235,8 +237,10 @@ static ASN1_PCTX *pctx;
     if (type != NULL) { \
         BIO *bio = BIO_new(BIO_s_null()); \
         \
-        PRINT(bio, type, 0); \
-        BIO_free(bio); \
+        if (bio != NULL) { \
+            PRINT(bio, type, 0); \
+            BIO_free(bio); \
+        } \
         I2D(type, &der); \
         OPENSSL_free(der); \
         TYPE ## _free(type); \
@@ -251,8 +255,10 @@ static ASN1_PCTX *pctx;
     if (type != NULL) { \
         BIO *bio = BIO_new(BIO_s_null()); \
         \
-        PRINT(bio, type, 0, pctx); \
-        BIO_free(bio); \
+        if (bio != NULL) { \
+            PRINT(bio, type, 0, pctx); \
+            BIO_free(bio); \
+        } \
         I2D(type, &der); \
         OPENSSL_free(der); \
         TYPE ## _free(type); \
@@ -307,9 +313,10 @@ int FuzzerTestOneInput(const uint8_t *buf, size_t len)
 
         if (o != NULL) {
             BIO *bio = BIO_new(BIO_s_null());
-
-            ASN1_item_print(bio, o, 4, i, pctx);
-            BIO_free(bio);
+            if (bio != NULL) {
+                ASN1_item_print(bio, o, 4, i, pctx);
+                BIO_free(bio);
+            }
             ASN1_item_i2d(o, &der, i);
             OPENSSL_free(der);
             ASN1_item_free(o, i);