From: David Benjamin Date: Sun, 31 Aug 2025 22:09:52 +0000 (-0400) Subject: Add a helper function to delete the extension list X-Git-Tag: openssl-3.2.6~42 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=4855bca399e14637f4877d828535f01af4e224d6;p=thirdparty%2Fopenssl.git Add a helper function to delete the extension list Reviewed-by: Paul Dale Reviewed-by: Tim Hudson Reviewed-by: Matt Caswell Reviewed-by: Tomas Mraz (Merged from https://github.com/openssl/openssl/pull/28398) (cherry picked from commit 9e8898b6b6032a69f1002ab823a1cc0bba109b50) --- diff --git a/crypto/x509/x509_ext.c b/crypto/x509/x509_ext.c index bed20bd5aeb..e004a07d888 100644 --- a/crypto/x509/x509_ext.c +++ b/crypto/x509/x509_ext.c @@ -42,19 +42,23 @@ X509_EXTENSION *X509_CRL_get_ext(const X509_CRL *x, int loc) return X509v3_get_ext(x->crl.extensions, loc); } -X509_EXTENSION *X509_CRL_delete_ext(X509_CRL *x, int loc) +static X509_EXTENSION *delete_ext(STACK_OF(X509_EXTENSION) **sk, int loc) { - X509_EXTENSION *ret = X509v3_delete_ext(x->crl.extensions, loc); + X509_EXTENSION *ret = X509v3_delete_ext(*sk, loc); /* Empty extension lists are omitted. */ - if (x->crl.extensions != NULL && - sk_X509_EXTENSION_num(x->crl.extensions) == 0) { - sk_X509_EXTENSION_pop_free(x->crl.extensions, X509_EXTENSION_free); - x->crl.extensions = NULL; + if (*sk != NULL && sk_X509_EXTENSION_num(*sk) == 0) { + sk_X509_EXTENSION_pop_free(*sk, X509_EXTENSION_free); + *sk = NULL; } return ret; } +X509_EXTENSION *X509_CRL_delete_ext(X509_CRL *x, int loc) +{ + return delete_ext(&x->crl.extensions, loc); +} + void *X509_CRL_get_ext_d2i(const X509_CRL *x, int nid, int *crit, int *idx) { return X509V3_get_d2i(x->crl.extensions, nid, crit, idx); @@ -99,16 +103,7 @@ X509_EXTENSION *X509_get_ext(const X509 *x, int loc) X509_EXTENSION *X509_delete_ext(X509 *x, int loc) { - X509_EXTENSION *ret = X509v3_delete_ext(x->cert_info.extensions, loc); - - /* Empty extension lists are omitted. */ - if (x->cert_info.extensions != NULL && - sk_X509_EXTENSION_num(x->cert_info.extensions) == 0) { - sk_X509_EXTENSION_pop_free(x->cert_info.extensions, - X509_EXTENSION_free); - x->cert_info.extensions = NULL; - } - return ret; + return delete_ext(&x->cert_info.extensions, loc); } int X509_add_ext(X509 *x, X509_EXTENSION *ex, int loc) @@ -156,15 +151,7 @@ X509_EXTENSION *X509_REVOKED_get_ext(const X509_REVOKED *x, int loc) X509_EXTENSION *X509_REVOKED_delete_ext(X509_REVOKED *x, int loc) { - X509_EXTENSION *ret = X509v3_delete_ext(x->extensions, loc); - - /* Empty extension lists are omitted. */ - if (x->extensions != NULL && - sk_X509_EXTENSION_num(x->extensions) == 0) { - sk_X509_EXTENSION_pop_free(x->extensions, X509_EXTENSION_free); - x->extensions = NULL; - } - return ret; + return delete_ext(&x->extensions, loc); } int X509_REVOKED_add_ext(X509_REVOKED *x, X509_EXTENSION *ex, int loc)