Skip to content

Commit

Permalink
read_index_from(): catch out of order entries when reading an index file
Browse files Browse the repository at this point in the history
Signed-off-by: Jaime Soriano Pastor <jsorianopastor@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Jaime Soriano Pastor authored and Junio C Hamano committed Aug 29, 2014
1 parent 32f5660 commit 15999d0
Showing 1 changed file with 18 additions and 0 deletions.
18 changes: 18 additions & 0 deletions read-cache.c
Original file line number Diff line number Diff line change
Expand Up @@ -1438,6 +1438,21 @@ static struct cache_entry *create_from_disk(struct ondisk_cache_entry *ondisk,
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! */
int read_index_from(struct index_state *istate, const char *path)
{
Expand Down Expand Up @@ -1499,6 +1514,9 @@ int read_index_from(struct index_state *istate, const char *path)
ce = create_from_disk(disk_ce, &consumed, previous_name);
set_index_entry(istate, i, ce);

if (i > 0)
check_ce_order(istate->cache[i - 1], ce);

src_offset += consumed;
}
strbuf_release(&previous_name_buf);
Expand Down

0 comments on commit 15999d0

Please sign in to comment.