[nginx] Proxy: improved code readability.

Ruslan Ermilov ru at nginx.com
Tue Dec 1 17:21:01 UTC 2015


details:   http://hg.nginx.org/nginx/rev/44122bddd9a1
branches:  
changeset: 6311:44122bddd9a1
user:      Ruslan Ermilov <ru at nginx.com>
date:      Fri Nov 06 15:21:51 2015 +0300
description:
Proxy: improved code readability.

Do not assume that space character follows the method name, just pass it
explicitly.

The fuss around it has already proved to be unsafe, see bbdb172f0927 and
http://mailman.nginx.org/pipermail/nginx-ru/2013-January/049692.html for
details.

diffstat:

 src/http/modules/ngx_http_proxy_module.c |  17 +++++------------
 1 files changed, 5 insertions(+), 12 deletions(-)

diffs (55 lines):

diff -r 9d00576252aa -r 44122bddd9a1 src/http/modules/ngx_http_proxy_module.c
--- a/src/http/modules/ngx_http_proxy_module.c	Mon Nov 30 12:04:35 2015 +0300
+++ b/src/http/modules/ngx_http_proxy_module.c	Fri Nov 06 15:21:51 2015 +0300
@@ -1157,25 +1157,24 @@ ngx_http_proxy_create_request(ngx_http_r
     if (u->method.len) {
         /* HEAD was changed to GET to cache response */
         method = u->method;
-        method.len++;
 
     } else if (plcf->method.len) {
         method = plcf->method;
 
     } else {
         method = r->method_name;
-        method.len++;
     }
 
     ctx = ngx_http_get_module_ctx(r, ngx_http_proxy_module);
 
-    if (method.len == 5
-        && ngx_strncasecmp(method.data, (u_char *) "HEAD ", 5) == 0)
+    if (method.len == 4
+        && ngx_strncasecmp(method.data, (u_char *) "HEAD", 4) == 0)
     {
         ctx->head = 1;
     }
 
-    len = method.len + sizeof(ngx_http_proxy_version) - 1 + sizeof(CRLF) - 1;
+    len = method.len + 1 + sizeof(ngx_http_proxy_version) - 1
+          + sizeof(CRLF) - 1;
 
     escape = 0;
     loc_len = 0;
@@ -1294,6 +1293,7 @@ ngx_http_proxy_create_request(ngx_http_r
     /* the request line */
 
     b->last = ngx_copy(b->last, method.data, method.len);
+    *b->last++ = ' ';
 
     u->uri.data = b->last;
 
@@ -3159,13 +3159,6 @@ ngx_http_proxy_merge_loc_conf(ngx_conf_t
 
     ngx_conf_merge_str_value(conf->method, prev->method, "");
 
-    if (conf->method.len
-        && conf->method.data[conf->method.len - 1] != ' ')
-    {
-        conf->method.data[conf->method.len] = ' ';
-        conf->method.len++;
-    }
-
     ngx_conf_merge_value(conf->upstream.pass_request_headers,
                               prev->upstream.pass_request_headers, 1);
     ngx_conf_merge_value(conf->upstream.pass_request_body,



More information about the nginx-devel mailing list