lldp: handle NULL values in lldp_neighbor_id_hash()

g_str_hash() can not be called with NULL. Ensure that we don't crash.
Thereby, refactor the hashing algorithm because the chassis-id and
port-id are small numbers and xor-ing can cancel them easily.
This commit is contained in:
Thomas Haller 2016-02-28 14:37:09 +01:00
parent c130a3b39a
commit 06252c9863

View file

@ -126,11 +126,13 @@ static guint
lldp_neighbor_id_hash (gconstpointer ptr)
{
const LLDPNeighbor *neigh = ptr;
guint hash;
return g_str_hash (neigh->chassis_id) ^
g_str_hash (neigh->port_id) ^
neigh->chassis_id_type ^
(neigh->port_id_type * 33);
hash = 23423423u + ((guint) (neigh->chassis_id ? g_str_hash (neigh->chassis_id) : 12321u));
hash = (hash * 33u) + ((guint) (neigh->port_id ? g_str_hash (neigh->port_id) : 34342343u));
hash = (hash * 33u) + ((guint) neigh->chassis_id_type);
hash = (hash * 33u) + ((guint) neigh->port_id_type);
return hash;
}
static gboolean