Mercurial > hg > nginx
changeset 4937:3b6594a2b79f
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
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Mon, 26 Nov 2012 18:01:49 +0000 |
parents | 240e3fb392c9 |
children | 64ffc28850bb |
files | src/http/ngx_http_request_body.c |
diffstat | 1 files changed, 2 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/http/ngx_http_request_body.c Mon Nov 26 18:01:08 2012 +0000 +++ b/src/http/ngx_http_request_body.c Mon Nov 26 18:01:49 2012 +0000 @@ -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);