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-5cb71233fd97tags/json-c-0.10-20120530
@@ -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) | * Add handling of surrogate pairs (json_tokener.c, test4.c, Makefile.am) | ||||
Brent Miller, bdmiller at yahoo dash inc dot com | Brent Miller, bdmiller at yahoo dash inc dot com | ||||
* Correction to comment describing printbuf_memappend in printbuf.h | * Correction to comment describing printbuf_memappend in printbuf.h | ||||
@@ -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 h = t->hash_fn(k); | ||||
unsigned long n = h % t->size; | unsigned long n = h % t->size; | ||||
int count = 0; | |||||
t->lookups++; | t->lookups++; | ||||
while( 1 ) { | |||||
while( count < t->size ) { | |||||
if(t->table[n].k == LH_EMPTY) return NULL; | if(t->table[n].k == LH_EMPTY) return NULL; | ||||
if(t->table[n].k != LH_FREED && | if(t->table[n].k != LH_FREED && | ||||
t->equal_fn(t->table[n].k, k)) return &t->table[n]; | t->equal_fn(t->table[n].k, k)) return &t->table[n]; | ||||
if(++n == t->size) n = 0; | if(++n == t->size) n = 0; | ||||
count++; | |||||
} | } | ||||
return NULL; | return NULL; | ||||
} | } | ||||