mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-29 18:19:30 +00:00
Handle both pre- and post- whitespace if pedantic checking is on (bug #2411)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@3756 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -2165,14 +2165,38 @@ static char *__get_header(struct sip_request *req, char *name, int *start)
|
||||
int x;
|
||||
int len = strlen(name);
|
||||
char *r;
|
||||
for (x=*start;x<req->headers;x++) {
|
||||
if (!strncasecmp(req->header[x], name, len) &&
|
||||
(req->header[x][len] == ':')) {
|
||||
r = req->header[x] + len + 1;
|
||||
if (pedanticsipchecking) {
|
||||
/* Technically you can place arbitrary whitespace both before and after the ':' in
|
||||
a header, although RFC3261 clearly says you shouldn't before, and place just
|
||||
one afterwards. If you shouldn't do it, what absolute idiot decided it was
|
||||
a good idea to say you can do it, and if you can do it, why in the hell would
|
||||
you say you shouldn't. */
|
||||
for (x=*start;x<req->headers;x++) {
|
||||
if (!strncasecmp(req->header[x], name, len)) {
|
||||
r = req->header[x] + len;
|
||||
while(*r && (*r < 33))
|
||||
r++;
|
||||
if (*r == ':') {
|
||||
r++ ;
|
||||
while(*r && (*r < 33))
|
||||
r++;
|
||||
r++;
|
||||
*start = x+1;
|
||||
return r;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
/* We probably shouldn't even bother counting whitespace afterwards but
|
||||
I guess for backwards compatibility we will */
|
||||
for (x=*start;x<req->headers;x++) {
|
||||
if (!strncasecmp(req->header[x], name, len) &&
|
||||
(req->header[x][len] == ':')) {
|
||||
r = req->header[x] + len + 1;
|
||||
while(*r && (*r < 33))
|
||||
r++;
|
||||
*start = x+1;
|
||||
return r;
|
||||
}
|
||||
}
|
||||
}
|
||||
/* Try aliases */
|
||||
|
Reference in New Issue
Block a user