Re: [PATCH] [RFC] sparse index: fix use-after-free bug in cache_tree_verify()
From: Derrick Stolee <hidden>
Date: 2021-10-06 20:43:57
On 10/6/2021 3:17 PM, Junio C Hamano wrote:
"Phillip Wood via GitGitGadget" [off-list ref] writes:quoted
@@ -907,6 +917,9 @@ void cache_tree_verify(struct repository *r, struct index_state *istate) if (!istate->cache_tree) return; - verify_one(r, istate, istate->cache_tree, &path); + if (verify_one(r, istate, istate->cache_tree, &path)) { + strbuf_reset(&path); + verify_one(r, istate, istate->cache_tree, &path); + } strbuf_release(&path); }This is just a style thing, but I would find it easier to follow if it just recursed into itself, i.e. - verify_one(...); + if (verify_one(...)) + cache_tree_verify(r, istate); or - verify_one(...); + again: + if (verify_one(...)) + strbuf_reset(&path); + goto again; } } On the other hand, if the new code wants to say "I would retry at most once, otherwise there is something wrong in me", thenquoted
- verify_one(r, istate, istate->cache_tree, &path); + if (verify_one(r, istate, istate->cache_tree, &path)) { + strbuf_reset(&path); + if (verify_one(r, istate, istate->cache_tree, &path)) + BUG("..."); + }would be better.
I'm in favor of this second option. Thanks, -Stolee