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:05:32 +0000 (17:05 -0400)
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 dcfadf4..0df9f72 100644 (file)
@@ -18669,6 +18669,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;