From: Wayne Davison Date: Sat, 26 Jun 2010 18:32:14 +0000 (-0700) Subject: Make sure that the code doesn't try to use an illegal key. X-Git-Tag: v3.0.8pre1~76 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b384d71e53e6f4eed3cb1811551773285f6b0a69;p=thirdparty%2Frsync.git Make sure that the code doesn't try to use an illegal key. --- diff --git a/hashtable.c b/hashtable.c index ed29ee91..0524e24b 100644 --- a/hashtable.c +++ b/hashtable.c @@ -41,7 +41,7 @@ struct hashtable *hashtable_create(int size, int key64) tbl->size = size; tbl->entries = 0; tbl->node_size = node_size; - tbl->key64 = key64; + tbl->key64 = key64 ? 1 : 0; return tbl; } @@ -60,6 +60,11 @@ void *hashtable_find(struct hashtable *tbl, int64 key, int allocate_if_missing) struct ht_int32_node *node; uint32 ndx; + if (key64 ? key == 0 : (int32)key == 0) { + rprintf(FERROR, "Internal hashtable error: illegal key supplied!\n"); + exit_cleanup(RERR_MESSAGEIO); + } + if (allocate_if_missing && tbl->entries > HASH_LOAD_LIMIT(tbl->size)) { void *old_nodes = tbl->nodes; int size = tbl->size * 2; @@ -142,7 +147,7 @@ void *hashtable_find(struct hashtable *tbl, int64 key, int allocate_if_missing) if (key64) ((struct ht_int64_node*)node)->key = key; else - node->key = key; + node->key = (int32)key; tbl->entries++; return node; }