[Asterisk-code-review] res_fax: Don't start a gateway if either channel is hung up (asterisk[13])
George Joseph
asteriskteam at digium.com
Thu Jun 4 07:57:03 CDT 2020
George Joseph has uploaded this change for review. ( https://gerrit.asterisk.org/c/asterisk/+/14460 )
Change subject: res_fax: Don't start a gateway if either channel is hung up
......................................................................
res_fax: Don't start a gateway if either channel is hung up
If a channel is hung up when the fax_gateway_framehook is called
and a gateway hasn't already been started, a segfault will occur
when the framehook tries to get the t38 state.
* Added a check of hangup cause for both the channel and peer
channel before starting a fax gateway.
* Added a check for NULL channel tech to chan_pjsip_queryoption
so we don't attempt to reference a channel tech that's already
gone.
ASTERISK-28923
Reported by: Yury Kirsanov
Change-Id: I4e10e63b667bbb68c1c8623f977488f5d807897c
---
M channels/chan_pjsip.c
M res/res_fax.c
2 files changed, 15 insertions(+), 3 deletions(-)
git pull ssh://gerrit.asterisk.org:29418/asterisk refs/changes/60/14460/1
diff --git a/channels/chan_pjsip.c b/channels/chan_pjsip.c
index 79e7c6e..74392c4 100644
--- a/channels/chan_pjsip.c
+++ b/channels/chan_pjsip.c
@@ -1116,14 +1116,17 @@
static int chan_pjsip_queryoption(struct ast_channel *ast, int option, void *data, int *datalen)
{
struct ast_sip_channel_pvt *channel = ast_channel_tech_pvt(ast);
- struct ast_sip_session *session = channel->session;
int res = -1;
enum ast_t38_state state = T38_STATE_UNAVAILABLE;
+ if (!channel) {
+ return -1;
+ }
+
switch (option) {
case AST_OPTION_T38_STATE:
- if (session->endpoint->media.t38.enabled) {
- switch (session->t38state) {
+ if (channel->session->endpoint->media.t38.enabled) {
+ switch (channel->session->t38state) {
case T38_LOCAL_REINVITE:
case T38_PEER_REINVITE:
state = T38_STATE_NEGOTIATING;
diff --git a/res/res_fax.c b/res/res_fax.c
index 1b51dbf..45684c7 100644
--- a/res/res_fax.c
+++ b/res/res_fax.c
@@ -3442,6 +3442,15 @@
if (!gateway->bridged) {
enum ast_t38_state state_chan;
enum ast_t38_state state_peer;
+ int hangupcause_chan;
+ int hangupcause_peer;
+
+ hangupcause_chan = ast_channel_hangupcause(chan);
+ hangupcause_peer = ast_channel_hangupcause(peer);
+ /* Don't start a gateway if either channel is hung up */
+ if (hangupcause_chan > 0 || hangupcause_peer > 0) {
+ return f;
+ }
ast_channel_unlock(chan);
state_chan = ast_channel_get_t38_state(chan);
--
To view, visit https://gerrit.asterisk.org/c/asterisk/+/14460
To unsubscribe, or for help writing mail filters, visit https://gerrit.asterisk.org/settings
Gerrit-Project: asterisk
Gerrit-Branch: 13
Gerrit-Change-Id: I4e10e63b667bbb68c1c8623f977488f5d807897c
Gerrit-Change-Number: 14460
Gerrit-PatchSet: 1
Gerrit-Owner: George Joseph <gjoseph at digium.com>
Gerrit-MessageType: newchange
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.digium.com/pipermail/asterisk-code-review/attachments/20200604/dbf3c75d/attachment-0001.html>
More information about the asterisk-code-review
mailing list