You are viewing a plain text version of this content. The canonical link for it is here.
Posted to apache-bugdb@apache.org by Dean Gaudet <dg...@arctic.org> on 1998/05/26 03:00:01 UTC

Re: mod_include/1921: '$' is not recognized as 'end of line' in regex matching

The following reply was made to PR mod_include/1921; it has been noted by GNATS.

From: Dean Gaudet <dg...@arctic.org>
To: Peter Jakobi <ja...@informatik.tu-muenchen.de>
Cc: Rubinstein Dmitry <di...@wisdom.weizmann.ac.il>, apbugs@apache.org
Subject: Re: mod_include/1921: '$' is not recognized as 'end of line' in regex matching
Date: Mon, 25 May 1998 18:39:33 -0700 (PDT)

 On Mon, 25 May 1998, Peter Jakobi wrote:
 
 > 2249 mod_include 1.2.5 onward Noncr apache open sw-bug jakobi@informatik.tu-muenchen.de SSI regex error: /^$/ should only match undef'd or empty vars 2249
 > 1921 Synopsis:       '$' is not recognized as 'end of line' in regex matching
 
 Try this...  I screwed up during the security patches in 1.2.5.  I've
 already committed this fix to 1.2.7-dev and 1.3b8-dev.  Tell me if it does
 the job for you.
 
 Dean
 
 Index: modules/standard/mod_include.c
 ===================================================================
 RCS file: /export/home/cvs/apache-1.3/src/modules/standard/mod_include.c,v
 retrieving revision 1.91
 diff -u -r1.91 mod_include.c
 --- mod_include.c	1998/05/20 19:41:11	1.91
 +++ mod_include.c	1998/05/26 00:51:17
 @@ -532,20 +532,26 @@
  		/* what a pain, too bad there's no table_getn where you can
  		 * pass a non-nul terminated string */
  		l = end_of_var_name - start_of_var_name;
 -		l = (l > sizeof(var) - 1) ? (sizeof(var) - 1) : l;
 -		memcpy(var, start_of_var_name, l);
 -		var[l] = '\0';
 +		if (l != 0) {
 +		    l = (l > sizeof(var) - 1) ? (sizeof(var) - 1) : l;
 +		    memcpy(var, start_of_var_name, l);
 +		    var[l] = '\0';
  
 -		val = table_get(r->subprocess_env, var);
 -		if (val) {
 -		    expansion = val;
 -		    l = strlen(expansion);
 +		    val = table_get(r->subprocess_env, var);
 +		    if (val) {
 +			expansion = val;
 +			l = strlen(expansion);
 +		    }
 +		    else if (leave_name) {
 +			l = in - expansion;
 +		    }
 +		    else {
 +			break;	/* no expansion to be done */
 +		    }
  		}
 -		else if (leave_name) {
 -		    l = in - expansion;
 -		}
  		else {
 -		    break;	/* no expansion to be done */
 +		    /* zero-length variable name causes just the $ to be copied */
 +		    l = 1;
  		}
  		l = (l > end_out - next) ? (end_out - next) : l;
  		memcpy(next, expansion, l);