]> git.kaiwu.me - nginx.git/commitdiff
Fixed "return" with discarding invalid chunked body.
authorSergey Kandaurov <pluknet@nginx.com>
Wed, 4 Sep 2019 10:33:51 +0000 (13:33 +0300)
committerSergey Kandaurov <pluknet@nginx.com>
Wed, 4 Sep 2019 10:33:51 +0000 (13:33 +0300)
When ngx_http_discard_request_body() call was added to ngx_http_send_response(),
there were no return codes other than NGX_OK and NGX_HTTP_INTERNAL_SERVER_ERROR.
Now it can also return NGX_HTTP_BAD_REQUEST, but ngx_http_send_response() still
incorrectly transforms it to NGX_HTTP_INTERNAL_SERVER_ERROR.

The fix is to propagate ngx_http_discard_request_body() errors.

src/http/ngx_http_core_module.c

index 5a015ea333cdd2631b6bec68ec623efabb2235a1..aa03fd61739a6ea6f7c02f6c6420136504ccabf6 100644 (file)
@@ -1660,8 +1660,10 @@ ngx_http_send_response(ngx_http_request_t *r, ngx_uint_t status,
     ngx_buf_t    *b;
     ngx_chain_t   out;
 
-    if (ngx_http_discard_request_body(r) != NGX_OK) {
-        return NGX_HTTP_INTERNAL_SERVER_ERROR;
+    rc = ngx_http_discard_request_body(r);
+
+    if (rc != NGX_OK) {
+        return rc;
     }
 
     r->headers_out.status = status;