Merged revisions 58165 via svnmerge from
authorRussell Bryant <russell@russellbryant.com>
Wed, 7 Mar 2007 00:26:01 +0000 (00:26 +0000)
committerRussell Bryant <russell@russellbryant.com>
Wed, 7 Mar 2007 00:26:01 +0000 (00:26 +0000)
https://origsvn.digium.com/svn/asterisk/branches/1.4

................
r58165 | russell | 2007-03-06 18:25:19 -0600 (Tue, 06 Mar 2007) | 12 lines

Merged revisions 58164 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.2

........
r58164 | russell | 2007-03-06 18:20:13 -0600 (Tue, 06 Mar 2007) | 4 lines

If the channels acquired using the manager Redirect action are not up, then
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/trunk@58166 65c4cc65-6c06-0410-ace0-fbb531ad65f3

main/manager.c

index b342e67..bb3c647 100644 (file)
@@ -1682,8 +1682,19 @@ static int action_redirect(struct mansession *s, const struct message *m)
                astman_send_error(s, m, buf);
                return 0;
        }
+       if (chan->_state != AST_STATE_UP) {
+               astman_send_error(s, m, "Redirect failed, channel not up.\n");
+               ast_channel_unlock(chan);
+               return 0;
+       }
        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_channel_unlock(chan);
+               ast_channel_unlock(chan2);
+               return 0;
+       }
        res = ast_async_goto(chan, context, exten, pi);
        if (!res) {
                if (!ast_strlen_zero(name2)) {