Skip to content

Commit

Permalink
Must not modify the_index.cache as it may be passed to realloc at som…
Browse files Browse the repository at this point in the history
…e 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>
  • Loading branch information
Keith Packard authored and Junio C Hamano committed Oct 3, 2007
1 parent 96e24ab commit 95af39f
Showing 1 changed file with 2 additions and 1 deletion.
3 changes: 2 additions & 1 deletion builtin-ls-files.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down

0 comments on commit 95af39f

Please sign in to comment.