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("</PRE>\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;
  
  
  

Reply via email to