apr-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jon Travis <jtra...@p00p.org>
Subject [PATCH: apr_hash.c]
Date Fri, 09 Mar 2001 00:39:44 GMT
apr_hash.c has a very obscure bug in it, though I'm very surprised nobody
has been bitten by it before.  It is possible, when expanding the table, 
to use an old pointer and overwrite the hash entry value upon return from 
find_entry.  Anyway, this small patch fixes it.  I have a testhash.c for 
the tests directory as well, if anyone thinks we need it.

-- Jon



Index: apr_hash.c
===================================================================
RCS file: /home/cvspublic/apr/tables/apr_hash.c,v
retrieving revision 1.16
diff -u -u -r1.16 apr_hash.c
--- apr_hash.c	2001/03/07 17:57:19	1.16
+++ apr_hash.c	2001/03/09 00:32:27
@@ -275,10 +275,7 @@
     he->klen = klen;
     he->val  = val;
     *hep = he;
-    /* check that the collision rate isn't too high */
-    if (++ht->count > ht->max) {
-	expand_array(ht);
-    }
+    ht->count++;
     return hep;
 }
 
@@ -310,6 +307,10 @@
         else {
             /* replace entry */
             (*hep)->val = val;
+            /* check that the collision rate isn't too high */
+            if (ht->count > ht->max) {
+                expand_array(ht);
+            }
         }
     }
     /* else key not present and val==NULL */


Mime
View raw message