Opened 8 years ago
Closed 8 years ago
#1439 closed defect (fixed)
auto_index module should discard request body explicitly
| Reported by: | Alex Zhang | Owned by: | |
|---|---|---|---|
| Priority: | minor | Milestone: | |
| Component: | nginx-module | Version: | 1.13.x |
| Keywords: | autoindex | Cc: | |
| uname -a: | Linux Fedora26-64 4.13.15-200.fc26.x86_64 #1 SMP Tue Nov 21 21:10:40 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux | ||
| nginx -V: |
nginx version: nginx/1.13.8
built by gcc 7.2.1 20170915 (Red Hat 7.2.1-2) (GCC) configure arguments: --prefix=/home/alex/bin_install/nginx |
||
Description
Hi all!
I found that auto_index module doesn't call the ngx_http_discard_request_body to discard the request body, and when a GET request carries some data, the request body will be treated as a pipeline request, most of time it will emit another 400 BAD REQUEST response.
You can reproduce this problem with the following configuration:
server {
listen 8082;
server_name _;
location / {
autoindex on;
root /tmp;
}
}
And send a request using curl.
curl -v http://127.0.0.1:8082 -XGET -d "a"
We can see the error.log:
2017/11/30 17:04:06 [info] 19098#0: *2 client sent invalid method while reading client pipelined request line, client: 127.0.0.1, server: _, request: "a"
Or we can capture the 400 BAD REQUEST response with tcpdump.
After trying this patch, this problem is fixed.
diff --git a/src/http/modules/ngx_http_autoindex_module.c b/src/http/modules/ngx_http_autoindex_module.c
index b3bf6528..ebb3cc41 100644
--- a/src/http/modules/ngx_http_autoindex_module.c
+++ b/src/http/modules/ngx_http_autoindex_module.c
@@ -276,6 +276,11 @@ ngx_http_autoindex_handler(ngx_http_request_t *r)
r->headers_out.content_type_len = r->headers_out.content_type.len;
r->headers_out.content_type_lowcase = NULL;
+ rc = ngx_http_discard_request_body(r);
+ if (rc != NGX_OK) {
+ return rc;
+ }
+
rc = ngx_http_send_header(r);
if (rc == NGX_ERROR || rc > NGX_OK || r->header_only) {

Thanks for reporting this.