From 9d8a093a94685789298d17130e7b3f49c01ed2ab Mon Sep 17 00:00:00 2001 From: George Joseph Date: Thu, 2 May 2019 12:29:49 -0600 Subject: [PATCH] res_pjsip: Check return from pjsip_parse_uri calls Updated ast_sip_create_rdata_with_contact and registrar_find_contact to check the return from pjsip_parse_uri before attempting to use the uri returned. ASTERISK-28402 Reported-by: Ross Beer Change-Id: I9810b3b163c45ed5a56ec743586e5ce107f13ba7 --- res/res_pjsip.c | 4 ++++ res/res_pjsip_registrar.c | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/res/res_pjsip.c b/res/res_pjsip.c index 7773549adf..ba029f3c11 100644 --- a/res/res_pjsip.c +++ b/res/res_pjsip.c @@ -3517,6 +3517,10 @@ int ast_sip_create_rdata_with_contact(pjsip_rx_data *rdata, char *packet, const if (contact_hdr) { contact_hdr->uri = pjsip_parse_uri(rdata->tp_info.pool, (char *)contact, strlen(contact), PJSIP_PARSE_URI_AS_NAMEADDR); + if (!contact_hdr->uri) { + ast_log(LOG_WARNING, "Unable to parse contact URI from '%s'.\n", contact); + return -1; + } } } diff --git a/res/res_pjsip_registrar.c b/res/res_pjsip_registrar.c index fa3e1f08cf..236d846cc7 100644 --- a/res/res_pjsip_registrar.c +++ b/res/res_pjsip_registrar.c @@ -129,6 +129,10 @@ static int registrar_find_contact(void *obj, void *arg, int flags) } contact_uri = pjsip_parse_uri(details->pool, (char*)contact->uri, strlen(contact->uri), 0); + if (!contact_uri) { + ast_log(LOG_WARNING, "Unable to parse contact URI from '%s'.\n", contact->uri); + return 0; + } return (pjsip_uri_cmp(PJSIP_URI_IN_CONTACT_HDR, details->uri, contact_uri) == PJ_SUCCESS) ? CMP_MATCH : 0; }