[PATCH 1 of 1] HTTP: Fix infinite loop on NGX_DECLINED in ngx_http_finalize_request

Will Hawkins hawkinsw at obs.cr
Fri Sep 13 05:20:34 UTC 2024


# HG changeset patch
# User Will Hawkins <hawkinsw at obs.cr>
# Date 1726202944 14400
#      Fri Sep 13 00:49:04 2024 -0400
# Node ID 5bfd931f3b9641b51344d437207134f094012de5
# Parent  dbf76fdd109fbbba40a7c5299cc277d180f4bbad
HTTP: Fix infinite loop on NGX_DECLINED in ngx_http_finalize_request

A handler that invokes ngx_http_finalize_request with NGX_DECLINED
causes an infinite loop because the phase handler index is not
incremented before restarting the processing of phases.

In (almost) all the other instances where a handler can return
NGX_DECLINED, the phase handler index is incremented before restarting
the processing of phases.

This change adds that index increment where it was missing.

diff -r dbf76fdd109f -r 5bfd931f3b96 src/http/ngx_http_request.c
--- a/src/http/ngx_http_request.c	Tue Sep 03 13:11:25 2024 +0300
+++ b/src/http/ngx_http_request.c	Fri Sep 13 00:49:04 2024 -0400
@@ -2519,6 +2519,7 @@
     if (rc == NGX_DECLINED) {
         r->content_handler = NULL;
         r->write_event_handler = ngx_http_core_run_phases;
+        r->phase_handler++;
         ngx_http_core_run_phases(r);
         return;
     }



More information about the nginx-devel mailing list