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) {