mirror of
https://github.com/libgit2/libgit2.git
synced 2026-06-22 06:26:26 +00:00
tests: verify adding index conflicts with invalid filemodes fails
Commit 581d5492f (Fix leak in index.c, 2018-08-16) was fixing a memory
leak in our code adding conflicts to the index when the added index
entries have an invalid file mode. The memory leak was previously
undiscovered as there are no tests covering this scenario, which is now
being added by this commit.
This commit is contained in:
@@ -91,6 +91,48 @@ void test_index_conflicts__add_fixes_incorrect_stage(void)
|
||||
cl_assert(git_index_entry_stage(conflict_entry[2]) == 3);
|
||||
}
|
||||
|
||||
void test_index_conflicts__add_detects_invalid_filemode(void)
|
||||
{
|
||||
git_index_entry ancestor_entry, our_entry, their_entry;
|
||||
git_index_entry *conflict_entry[3];
|
||||
int i;
|
||||
|
||||
cl_assert(git_index_entrycount(repo_index) == 8);
|
||||
|
||||
memset(&ancestor_entry, 0x0, sizeof(git_index_entry));
|
||||
memset(&our_entry, 0x0, sizeof(git_index_entry));
|
||||
memset(&their_entry, 0x0, sizeof(git_index_entry));
|
||||
|
||||
conflict_entry[0] = &ancestor_entry;
|
||||
conflict_entry[1] = &our_entry;
|
||||
conflict_entry[2] = &their_entry;
|
||||
|
||||
for (i = 0; i < 3; i++) {
|
||||
ancestor_entry.path = "test-one.txt";
|
||||
ancestor_entry.mode = 0100644;
|
||||
GIT_IDXENTRY_STAGE_SET(&ancestor_entry, 3);
|
||||
git_oid_fromstr(&ancestor_entry.id, CONFLICTS_ONE_ANCESTOR_OID);
|
||||
|
||||
our_entry.path = "test-one.txt";
|
||||
our_entry.mode = 0100644;
|
||||
GIT_IDXENTRY_STAGE_SET(&our_entry, 1);
|
||||
git_oid_fromstr(&our_entry.id, CONFLICTS_ONE_OUR_OID);
|
||||
|
||||
their_entry.path = "test-one.txt";
|
||||
their_entry.mode = 0100644;
|
||||
GIT_IDXENTRY_STAGE_SET(&their_entry, 2);
|
||||
git_oid_fromstr(&their_entry.id, CONFLICTS_ONE_THEIR_OID);
|
||||
|
||||
/* Corrupt the conflict entry's mode */
|
||||
conflict_entry[i]->mode = 027431745;
|
||||
|
||||
cl_git_fail(git_index_conflict_add(repo_index, &ancestor_entry, &our_entry, &their_entry));
|
||||
}
|
||||
|
||||
cl_assert(git_index_entrycount(repo_index) == 8);
|
||||
}
|
||||
|
||||
|
||||
void test_index_conflicts__add_removes_stage_zero(void)
|
||||
{
|
||||
git_index_entry ancestor_entry, our_entry, their_entry;
|
||||
|
||||
Reference in New Issue
Block a user