[glib: 1/2] hashing: always use signed chars



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]