aboutsummaryrefslogtreecommitdiff
path: root/src/http/ngx_http_request_body.c
diff options
context:
space:
mode:
authorMaxim Dounin <mdounin@mdounin.ru>2012-11-26 18:01:49 +0000
committerMaxim Dounin <mdounin@mdounin.ru>2012-11-26 18:01:49 +0000
commite769544a7dc54e224fa0ef681c36ede12f65d74b (patch)
treef6e98213b077da1c03df15d044a4256a05828ce0 /src/http/ngx_http_request_body.c
parentaa955a20970580925122a7d599e32ff3e68a87bd (diff)
downloadnginx-e769544a7dc54e224fa0ef681c36ede12f65d74b.tar.gz
nginx-e769544a7dc54e224fa0ef681c36ede12f65d74b.zip
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
Diffstat (limited to 'src/http/ngx_http_request_body.c')
-rw-r--r--src/http/ngx_http_request_body.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/src/http/ngx_http_request_body.c b/src/http/ngx_http_request_body.c
index 2735034a1..749e4aedb 100644
--- a/src/http/ngx_http_request_body.c
+++ b/src/http/ngx_http_request_body.c
@@ -105,6 +105,7 @@ ngx_http_read_client_request_body(ngx_http_request_t *r,
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 @@ ngx_http_read_client_request_body(ngx_http_request_t *r,
}
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);