aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormarkster <markster@f38db490-d61c-443f-a65b-d21fe96a405b>2004-09-10 02:03:05 +0000
committermarkster <markster@f38db490-d61c-443f-a65b-d21fe96a405b>2004-09-10 02:03:05 +0000
commit1598b09e629fb7311ea241e436136d60c9e183e2 (patch)
tree6b4e330d5cde427fc95146439b194c093a6b2fd1
parentbde3fc052f871b417d8461cf7f8a6a366595c777 (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
-rwxr-xr-xchannels/chan_sip.c34
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 */