summaryrefslogtreecommitdiff
path: root/channels/chan_pjsip.c
diff options
context:
space:
mode:
authorScott Griepentrog <scott@griepentrog.com>2015-08-26 14:25:42 -0500
committerScott Griepentrog <sgriepentrog@digium.com>2015-08-26 14:34:18 -0500
commit490db8ba944fc8e8c98d5c0b38d96aab65d7f416 (patch)
tree5b7faa6113ada13a9eb693522a015b867e78964c /channels/chan_pjsip.c
parent6b8734fe6890dfa4754b07eceaab52a4712297a9 (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.c14
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;