mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-02 11:06:31 +00:00
func_strings.c: Prevent SEGV in HASH single-argument mode.
When in single-argument mode (very rarely used), a malformation of a column name (also very rare) could cause a NULL to be returned when retrieving the channel variable for that column. Passing that to strncat causes a SEGV. We now check for the NULL and print a warning message. Resolves: #1101
This commit is contained in:
@@ -1554,6 +1554,16 @@ static int hash_read(struct ast_channel *chan, const char *cmd, char *data, char
|
||||
for (i = 0; i < arg2.argc; i++) {
|
||||
snprintf(varname, sizeof(varname), HASH_FORMAT, arg.hashname, arg2.col[i]);
|
||||
varvalue = pbx_builtin_getvar_helper(chan, varname);
|
||||
/*
|
||||
* If the value is NULL, there was probably a malformation in the
|
||||
* column name (unbalanced quote, etc.) This makes everything
|
||||
* suspect so we should return nothing at all.
|
||||
*/
|
||||
if (!varvalue) {
|
||||
ast_log(LOG_WARNING, "No value found for '%s'\n", varname);
|
||||
*buf = '\0';
|
||||
return -1;
|
||||
}
|
||||
strncat(buf, varvalue, len - strlen(buf) - 1);
|
||||
strncat(buf, ",", len - strlen(buf) - 1);
|
||||
}
|
||||
|
Reference in New Issue
Block a user