mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-25 15:08:53 +00:00
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
This commit is contained in:
@@ -17243,7 +17243,16 @@ static int get_rpid(struct sip_pvt *p, struct sip_request *oreq)
|
|||||||
return get_pai(p, req);
|
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;
|
start = tmp;
|
||||||
|
/* Quoted (note that we're not dealing with escapes properly) */
|
||||||
if (*start == '"') {
|
if (*start == '"') {
|
||||||
*start++ = '\0';
|
*start++ = '\0';
|
||||||
end = strchr(start, '"');
|
end = strchr(start, '"');
|
||||||
@@ -17252,6 +17261,17 @@ static int get_rpid(struct sip_pvt *p, struct sip_request *oreq)
|
|||||||
*end++ = '\0';
|
*end++ = '\0';
|
||||||
cid_name = start;
|
cid_name = start;
|
||||||
start = ast_skip_blanks(end);
|
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 != '<')
|
if (*start != '<')
|
||||||
|
Reference in New Issue
Block a user