]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Fix hash functions for transport_name in client entry
authorNick Mathewson <nickm@torproject.org>
Tue, 16 Jul 2013 17:59:31 +0000 (13:59 -0400)
committerNick Mathewson <nickm@torproject.org>
Thu, 15 Aug 2013 16:03:35 +0000 (12:03 -0400)
src/or/geoip.c

index b4f54d4eb216f7bd16fc2d0251552f3b4526a12f..21dceed3dad50f0db7ce352173994c4354e223a9 100644 (file)
@@ -486,23 +486,16 @@ static HT_HEAD(clientmap, clientmap_entry_t) client_history =
 static INLINE unsigned
 clientmap_entry_hash(const clientmap_entry_t *a)
 {
-  return ht_improve_hash(tor_addr_hash(&a->addr));
+  unsigned h = tor_addr_hash(&a->addr);
+  if (a->transport_name)
+    h += ht_string_hash(a->transport_name);
+  return ht_improve_hash(h);
 }
 /** Hashtable helper: compare two clientmap_entry_t values for equality. */
 static INLINE int
 clientmap_entries_eq(const clientmap_entry_t *a, const clientmap_entry_t *b)
 {
-  /* If one entry contains a transport and the other doesn't, then
-     they are not equal. */
-  if (a->transport_name && !b->transport_name)
-    return 0;
-  if (!a->transport_name && b->transport_name)
-    return 0;
-  /* If entries contain different transports, they they are not
-     equal. */
-  if (a->transport_name &&
-      b->transport_name &&
-      strcmp(a->transport_name, b->transport_name))
+  if (strcmp_opt(a->transport_name, b->transport_name))
     return 0;
 
   return !tor_addr_compare(&a->addr, &b->addr, CMP_EXACT) &&