Browse Source

Must not modify the_index.cache as it may be passed to realloc at some point.

The index cache is not static, growing as new entries are added. If
entries are added after prune_cache is called, cache will no longer
point at the base of the allocation, and realloc will not be happy.

I verified that this was the only place in the current source which
modified any index_state.cache elements aside from the alloc/realloc
calls in read-cache by changing the type of the element to 'struct
cache_entry ** const cache' and recompiling.

A more efficient patch would create a separate 'cache_base' value to
track the allocation and then fix things up when reallocation was
necessary, instead of the brute-force memmove used here.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Keith Packard 18 years ago committed by Junio C Hamano
parent
commit
95af39fcb2
  1. 3
      builtin-ls-files.c

3
builtin-ls-files.c

@ -280,7 +280,8 @@ static void prune_cache(const char *prefix) @@ -280,7 +280,8 @@ static void prune_cache(const char *prefix)

if (pos < 0)
pos = -pos-1;
active_cache += pos;
memmove(active_cache, active_cache + pos,
(active_nr - pos) * sizeof(struct cache_entry *));
active_nr -= pos;
first = 0;
last = active_nr;

Loading…
Cancel
Save