diff options
author | Derrick Stolee <dstolee@microsoft.com> | 2020-05-07 15:17:33 +0200 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2020-05-08 20:01:27 +0200 |
commit | 0eeb3be4c4b297f9edb94c4741af606df396985d (patch) | |
tree | 3e159228047fe3c644fd69e209d74867843a81f2 /unpack-trees.c | |
parent | sparse-checkout: provide a new reapply subcommand (diff) | |
download | git-0eeb3be4c4b297f9edb94c4741af606df396985d.tar.xz git-0eeb3be4c4b297f9edb94c4741af606df396985d.zip |
unpack-trees: avoid array out-of-bounds error
The loop in warn_conflicted_path() that checks for the count of
entries with the same path uses "i+count" for the array
entry. However, the loop only verifies that the value of count is
below the array size. Fix this by adding i to the condition.
I hit this condition during a test of the in-tree sparse-checkout
feature, so it is exercised by the end of the series.
Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
[jc: readability fix]
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'unpack-trees.c')
-rw-r--r-- | unpack-trees.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/unpack-trees.c b/unpack-trees.c index b43f3e775a..4bd0726eea 100644 --- a/unpack-trees.c +++ b/unpack-trees.c @@ -562,11 +562,11 @@ static int warn_conflicted_path(struct index_state *istate, add_rejected_path(o, WARNING_SPARSE_UNMERGED_FILE, conflicting_path); - /* Find out how many higher stage entries at same path */ - while (++count < istate->cache_nr && - !strcmp(conflicting_path, - istate->cache[i+count]->name)) - /* do nothing */; + /* Find out how many higher stage entries are at same path */ + while ((++count) + i < istate->cache_nr && + !strcmp(conflicting_path, istate->cache[count + i]->name)) + ; /* do nothing */ + return count; } |