From: Philip Oakley Date: Sat, 25 Feb 2017 11:59:33 GMT Subject: Re: [PATCH 1/2] apply: guard against renames of non-existant empty files Message-ID: In-Reply-To: <20170225101307.24067-1-vegard.nossum@oracle.com> From: "Vegard Nossum" > If we have a patch like the one in the new test-case, then we will "the one in the new test-case" needs a clearer reference to the particular case so that future readers will know what it refers to. Noticed while browsing the commit message.. ..reads further; Maybe it's "AFL (American fuzzy lop) found a failure. Add a new test case and fix the fault"? [same for patch 2] > try to rename a non-existant empty file, i.e. patch->old_name will > be NULL. In this case, a NULL entry will be added to fn_table, which > is not allowed (a subsequent binary search will die with a NULL > pointer dereference). > > The patch file is completely bogus as it tries to rename something > that is known not to exist, so we can throw an error for this. > > Found using AFL. > > Signed-off-by: Vegard Nossum > --- > apply.c | 3 ++- > t/t4154-apply-git-header.sh | 15 +++++++++++++++ > 2 files changed, 17 insertions(+), 1 deletion(-) > create mode 100755 t/t4154-apply-git-header.sh > > diff --git a/apply.c b/apply.c > index 0e2caeab9..cbf7cc7f2 100644 > --- a/apply.c > +++ b/apply.c > @@ -1585,7 +1585,8 @@ static int find_header(struct apply_state *state, > patch->old_name = xstrdup(patch->def_name); > patch->new_name = xstrdup(patch->def_name); > } > - if (!patch->is_delete && !patch->new_name) { > + if ((!patch->is_delete && !patch->new_name) || > + (patch->is_rename && !patch->old_name)) { > error(_("git diff header lacks filename information " > "(line %d)"), state->linenr); > return -128; > diff --git a/t/t4154-apply-git-header.sh b/t/t4154-apply-git-header.sh > new file mode 100755 > index 000000000..d651af4a2 > --- /dev/null > +++ b/t/t4154-apply-git-header.sh > @@ -0,0 +1,15 @@ > +#!/bin/sh > + > +test_description='apply with git/--git headers' > + > +. ./test-lib.sh > + > +test_expect_success 'apply old mode / rename new' ' > + test_must_fail git apply << EOF > +diff --git a/1 b/1 > +old mode 0 > +rename new 0 > +EOF > +' > + > +test_done > -- > 2.12.0.rc0 -- Philip