sync x509v3_add_value with x509_utl.c
authortb <tb@openbsd.org>
Sat, 31 Aug 2024 18:39:25 +0000 (18:39 +0000)
committertb <tb@openbsd.org>
Sat, 31 Aug 2024 18:39:25 +0000 (18:39 +0000)
usr.bin/openssl/ocsp.c

index ace843c..d35940a 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: ocsp.c,v 1.25 2024/08/30 17:26:44 tb Exp $ */
+/* $OpenBSD: ocsp.c,v 1.26 2024/08/31 18:39:25 tb Exp $ */
 /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
  * project 2000.
  */
@@ -187,40 +187,53 @@ ocsp_opt_cert_id_md(int argc, char **argv, int *argsused)
 
 static int
 x509v3_add_value(const char *name, const char *value,
-    STACK_OF(CONF_VALUE) **extlist)
+    STACK_OF(CONF_VALUE) **out_extlist)
 {
-       CONF_VALUE *vtmp = NULL;
-       STACK_OF(CONF_VALUE) *free_exts = NULL;
+       STACK_OF(CONF_VALUE) *extlist = NULL;
+       CONF_VALUE *conf_value = NULL;
+       int ret = 0;
 
-       if ((vtmp = calloc(1, sizeof(CONF_VALUE))) == NULL)
+       if ((conf_value = calloc(1, sizeof(*conf_value))) == NULL) {
+               X509V3error(ERR_R_MALLOC_FAILURE);
                goto err;
+       }
        if (name != NULL) {
-               if ((vtmp->name = strdup(name)) == NULL)
+               if ((conf_value->name = strdup(name)) == NULL) {
+                       X509V3error(ERR_R_MALLOC_FAILURE);
                        goto err;
+               }
        }
        if (value != NULL) {
-               if ((vtmp->value = strdup(value)) == NULL)
+               if ((conf_value->value = strdup(value)) == NULL) {
+                       X509V3error(ERR_R_MALLOC_FAILURE);
                        goto err;
+               }
        }
 
-       if (*extlist == NULL) {
-               if ((free_exts = *extlist = sk_CONF_VALUE_new_null()) == NULL)
-                       goto err;
+       if ((extlist = *out_extlist) == NULL)
+               extlist = sk_CONF_VALUE_new_null();
+       if (extlist == NULL) {
+               X509V3error(ERR_R_MALLOC_FAILURE);
+               goto err;
        }
 
-       if (!sk_CONF_VALUE_push(*extlist, vtmp))
+       if (!sk_CONF_VALUE_push(extlist, conf_value)) {
+               X509V3error(ERR_R_MALLOC_FAILURE);
                goto err;
+       }
+       conf_value = NULL;
 
-       return 1;
+       *out_extlist = extlist;
+       extlist = NULL;
+
+       ret = 1;
 
  err:
-       X509V3error(ERR_R_MALLOC_FAILURE);
-       X509V3_conf_free(vtmp);
-       if (free_exts != NULL) {
-               sk_CONF_VALUE_free(*extlist);
-               *extlist = NULL;
-       }
-       return 0;
+       if (extlist != *out_extlist)
+               sk_CONF_VALUE_pop_free(extlist, X509V3_conf_free);
+       X509V3_conf_free(conf_value);
+
+       return ret;
 }
 
 static int