]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Chaos: make hangup NULL tolerant 46/1146/1
authorScott Griepentrog <scott@griepentrog.com>
Wed, 26 Aug 2015 19:25:42 +0000 (14:25 -0500)
committerScott Griepentrog <sgriepentrog@digium.com>
Wed, 26 Aug 2015 20:19:20 +0000 (15:19 -0500)
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

index bb79e84a50578fa0a3f8c234b42bbecac532d338..49995a2f81e3aeed00e29a42f9f15d2353c430d0 100644 (file)
@@ -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;