|
|
|
@ -101,8 +101,8 @@ static int macro_exec(struct ast_channel *chan, void *data)
|
|
|
|
|
int oldpriority;
|
|
|
|
|
char pc[80], depthc[12];
|
|
|
|
|
char oldcontext[AST_MAX_CONTEXT] = "";
|
|
|
|
|
char *offsets;
|
|
|
|
|
int offset, depth;
|
|
|
|
|
char *offsets, *s;
|
|
|
|
|
int offset, depth = 0, maxdepth = 7;
|
|
|
|
|
int setmacrocontext=0;
|
|
|
|
|
int autoloopflag, dead = 0;
|
|
|
|
|
|
|
|
|
@ -119,6 +119,11 @@ static int macro_exec(struct ast_channel *chan, void *data)
|
|
|
|
|
|
|
|
|
|
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 */
|
|
|
|
|
tmp = pbx_builtin_getvar_helper(chan, "MACRO_DEPTH");
|
|
|
|
|
if (tmp) {
|
|
|
|
@ -127,7 +132,7 @@ static int macro_exec(struct ast_channel *chan, void *data)
|
|
|
|
|
depth = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (depth >= 20) {
|
|
|
|
|
if (depth >= maxdepth) {
|
|
|
|
|
ast_log(LOG_ERROR, "Macro(): possible infinite loop detected. Returning early.\n");
|
|
|
|
|
LOCAL_USER_REMOVE(u);
|
|
|
|
|
return 0;
|
|
|
|
|