]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
chan_sip: when getting sip pvt return failure if not found
authorScott Griepentrog <scott@griepentrog.com>
Wed, 6 Sep 2017 21:05:32 +0000 (17:05 -0400)
committerScott Griepentrog <scott@griepentrog.com>
Wed, 6 Sep 2017 21:13:27 +0000 (16:13 -0500)
In handle_request_invite, when processing a pickup, a call
is made to get_sip_pvt_from_replaces to locate the pvt for
the subscription. The pvt is assumed to be valid when zero
is returned indicating no error, and is dereferenced which
can cause a crash if it was not found.

This change checks the not found case and returns -1 which
allows the calling code to fail appropriately.

ASTERISK-27217 #close
Reported-by: Bryan Walters
Change-Id: I6bee92b8b8b85fcac3fd66f8c00ab18bc1765612

channels/chan_sip.c

index beaa3de0b1500dfb63084d3d13869a62d9736974..f6ca3c702cacf294ae3409979fdf6fbd521dda14 100644 (file)
@@ -18625,6 +18625,11 @@ static int get_sip_pvt_from_replaces(const char *callid, const char *totag,
                }
        }
 
+       if (!sip_pvt_ptr) {
+               /* return error if sip_pvt was not found */
+               return -1;
+       }
+
        /* If we're here sip_pvt_ptr has been copied to *out_pvt, prevent RAII_VAR cleanup */
        sip_pvt_ptr = NULL;