You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by dg...@hyperreal.org on 1997/12/30 20:03:19 UTC

cvs commit: apachen/src/main util.c

dgaudet     97/12/30 11:03:19

  Modified:    .        STATUS
               src      CHANGES
               src/main util.c
  Log:
  Fix O(n^2) problem with no2slash()
  
  Reviewed by:	Marc Slemko, Brian Behlendorf
  
  Revision  Changes    Path
  1.42      +1 -4      apachen/STATUS
  
  Index: STATUS
  ===================================================================
  RCS file: /export/home/cvs/apachen/STATUS,v
  retrieving revision 1.41
  retrieving revision 1.42
  diff -u -r1.41 -r1.42
  --- STATUS	1997/12/30 18:43:05	1.41
  +++ STATUS	1997/12/30 19:03:14	1.42
  @@ -61,12 +61,9 @@
         (take 2)
       * Ken's [PATCH] for PR#1195 (" in realm names)
       * Jim's [PATCH] ap_cpystrn() function (replace strncpy) Take II
  +    * Dean's [PATCH] 1.3: "DoS" attack
   
   Available Patches:
  -
  -    * Dean's [PATCH] 1.3: "DoS" attack
  -	<Pi...@twinlark.arctic.org>
  -	Status: Dean +1
   
       * [PATCH] mod_digest/1599: proxy authentication using the digest auth
         scheme never succeeds (fwd)
  
  
  
  1.553     +3 -0      apachen/src/CHANGES
  
  Index: CHANGES
  ===================================================================
  RCS file: /export/home/cvs/apachen/src/CHANGES,v
  retrieving revision 1.552
  retrieving revision 1.553
  diff -u -r1.552 -r1.553
  --- CHANGES	1997/12/30 15:10:41	1.552
  +++ CHANGES	1997/12/30 19:03:16	1.553
  @@ -1,5 +1,8 @@
   Changes with Apache 1.3b4
   
  +  *) no2slash() was O(n^2) in the length of the input.  Make it O(n).
  +     [Dean Gaudet]
  +
     *) migration from strncpy() to our "enhanced" version called
        ap_cpystrn() for performance and functionality reasons.
        Located in libap.a.  [Jim Jagielski]
  
  
  
  1.80      +13 -7     apachen/src/main/util.c
  
  Index: util.c
  ===================================================================
  RCS file: /export/home/cvs/apachen/src/main/util.c,v
  retrieving revision 1.79
  retrieving revision 1.80
  diff -u -r1.79 -r1.80
  --- util.c	1997/12/30 15:10:49	1.79
  +++ util.c	1997/12/30 19:03:18	1.80
  @@ -366,14 +366,20 @@
   
   API_EXPORT(void) no2slash(char *name)
   {
  -    register int x, y;
  +    char *d, *s;
   
  -    for (x = 0; name[x];)
  -	if (x && (name[x - 1] == '/') && (name[x] == '/'))
  -	    for (y = x + 1; name[y - 1]; y++)
  -		name[y - 1] = name[y];
  -	else
  -	    x++;
  +    s = d = name;
  +    while (*s) {
  +	if ((*d++ = *s) == '/') {
  +	    do {
  +		++s;
  +	    } while (*s == '/');
  +	}
  +	else {
  +	    ++s;
  +	}
  +    }
  +    *d = '\0';
   }