From 646789106fb248104c86db60ffb1be75c5f3c5b7 Mon Sep 17 00:00:00 2001 From: Sean Bright Date: Wed, 29 Jan 2020 09:57:38 -0500 Subject: [PATCH] res_config_odbc: Preserve empty strings returned by the database When res_config_odbc (and perhaps other realtime backends) reads a SQL NULL from the database, it coalesces the value to the empty string which prevents it from being returned to the realtime core. However, if it instead reads the empty string from the database, it needs a way to encode that fact without having the value omitted entirely. It does this by changing the value to a string with a single space. The realtime code in main/config.c recognizes this special case and _turns the string back into the empty string_ before passing it to realtime API consumers. For all of this to work, we need to ensure that we actually pass the single-space-string back to the realtime core, which is currently failing because we are trimming the value before checking its content. So instead we now special case the single-space-string case so that empty values are returned properly. ASTERISK-28719 #close Reported by: EDV O-TON Change-Id: I673ed8c31ad037aa224e80c78c7a1dc4e4a4e3de --- res/res_config_odbc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/res/res_config_odbc.c b/res/res_config_odbc.c index fd0078f22a..45bb2141d7 100644 --- a/res/res_config_odbc.c +++ b/res/res_config_odbc.c @@ -303,7 +303,7 @@ static struct ast_variable *realtime_odbc(const char *database, const char *tabl } else { while (stringp) { chunk = strsep(&stringp, ";"); - if (!ast_strlen_zero(ast_strip(chunk))) { + if (!strcmp(chunk, " ") || !ast_strlen_zero(ast_strip(chunk))) { if (strchr(chunk, '^')) { decode_chunk(chunk); }