From: Junio C Hamano Date: Thu, 24 Jul 2025 22:30:25 GMT Subject: Re: [PATCH] ref-cache: set prefix_state when seeking Message-ID: In-Reply-To: <20250724221136.693120-1-karthik.188@gmail.com> Karthik Nayak writes: > In 090eb5336c (refs: selectively set prefix in the seek functions, > 2025-07-15) we separated the seeking functionality of reference > iterators from the functionality to set prefix to an iterator. This > allows users of ref iterators to seek to a particular reference to > provide pagination support. > > The files-backend, uses the ref-cache iterator to iterate over loose > refs. The iterator tracks directories and entries already processed via > a stack of levels. Each level corresponds to a directory under the files > backend. New levels are added to the stack, and when all entries from a > level is yielded, the corresponding level is popped from the stack. > > To accommodate seeking, we need to populate and traverse the levels to > stop the requested seek marker at the appropriate level and its entry > index. Each level also contains a 'prefix_state' which is used for > prefix matching, this allows the iterator to skip levels/entries which > don't match a prefix. The default value of 'prefix_state' is > PREFIX_CONTAINS_DIR, which yields all entries within a level. When > purely seeking without prefix matching, we want to yield all entries. > The commit however, skips setting the value explicitly. This causes the > MemorySanitizer to issue a 'use-of-uninitialized-value' error when > running 't/t6302-for-each-ref-filter'. > > Set the value explicitly to avoid to fix the issue. > > Reported-by: Kyle Lippincott > Helped-by: Kyle Lippincott > Helped-by: Jeff King > Signed-off-by: Karthik Nayak > --- > > Here is my version of the same patch! Thanks! > > refs/ref-cache.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/refs/ref-cache.c b/refs/ref-cache.c > index 1d95b56d40..ceef3a2008 100644 > --- a/refs/ref-cache.c > +++ b/refs/ref-cache.c > @@ -527,6 +527,7 @@ static int cache_ref_iterator_seek(struct ref_iterator *ref_iterator, > level = &iter->levels[iter->levels_nr++]; > level->dir = dir; > level->index = -1; > + level->prefix_state = PREFIX_CONTAINS_DIR; > } else { > /* reduce the index so the leaf node is iterated over */ > if (cmp <= 0 && !slash)