Fix a memory leak on successful load of CRL
authorDmitry Belyavskiy <beldmit@gmail.com>
Tue, 27 Feb 2024 14:22:58 +0000 (15:22 +0100)
committerDmitry Belyavskiy <beldmit@gmail.com>
Thu, 7 Mar 2024 10:03:31 +0000 (11:03 +0100)
Fixes #23693

Reviewed-by: David von Oheimb <david.von.oheimb@siemens.com>
Reviewed-by: Matt Caswell <matt@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/23695)

crypto/x509/by_file.c
test/recipes/60-test_x509_load_cert_file.t
test/x509_load_cert_file_test.c

index 5073c137a20b1ca7ccd1ba1e64e716c1db79c734..85923804ac73532178d54a92f1084863c7e9235e 100644 (file)
@@ -198,6 +198,8 @@ int X509_load_crl_file(X509_LOOKUP *ctx, const char *file, int type)
                 goto err;
             }
             count++;
+            X509_CRL_free(x);
+            x = NULL;
         }
     } else if (type == X509_FILETYPE_ASN1) {
         x = d2i_X509_CRL_bio(in, NULL);
index 75aeac362c2c26aa37ae709438823f1f1c076f12..e329d7675c4ee27a1ccb49686ed22ea7987665f4 100644 (file)
@@ -12,4 +12,5 @@ setup("test_load_cert_file");
 
 plan tests => 1;
 
-ok(run(test(["x509_load_cert_file_test", srctop_file("test", "certs", "leaf-chain.pem")])));
+ok(run(test(["x509_load_cert_file_test", srctop_file("test", "certs", "leaf-chain.pem"),
+             srctop_file("test", "certs", "cyrillic_crl.pem")])));
index 001ed570d3cd7de3636b026aa74e7a523d65176d..16caf48fec710ca28acdfe7aee8aee8b5b2e2f26 100644 (file)
@@ -12,6 +12,7 @@
 #include "testutil.h"
 
 static const char *chain;
+static const char *crl;
 
 static int test_load_cert_file(void)
 {
@@ -36,6 +37,9 @@ static int test_load_cert_file(void)
             goto err;
     }
 
+    if (crl != NULL && !TEST_true(X509_load_crl_file(lookup, crl, X509_FILETYPE_PEM)))
+        goto err;
+
     ret = 1;
 
 err:
@@ -45,7 +49,7 @@ err:
     return ret;
 }
 
-OPT_TEST_DECLARE_USAGE("cert.pem...\n")
+OPT_TEST_DECLARE_USAGE("cert.pem [crl.pem]\n")
 
 int setup_tests(void)
 {
@@ -58,6 +62,8 @@ int setup_tests(void)
     if (chain == NULL)
         return 0;
 
+    crl = test_get_argument(1);
+
     ADD_TEST(test_load_cert_file);
     return 1;
 }