From b8535184c3131e5c3f5e25d4a9e0a37485f3957d Mon Sep 17 00:00:00 2001 From: Donat Zenichev Date: Fri, 16 Jan 2026 14:34:34 +0100 Subject: [PATCH] MT#63826 db_redis: revert support of NULL values db_redis module implicitly supports conversion of key values into empty "" strings. Remove empty-string/zero-length guards introduced previously, because they break this behavior. E.g.: dialog and usrloc modules can in fact handle key values. Additionally: introduce the memcpy() guard. Change-Id: I96515b8a4dfea6eef16a05b5d9f970946a9fc915 (cherry picked from commit 743265a8c42b2ce8ebef4048cc42845c81e696ef) --- debian/patches/series | 2 ++ .../db_redis_support_null_key_values.patch | 31 +++++++++++++++++++ 2 files changed, 33 insertions(+) create mode 100644 debian/patches/sipwise/db_redis_support_null_key_values.patch diff --git a/debian/patches/series b/debian/patches/series index 6ce00a453..c64a8189b 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -46,6 +46,8 @@ sipwise/presence_offline_cleanup.patch sipwise/permissions-don-t-allow-reloads-in-the-middle-of-ong.patch sipwise/dlg_get_var_error_more_verbose_on_dlg sipwise/db_redis_protect_length_overflow.patch +sipwise/db_redis_support_null_key_values.patch + ### Don't just put stuff in any order ### use gbp pq import/export tooling to help maintain patches ### diff --git a/debian/patches/sipwise/db_redis_support_null_key_values.patch b/debian/patches/sipwise/db_redis_support_null_key_values.patch new file mode 100644 index 000000000..f7a420609 --- /dev/null +++ b/debian/patches/sipwise/db_redis_support_null_key_values.patch @@ -0,0 +1,31 @@ +--- a/src/modules/db_redis/redis_table.c ++++ b/src/modules/db_redis/redis_table.c +@@ -32,11 +32,6 @@ int db_redis_key_add_string(redis_key_t + { + redis_key_t *k; + +- if (!entry || !len) { +- LM_ERR("Empty entry or zero length\n"); +- return -1; +- } +- + if (db_redis_max_key_len > 0 && len > db_redis_max_key_len) { + LM_ERR("Too big length for key being added: allowed '%u' / given '%zu'\n", + db_redis_max_key_len, len); +@@ -56,8 +51,14 @@ int db_redis_key_add_string(redis_key_t + goto err; + } + +- memcpy(k->key.s, entry, len); +- k->key.s[len] = '\0'; ++ /* run memcpy only on non-NULL pointer, because in fact it may happen ++ * it comes here empty and with len = 0, this is then an implicit ++ * conversion of redis key value into the empty "" string. ++ * see `db_redis_val2str()` ++ * This is the allowed behavior, but avoid then running memcpy() on it. */ ++ if (entry && len > 0) ++ memcpy(k->key.s, entry, len); ++ k->key.s[len] = '\0'; /* at least 1 byte is already pre-allocated before */ + k->key.len = len; + + if(!*list) {