mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-03 20:02:04 +00:00
patch: differentiate not found and invalid patches
This commit is contained in:
parent
17572f67ed
commit
94e488a056
@ -671,7 +671,8 @@ static int parse_patch_header(
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
error = parse_err("no header in patch file");
|
giterr_set(GITERR_PATCH, "no patch found");
|
||||||
|
error = GIT_ENOTFOUND;
|
||||||
|
|
||||||
done:
|
done:
|
||||||
return error;
|
return error;
|
||||||
|
@ -4,16 +4,11 @@
|
|||||||
|
|
||||||
#include "patch_common.h"
|
#include "patch_common.h"
|
||||||
|
|
||||||
void test_patch_parse__original_to_change_middle(void)
|
static void ensure_patch_validity(git_patch *patch)
|
||||||
{
|
{
|
||||||
git_patch *patch;
|
|
||||||
const git_diff_delta *delta;
|
const git_diff_delta *delta;
|
||||||
char idstr[GIT_OID_HEXSZ+1] = {0};
|
char idstr[GIT_OID_HEXSZ+1] = {0};
|
||||||
|
|
||||||
cl_git_pass(git_patch_from_buffer(
|
|
||||||
&patch, PATCH_ORIGINAL_TO_CHANGE_MIDDLE,
|
|
||||||
strlen(PATCH_ORIGINAL_TO_CHANGE_MIDDLE), NULL));
|
|
||||||
|
|
||||||
cl_assert((delta = git_patch_get_delta(patch)) != NULL);
|
cl_assert((delta = git_patch_get_delta(patch)) != NULL);
|
||||||
cl_assert_equal_i(2, delta->nfiles);
|
cl_assert_equal_i(2, delta->nfiles);
|
||||||
|
|
||||||
@ -30,6 +25,80 @@ void test_patch_parse__original_to_change_middle(void)
|
|||||||
git_oid_nfmt(idstr, delta->new_file.id_abbrev, &delta->new_file.id);
|
git_oid_nfmt(idstr, delta->new_file.id_abbrev, &delta->new_file.id);
|
||||||
cl_assert_equal_s(idstr, "cd8fd12");
|
cl_assert_equal_s(idstr, "cd8fd12");
|
||||||
cl_assert_equal_i(0, delta->new_file.size);
|
cl_assert_equal_i(0, delta->new_file.size);
|
||||||
|
}
|
||||||
|
|
||||||
|
void test_patch_parse__original_to_change_middle(void)
|
||||||
|
{
|
||||||
|
git_patch *patch;
|
||||||
|
|
||||||
|
cl_git_pass(git_patch_from_buffer(
|
||||||
|
&patch, PATCH_ORIGINAL_TO_CHANGE_MIDDLE,
|
||||||
|
strlen(PATCH_ORIGINAL_TO_CHANGE_MIDDLE), NULL));
|
||||||
|
ensure_patch_validity(patch);
|
||||||
git_patch_free(patch);
|
git_patch_free(patch);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void test_patch_parse__leading_and_trailing_garbage(void)
|
||||||
|
{
|
||||||
|
git_patch *patch;
|
||||||
|
const char *leading = "This is some leading garbage.\n"
|
||||||
|
"Maybe it's email headers?\n"
|
||||||
|
"\n"
|
||||||
|
PATCH_ORIGINAL_TO_CHANGE_MIDDLE;
|
||||||
|
const char *trailing = PATCH_ORIGINAL_TO_CHANGE_MIDDLE
|
||||||
|
"\n"
|
||||||
|
"This is some trailing garbage.\n"
|
||||||
|
"Maybe it's an email signature?\n";
|
||||||
|
const char *both = "Here's some leading garbage\n"
|
||||||
|
PATCH_ORIGINAL_TO_CHANGE_MIDDLE
|
||||||
|
"And here's some trailing.\n";
|
||||||
|
|
||||||
|
cl_git_pass(git_patch_from_buffer(&patch, leading, strlen(leading),
|
||||||
|
NULL));
|
||||||
|
ensure_patch_validity(patch);
|
||||||
|
git_patch_free(patch);
|
||||||
|
|
||||||
|
cl_git_pass(git_patch_from_buffer(&patch, trailing, strlen(trailing),
|
||||||
|
NULL));
|
||||||
|
ensure_patch_validity(patch);
|
||||||
|
git_patch_free(patch);
|
||||||
|
|
||||||
|
cl_git_pass(git_patch_from_buffer(&patch, both, strlen(both),
|
||||||
|
NULL));
|
||||||
|
ensure_patch_validity(patch);
|
||||||
|
git_patch_free(patch);
|
||||||
|
}
|
||||||
|
|
||||||
|
void test_patch_parse__nonpatches_fail_with_notfound(void)
|
||||||
|
{
|
||||||
|
git_patch *patch;
|
||||||
|
|
||||||
|
cl_git_fail_with(GIT_ENOTFOUND,
|
||||||
|
git_patch_from_buffer(&patch, PATCH_NOT_A_PATCH,
|
||||||
|
strlen(PATCH_NOT_A_PATCH), NULL));
|
||||||
|
}
|
||||||
|
|
||||||
|
void test_patch_parse__invalid_patches_fails(void)
|
||||||
|
{
|
||||||
|
git_patch *patch;
|
||||||
|
|
||||||
|
cl_git_fail_with(GIT_ERROR,
|
||||||
|
git_patch_from_buffer(&patch, PATCH_CORRUPT_GIT_HEADER,
|
||||||
|
strlen(PATCH_CORRUPT_GIT_HEADER), NULL));
|
||||||
|
cl_git_fail_with(GIT_ERROR,
|
||||||
|
git_patch_from_buffer(&patch,
|
||||||
|
PATCH_CORRUPT_MISSING_NEW_FILE,
|
||||||
|
strlen(PATCH_CORRUPT_MISSING_NEW_FILE), NULL));
|
||||||
|
cl_git_fail_with(GIT_ERROR,
|
||||||
|
git_patch_from_buffer(&patch,
|
||||||
|
PATCH_CORRUPT_MISSING_OLD_FILE,
|
||||||
|
strlen(PATCH_CORRUPT_MISSING_OLD_FILE), NULL));
|
||||||
|
cl_git_fail_with(GIT_ERROR,
|
||||||
|
git_patch_from_buffer(&patch, PATCH_CORRUPT_NO_CHANGES,
|
||||||
|
strlen(PATCH_CORRUPT_NO_CHANGES), NULL));
|
||||||
|
cl_git_fail_with(GIT_ERROR,
|
||||||
|
git_patch_from_buffer(&patch,
|
||||||
|
PATCH_CORRUPT_MISSING_HUNK_HEADER,
|
||||||
|
strlen(PATCH_CORRUPT_MISSING_HUNK_HEADER), NULL));
|
||||||
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user