httpd-cvs mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From stodd...@apache.org
Subject cvs commit: httpd-2.0/server core.c
Date Thu, 25 Mar 2004 02:07:29 GMT
stoddard    2004/03/24 18:07:29

  Modified:    .        Tag: APACHE_2_0_BRANCH STATUS
               include  Tag: APACHE_2_0_BRANCH http_core.h
               server   Tag: APACHE_2_0_BRANCH core.c
  Log:
  Fix memory corruption problem with ap_custom_response() function.
  The core per-dir config would later point to request pool data
  that would be reused for different purposes on different requests.
  
  This is based on an old 1.3 patch submitted by Will Lowe.
  It needs a minor tweak before committing to 1.3, but he had
  it pretty darn close.
  
  Revision  Changes    Path
  No                   revision
  No                   revision
  1.751.2.768 +1 -8      httpd-2.0/STATUS
  
  Index: STATUS
  ===================================================================
  RCS file: /home/cvs/httpd-2.0/STATUS,v
  retrieving revision 1.751.2.767
  retrieving revision 1.751.2.768
  diff -u -r1.751.2.767 -r1.751.2.768
  --- STATUS	25 Mar 2004 00:15:21 -0000	1.751.2.767
  +++ STATUS	25 Mar 2004 02:07:27 -0000	1.751.2.768
  @@ -101,13 +101,6 @@
              server/listen.c: r1.101
          +1: trawick, stoddard, rederpj
   
  -    *) Fix memory corruption problem with ap_custom_response()
  -       function.  This turns Apache + a popular third-party module
  -       into a crash-a-matic :(
  -           include/http_core.h: r1.82
  -           server/core.c: r1.268
  -       +1: trawick, stoddard, rederpj
  -
       *) Limit the concurrency in 'ab' to MAX_CONCURRENCY to prevent a 
          segmentation fault.
              support/ab.c: r1.140, r1.141
  
  
  
  No                   revision
  No                   revision
  1.70.2.7  +9 -1      httpd-2.0/include/http_core.h
  
  Index: http_core.h
  ===================================================================
  RCS file: /home/cvs/httpd-2.0/include/http_core.h,v
  retrieving revision 1.70.2.6
  retrieving revision 1.70.2.7
  diff -u -r1.70.2.6 -r1.70.2.7
  --- http_core.h	9 Feb 2004 20:54:34 -0000	1.70.2.6
  +++ http_core.h	25 Mar 2004 02:07:28 -0000	1.70.2.7
  @@ -324,6 +324,13 @@
        * won't actually be delivered as the response for the non-GET method.
        */
       int deliver_script;
  +
  +    /* Custom response strings registered via ap_custom_response(),
  +     * or NULL; check per-dir config if nothing found here
  +     */
  +    char **response_code_strings; /* from ap_custom_response(), not from
  +                                   * ErrorDocument
  +                                   */
   } core_request_config;
   
   /* Standard entries that are guaranteed to be accessible via
  @@ -426,7 +433,8 @@
        * This lets us do quick merges in merge_core_dir_configs().
        */
     
  -    char **response_code_strings;
  +    char **response_code_strings; /* from ErrorDocument, not from
  +                                   * ap_custom_response() */
   
       /* Hostname resolution etc */
   #define HOSTNAME_LOOKUP_OFF	0
  
  
  
  No                   revision
  No                   revision
  1.225.2.18 +19 -9     httpd-2.0/server/core.c
  
  Index: core.c
  ===================================================================
  RCS file: /home/cvs/httpd-2.0/server/core.c,v
  retrieving revision 1.225.2.17
  retrieving revision 1.225.2.18
  diff -u -r1.225.2.17 -r1.225.2.18
  --- core.c	8 Mar 2004 22:54:20 -0000	1.225.2.17
  +++ core.c	25 Mar 2004 02:07:28 -0000	1.225.2.18
  @@ -678,16 +678,26 @@
   
   char *ap_response_code_string(request_rec *r, int error_index)
   {
  -    core_dir_config *conf;
  +    core_dir_config *dirconf;
  +    core_request_config *reqconf;
   
  -    conf = (core_dir_config *)ap_get_module_config(r->per_dir_config,
  -                                                   &core_module);
  +    /* check for string registered via ap_custom_response() first */
  +    reqconf = (core_request_config *)ap_get_module_config(r->request_config,
  +                                                          &core_module);
  +    if (reqconf->response_code_strings != NULL &&
  +        reqconf->response_code_strings[error_index] != NULL) {
  +        return reqconf->response_code_strings[error_index];
  +    }
   
  -    if (conf->response_code_strings == NULL) {
  -        return NULL;
  +    /* check for string specified via ErrorDocument */
  +    dirconf = (core_dir_config *)ap_get_module_config(r->per_dir_config,
  +                                                      &core_module);
  +
  +    if (dirconf->response_code_strings == NULL) {
  +	return NULL;
       }
   
  -    return conf->response_code_strings[error_index];
  +    return dirconf->response_code_strings[error_index];
   }
   
   
  @@ -1100,11 +1110,11 @@
   AP_DECLARE(void) ap_custom_response(request_rec *r, int status,
                                       const char *string)
   {
  -    core_dir_config *conf =
  -        ap_get_module_config(r->per_dir_config, &core_module);
  +    core_request_config *conf =
  +        ap_get_module_config(r->request_config, &core_module);
       int idx;
   
  -    if(conf->response_code_strings == NULL) {
  +    if (conf->response_code_strings == NULL) {
           conf->response_code_strings =
               apr_pcalloc(r->pool,
                           sizeof(*conf->response_code_strings) * RESPONSE_CODES);
  
  
  

Mime
View raw message