Re: [RFC 04/11] coccicheck: detect hashmap_entry.hash assignment
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Sep 9, 2019, 18:15 UTC
- Message-ID
- <xmqqsgp5jpyx.fsf@gitster-ct.c.googlers.com>
- In-Reply-To
- <20190908074953.kux7zz4y7iolqko4@whir>
Eric Wong <e@80x24.org> writes:
Show 10 quoted lines
> Eric Wong <e@80x24.org> wrote: >> By renaming the "hash" field to "_hash", it's easy to spot >> improper initialization of hashmap_entry structs which >> can leave "hashmap_entry.next" uninitialized. > > Junio, I'm planning to reroll this series. > (Sorry for not following up sooner) > > Would you prefer I drop 04/11 "hashmap_entry: detect improper initialization" > in favor of the following? Thanks.
Automation is good ;-) FWIW, I do not mind the original 04/11 myself too much, though.
Thanks.
Show 36 quoted lines
> ---------8<--------
> Subject: [PATCH 4/11] coccicheck: detect hashmap_entry.hash assignment
>
> Assigning hashmap_entry.hash manually leaves hashmap_entry.next
> uninitialized, which can be dangerous once the hashmap_entry is
> inserted into a hashmap. Detect those assignments and use
> hashmap_entry_init, instead.
>
> Signed-off-by: Eric Wong <e@80x24.org>
> ---
> contrib/coccinelle/hashmap.cocci | 16 ++++++++++++++++
> 1 file changed, 16 insertions(+)
> create mode 100644 contrib/coccinelle/hashmap.cocci
>
> diff --git a/contrib/coccinelle/hashmap.cocci b/contrib/coccinelle/hashmap.cocci
> new file mode 100644
> index 0000000000..d69e120ccf
> --- /dev/null
> +++ b/contrib/coccinelle/hashmap.cocci
> @@ -0,0 +1,16 @@
> +@ hashmap_entry_init_usage @
> +expression E;
> +struct hashmap_entry HME;
> +@@
> +- HME.hash = E;
> ++ hashmap_entry_init(&HME, E);
> +
> +@@
> +identifier f !~ "^hashmap_entry_init$";
> +expression E;
> +struct hashmap_entry *HMEP;
> +@@
> + f(...) {<...
> +- HMEP->hash = E;
> ++ hashmap_entry_init(HMEP, E);
> + ...>}