summaryrefslogtreecommitdiff
path: root/hashtable.c
diff options
context:
space:
mode:
authorWayne Davison <wayned@samba.org>2010-05-29 09:17:27 -0700
committerWayne Davison <wayned@samba.org>2010-05-29 09:20:26 -0700
commit60c25caa64235ebc82f4684df8759811700da03c (patch)
treef608fbb81a82497f0db88618ac41f96b11689fa7 /hashtable.c
parentc3541d30b699f67764772caa3a6a17f81b2bf2f2 (diff)
downloadrsync-60c25caa64235ebc82f4684df8759811700da03c.tar.gz
Make sure we never try to store a 0 key and tweak key64 init.
Diffstat (limited to 'hashtable.c')
-rw-r--r--hashtable.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/hashtable.c b/hashtable.c
index 219210de..ea858fb7 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 = (short)key64;
+ tbl->key64 = key64 ? 1 : 0;
if (DEBUG_GTE(HASH, 1)) {
char buf[32];
@@ -74,6 +74,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;