Commit bf27f47f authored by Eric Covener's avatar Eric Covener
Browse files

Merge r1774286 from trunk:

Follow up to r1773761: restore EOC semantic.




git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.4.x-merge-http-strict@1775671 13f79535-47bb-0310-9956-ffa450edef68
parent 788c7d06
Loading
Loading
Loading
Loading
+10 −18
Original line number Diff line number Diff line
@@ -744,14 +744,11 @@ static APR_INLINE int check_headers(request_rec *r)

static int check_headers_recursion(request_rec *r)
{
    request_rec *rr;
    for (rr = r; rr; rr = rr->prev) {
        void *dying = NULL;
        apr_pool_userdata_get(&dying, "check_headers_recursion", rr->pool);
        if (dying) {
    void *check = NULL;
    apr_pool_userdata_get(&check, "check_headers_recursion", r->pool);
    if (check) {
        return 1;
    }
    }
    apr_pool_userdata_setn("true", "check_headers_recursion", NULL, r->pool);
    return 0;
}
@@ -1263,7 +1260,7 @@ AP_CORE_DECLARE_NONSTD(apr_status_t) ap_http_header_filter(ap_filter_t *f,
    header_filter_ctx *ctx = f->ctx;
    const char *ctype;
    ap_bucket_error *eb = NULL;
    int eos = 0;
    apr_bucket *eos = NULL;

    AP_DEBUG_ASSERT(!r->main);

@@ -1284,13 +1281,6 @@ AP_CORE_DECLARE_NONSTD(apr_status_t) ap_http_header_filter(ap_filter_t *f,
         e != APR_BRIGADE_SENTINEL(b);
         e = APR_BUCKET_NEXT(e))
    {
        if (ctx->headers_error) {
            if (APR_BUCKET_IS_EOS(e)) {
                eos = 1;
                break;
            }
            continue;
        }
        if (AP_BUCKET_IS_ERROR(e) && !eb) {
            eb = e->data;
            continue;
@@ -1303,6 +1293,9 @@ AP_CORE_DECLARE_NONSTD(apr_status_t) ap_http_header_filter(ap_filter_t *f,
            ap_remove_output_filter(f);
            return ap_pass_brigade(f->next, b);
        }
        if (ctx->headers_error && APR_BUCKET_IS_EOS(e)) {
            eos = e;
        }
    }
    if (ctx->headers_error) {
        if (!eos) {
@@ -1328,10 +1321,9 @@ AP_CORE_DECLARE_NONSTD(apr_status_t) ap_http_header_filter(ap_filter_t *f,
            ap_die(HTTP_INTERNAL_SERVER_ERROR, r);
            return AP_FILTER_ERROR;
        }
        AP_DEBUG_ASSERT(APR_BUCKET_IS_EOS(e));
        APR_BUCKET_REMOVE(e);
        APR_BUCKET_REMOVE(eos);
        apr_brigade_cleanup(b);
        APR_BRIGADE_INSERT_TAIL(b, e);
        APR_BRIGADE_INSERT_TAIL(b, eos);
        r->status = HTTP_INTERNAL_SERVER_ERROR;
        r->content_type = r->content_encoding = NULL;
        r->content_languages = NULL;