]> git.ipfire.org Git - thirdparty/json-c.git/commitdiff
* Fix subtle bug in linkhash where lookup could hang after all slots
authorMichael Clark <michael@metaparadigm.com>
Thu, 27 Aug 2009 06:40:00 +0000 (06:40 +0000)
committerMichael Clark <michael@metaparadigm.com>
Thu, 27 Aug 2009 06:40:00 +0000 (06:40 +0000)
    were filled then successively freed.
    Spotted by Jean-Marc Naud, j dash m at newtraxtech dot com

git-svn-id: http://svn.metaparadigm.com/svn/json-c/trunk@54 327403b1-1117-474d-bef2-5cb71233fd97

ChangeLog
linkhash.c

index a99c7edd934a207941d3ce26b06ec23db4bb0bf8..2011cc2eacf1da3ff975d42b37704f314233a0aa 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+0.10
+  * Fix subtle bug in linkhash where lookup could hang after all slots
+    were filled then successively freed.
+    Spotted by Jean-Marc Naud, j dash m at newtraxtech dot com
+  * Make json_object_from_file take const char *filename
+    Spotted by Vikram Raj V, vsagar at attinteractive dot com
   * Add handling of surrogate pairs (json_tokener.c, test4.c, Makefile.am)
     Brent Miller, bdmiller at yahoo dash inc dot com
   * Correction to comment describing printbuf_memappend in printbuf.h
index 998cf7d1cc2f374dc1ddb7e4233db77e7849f045..3a9ba0e08f4d678f17d59010f802330a3f6dc92d 100644 (file)
@@ -158,13 +158,15 @@ struct lh_entry* lh_table_lookup_entry(struct lh_table *t, const void *k)
 {
        unsigned long h = t->hash_fn(k);
        unsigned long n = h % t->size;
+       int count = 0;
 
        t->lookups++;
-       while( 1 ) {
+       while( count < t->size ) {
                if(t->table[n].k == LH_EMPTY) return NULL;
                if(t->table[n].k != LH_FREED &&
                   t->equal_fn(t->table[n].k, k)) return &t->table[n];
                if(++n == t->size) n = 0;
+               count++;
        }
        return NULL;
 }