[asterisk-commits] bweschke: branch 1.6.0 r150854 - in /branches/1.6.0: ./ main/manager.c
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Fri Oct 17 21:35:48 CDT 2008
Author: bweschke
Date: Fri Oct 17 21:35:47 2008
New Revision: 150854
URL: http://svn.digium.com/view/asterisk?view=rev&rev=150854
Log:
Merged revisions 150817 via svnmerge from
https://origsvn.digium.com/svn/asterisk/trunk
........
r150817 | bweschke | 2008-10-17 22:18:33 -0400 (Fri, 17 Oct 2008) | 8 lines
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
........
Modified:
branches/1.6.0/ (props changed)
branches/1.6.0/main/manager.c
Propchange: branches/1.6.0/
------------------------------------------------------------------------------
Binary property 'trunk-merged' - no diff available.
Modified: branches/1.6.0/main/manager.c
URL: http://svn.digium.com/view/asterisk/branches/1.6.0/main/manager.c?view=diff&rev=150854&r1=150853&r2=150854
==============================================================================
--- branches/1.6.0/main/manager.c (original)
+++ branches/1.6.0/main/manager.c Fri Oct 17 21:35:47 2008
@@ -1719,7 +1719,15 @@
}
if (varname[strlen(varname) - 1] == ')') {
- ast_func_read(c, (char *) varname, workspace, sizeof(workspace));
+ if (!c) {
+ c = ast_channel_alloc(0, 0, "", "", "", "", "", 0, "Bogus/%p", NULL);
+ if (c) {
+ ast_func_read(c, (char *) varname, 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, (char *) varname, workspace, sizeof(workspace));
varval = workspace;
} else {
pbx_retrieve_variable(c, varname, &varval, workspace, sizeof(workspace), NULL);
More information about the asterisk-commits
mailing list