]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Handle both pre- and post- whitespace if pedantic checking is on (bug #2411)
authorMark Spencer <markster@digium.com>
Fri, 10 Sep 2004 02:03:05 +0000 (02:03 +0000)
committerMark Spencer <markster@digium.com>
Fri, 10 Sep 2004 02:03:05 +0000 (02:03 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@3756 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_sip.c

index 0074eee7598985125a5579c14613f97fc27f9df3..c30e6adea5a877e5bc92d11a92c5d34bf3e11ae4 100755 (executable)
@@ -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 */