From: Scott Griepentrog Date: Wed, 26 Aug 2015 19:25:42 +0000 (-0500) Subject: Chaos: make hangup NULL tolerant X-Git-Tag: 13.6.0-rc1~69^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f1cd6366588c66dce5be66541ceb7f828fde3773;p=thirdparty%2Fasterisk.git Chaos: make hangup NULL tolerant In chan_pjsip_new, if allocation of the pvt structure fails, ast_hangup is called. But it was written to assume pvt was valid, and this change corrects that. ASTERISK-25323 Reported by: Scott Griepentrog Change-Id: I5f47860fe9cee4cd56abd3f79b108678ab72cc87 --- diff --git a/channels/chan_pjsip.c b/channels/chan_pjsip.c index bb79e84a50..49995a2f81 100644 --- a/channels/chan_pjsip.c +++ b/channels/chan_pjsip.c @@ -1762,9 +1762,17 @@ static int hangup(void *data) static int chan_pjsip_hangup(struct ast_channel *ast) { struct ast_sip_channel_pvt *channel = ast_channel_tech_pvt(ast); - struct chan_pjsip_pvt *pvt = channel->pvt; - int cause = hangup_cause2sip(ast_channel_hangupcause(channel->session->channel)); - struct hangup_data *h_data = hangup_data_alloc(cause, ast); + struct chan_pjsip_pvt *pvt; + int cause; + struct hangup_data *h_data; + + if (!channel || !channel->session) { + return -1; + } + + pvt = channel->pvt; + cause = hangup_cause2sip(ast_channel_hangupcause(channel->session->channel)); + h_data = hangup_data_alloc(cause, ast); if (!h_data) { goto failure;