describe: fix accidental oid/hash type-punning
authorJeff King <peff@peff.net>
Thu, 20 Jun 2019 07:40:50 +0000 (03:40 -0400)
committerJunio C Hamano <gitster@pobox.com>
Thu, 20 Jun 2019 16:23:53 +0000 (09:23 -0700)
The find_commit_name() function passes an object_id.hash as the key of a
hashmap. That ends up in commit_name_neq(), which then feeds it to
oideq(). Which means we should actually be the whole "struct object_id".

It works anyway because pointers to the two are interchangeable. And
because we're going through a layer of void pointers, the compiler
doesn't notice the type mismatch.

But it's worth cleaning up (especially since once we switch away from
sha1hash() on the same line, accessing the hash member will look doubly
out of place).

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/describe.c
index 1409cedce2fb08dc24b57db9e3a3591c3760d8af..0a5cde00a20bae2997dfe2e9b26cc10190d3d186 100644 (file)
@@ -76,7 +76,7 @@ static int commit_name_neq(const void *unused_cmp_data,
 
 static inline struct commit_name *find_commit_name(const struct object_id *peeled)
 {
-       return hashmap_get_from_hash(&names, sha1hash(peeled->hash), peeled->hash);
+       return hashmap_get_from_hash(&names, sha1hash(peeled->hash), peeled);
 }
 
 static int replace_name(struct commit_name *e,