apply: check git diffs for missing old filenames
2c93286a
(fix "git apply --index ..." not to deref NULL) added a check
for git patches missing a +++ line, preventing a segfault. Check for
missing --- lines as well, and add a test for each case.
Found by Vegard Nossum using AFL.
Original-patch-by: Vegard Nossum <vegard.nossum@oracle.com>
Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
773e3a2e02
commit
4269974179
3
apply.c
3
apply.c
@ -1585,7 +1585,8 @@ static int find_header(struct apply_state *state,
|
|||||||
patch->old_name = xstrdup(patch->def_name);
|
patch->old_name = xstrdup(patch->def_name);
|
||||||
patch->new_name = xstrdup(patch->def_name);
|
patch->new_name = xstrdup(patch->def_name);
|
||||||
}
|
}
|
||||||
if (!patch->is_delete && !patch->new_name) {
|
if ((!patch->new_name && !patch->is_delete) ||
|
||||||
|
(!patch->old_name && !patch->is_new)) {
|
||||||
error(_("git diff header lacks filename information "
|
error(_("git diff header lacks filename information "
|
||||||
"(line %d)"), state->linenr);
|
"(line %d)"), state->linenr);
|
||||||
return -128;
|
return -128;
|
||||||
|
@ -35,4 +35,28 @@ test_expect_success 'apply diff with inconsistent filenames in headers' '
|
|||||||
test_i18ngrep "inconsistent old filename" err
|
test_i18ngrep "inconsistent old filename" err
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success 'apply diff with new filename missing from headers' '
|
||||||
|
cat >missing_new_filename.diff <<-\EOF &&
|
||||||
|
diff --git a/f b/f
|
||||||
|
index 0000000..d00491f
|
||||||
|
--- a/f
|
||||||
|
@@ -0,0 +1 @@
|
||||||
|
+1
|
||||||
|
EOF
|
||||||
|
test_must_fail git apply missing_new_filename.diff 2>err &&
|
||||||
|
test_i18ngrep "lacks filename information" err
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'apply diff with old filename missing from headers' '
|
||||||
|
cat >missing_old_filename.diff <<-\EOF &&
|
||||||
|
diff --git a/f b/f
|
||||||
|
index d00491f..0000000
|
||||||
|
+++ b/f
|
||||||
|
@@ -1 +0,0 @@
|
||||||
|
-1
|
||||||
|
EOF
|
||||||
|
test_must_fail git apply missing_old_filename.diff 2>err &&
|
||||||
|
test_i18ngrep "lacks filename information" err
|
||||||
|
'
|
||||||
|
|
||||||
test_done
|
test_done
|
||||||
|
Loading…
Reference in New Issue
Block a user