Commit 2f2ac0cb authored by Graham Leggett's avatar Graham Leggett
Browse files

core: Deal with the widespread use of apr_status_t return values

as HTTP status codes, as documented in PR#31759 (a bug shared by
the default handler, mod_cgi, mod_cgid, mod_proxy, and probably
others).

+1: niq, minfrin, rpluem


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.2.x@463488 13f79535-47bb-0310-9956-ffa450edef68
parent 25bed4e6
Loading
Loading
Loading
Loading
+5 −0
Changes for CHANGES: 5 added lines, 0 removed lines.
Original line number Diff line number Diff line
                                                        -*- coding: utf-8 -*-
Changes with Apache 2.2.4
  *) core: Deal with the widespread use of apr_status_t return values
     as HTTP status codes, as documented in PR#31759 (a bug shared by
     the default handler, mod_cgi, mod_cgid, mod_proxy, and probably
     others). [Jeff Trawick, Ruediger Pluem, Joe Orton]
  *) mod_ext_filter: Handle filter names which include capital letters.
     PR 40323.  [Jeff Trawick]
+0 −7
Changes for STATUS: 0 added lines, 7 removed lines.
Original line number Diff line number Diff line
@@ -77,13 +77,6 @@ RELEASE SHOWSTOPPERS:
PATCHES ACCEPTED TO BACKPORT FROM TRUNK:
  [ start all new proposals below, under PATCHES PROPOSED. ]

    * core: Deal with the widespread use of apr_status_t return values
      as HTTP status codes, as documented in PR#31759 (a bug shared by
      the default handler, mod_cgi, mod_cgid, mod_proxy, and probably
      others).
      http://svn.apache.org/viewvc?view=rev&revision=448711
      +1: niq, minfrin, rpluem

    * mod_cache: Don't cache requests with a expires date in the past;
      otherwise mod_cache will always try to cache the URL. This bug
      might lead to numerous rename() errors on win32 if the URL was
+2 −0
Changes for include/httpd.h: 2 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -538,6 +538,8 @@ AP_DECLARE(const char *) ap_get_server_built(void);
#define ap_is_HTTP_CLIENT_ERROR(x) (((x) >= 400)&&((x) < 500))
/** is the status code a server error  */
#define ap_is_HTTP_SERVER_ERROR(x) (((x) >= 500)&&((x) < 600))
/** is the status code a (potentially) valid response code?  */
#define ap_is_HTTP_VALID_RESPONSE(x) (((x) >= 100)&&((x) < 600))

/** should the status code drop the connection */
#define ap_status_drops_connection(x) \
+17 −0
Changes for server/config.c: 17 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -326,6 +326,7 @@ AP_CORE_DECLARE(int) ap_invoke_handler(request_rec *r)
    const char *p;
    int result;
    const char *old_handler = r->handler;
    const char *ignore;

    /*
     * The new insert_filter stage makes the most sense here.  We only use
@@ -376,6 +377,22 @@ AP_CORE_DECLARE(int) ap_invoke_handler(request_rec *r)
        ap_log_rerror(APLOG_MARK, APLOG_WARNING, 0, r,
            "handler \"%s\" not found for: %s", r->handler, r->filename);
    }
    if ((result != OK) && (result != DONE) && (result != DECLINED)
        && !ap_is_HTTP_VALID_RESPONSE(result)) {
        /* If a module is deliberately returning something else
         * (request_rec in non-HTTP or proprietary extension?)
         * let it set a note to allow it explicitly.
         * Otherwise, a return code that is neither reserved nor HTTP
         * is a bug, as in PR#31759.
         */
        ignore = apr_table_get(r->notes, "HTTP_IGNORE_RANGE");
        if (!ignore) {
            ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
                          "Handler for %s returned invalid result code %d",
                          r->handler, result);
            result = HTTP_INTERNAL_SERVER_ERROR;
        }
    }

    return result == DECLINED ? HTTP_INTERNAL_SERVER_ERROR : result;
}