Return-Path: Delivered-To: apache-cvs-archive@hyperreal.org Received: (qmail 20783 invoked by uid 6000); 13 May 1999 19:00:59 -0000 Received: (qmail 20630 invoked by alias); 13 May 1999 19:00:52 -0000 Delivered-To: apache-1.3-cvs@hyperreal.org Received: (qmail 20563 invoked by uid 143); 13 May 1999 19:00:49 -0000 Date: 13 May 1999 19:00:49 -0000 Message-ID: <19990513190049.20562.qmail@hyperreal.org> From: dgaudet@hyperreal.org To: apache-1.3-cvs@hyperreal.org Subject: cvs commit: apache-1.3/src/modules/standard mod_include.c mod_autoindex.c Sender: apache-cvs-owner@apache.org Precedence: bulk Reply-To: new-httpd@apache.org dgaudet 99/05/13 12:00:48 Modified: src/modules/standard mod_include.c mod_autoindex.c Log: Back out the "evil hack" portion of Raymond's patch. In addition to being an evil hack, it causes memory corruption. You cannot destroy a #included subrequest of mod_include... look for all uses of "request_config" in mod_include, in particular look at the code around the ap_join_pool call. Revision Changes Path 1.116 +9 -40 apache-1.3/src/modules/standard/mod_include.c Index: mod_include.c =================================================================== RCS file: /home/cvs/apache-1.3/src/modules/standard/mod_include.c,v retrieving revision 1.115 retrieving revision 1.116 diff -u -r1.115 -r1.116 --- mod_include.c 1999/05/13 18:25:57 1.115 +++ mod_include.c 1999/05/13 19:00:41 1.116 @@ -108,6 +108,9 @@ module MODULE_VAR_EXPORT includes_module; +/* just need some arbitrary non-NULL pointer which can't also be a request_rec */ +#define NESTED_INCLUDE_MAGIC (&includes_module) + /* ------------------------ Environment function -------------------------- */ /* XXX: could use ap_table_overlap here */ @@ -743,7 +746,9 @@ } /* destroy the sub request if it's not a nested include */ - if (rr != NULL) { + if (rr != NULL + && ap_get_module_config(rr->request_config, &includes_module) + != NESTED_INCLUDE_MAGIC) { ap_destroy_sub_req(rr); } } @@ -2371,41 +2376,6 @@ return OK; } -#define SUB_REQ_STRING "Sub request to mod_include" -#define PARENT_STRING "Parent request to mod_include" - - if (ap_table_get(r->notes, SUB_REQ_STRING) != NULL) { - request_rec *p = r->main; - - /* - * The note is a flag to mod_include that this request is actually - * a subrequest from another module and that mod_include needs to - * treat it as if it's a subrequest from mod_include. - * - * HACK ALERT! - * There is no good way to pass the parent request_rec to mod_include. - * Tables only take string values and there is nowhere appropriate in - * in the request_rec that can safely be used. - * - * So we search up the chain of requests and redirects looking for - * the parent request. - */ - - while (p) { - if (ap_table_get(p->notes, PARENT_STRING) != NULL) { - /* Kludge --- See below */ - ap_set_module_config(r->request_config, &includes_module, p); - - ap_add_common_vars(p); - ap_add_cgi_vars(p); - add_include_vars(p, DEFAULT_TIME_FORMAT); - ap_table_unset(r->notes, SUB_REQ_STRING); - break; - } - p = (p->prev) ? p->prev : p->main; - } - } - if ((parent = ap_get_module_config(r->request_config, &includes_module))) { /* Kludge --- for nested includes, we want to keep the subprocess * environment of the base document (for compatibility); that means @@ -2441,10 +2411,9 @@ send_parsed_content(f, r); if (parent) { - /* Kludge --- Doing this allows the caller to safely destroy the - * sub_req - */ - r->pool = ap_make_sub_pool(r->pool); + /* signify that the sub request should not be killed */ + ap_set_module_config(r->request_config, &includes_module, + NESTED_INCLUDE_MAGIC); } ap_kill_timeout(r); 1.108 +0 -8 apache-1.3/src/modules/standard/mod_autoindex.c Index: mod_autoindex.c =================================================================== RCS file: /home/cvs/apache-1.3/src/modules/standard/mod_autoindex.c,v retrieving revision 1.107 retrieving revision 1.108 diff -u -r1.107 -r1.108 --- mod_autoindex.c 1999/05/13 18:25:56 1.107 +++ mod_autoindex.c 1999/05/13 19:00:43 1.108 @@ -924,10 +924,6 @@ ap_rputs("\n", r); } -/* See mod_include */ -#define SUB_REQ_STRING "Sub request to mod_include" -#define PARENT_STRING "Parent request to mod_include" - /* * Handle the preamble through the H1 tag line, inclusive. Locate * the file with a subrequests. Process text/html documents by actually @@ -969,8 +965,6 @@ if (! suppress_amble) { emit_preamble(r, title); } - ap_table_add(r->notes, PARENT_STRING, ""); - ap_table_add(rr->notes, SUB_REQ_STRING, ""); /* * If there's a problem running the subrequest, display the * preamble if we didn't do it before -- the header file @@ -1045,8 +1039,6 @@ */ if (rr->content_type != NULL) { if (!strcasecmp("text/html", rr->content_type)) { - ap_table_add(r->notes, PARENT_STRING, ""); - ap_table_add(rr->notes, SUB_REQ_STRING, ""); if (ap_run_sub_req(rr) == OK) { /* worked... */ suppress_sig = 1;