diff options
author | Terry Wilson <twilson@digium.com> | 2012-06-22 20:05:22 +0000 |
---|---|---|
committer | Terry Wilson <twilson@digium.com> | 2012-06-22 20:05:22 +0000 |
commit | 9cdc5468e7138aeefe48ed33c3d6ffdbd5eb932a (patch) | |
tree | 32078e570592c9e5cce6d82325c0b7c9432b67d3 /channels | |
parent | eaf8d8a0d845b9949e43a6999f333dd59a47330d (diff) |
Don't crash on a guest directmedia call
A sip_pvt may not have relatedpeer set if a call doesn't match up
with a peer. If there is no relatedpeer, there is no direct media
ACL to apply, so just return that it is allowed.
(closes issue ASTERISK-20040)
Reported by: Terry Wilson
........
Merged revisions 369214 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........
Merged revisions 369215 from http://svn.asterisk.org/svn/asterisk/branches/10
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@369217 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'channels')
-rw-r--r-- | channels/chan_sip.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/channels/chan_sip.c b/channels/chan_sip.c index fa889d86d..540dae1d5 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -30842,17 +30842,17 @@ static int sip_allow_anyrtp_remote(struct ast_channel *chan1, struct ast_channel } sip_pvt_lock(p2); - if (p2->relatedpeer->directmediaha) { + if (p2->relatedpeer && p2->relatedpeer->directmediaha) { p2_directmediaha = ast_duplicate_ha_list(p2->relatedpeer->directmediaha); } sip_pvt_unlock(p2); sip_pvt_lock(p1); - if (p1->relatedpeer->directmediaha) { + if (p1->relatedpeer && p1->relatedpeer->directmediaha) { p1_directmediaha = ast_duplicate_ha_list(p1->relatedpeer->directmediaha); } - if (ast_test_flag(&p1->flags[0], SIP_DIRECT_MEDIA)) { + if (p2_directmediaha && ast_test_flag(&p1->flags[0], SIP_DIRECT_MEDIA)) { if (!apply_directmedia_ha(p1, p2_directmediaha, rtptype)) { res = 0; } @@ -30864,7 +30864,7 @@ static int sip_allow_anyrtp_remote(struct ast_channel *chan1, struct ast_channel } sip_pvt_lock(p2); - if (ast_test_flag(&p2->flags[0], SIP_DIRECT_MEDIA)) { + if (p1_directmediaha && ast_test_flag(&p2->flags[0], SIP_DIRECT_MEDIA)) { if (!apply_directmedia_ha(p2, p1_directmediaha, rtptype)) { res = 0; } |