From 490db8ba944fc8e8c98d5c0b38d96aab65d7f416 Mon Sep 17 00:00:00 2001
From: Scott Griepentrog <scott@griepentrog.com>
Date: Wed, 26 Aug 2015 14:25:42 -0500
Subject: [PATCH] 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
---
 channels/chan_pjsip.c | 14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

diff --git a/channels/chan_pjsip.c b/channels/chan_pjsip.c
index d3ba0a2837..9603f05145 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;
-- 
GitLab