Re: [PATCH 01/17] describe: fix accidental oid/hash type-punning
- From
Jeff King <peff@peff.net>
- Date
- Jun 20, 2019, 18:25 UTC
- Message-ID
- <20190620182527.GB18704@sigill.intra.peff.net>
- In-Reply-To
- <xmqq7e9gp68e.fsf@gitster-ct.c.googlers.com>
On Thu, Jun 20, 2019 at 09:32:49AM -0700, Junio C Hamano wrote:
Show 14 quoted lines
> Jeff King <peff@peff.net> writes: > > > 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. > > Wow. Good eyes. I wouldn't have noticed this (and for the reasons > you stated, it is very tricky for any clever compiler to notice it). > > Impressed.
It only looks impressive in retrospect. It became very obvious when updating the reference to sha1hash(peeled->hash) in the same line, and then scratching my head about why this one was looking at the hash member. But history rewriting lets me re-order it to make myself look good. Thanks, "rebase -i"! :)
-Peff