fielding 97/04/17 19:56:15
Modified: src CHANGES mod_dir.c Log: Fixed SIGSEGV problem when a DirectoryIndex file is also the source of an external redirection. The problem was that the redirection would be seen as a subrequest, but the redirection header fields were not being promoted to the main response. Submitted by: Roy Fielding and Paul Sutton Reviewed by: Dean Gaudet, Randy Terbush, Jim Jagielski Revision Changes Path 1.237 +6 -0 apache/src/CHANGES Index: CHANGES =================================================================== RCS file: /export/home/cvs/apache/src/CHANGES,v retrieving revision 1.236 retrieving revision 1.237 diff -C3 -r1.236 -r1.237 *** CHANGES 1997/04/17 02:52:50 1.236 --- CHANGES 1997/04/18 02:56:13 1.237 *************** *** 1,5 **** --- 1,11 ---- Changes with Apache 1.2 + *) Fixed SIGSEGV problem when a DirectoryIndex file is also the source + of an external redirection. [Roy Fielding and Paul Sutton] + + *) Configure would create a broken Makefile if the configuration file + contained a commented-out Rule. [Roy Fielding] + *) Promote per_dir_config and subprocess_env from the subrequest to the main request in mod_negotiation. In particular this fixes a bug where <Files> sections wouldn't properly apply to negotiated content. 1.25 +13 -0 apache/src/mod_dir.c Index: mod_dir.c =================================================================== RCS file: /export/home/cvs/apache/src/mod_dir.c,v retrieving revision 1.24 retrieving revision 1.25 diff -C3 -r1.24 -r1.25 *** mod_dir.c 1997/04/06 07:43:41 1.24 --- mod_dir.c 1997/04/18 02:56:14 1.25 *************** *** 820,825 **** --- 820,838 ---- return OK; } + /* If the request returned a redirect, propagate it to the client */ + + if (is_HTTP_REDIRECT(rr->status)) { + error_notfound = rr->status; + r->notes = overlay_tables(r->pool, r->notes, rr->notes); + r->headers_out = overlay_tables(r->pool, r->headers_out, + rr->headers_out); + r->err_headers_out = overlay_tables(r->pool, r->err_headers_out, + rr->err_headers_out); + destroy_sub_req(rr); + return error_notfound; + } + /* If the request returned something other than 404 (or 200), * it means the module encountered some sort of problem. To be * secure, we should return the error, rather than create