Web lists-archives.com

Re: [PATCH] ls-files: don't try to prune an empty index

Am 16.07.2017 um 02:28 schrieb Ramsay Jones:

On 15/07/17 21:11, René Scharfe wrote:
Exit early when asked to prune an index that contains no
entries to begin with.  This avoids pointer arithmetic on
istate->cache, which is possibly NULL in that case.

Found with Clang's UBSan.

Signed-off-by: Rene Scharfe <l.s.r@xxxxxx>
  builtin/ls-files.c | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/builtin/ls-files.c b/builtin/ls-files.c
index b8514a0029..adf572da68 100644
--- a/builtin/ls-files.c
+++ b/builtin/ls-files.c
@@ -362,7 +362,7 @@ static void prune_index(struct index_state *istate,
      int pos;
      unsigned int first, last;

-    if (!prefix)
+    if (!prefix || !istate->cache_nr)
      pos = index_name_pos(istate, prefix, prefixlen);
      if (pos < 0)

My patch looked like:

-       if (!prefix)
+       if (!prefix || !istate->cache || istate->cache_nr == 0)

... which is probably a bit 'belt-n-braces'. ;-)

Not checking for !istate->cache at this point is a good thing, I think.
If we have entries, then ->cache must not be NULL, and if it is we'd get
a segfault, notifying us that we have a bug.  We could add an assert to
state this requirement explicitly, but that would be the topic of a
different patch.