diff src/http/ngx_http_parse.c @ 52:0d75d65c642f NGINX_0_1_26

nginx 0.1.26 *) Change: the invalid client header lines are now ignored and logged at the info level. *) Change: the server name is also logged in error log. *) Feature: the ngx_http_auth_basic_module module and the auth_basic and auth_basic_user_file directives.
author Igor Sysoev <http://sysoev.ru>
date Tue, 22 Mar 2005 00:00:00 +0300
parents 72eb30262aac
children bcb5fce0b038
line wrap: on
line diff
--- a/src/http/ngx_http_parse.c
+++ b/src/http/ngx_http_parse.c
@@ -497,9 +497,10 @@ ngx_int_t ngx_http_parse_header_line(ngx
         sw_space_before_value,
         sw_value,
         sw_space_after_value,
+        sw_ignore_line,
+        sw_skip_line,
         sw_almost_done,
-        sw_header_almost_done,
-        sw_ignore_line
+        sw_header_almost_done
     } state;
 
     state = r->state;
@@ -511,6 +512,8 @@ ngx_int_t ngx_http_parse_header_line(ngx
 
         /* first char */
         case sw_start:
+            r->invalid_header = 0;
+
             switch (ch) {
             case CR:
                 r->header_end = p;
@@ -528,7 +531,7 @@ ngx_int_t ngx_http_parse_header_line(ngx
                     break;
                 }
 
-                if (ch == '-' || ch == '_' || ch == '~' || ch == '.') {
+                if (ch == '-') {
                     break;
                 }
 
@@ -536,7 +539,9 @@ ngx_int_t ngx_http_parse_header_line(ngx
                     break;
                 }
 
-                return NGX_HTTP_PARSE_INVALID_HEADER;
+                r->invalid_header = 1;
+                state = sw_skip_line;
+                break;
 
             }
             break;
@@ -554,7 +559,7 @@ ngx_int_t ngx_http_parse_header_line(ngx
                 break;
             }
 
-            if (ch == '-' || ch == '_' || ch == '~' || ch == '.') {
+            if (ch == '-') {
                 break;
             }
 
@@ -572,7 +577,9 @@ ngx_int_t ngx_http_parse_header_line(ngx
                 break;
             }
 
-            return NGX_HTTP_PARSE_INVALID_HEADER;
+            r->invalid_header = 1;
+            state = sw_skip_line;
+            break;
 
         /* space* before header value */
         case sw_space_before_value:
@@ -637,6 +644,21 @@ ngx_int_t ngx_http_parse_header_line(ngx
             }
             break;
 
+        /* skip header line */
+        case sw_skip_line:
+            switch (ch) {
+            case CR:
+                r->header_end = p;
+                state = sw_almost_done;
+                break;
+            case LF:
+                r->header_end = p;
+                goto done;
+            default:
+                break;
+            }
+            break;
+
         /* end of header line */
         case sw_almost_done:
             switch (ch) {