From df349078da972b0ce0aa778d2c6a7b449a14f6e7 Mon Sep 17 00:00:00 2001 From: Mark Spencer Date: Thu, 2 Jun 2005 17:12:04 +0000 Subject: Fix dial to not seg when closing ')' is missing (bug #4410) git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@5812 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- apps/app_dial.c | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/apps/app_dial.c b/apps/app_dial.c index 021405858..12794ef76 100755 --- a/apps/app_dial.c +++ b/apps/app_dial.c @@ -820,19 +820,19 @@ static int dial_exec_full(struct ast_channel *chan, void *data, struct ast_flags dblgoto = ast_strdupa(mac + 2); while (*mac && (*mac != ')')) *(mac++) = 'X'; - if (*mac) + if (*mac) { *mac = 'X'; - else { + mac = strchr(dblgoto, ')'); + if (mac) + *mac = '\0'; + else { + ast_log(LOG_WARNING, "Goto flag set without trailing ')'\n"); + dblgoto = NULL; + } + } else { ast_log(LOG_WARNING, "Could not find exten to which we should jump.\n"); dblgoto = NULL; } - mac = strchr(dblgoto, ')'); - if (mac) - *mac = '\0'; - else { - ast_log(LOG_WARNING, "Goto flag set without trailing ')'\n"); - dblgoto = NULL; - } } /* Get the macroname from the dial option string */ @@ -841,19 +841,19 @@ static int dial_exec_full(struct ast_channel *chan, void *data, struct ast_flags macroname = ast_strdupa(mac + 2); while (*mac && (*mac != ')')) *(mac++) = 'X'; - if (*mac) + if (*mac) { *mac = 'X'; - else { + mac = strchr(macroname, ')'); + if (mac) + *mac = '\0'; + else { + ast_log(LOG_WARNING, "Macro flag set without trailing ')'\n"); + hasmacro = 0; + } + } else { ast_log(LOG_WARNING, "Could not find macro to which we should jump.\n"); hasmacro = 0; } - mac = strchr(macroname, ')'); - if (mac) - *mac = '\0'; - else { - ast_log(LOG_WARNING, "Macro flag set without trailing ')'\n"); - hasmacro = 0; - } } /* Get music on hold class */ if ((mac = strstr(transfer, "m("))) { @@ -898,8 +898,8 @@ static int dial_exec_full(struct ast_channel *chan, void *data, struct ast_flags } else if (strchr(transfer, 'C')) { resetcdr = 1; } else if (strchr(transfer, 'n')) { - nojump = 1; - } + nojump = 1; + } } if (resetcdr && chan->cdr) ast_cdr_reset(chan->cdr, 0); -- cgit v1.2.3