You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by Roy Fielding <fi...@hyperreal.com> on 1997/05/27 06:14:23 UTC

cvs commit: apache/src alloc.h alloc.c http_protocol.c

fielding    97/05/26 21:14:22

  Modified:    src       alloc.h alloc.c http_protocol.c
  Log:
  Two problems were introduced by the two "error responses have wrong headers"
  patches committed a couple weeks ago.  The first is that a NULL table
  causes mod_log_config to SIGSEGV on a call to table_get; the second is
  that Location needs to be added to the output header table for redirects.
  
  Submitted by: Roy Fielding and Ed Korthof
  Reviewed by: Jim Jagielski, Randy Terbush
  
  Revision  Changes    Path
  1.21      +1 -0      apache/src/alloc.h
  
  Index: alloc.h
  ===================================================================
  RCS file: /export/home/cvs/apache/src/alloc.h,v
  retrieving revision 1.20
  retrieving revision 1.21
  diff -C3 -r1.20 -r1.21
  *** alloc.h	1997/05/14 19:22:52	1.20
  --- alloc.h	1997/05/27 04:14:19	1.21
  ***************
  *** 144,149 ****
  --- 144,150 ----
    
    table *make_table (pool *p, int nelts);
    table *copy_table (pool *p, const table *);     
  + void clear_table (table *);     
    char *table_get (const table *, const char *);
    void table_set (table *, const char *name, const char *val);
    void table_merge (table *, const char *name, const char *more_val);
  
  
  
  1.28      +5 -0      apache/src/alloc.c
  
  Index: alloc.c
  ===================================================================
  RCS file: /export/home/cvs/apache/src/alloc.c,v
  retrieving revision 1.27
  retrieving revision 1.28
  diff -C3 -r1.27 -r1.28
  *** alloc.c	1997/04/24 23:35:18	1.27
  --- alloc.c	1997/05/27 04:14:20	1.28
  ***************
  *** 552,557 ****
  --- 552,562 ----
        return copy_array (p, t);
    }
    
  + void clear_table (table *t)
  + {
  +     t->nelts = 0;
  + }
  + 
    array_header *table_elts (table *t) { return t; }
    
    char *table_get (const table *t, const char *key)
  
  
  
  1.122     +9 -2      apache/src/http_protocol.c
  
  Index: http_protocol.c
  ===================================================================
  RCS file: /export/home/cvs/apache/src/http_protocol.c,v
  retrieving revision 1.121
  retrieving revision 1.122
  diff -C3 -r1.121 -r1.122
  *** http_protocol.c	1997/05/14 19:22:53	1.121
  --- http_protocol.c	1997/05/27 04:14:20	1.122
  ***************
  *** 1692,1705 ****
        }
    
        if (!r->assbackwards) {
      
    	/* For all HTTP/1.x responses for which we generate the message,
    	 * we need to avoid inheriting the "normal status" header fields
    	 * that may have been set by the request handler before the
  ! 	 * error or redirect.
    	 */
    	r->headers_out = r->err_headers_out;
  ! 	r->err_headers_out = NULL;
    	r->content_language = NULL;
    	r->content_languages = NULL;
    	r->content_encoding = NULL;
  --- 1692,1712 ----
        }
    
        if (!r->assbackwards) {
  + 	table *tmp = r->headers_out;
      
    	/* For all HTTP/1.x responses for which we generate the message,
    	 * we need to avoid inheriting the "normal status" header fields
    	 * that may have been set by the request handler before the
  ! 	 * error or redirect, except for Location on external redirects.
    	 */
    	r->headers_out = r->err_headers_out;
  ! 	r->err_headers_out = tmp;
  ! 	clear_table(r->err_headers_out);
  ! 
  ! 	if (location && *location
  ! 	             && (is_HTTP_REDIRECT(status) || status == HTTP_CREATED))
  ! 	    table_set(r->headers_out, "Location", location);
  ! 
    	r->content_language = NULL;
    	r->content_languages = NULL;
    	r->content_encoding = NULL;