diff options
author | Scott Griepentrog <scott@griepentrog.com> | 2015-08-26 14:25:42 -0500 |
---|---|---|
committer | Scott Griepentrog <sgriepentrog@digium.com> | 2015-08-26 14:34:18 -0500 |
commit | 490db8ba944fc8e8c98d5c0b38d96aab65d7f416 (patch) | |
tree | 5b7faa6113ada13a9eb693522a015b867e78964c /channels/chan_pjsip.c | |
parent | 6b8734fe6890dfa4754b07eceaab52a4712297a9 (diff) |
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
Diffstat (limited to 'channels/chan_pjsip.c')
-rw-r--r-- | channels/chan_pjsip.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/channels/chan_pjsip.c b/channels/chan_pjsip.c index d3ba0a283..9603f0514 100644 --- a/channels/chan_pjsip.c +++ b/channels/chan_pjsip.c @@ -1811,9 +1811,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; |