Using the GetVar handler in AMI is potentially dangerous (insta-crash [tm]) when you use a dialplan function that requires a channel and then you don't provide one or provide an invalid one in the Channel: parameter. We'll handle this situation exactly the same way it was handled in pbx.c back on r61766.

We'll create a bogus channel for the function call and destroy it when we're done. If we have trouble allocating the bogus channel then we're not going to try executing the function call at all and run the risk of crashing.
 (closes issue #13715)
 reported by: makoto
 patch by: bweschke


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@150816 65c4cc65-6c06-0410-ace0-fbb531ad65f3
1.4
BJ Weschke 17 years ago
parent 8f30902385
commit 4ac62c324b

@ -1499,8 +1499,15 @@ static int action_getvar(struct mansession *s, const struct message *m)
if (varname[strlen(varname) - 1] == ')') {
char *copy = ast_strdupa(varname);
ast_func_read(c, copy, workspace, sizeof(workspace));
if (!c) {
c = ast_channel_alloc(0, 0, "", "", "", "", "", 0, "Bogus/%p", NULL);
if (c) {
ast_func_read(c, copy, workspace, sizeof(workspace));
ast_channel_free(c);
} else
ast_log(LOG_ERROR, "Unable to allocate bogus channel for variable substitution. Function results may be blank.\n");
} else
ast_func_read(c, copy, workspace, sizeof(workspace));
varval = workspace;
} else {
pbx_retrieve_variable(c, varname, &varval, workspace, sizeof(workspace), NULL);

Loading…
Cancel
Save