]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
If the channels acquired using the manager Redirect action are not up, then
authorRussell Bryant <russell@russellbryant.com>
Wed, 7 Mar 2007 00:20:13 +0000 (00:20 +0000)
committerRussell Bryant <russell@russellbryant.com>
Wed, 7 Mar 2007 00:20:13 +0000 (00:20 +0000)
don't attempt to do anything with them.  It could lead to weird behavior,
including crashes.  (issue #8977)

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@58164 65c4cc65-6c06-0410-ace0-fbb531ad65f3

manager.c

index d3488db7f74b0ae068dfa6e9442cfc19d1139e1b..b2ea39b0026ca799441bb0d6a6e102dc87308df1 100644 (file)
--- a/manager.c
+++ b/manager.c
@@ -879,6 +879,11 @@ static int action_redirect(struct mansession *s, struct message *m)
                return 0;
        }
        chan = ast_get_channel_by_name_locked(name);
+       if (chan->_state != AST_STATE_UP) {
+               astman_send_error(s, m, "Redirect failed, channel not up.\n");
+               ast_mutex_unlock(&chan->lock);
+               return 0;
+       }
        if (!chan) {
                char buf[BUFSIZ];
                snprintf(buf, sizeof(buf), "Channel does not exist: %s", name);
@@ -887,6 +892,12 @@ static int action_redirect(struct mansession *s, struct message *m)
        }
        if (!ast_strlen_zero(name2))
                chan2 = ast_get_channel_by_name_locked(name2);
+       if (chan2 && chan2->_state != AST_STATE_UP) {
+               astman_send_error(s, m, "Redirect failed, extra channel not up.\n");
+               ast_mutex_unlock(&chan->lock);
+               ast_mutex_unlock(&chan2->lock);
+               return 0;
+       }
        res = ast_async_goto(chan, context, exten, pi);
        if (!res) {
                if (!ast_strlen_zero(name2)) {