Re: [PATCH] builtin/revert.c: don't dereference a NULL pointer

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Works as advertised. Tests also pass.

Thanks,
Zbyszek

On Mon, Sep 27, 2010 at 12:29:45PM -0500, Brandon Casey wrote:
> From: Brandon Casey <drafnel@xxxxxxxxx>
> 
> cherry-pick will segfault when transplanting a root commit if the --ff
> option is used.  This happens because the "parent" pointer is set to NULL
> when the commit being cherry-picked has no parents.  Later, when "parent"
> is dereferenced, the cherry-pick segfaults.
> 
> Fix this by checking whether "parent" is NULL before dereferencing it and
> add a test for this case of cherry-picking a root commit with --ff.
> 
> Reported-by: Zbyszek Szmek <zbyszek@xxxxxxxxx>
> Signed-off-by: Brandon Casey <casey@xxxxxxxxxxxxxxx>
> ---
>  builtin/revert.c          |    2 +-
>  t/t3506-cherry-pick-ff.sh |   10 ++++++++++
>  2 files changed, 11 insertions(+), 1 deletions(-)
> 
> diff --git a/builtin/revert.c b/builtin/revert.c
> index 4b47ace..57b51e4 100644
> --- a/builtin/revert.c
> +++ b/builtin/revert.c
> @@ -442,7 +442,7 @@ static int do_pick_commit(void)
>  	else
>  		parent = commit->parents->item;
>  
> -	if (allow_ff && !hashcmp(parent->object.sha1, head))
> +	if (allow_ff && parent && !hashcmp(parent->object.sha1, head))
>  		return fast_forward_to(commit->object.sha1, head);
>  
>  	if (parent && parse_commit(parent) < 0)
> diff --git a/t/t3506-cherry-pick-ff.sh b/t/t3506-cherry-pick-ff.sh
> index e17ae71..51ca391 100755
> --- a/t/t3506-cherry-pick-ff.sh
> +++ b/t/t3506-cherry-pick-ff.sh
> @@ -95,4 +95,14 @@ test_expect_success 'cherry pick a merge relative to nonexistent parent with --f
>  	test_must_fail git cherry-pick --ff -m 3 C
>  '
>  
> +test_expect_success 'cherry pick a root commit with --ff' '
> +	git reset --hard first -- &&
> +	git rm file1 &&
> +	echo first >file2 &&
> +	git add file2 &&
> +	git commit --amend -m "file2" &&
> +	git cherry-pick --ff first &&
> +	test "$(git rev-parse --verify HEAD)" = "1df192cd8bc58a2b275d842cede4d221ad9000d1"
> +'
> +
>  test_done
> -- 
> 1.7.3
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]