From: Steve Murphy Date: Thu, 17 Aug 2006 16:07:21 +0000 (+0000) Subject: In app_macro, changed the previously changed upper recursion depth limit to a variabl... X-Git-Tag: 1.2.11~14 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4098ad798d8cde852e603334993cdec06fea3bec;p=thirdparty%2Fasterisk.git In app_macro, changed the previously changed upper recursion depth limit to a variable, default of the original val of 7. MACRO_RECURSION is a channel variable that will override the limit, but until I can understand and fix why this limit is neccessary, I am not advertising this variable in the docs. This fix mirrors the changes made in r40200 in trunk. git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@40220 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/apps/app_macro.c b/apps/app_macro.c index 4fb3360257..43f11c6d20 100644 --- a/apps/app_macro.c +++ b/apps/app_macro.c @@ -102,7 +102,7 @@ static int macro_exec(struct ast_channel *chan, void *data) char pc[80], depthc[12]; char oldcontext[AST_MAX_CONTEXT] = ""; char *offsets; - int offset, depth; + 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;