Commit aec9e7fe16 for openssl.org
commit aec9e7fe1693967c2d12a5b88f17eb58431d2ddc
Author: Neil Horman <nhorman@openssl.org>
Date: Fri Feb 27 14:20:37 2026 -0500
Allow core_namemap to limit hashtable key sizes
Now that we can dynamically size keys for our hashtable, take advantage
of that in core_namemap.
Reviewed-by: Saša NedvÄ›dický <sashan@openssl.org>
Reviewed-by: Paul Dale <paul.dale@oracle.com>
Reviewed-by: Nikola Pajkovsky <nikolap@openssl.org>
MergeDate: Tue Mar 3 13:23:03 2026
(Merged from https://github.com/openssl/openssl/pull/30211)
diff --git a/crypto/core_namemap.c b/crypto/core_namemap.c
index ab3d720598..32e11e6ab9 100644
--- a/crypto/core_namemap.c
+++ b/crypto/core_namemap.c
@@ -16,8 +16,9 @@
#define NAMEMAP_HT_BUCKETS 512
+#define NAMEMAP_NAME_LEN 64
HT_START_KEY_DEFN(namenum_key)
-HT_DEF_KEY_FIELD_CHAR_ARRAY(name, 64)
+HT_DEF_KEY_FIELD_CHAR_ARRAY(name, NAMEMAP_NAME_LEN)
HT_END_KEY_DEFN(NAMENUM_KEY)
/*-
@@ -152,8 +153,8 @@ int ossl_namemap_name2num(const OSSL_NAMEMAP *namemap, const char *name)
if (namemap == NULL)
return 0;
- HT_INIT_KEY(&key);
- HT_SET_KEY_STRING_CASE(&key, name, name);
+ HT_INIT_RAW_KEY(&key);
+ HT_COPY_RAW_KEY_CASE(TO_HT_KEY(&key), name, (int)strlen(name));
val = ossl_ht_get(namemap->namenum_ht, TO_HT_KEY(&key));
@@ -179,8 +180,11 @@ int ossl_namemap_name2num_n(const OSSL_NAMEMAP *namemap,
if (namemap == NULL)
return 0;
- HT_INIT_KEY(&key);
- HT_SET_KEY_STRING_CASE_N(&key, name, name, (int)name_len);
+ if (name_len > NAMEMAP_NAME_LEN)
+ name_len = NAMEMAP_NAME_LEN;
+
+ HT_INIT_RAW_KEY(&key);
+ HT_COPY_RAW_KEY_CASE(TO_HT_KEY(&key), name, (int)name_len);
val = ossl_ht_get(namemap->namenum_ht, TO_HT_KEY(&key));
@@ -271,8 +275,9 @@ static int namemap_add_name(OSSL_NAMEMAP *namemap, int number,
/* Using tsan_store alone here is safe since we're under lock */
tsan_store(&namemap->max_number, number);
- HT_INIT_KEY(&key);
- HT_SET_KEY_STRING_CASE(&key, name, name);
+ HT_INIT_RAW_KEY(&key);
+ HT_COPY_RAW_KEY_CASE(TO_HT_KEY(&key), name, (int)strlen(name));
+
val.value = (void *)(intptr_t)number;
ret = ossl_ht_insert(namemap->namenum_ht, TO_HT_KEY(&key), &val, NULL);
if (ret <= 0) {