mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2024-12-25 15:06:14 +01:00
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:
parent
a5dd6fcc4f
commit
92652ac791
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user