From: Walter Doekes Date: Tue, 26 Feb 2013 19:36:30 +0000 (+0000) Subject: Correct RPID parsing for unquoted display-name. X-Git-Tag: 13.0.0-beta1~2059 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d33d9c178149373dbb5773271e09d1573454d52c;p=thirdparty%2Fasterisk.git Correct RPID parsing for unquoted display-name. Parsing Remote-Party-ID will now succeed if display-name is of the *(token LWS) kind and not just the quoted-string kind. Review: https://reviewboard.asterisk.org/r/2341/ ........ Merged revisions 382107 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 382108 from http://svn.asterisk.org/svn/asterisk/branches/11 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@382109 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 1808d92892..249672729d 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -17243,7 +17243,16 @@ static int get_rpid(struct sip_pvt *p, struct sip_request *oreq) return get_pai(p, req); } + /* + * RPID is not: + * rpid = (name-addr / addr-spec) *(SEMI rpi-token) + * But it is: + * rpid = [display-name] LAQUOT addr-spec RAQUOT *(SEMI rpi-token) + * Ergo, calling parse_name_andor_addr() on it wouldn't be + * correct because that would allow addr-spec style too. + */ start = tmp; + /* Quoted (note that we're not dealing with escapes properly) */ if (*start == '"') { *start++ = '\0'; end = strchr(start, '"'); @@ -17252,6 +17261,17 @@ static int get_rpid(struct sip_pvt *p, struct sip_request *oreq) *end++ = '\0'; cid_name = start; start = ast_skip_blanks(end); + /* Unquoted */ + } else { + cid_name = start; + start = end = strchr(start, '<'); + if (!start) { + return 0; + } + /* trim blanks if there are any. the mandatory NUL is done below */ + while (--end >= cid_name && *end < 33) { + *end = '\0'; + } } if (*start != '<')