[dconf: 2/3] hashing: always use signed chars
- From: Ryan Lortie <ryanl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [dconf: 2/3] hashing: always use signed chars
- Date: Mon, 12 Sep 2011 12:16:44 +0000 (UTC)
commit 92652ac79177bcdced5f01122debb50eabdb3e2c
Author: Ryan Lortie <desrt desrt ca>
Date: Mon Sep 12 08:06:13 2011 -0400
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
gvdb-builder.c | 2 +-
gvdb-reader.c | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
---
diff --git a/gvdb-builder.c b/gvdb-builder.c
index f65ca7d..91adec6 100644
--- a/gvdb-builder.c
+++ b/gvdb-builder.c
@@ -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;
}
diff --git a/gvdb-reader.c b/gvdb-reader.c
index 73f4f13..57816af 100644
--- a/gvdb-reader.c
+++ b/gvdb-reader.c
@@ -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;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]