From: Nick Mathewson Date: Tue, 16 Jul 2013 17:59:31 +0000 (-0400) Subject: Fix hash functions for transport_name in client entry X-Git-Tag: tor-0.2.5.1-alpha~67^2~21 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=34d02484c06f26653563176e4b5db2829ae4bc23;p=thirdparty%2Ftor.git Fix hash functions for transport_name in client entry --- diff --git a/src/or/geoip.c b/src/or/geoip.c index b4f54d4eb2..21dceed3da 100644 --- a/src/or/geoip.c +++ b/src/or/geoip.c @@ -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) &&