]> git.ipfire.org Git - thirdparty/openssl.git/commitdiff
core_namemap.c: Use OPENSSL_STRING instead of defining STRING type
authorTomas Mraz <tomas@openssl.org>
Fri, 20 Dec 2024 16:20:04 +0000 (17:20 +0100)
committerTomas Mraz <tomas@openssl.org>
Tue, 31 Dec 2024 14:03:31 +0000 (15:03 +0100)
Also avoid leak if stack push fails.

Reviewed-by: Neil Horman <nhorman@openssl.org>
Reviewed-by: Paul Dale <ppzgs1@gmail.com>
(Merged from https://github.com/openssl/openssl/pull/26230)

(cherry picked from commit 0baa3ac736520c9457c5ef05614fdd54b8dc5515)

crypto/core_namemap.c

index ead9a38ad70fe39ff7158f81bc44d8fdd1c7b609..1083b14d79b479315103c103a6dcff8442327ead 100644 (file)
@@ -24,10 +24,8 @@ HT_END_KEY_DEFN(NAMENUM_KEY)
  * ==================
  */
 
-typedef char STRING;
-typedef STACK_OF(STRING) NAMES;
+typedef STACK_OF(OPENSSL_STRING) NAMES;
 
-DEFINE_STACK_OF(STRING)
 DEFINE_STACK_OF(NAMES)
 
 struct ossl_namemap_st {
@@ -49,7 +47,7 @@ static void name_string_free(char *name)
 
 static void names_free(NAMES *n)
 {
-    sk_STRING_pop_free(n, name_string_free);
+    sk_OPENSSL_STRING_pop_free(n, name_string_free);
 }
 
 /* OSSL_LIB_CTX_METHOD functions for a namemap stored in a library context */
@@ -125,17 +123,17 @@ int ossl_namemap_doall_names(const OSSL_NAMEMAP *namemap, int number,
 
     names = sk_NAMES_value(namemap->numnames, number - 1);
     if (names != NULL)
-        names = sk_STRING_dup(names);
+        names = sk_OPENSSL_STRING_dup(names);
 
     CRYPTO_THREAD_unlock(namemap->lock);
 
     if (names == NULL)
         return 0;
 
-    for (i = 0; i < sk_STRING_num(names); i++)
-        fn(sk_STRING_value(names, i), data);
+    for (i = 0; i < sk_OPENSSL_STRING_num(names); i++)
+        fn(sk_OPENSSL_STRING_value(names, i), data);
 
-    sk_STRING_free(names);
+    sk_OPENSSL_STRING_free(names);
     return i > 0;
 }
 
@@ -194,7 +192,7 @@ const char *ossl_namemap_num2name(const OSSL_NAMEMAP *namemap, int number,
 
     names = sk_NAMES_value(namemap->numnames, number - 1);
     if (names != NULL)
-        ret = sk_STRING_value(names, idx);
+        ret = sk_OPENSSL_STRING_value(names, idx);
 
     CRYPTO_THREAD_unlock(namemap->lock);
 
@@ -216,7 +214,7 @@ static int numname_insert(OSSL_NAMEMAP *namemap, int number,
         }
     } else {
         /* a completely new entry */
-        names = sk_STRING_new_null();
+        names = sk_OPENSSL_STRING_new_null();
         if (names == NULL)
             return 0;
     }
@@ -224,8 +222,9 @@ static int numname_insert(OSSL_NAMEMAP *namemap, int number,
     if ((tmpname = OPENSSL_strdup(name)) == NULL)
         goto err;
 
-    if (!sk_STRING_push(names, tmpname))
+    if (!sk_OPENSSL_STRING_push(names, tmpname))
         goto err;
+    tmpname = NULL;
 
     if (number <= 0) {
         if (!sk_NAMES_push(namemap->numnames, names))
@@ -236,7 +235,7 @@ static int numname_insert(OSSL_NAMEMAP *namemap, int number,
 
  err:
     if (number <= 0)
-        sk_STRING_free(names);
+        sk_OPENSSL_STRING_pop_free(names, name_string_free);
     OPENSSL_free(tmpname);
     return 0;
 }