From 4cf05e590461894a02ff84b2a69225a443b7085a Mon Sep 17 00:00:00 2001 From: mmichelson Date: Wed, 3 Dec 2008 18:41:28 +0000 Subject: Merged revisions 160626 via svnmerge from https://origsvn.digium.com/svn/asterisk/trunk ........ r160626 | mmichelson | 2008-12-03 12:37:46 -0600 (Wed, 03 Dec 2008) | 16 lines Add some safety measures when using gosub, especially when using the options for app_dial and app_queue to run a gosub when the call is answered. * Check for the existence of the gosub target in gosub_exec. If it is nonexistent, then this will cause errors when we attempt to actually run the gosub, including a definite memory leak and potential crashes. Return an error in this situation * Check the return value of pbx_exec in app_dial and app_queue before attempting to actually run the gosub routine. If there was an error, we should not attempt to run the gosub. * Change a '|' to a ',' in app_queue. * Add some extra curly braces where they had been missing previously. (closes issue #13548) Reported by: fiddur ........ git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.6.0@160627 f38db490-d61c-443f-a65b-d21fe96a405b --- apps/app_queue.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'apps/app_queue.c') diff --git a/apps/app_queue.c b/apps/app_queue.c index 80579a11e..875943580 100644 --- a/apps/app_queue.c +++ b/apps/app_queue.c @@ -3771,7 +3771,7 @@ static int try_calling(struct queue_ent *qe, const char *options, char *announce ast_log(LOG_WARNING, "asprintf() failed: %s\n", strerror(errno)); gosub_args = NULL; } - *gosub_argstart = '|'; + *gosub_argstart = ','; } else { if (asprintf(&gosub_args, "%s,s,1", gosubexec) < 0) { ast_log(LOG_WARNING, "asprintf() failed: %s\n", strerror(errno)); @@ -3780,14 +3780,15 @@ static int try_calling(struct queue_ent *qe, const char *options, char *announce } if (gosub_args) { res = pbx_exec(peer, app, gosub_args); - ast_pbx_run(peer); + if (!res) { + ast_pbx_run(peer); + } free(gosub_args); if (option_debug) ast_log(LOG_DEBUG, "Gosub exited with status %d\n", res); - } else + } else { ast_log(LOG_ERROR, "Could not Allocate string for Gosub arguments -- Gosub Call Aborted!\n"); - - res = 0; + } } else { ast_log(LOG_ERROR, "Could not find application Gosub\n"); res = -1; -- cgit v1.2.3