read_index_from(): catch out of order entries when reading an index file
Signed-off-by: Jaime Soriano Pastor <jsorianopastor@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
32f56600bb
commit
15999d0be8
18
read-cache.c
18
read-cache.c
@ -1438,6 +1438,21 @@ static struct cache_entry *create_from_disk(struct ondisk_cache_entry *ondisk,
|
|||||||
return ce;
|
return ce;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void check_ce_order(struct cache_entry *ce, struct cache_entry *next_ce)
|
||||||
|
{
|
||||||
|
int name_compare = strcmp(ce->name, next_ce->name);
|
||||||
|
if (0 < name_compare)
|
||||||
|
die("unordered stage entries in index");
|
||||||
|
if (!name_compare) {
|
||||||
|
if (!ce_stage(ce))
|
||||||
|
die("multiple stage entries for merged file '%s'",
|
||||||
|
ce->name);
|
||||||
|
if (ce_stage(ce) > ce_stage(next_ce))
|
||||||
|
die("unordered stage entries for '%s'",
|
||||||
|
ce->name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* remember to discard_cache() before reading a different cache! */
|
/* remember to discard_cache() before reading a different cache! */
|
||||||
int read_index_from(struct index_state *istate, const char *path)
|
int read_index_from(struct index_state *istate, const char *path)
|
||||||
{
|
{
|
||||||
@ -1499,6 +1514,9 @@ int read_index_from(struct index_state *istate, const char *path)
|
|||||||
ce = create_from_disk(disk_ce, &consumed, previous_name);
|
ce = create_from_disk(disk_ce, &consumed, previous_name);
|
||||||
set_index_entry(istate, i, ce);
|
set_index_entry(istate, i, ce);
|
||||||
|
|
||||||
|
if (i > 0)
|
||||||
|
check_ce_order(istate->cache[i - 1], ce);
|
||||||
|
|
||||||
src_offset += consumed;
|
src_offset += consumed;
|
||||||
}
|
}
|
||||||
strbuf_release(&previous_name_buf);
|
strbuf_release(&previous_name_buf);
|
||||||
|
Loading…
Reference in New Issue
Block a user