mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-30 02:26:23 +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 x;
|
||||||
int len = strlen(name);
|
int len = strlen(name);
|
||||||
char *r;
|
char *r;
|
||||||
for (x=*start;x<req->headers;x++) {
|
if (pedanticsipchecking) {
|
||||||
if (!strncasecmp(req->header[x], name, len) &&
|
/* Technically you can place arbitrary whitespace both before and after the ':' in
|
||||||
(req->header[x][len] == ':')) {
|
a header, although RFC3261 clearly says you shouldn't before, and place just
|
||||||
r = req->header[x] + len + 1;
|
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))
|
while(*r && (*r < 33))
|
||||||
r++;
|
r++;
|
||||||
*start = x+1;
|
*start = x+1;
|
||||||
return r;
|
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 */
|
/* Try aliases */
|
||||||
|
Reference in New Issue
Block a user