summaryrefslogtreecommitdiff
path: root/tests/patch/parse.c
diff options
context:
space:
mode:
authorPatrick Steinhardt <ps@pks.im>2019-11-05 22:44:27 +0100
committerPatrick Steinhardt <ps@pks.im>2019-11-05 22:50:41 +0100
commitde543e297d85f1ac700c2e5a83e70b1bd32b9518 (patch)
treeff3c74bd2c255a4bacaf91e665f24611086d49fa /tests/patch/parse.c
parent5d773a1833ef6d0fb2093e00b1cf9bfb668a1ffc (diff)
downloadlibgit2-de543e297d85f1ac700c2e5a83e70b1bd32b9518.tar.gz
patch_parse: fix segfault when header path contains whitespace only
When parsing header paths from a patch, we reject any patches with empty paths as malformed patches. We perform the check whether a path is empty before sanitizing it, though, which may lead to a path becoming empty after the check, e.g. if we have trimmed whitespace. This may lead to a segfault later when any part of our patching logic actually references such a path, which may then be a `NULL` pointer. Fix the issue by performing the check after sanitizing. Add tests to catch the issue as they would have produced a segfault previosuly.
Diffstat (limited to 'tests/patch/parse.c')
-rw-r--r--tests/patch/parse.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/tests/patch/parse.c b/tests/patch/parse.c
index 9067f4a9d..c18b63ab7 100644
--- a/tests/patch/parse.c
+++ b/tests/patch/parse.c
@@ -156,6 +156,20 @@ void test_patch_parse__binary_file_with_missing_paths(void)
strlen(PATCH_BINARY_FILE_WITH_MISSING_PATHS), NULL));
}
+void test_patch_parse__binary_file_with_whitespace_paths(void)
+{
+ git_patch *patch;
+ cl_git_fail(git_patch_from_buffer(&patch, PATCH_BINARY_FILE_WITH_WHITESPACE_PATHS,
+ strlen(PATCH_BINARY_FILE_WITH_WHITESPACE_PATHS), NULL));
+}
+
+void test_patch_parse__binary_file_with_empty_quoted_paths(void)
+{
+ git_patch *patch;
+ cl_git_fail(git_patch_from_buffer(&patch, PATCH_BINARY_FILE_WITH_QUOTED_EMPTY_PATHS,
+ strlen(PATCH_BINARY_FILE_WITH_QUOTED_EMPTY_PATHS), NULL));
+}
+
void test_patch_parse__memory_leak_on_multiple_paths(void)
{
git_patch *patch;