Commit 052a2ffd by Carlos Martín Nieto

index: check for valid filemodes on add

parent 9331f98a
...@@ -1104,6 +1104,15 @@ int git_index_remove_bypath(git_index *index, const char *path) ...@@ -1104,6 +1104,15 @@ int git_index_remove_bypath(git_index *index, const char *path)
return 0; return 0;
} }
static bool valid_filemode(const int filemode)
{
return (filemode == GIT_FILEMODE_BLOB ||
filemode == GIT_FILEMODE_BLOB_EXECUTABLE ||
filemode == GIT_FILEMODE_LINK ||
filemode == GIT_FILEMODE_COMMIT);
}
int git_index_add(git_index *index, const git_index_entry *source_entry) int git_index_add(git_index *index, const git_index_entry *source_entry)
{ {
git_index_entry *entry = NULL; git_index_entry *entry = NULL;
...@@ -1111,6 +1120,11 @@ int git_index_add(git_index *index, const git_index_entry *source_entry) ...@@ -1111,6 +1120,11 @@ int git_index_add(git_index *index, const git_index_entry *source_entry)
assert(index && source_entry && source_entry->path); assert(index && source_entry && source_entry->path);
if (!valid_filemode(source_entry->mode)) {
giterr_set(GITERR_INDEX, "invalid filemode");
return -1;
}
if ((ret = index_entry_dup(&entry, source_entry)) < 0 || if ((ret = index_entry_dup(&entry, source_entry)) < 0 ||
(ret = index_insert(index, &entry, 1)) < 0) (ret = index_insert(index, &entry, 1)) < 0)
return ret; return ret;
......
...@@ -152,3 +152,18 @@ void test_index_filemodes__trusted(void) ...@@ -152,3 +152,18 @@ void test_index_filemodes__trusted(void)
git_index_free(index); git_index_free(index);
} }
void test_index_filemodes__invalid(void)
{
git_index *index;
git_index_entry entry;
cl_git_pass(git_repository_index(&index, g_repo));
entry.path = "foo";
entry.mode = GIT_OBJ_BLOB;
cl_git_fail(git_index_add(index, &entry));
entry.mode = GIT_FILEMODE_BLOB;
cl_git_pass(git_index_add(index, &entry));
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment