]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
apps/app_dial: Fix crash on non-connect call paths for Privacy/Screening option 22/3822/1
authorMatt Jordan <mjordan@digium.com>
Sat, 3 Sep 2016 21:04:21 +0000 (16:04 -0500)
committerMatt Jordan <mjordan@digium.com>
Sat, 3 Sep 2016 21:04:21 +0000 (16:04 -0500)
In any scenario in which the callee is not connected to the caller, the
current code in app_dial will crash due to raising a Dial End Stasis
Message after the callee channel has been hung up. This patch corrects
the error by simply moving the explicit hangup of the callee (peer)
channel until after the dial end message.

ASTERISK-25691 #close

Change-Id: I816a414014424d0d8c80e2a3cbef13ef8c63798d

apps/app_dial.c

index de6fe1852dbd81dc3f56eef047d882bd749a8ce0..7b7c70201b3dcdf0e607aca604bf7c46ed83bb55 100644 (file)
@@ -1942,8 +1942,6 @@ static int do_privacy(struct ast_channel *chan, struct ast_channel *peer,
                }
                return 0; /* the good exit path */
        } else {
-               /* hang up on the callee -- he didn't want to talk anyway! */
-               ast_autoservice_chan_hangup_peer(chan, peer);
                return -1;
        }
 }
@@ -2800,6 +2798,8 @@ static int dial_exec_full(struct ast_channel *chan, const char *data, struct ast
                if ( (ast_test_flag64(&opts, OPT_PRIVACY) || ast_test_flag64(&opts, OPT_SCREENING)) && pa.privdb_val == AST_PRIVACY_UNKNOWN) {
                        if (do_privacy(chan, peer, &opts, opt_args, &pa)) {
                                ast_channel_publish_dial(chan, peer, NULL, pa.status);
+                               /* hang up on the callee -- he didn't want to talk anyway! */
+                               ast_autoservice_chan_hangup_peer(chan, peer);
                                res = 0;
                                goto out;
                        }