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)
This commit is contained in:
Neil Horman
2026-02-27 14:20:37 -05:00
parent 938c59fa2c
commit aec9e7fe16
+12 -7
View File
@@ -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) {