[nginx] svn commit: r4938 - trunk/src/http

mdounin at mdounin.ru mdounin at mdounin.ru
Mon Nov 26 18:01:49 UTC 2012


Author: mdounin
Date: 2012-11-26 18:01:49 +0000 (Mon, 26 Nov 2012)
New Revision: 4938
URL: http://trac.nginx.org/nginx/changeset/4938/nginx

Log:
Request body: block write events while reading body.

If write events are not blocked, an extra write event might happen for
various reasons (e.g. as a result of a http pipelining), resulting in
incorrect body being passed to a post handler.

The problem manifested itself with the dav module only, as this is
the only module which reads the body from a content phase handler (in
contrast to exclusive content handlers like proxy).  Additionally, dav
module used to dump core in such situations due to ticket #238.

See reports here:

http://mailman.nginx.org/pipermail/nginx-devel/2012-November/002981.html
http://serverfault.com/questions/449195/nginx-webdav-server-with-auth-request


Modified:
   trunk/src/http/ngx_http_request_body.c

Modified: trunk/src/http/ngx_http_request_body.c
===================================================================
--- trunk/src/http/ngx_http_request_body.c	2012-11-26 18:01:08 UTC (rev 4937)
+++ trunk/src/http/ngx_http_request_body.c	2012-11-26 18:01:49 UTC (rev 4938)
@@ -105,6 +105,7 @@
 
             rb->buf = r->header_in;
             r->read_event_handler = ngx_http_read_client_request_body_handler;
+            r->write_event_handler = ngx_http_request_empty_handler;
 
             rc = ngx_http_do_read_client_request_body(r);
             goto done;
@@ -166,6 +167,7 @@
     }
 
     r->read_event_handler = ngx_http_read_client_request_body_handler;
+    r->write_event_handler = ngx_http_request_empty_handler;
 
     rc = ngx_http_do_read_client_request_body(r);
 



More information about the nginx-devel mailing list