From 9650cb5f882a7639e4ad704b687ab57f6b6a7fa5 Mon Sep 17 00:00:00 2001 From: Kinsey Moore Date: Wed, 5 Mar 2014 19:21:39 +0000 Subject: [PATCH] bridge_native_rtp: Fix crash involving masquerade It is possible for a channel to be masqueraded out of a bridge which means it may no longer have RTP glue to check upon leaving said bridge. If this situation occurred (it's possible at least during dial and call pickup) then Asterisk would crash. This change makes sure the glue is checked before use. (closes issue AST-1290) Reported by: John Bigelow git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/12@409900 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- bridges/bridge_native_rtp.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/bridges/bridge_native_rtp.c b/bridges/bridge_native_rtp.c index 7edcfd71aa..02b094b311 100644 --- a/bridges/bridge_native_rtp.c +++ b/bridges/bridge_native_rtp.c @@ -452,9 +452,19 @@ static void native_rtp_bridge_leave(struct ast_bridge *bridge, struct ast_bridge native_rtp_bridge_framehook_detach(bridge_channel); glue = ast_rtp_instance_get_glue(ast_channel_tech(bridge_channel->chan)->type); + if (!glue) { + return; + } + glue->get_rtp_info(bridge_channel->chan, &instance); - glue->get_vrtp_info ? glue->get_vrtp_info(bridge_channel->chan, &vinstance) : AST_RTP_GLUE_RESULT_FORBID; - glue->get_trtp_info ? glue->get_trtp_info(bridge_channel->chan, &tinstance) : AST_RTP_GLUE_RESULT_FORBID; + + if (glue->get_vrtp_info) { + glue->get_vrtp_info(bridge_channel->chan, &vinstance); + } + + if (glue->get_trtp_info) { + glue->get_trtp_info(bridge_channel->chan, &tinstance); + } /* Tear down P2P bridges */ if (instance) {