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