Welcome! Log In Create A New Profile

Advanced

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

Anonymous User
November 26, 2012 01:02PM
Author: mdounin
Date: 2012-11-26 18:00:14 +0000 (Mon, 26 Nov 2012)
New Revision: 4936
URL: http://trac.nginx.org/nginx/changeset/4936/nginx

Log:
Request body: improved handling of incorrect chunked request body.

While discarding chunked request body in some cases after detecting
request body corruption no error was returned, while it was possible
to correctly return 400 Bad Request. If error is detected too late,
make sure to properly close connection.

Additionally, in ngx_http_special_response_handler() don't return body
of 500 Internal Server Error to a client if ngx_http_discard_request_body()
fails, but disable keepalive and continue.


Modified:
trunk/src/http/ngx_http_request_body.c
trunk/src/http/ngx_http_special_response.c

Modified: trunk/src/http/ngx_http_request_body.c
===================================================================
--- trunk/src/http/ngx_http_request_body.c 2012-11-26 17:59:30 UTC (rev 4935)
+++ trunk/src/http/ngx_http_request_body.c 2012-11-26 18:00:14 UTC (rev 4936)
@@ -471,13 +471,19 @@
}
}

- if (ngx_http_read_discarded_request_body(r) == NGX_OK) {
+ rc = ngx_http_read_discarded_request_body(r);
+
+ if (rc == NGX_OK) {
r->lingering_close = 0;
return NGX_OK;
}

- /* == NGX_AGAIN */
+ if (rc >= NGX_HTTP_SPECIAL_RESPONSE) {
+ return rc;
+ }

+ /* rc == NGX_AGAIN */
+
r->read_event_handler = ngx_http_discarded_request_body_handler;

if (ngx_handle_read_event(rev, 0) != NGX_OK) {
@@ -533,6 +539,12 @@
return;
}

+ if (rc >= NGX_HTTP_SPECIAL_RESPONSE) {
+ c->error = 1;
+ ngx_http_finalize_request(r, NGX_ERROR);
+ return;
+ }
+
/* rc == NGX_AGAIN */

if (ngx_handle_read_event(rev, 0) != NGX_OK) {
@@ -606,8 +618,7 @@
rc = ngx_http_discard_request_body_filter(r, &b);

if (rc != NGX_OK) {
- r->connection->error = 1;
- return NGX_OK;
+ return rc;
}
}
}

Modified: trunk/src/http/ngx_http_special_response.c
===================================================================
--- trunk/src/http/ngx_http_special_response.c 2012-11-26 17:59:30 UTC (rev 4935)
+++ trunk/src/http/ngx_http_special_response.c 2012-11-26 18:00:14 UTC (rev 4936)
@@ -421,7 +421,7 @@
r->expect_tested = 1;

if (ngx_http_discard_request_body(r) != NGX_OK) {
- error = NGX_HTTP_INTERNAL_SERVER_ERROR;
+ r->keepalive = 0;
}

if (clcf->msie_refresh

_______________________________________________
nginx-devel mailing list
nginx-devel@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-devel
Subject Author Views Posted

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

Anonymous User 794 November 26, 2012 01:02PM



Sorry, you do not have permission to post/reply in this forum.

Online Users

Guests: 175
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready