Commit 632f3122 authored by Yann Ylavic's avatar Yann Ylavic
Browse files

Merge r1753592 from trunk:

* Do not overwrite r->status with access_status if access_status is OK or DONE
  as in this case r->status might contain the true response code.

PR: 59869

Submitted by: rpluem
Reviewed/backported by: ylavic, wrowe, covener, orlikowski


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.2.x@1777775 13f79535-47bb-0310-9956-ffa450edef68
parent 2277a085
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -48,6 +48,9 @@ Changes with Apache 2.2.32
  *) Core: reject NULLs in request line or request headers.
     PR 43039 [Nick Kew]

  *) mod_proxy: Correctly consider error response codes by the backend when
     processing failonstatus. PR 59869 [Ruediger Pluem]

  *) mod_ssl: Fix a possible memory leak on restart for custom [EC]DH params.
     [Jan Kaluza, Yann Ylavic]

+16 −12
Original line number Diff line number Diff line
@@ -1087,10 +1087,14 @@ cleanup:
         * the error page on the proxy or if the error was not generated by the
         * backend itself but by the proxy e.g. a bad gateway) in order to give
         * ap_proxy_post_request a chance to act correctly on the status code.
         * But only do the above if access_status is not OK and not DONE, because
         * in this case r->status might contain the true status and overwriting
         * it with OK or DONE would be wrong.
         */
        if ((access_status != OK) && (access_status != DONE)) {
            saved_status = r->status;
            r->status = access_status;
        int post_status = proxy_run_post_request(worker, balancer, r, conf);
            proxy_run_post_request(worker, balancer, r, conf);
            /*
             * Only restore r->status if it has not been changed by
             * ap_proxy_post_request as we assume that this change was intentional.
@@ -1098,9 +1102,9 @@ cleanup:
            if (r->status == access_status) {
                r->status = saved_status;
            }
        if (post_status == DECLINED) {
            post_status = OK; /* no post_request handler available */
            /* TODO: recycle direct worker */
        }
        else {
            ap_proxy_post_request(worker, balancer, r, conf);
        }
    }