hashing: always use signed chars

Our hashing of non-ASCII strings was undefined due to the fact that
'char' is signed on some platforms, unsigned on others.  Always use a
signed char.

Discovered by Alexander Larsson.

https://bugzilla.gnome.org/show_bug.cgi?id=658806
This commit is contained in:
Ryan Lortie 2011-09-12 08:06:13 -04:00
parent a5dd6fcc4f
commit 92652ac791
2 changed files with 2 additions and 2 deletions

View File

@ -93,7 +93,7 @@ djb_hash (const gchar *key)
guint32 hash_value = 5381;
while (*key)
hash_value = hash_value * 33 + *key++;
hash_value = hash_value * 33 + *(signed char *)key++;
return hash_value;
}

View File

@ -254,7 +254,7 @@ gvdb_table_lookup (GvdbTable *file,
return NULL;
for (key_length = 0; key[key_length]; key_length++)
hash_value = (hash_value * 33) + key[key_length];
hash_value = (hash_value * 33) + ((signed char *) key)[key_length];
if (!gvdb_table_bloom_filter (file, hash_value))
return NULL;