Commit 021eccfd authored by Stefan Eissing's avatar Stefan Eissing
Browse files

Merge of r1854004 from trunk:

  *) http: Fix possible empty response with mod_ratelimit for HEAD requests.



git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.4.x@1855391 13f79535-47bb-0310-9956-ffa450edef68
parent a04b5ac6
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
                                                         -*- coding: utf-8 -*-
Changes with Apache 2.4.39

  *) http: Fix possible empty response with mod_ratelimit for HEAD requests.
     PR 63192. [Yann Ylavic]

  *) MPMs unix: bind the bucket number of each child to its slot number, for a
     more efficient per bucket maintenance. [Yann Ylavic]

  *) mod_cache_socache: Avoid reallocations and be safe with outgoing data
     lifetime. [Yann Ylavic]

  *) mod_auth_digest: Fix a race condition. Authentication with valid
     credentials could be refused in case of concurrent accesses from
     different users.  PR 63124.  [Simon Kappel <simon.kappel axis.com>]
+0 −6
Original line number Diff line number Diff line
@@ -126,12 +126,6 @@ RELEASE SHOWSTOPPERS:
PATCHES ACCEPTED TO BACKPORT FROM TRUNK:
  [ start all new proposals below, under PATCHES PROPOSED. ]

  *) http: Fix possible empty response with mod_ratelimit for HEAD requests.
     trunk patch: https://svn.apache.org/r1854004
     2.4.x patch: svn merge -c 1854004 ^/httpd/httpd/trunk .
     +1: elukey, ylavic, icing
     ylavic: nice catch Luca, forgot about this one..


PATCHES PROPOSED TO BACKPORT FROM TRUNK:
  [ New proposals should be added at the end of the list ]
+14 −6
Original line number Diff line number Diff line
@@ -1290,6 +1290,7 @@ AP_CORE_DECLARE_NONSTD(apr_status_t) ap_http_header_filter(ap_filter_t *f,
    request_rec *r = f->r;
    conn_rec *c = r->connection;
    const char *clheader;
    int header_only = (r->header_only || AP_STATUS_IS_HEADER_ONLY(r->status));
    const char *protocol = NULL;
    apr_bucket *e;
    apr_bucket_brigade *b2;
@@ -1307,7 +1308,7 @@ AP_CORE_DECLARE_NONSTD(apr_status_t) ap_http_header_filter(ap_filter_t *f,
    }
    else if (ctx->headers_sent) {
        /* Eat body if response must not have one. */
        if (r->header_only || AP_STATUS_IS_HEADER_ONLY(r->status)) {
        if (header_only) {
            /* Still next filters may be waiting for EOS, so pass it (alone)
             * when encountered and be done with this filter.
             */
@@ -1522,14 +1523,21 @@ AP_CORE_DECLARE_NONSTD(apr_status_t) ap_http_header_filter(ap_filter_t *f,

    terminate_header(b2);

    rv = ap_pass_brigade(f->next, b2);
    if (rv != APR_SUCCESS) {
        goto out;
    if (header_only) {
        e = APR_BRIGADE_LAST(b);
        if (e != APR_BRIGADE_SENTINEL(b) && APR_BUCKET_IS_EOS(e)) {
            APR_BUCKET_REMOVE(e);
            APR_BRIGADE_INSERT_TAIL(b2, e);
            ap_remove_output_filter(f);
        }
        apr_brigade_cleanup(b);
    }

    rv = ap_pass_brigade(f->next, b2);
    apr_brigade_cleanup(b2);
    ctx->headers_sent = 1;

    if (r->header_only || AP_STATUS_IS_HEADER_ONLY(r->status)) {
        apr_brigade_cleanup(b);
    if (rv != APR_SUCCESS || header_only) {
        goto out;
    }