From: Ruediger Pluem Date: Fri, 1 Feb 2008 22:42:08 +0000 (+0000) Subject: Merge r616517, r617653 from trunk: X-Git-Tag: 2.2.9~382 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=69826c29497667e1c4256746b61ab0f69a79e212;p=thirdparty%2Fapache%2Fhttpd.git Merge r616517, r617653 from trunk: * Fix processing of chunked responses if Connection: Transfer-Encoding is set in the response of the proxied system. PR: 44311 Submitted by: rpluem Reviewed by: jim, rpluem, mturk git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.2.x@617686 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/CHANGES b/CHANGES index 1575262a205..81358fe9748 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,10 @@ -*- coding: utf-8 -*- Changes with Apache 2.2.9 + *) mod_proxy_http: Fix processing of chunked responses if + Connection: Transfer-Encoding is set in the response of the proxied + system. PR 44311 [Ruediger Pluem] + *) mod_rewrite: Don't canonicalise URLs with [P,NE] PR 43319 [] diff --git a/STATUS b/STATUS index 0b0a7b566d5..9652aa68c79 100644 --- a/STATUS +++ b/STATUS @@ -91,16 +91,6 @@ PATCHES ACCEPTED TO BACKPORT FROM TRUNK: wrowe notes; Win32 is already ready for this, and there's no rush to push this into the immediate next-release. - * mod_proxy: Fix processing of chunked responses if - Connection: Transfer-Encoding is set in the response of the - proxied system. PR: 44311 - Trunk version of patch: - http://svn.apache.org/viewvc?view=rev&revision=616517 - http://svn.apache.org/viewvc?view=rev&revision=617653 - Backport version of 2.2.x of patch: - Trunk version works (minus CHANGES conflict) - +1: jim, rpluem, mturk - PATCHES PROPOSED TO BACKPORT FROM TRUNK: [ New proposals should be added at the end of the list ] diff --git a/modules/proxy/mod_proxy_http.c b/modules/proxy/mod_proxy_http.c index e5f654bb9b2..2089918bc20 100644 --- a/modules/proxy/mod_proxy_http.c +++ b/modules/proxy/mod_proxy_http.c @@ -1331,6 +1331,7 @@ apr_status_t ap_proxy_http_process_response(apr_pool_t * p, request_rec *r, static const char *hop_by_hop_hdrs[] = {"Keep-Alive", "Proxy-Authenticate", "TE", "Trailer", "Upgrade", NULL}; int i; + const char *te = NULL; bb = apr_brigade_create(p, c->bucket_alloc); @@ -1461,6 +1462,11 @@ apr_status_t ap_proxy_http_process_response(apr_pool_t * p, request_rec *r, backend->close += 1; } + /* + * Save a possible Transfer-Encoding header as we need it later for + * ap_http_filter to know where to end. + */ + te = apr_table_get(r->headers_out, "Transfer-Encoding"); /* strip connection listed hop-by-hop headers from response */ backend->close += ap_proxy_liststr(apr_table_get(r->headers_out, "Connection"), @@ -1601,6 +1607,14 @@ apr_status_t ap_proxy_http_process_response(apr_pool_t * p, request_rec *r, * ap_http_filter to know where to end. */ rp->headers_in = apr_table_copy(r->pool, r->headers_out); + /* + * Restore Transfer-Encoding header from response if we saved + * one before and there is none left. We need it for the + * ap_http_filter. See above. + */ + if (te && !apr_table_get(rp->headers_in, "Transfer-Encoding")) { + apr_table_add(rp->headers_in, "Transfer-Encoding", te); + } apr_table_unset(r->headers_out,"Transfer-Encoding");