summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSean Bright <sean.bright@gmail.com>2017-03-21 09:26:28 -0400
committerSean Bright <sean.bright@gmail.com>2017-03-21 10:44:30 -0400
commitb3cc20799bcdd2114026ec943e6879434116406b (patch)
tree01420a7ba196622d9247762cd8e93373b4f6cdd4
parentfdea3698527495c940e03a45df03621c7a9a876c (diff)
res_pjsip_messaging: Check URI type before dereferencing
We aren't validating that the URI we just parsed is a SIP/SIPS one before trying to access the user, host, and port members of a possibly uninitialized structure. Also update the MessageSend documentation to indicate what 'from' formats are accepted. ASTERISK-26484 #close Reported by: Vinod Dharashive Change-Id: I476b5cc5f18a7713d0ee945374f2a1c164857d30
-rw-r--r--main/message.c6
-rw-r--r--res/res_pjsip_messaging.c10
2 files changed, 13 insertions, 3 deletions
diff --git a/main/message.c b/main/message.c
index 594853f3f..be0035d30 100644
--- a/main/message.c
+++ b/main/message.c
@@ -127,8 +127,10 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
</parameter>
<parameter name="from" required="false">
<para>A From URI for the message if needed for the
- message technology being used to send this message.</para>
- <xi:include xpointer="xpointer(/docs/info[@name='MessageFromInfo'])" />
+ message technology being used to send this message. This can be a
+ SIP(S) URI, such as <literal>Alice &lt;sip:alice@atlanta.com&gt;</literal>,
+ a string in the format <literal>alice@atlanta.com</literal>, or simply
+ a username such as <literal>alice</literal>.</para>
</parameter>
</syntax>
<description>
diff --git a/res/res_pjsip_messaging.c b/res/res_pjsip_messaging.c
index 835a38393..8b465e007 100644
--- a/res/res_pjsip_messaging.c
+++ b/res/res_pjsip_messaging.c
@@ -235,7 +235,15 @@ static void update_from(pjsip_tx_data *tdata, char *from)
parsed_name_addr = (pjsip_name_addr *) pjsip_parse_uri(tdata->pool, from,
strlen(from), PJSIP_PARSE_URI_AS_NAMEADDR);
if (parsed_name_addr) {
- pjsip_sip_uri *parsed_uri = pjsip_uri_get_uri(parsed_name_addr->uri);
+ pjsip_sip_uri *parsed_uri;
+
+ if (!PJSIP_URI_SCHEME_IS_SIP(parsed_name_addr->uri)
+ && !PJSIP_URI_SCHEME_IS_SIPS(parsed_name_addr->uri)) {
+ ast_log(LOG_WARNING, "From address '%s' is not a valid SIP/SIPS URI\n", from);
+ return;
+ }
+
+ parsed_uri = pjsip_uri_get_uri(parsed_name_addr->uri);
if (pj_strlen(&parsed_name_addr->display)) {
pj_strdup(tdata->pool, &name_addr->display, &parsed_name_addr->display);