mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-19 11:42:27 +00:00
automerge commit
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@40253 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -101,8 +101,8 @@ static int macro_exec(struct ast_channel *chan, void *data)
|
|||||||
int oldpriority;
|
int oldpriority;
|
||||||
char pc[80], depthc[12];
|
char pc[80], depthc[12];
|
||||||
char oldcontext[AST_MAX_CONTEXT] = "";
|
char oldcontext[AST_MAX_CONTEXT] = "";
|
||||||
char *offsets;
|
char *offsets, *s;
|
||||||
int offset, depth;
|
int offset, depth = 0, maxdepth = 7;
|
||||||
int setmacrocontext=0;
|
int setmacrocontext=0;
|
||||||
int autoloopflag, dead = 0;
|
int autoloopflag, dead = 0;
|
||||||
|
|
||||||
@@ -119,6 +119,11 @@ static int macro_exec(struct ast_channel *chan, void *data)
|
|||||||
|
|
||||||
LOCAL_USER_ADD(u);
|
LOCAL_USER_ADD(u);
|
||||||
|
|
||||||
|
/* does the user want a deeper rabbit hole? */
|
||||||
|
s = pbx_builtin_getvar_helper(chan, "MACRO_RECURSION");
|
||||||
|
if (s)
|
||||||
|
sscanf(s, "%d", &maxdepth);
|
||||||
|
|
||||||
/* Count how many levels deep the rabbit hole goes */
|
/* Count how many levels deep the rabbit hole goes */
|
||||||
tmp = pbx_builtin_getvar_helper(chan, "MACRO_DEPTH");
|
tmp = pbx_builtin_getvar_helper(chan, "MACRO_DEPTH");
|
||||||
if (tmp) {
|
if (tmp) {
|
||||||
@@ -127,7 +132,7 @@ static int macro_exec(struct ast_channel *chan, void *data)
|
|||||||
depth = 0;
|
depth = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (depth >= 20) {
|
if (depth >= maxdepth) {
|
||||||
ast_log(LOG_ERROR, "Macro(): possible infinite loop detected. Returning early.\n");
|
ast_log(LOG_ERROR, "Macro(): possible infinite loop detected. Returning early.\n");
|
||||||
LOCAL_USER_REMOVE(u);
|
LOCAL_USER_REMOVE(u);
|
||||||
return 0;
|
return 0;
|
||||||
|
@@ -3196,7 +3196,8 @@ int ast_setstate(struct ast_channel *chan, int state)
|
|||||||
|
|
||||||
chan->_state = state;
|
chan->_state = state;
|
||||||
ast_device_state_changed_literal(chan->name);
|
ast_device_state_changed_literal(chan->name);
|
||||||
manager_event(EVENT_FLAG_CALL, "Newstate",
|
manager_event(EVENT_FLAG_CALL,
|
||||||
|
(oldstate == AST_STATE_DOWN) ? "Newchannel" : "Newstate",
|
||||||
"Channel: %s\r\n"
|
"Channel: %s\r\n"
|
||||||
"State: %s\r\n"
|
"State: %s\r\n"
|
||||||
"CallerID: %s\r\n"
|
"CallerID: %s\r\n"
|
||||||
|
@@ -44,11 +44,12 @@ static char *builtin_function_cdr_read(struct ast_channel *chan, char *cmd, char
|
|||||||
int argc;
|
int argc;
|
||||||
char *argv[2];
|
char *argv[2];
|
||||||
int recursive = 0;
|
int recursive = 0;
|
||||||
|
struct ast_cdr *cdr = chan->cdr;
|
||||||
|
|
||||||
if (ast_strlen_zero(data))
|
if (ast_strlen_zero(data))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if (!chan->cdr)
|
if (!cdr)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
mydata = ast_strdupa(data);
|
mydata = ast_strdupa(data);
|
||||||
@@ -61,7 +62,11 @@ static char *builtin_function_cdr_read(struct ast_channel *chan, char *cmd, char
|
|||||||
recursive = 1;
|
recursive = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
ast_cdr_getvar(chan->cdr, argv[0], &ret, buf, len, recursive);
|
/* Find last entry */
|
||||||
|
while (cdr->next)
|
||||||
|
cdr = cdr->next;
|
||||||
|
|
||||||
|
ast_cdr_getvar(cdr, argv[0], &ret, buf, len, recursive);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user