aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMaxim Dounin <mdounin@mdounin.ru>2012-02-13 15:33:08 +0000
committerMaxim Dounin <mdounin@mdounin.ru>2012-02-13 15:33:08 +0000
commit1b0ad6ee72179fef479bfae7c8c4bfd5ac834c29 (patch)
tree41be3508441cf82c71a4a928c025def21786504f /src
parent947fc03ca30e355fd562404f7e0b3ff0ec232c66 (diff)
downloadnginx-1b0ad6ee72179fef479bfae7c8c4bfd5ac834c29.tar.gz
nginx-1b0ad6ee72179fef479bfae7c8c4bfd5ac834c29.zip
Core: protection from subrequest loops.
Without the protection, subrequest loop results in r->count overflow and SIGSEGV. Protection was broken in 0.7.25. Note that this also limits number of parallel subrequests. This wasn't exactly the case before 0.7.25 as local subrequests were completed directly. See here for details: http://nginx.org/pipermail/nginx-ru/2010-February/032184.html
Diffstat (limited to 'src')
-rw-r--r--src/http/ngx_http_core_module.c1
-rw-r--r--src/http/ngx_http_request.c1
2 files changed, 1 insertions, 1 deletions
diff --git a/src/http/ngx_http_core_module.c b/src/http/ngx_http_core_module.c
index 251f932fd..24102e492 100644
--- a/src/http/ngx_http_core_module.c
+++ b/src/http/ngx_http_core_module.c
@@ -2453,7 +2453,6 @@ ngx_http_subrequest(ngx_http_request_t *r,
sr->start_sec = tp->sec;
sr->start_msec = tp->msec;
- r->main->subrequests++;
r->main->count++;
*psr = sr;
diff --git a/src/http/ngx_http_request.c b/src/http/ngx_http_request.c
index 2b3f0065b..c35d550a2 100644
--- a/src/http/ngx_http_request.c
+++ b/src/http/ngx_http_request.c
@@ -2010,6 +2010,7 @@ ngx_http_finalize_request(ngx_http_request_t *r, ngx_int_t rc)
if (r == c->data) {
r->main->count--;
+ r->main->subrequests++;
if (!r->logged) {