diff options
author | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2004-09-10 02:03:05 +0000 |
---|---|---|
committer | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2004-09-10 02:03:05 +0000 |
commit | 1598b09e629fb7311ea241e436136d60c9e183e2 (patch) | |
tree | 6b4e330d5cde427fc95146439b194c093a6b2fd1 /channels | |
parent | bde3fc052f871b417d8461cf7f8a6a366595c777 (diff) |
Handle both pre- and post- whitespace if pedantic checking is on (bug #2411)
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@3756 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'channels')
-rwxr-xr-x | channels/chan_sip.c | 34 |
1 files changed, 29 insertions, 5 deletions
diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 0074eee75..c30e6adea 100755 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -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 */ |