Re: svn commit: r901578 - in /httpd/httpd/trunk: CHANGES modules/http/http_request.c modules/metadata/mod_headers.c server/protocol.c

2010-01-20 Thread Ruediger Pluem
On 21.01.2010 08:20, wr...@apache.org wrote:
> Author: wrowe
> Date: Thu Jan 21 07:19:41 2010
> New Revision: 901578
> 
> URL: http://svn.apache.org/viewvc?rev=901578&view=rev
> Log:
> Correctly align the behavior of headers_in to be consistent with the
> treatment of headers_out, resolving PR 48359 by keeping subrequest
> scope changes out of the main request headers.  This ensures that all
> requests-without-bodies behave as the requests-with-bodies code has.
> 
> Modified:
> httpd/httpd/trunk/CHANGES
> httpd/httpd/trunk/modules/http/http_request.c
> httpd/httpd/trunk/modules/metadata/mod_headers.c
> httpd/httpd/trunk/server/protocol.c
> 
> Modified: httpd/httpd/trunk/modules/http/http_request.c
> URL: 
> http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/http/http_request.c?rev=901578&r1=901577&r2=901578&view=diff
> ==
> --- httpd/httpd/trunk/modules/http/http_request.c (original)
> +++ httpd/httpd/trunk/modules/http/http_request.c Thu Jan 21 07:19:41 2010
> @@ -442,7 +442,7 @@
>  new->request_time= r->request_time;
>  new->main= r->main;
>  
> -new->headers_in  = r->headers_in;
> +new->headers_in  = apr_table_copy(r->pool, r->headers_in);
>  new->headers_out = apr_table_make(r->pool, 12);
>  new->err_headers_out = r->err_headers_out;
>  new->subprocess_env  = rename_original_env(r->pool, r->subprocess_env);
> @@ -515,6 +515,8 @@
>  r->per_dir_config = rr->per_dir_config;
>  /* copy output headers from subrequest, but leave negotiation headers */
>  r->notes = apr_table_overlay(r->pool, rr->notes, r->notes);
> +r->headers_in = apr_table_overlay(r->pool, rr->headers_in,
> +  r->headers_in);

I think this is wrong. Think of the case where the subrequest does not change
anything on headers_in. In this case the contents of headers_in of the request
and the subrequest are the same (the subrequest has a copy of the requests
table). Doing an apr_table_overlay would result in a table that has all key
value pairs of the original headers_in doubled.

Regards

RĂ¼diger



Re: svn commit: r901578 - in /httpd/httpd/trunk: CHANGES modules/http/http_request.c modules/metadata/mod_headers.c server/protocol.c

2010-01-21 Thread William A. Rowe Jr.
On 1/21/2010 1:52 AM, Ruediger Pluem wrote:
> On 21.01.2010 08:20, wr...@apache.org wrote:
>> Author: wrowe
>> Date: Thu Jan 21 07:19:41 2010
>> New Revision: 901578
>>
>> URL: http://svn.apache.org/viewvc?rev=901578&view=rev
>> Log:
>> Correctly align the behavior of headers_in to be consistent with the
>> treatment of headers_out, resolving PR 48359 by keeping subrequest
>> scope changes out of the main request headers.  This ensures that all
>> requests-without-bodies behave as the requests-with-bodies code has.

> 
> I think this is wrong. Think of the case where the subrequest does not change
> anything on headers_in. In this case the contents of headers_in of the request
> and the subrequest are the same (the subrequest has a copy of the requests
> table). Doing an apr_table_overlay would result in a table that has all key
> value pairs of the original headers_in doubled.

Makes sense; reverted that bit.