]> git.kaiwu.me - nginx.git/commitdiff
Autoindex: return NGX_ERROR on error if headers were sent.
authorSergey Kandaurov <pluknet@nginx.com>
Tue, 30 Jul 2013 07:43:21 +0000 (11:43 +0400)
committerSergey Kandaurov <pluknet@nginx.com>
Tue, 30 Jul 2013 07:43:21 +0000 (11:43 +0400)
This prevents ngx_http_finalize_request() from issuing
ngx_http_special_response_handler() on a freed context.

src/http/modules/ngx_http_autoindex_module.c

index fb46d65d1cf06c84be11a2526f5403836eedac57..222ac728c2481afdf9f75fc9f8b0e803e04f12c3 100644 (file)
@@ -388,7 +388,7 @@ ngx_http_autoindex_handler(ngx_http_request_t *r)
 
     b = ngx_create_temp_buf(r->pool, len);
     if (b == NULL) {
-        return NGX_HTTP_INTERNAL_SERVER_ERROR;
+        return NGX_ERROR;
     }
 
     if (entries.nelts > 1) {
@@ -649,7 +649,7 @@ ngx_http_autoindex_error(ngx_http_request_t *r, ngx_dir_t *dir, ngx_str_t *name)
                       ngx_close_dir_n " \"%V\" failed", name);
     }
 
-    return NGX_HTTP_INTERNAL_SERVER_ERROR;
+    return r->header_sent ? NGX_ERROR : NGX_HTTP_INTERNAL_SERVER_ERROR;
 }