git/list[1] front-page[2] threads[3] people[4] search[5] about
 

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

From
Zbyszek Szmek <zbyszek@in.waw.pl>
Date
Sep 28, 2010, 10:03 UTC
Message-ID
<20100928100340.GC6756@in.waw.pl>
In-Reply-To
<op5xt5mU5aQhqmO9a_49Hhsxhtg2iW_beFHkzibXMWI534-yRKsOVCvL_25O3xS3R6hTEbD06Kc@cipher.nrlssc.navy.mil>
Works as advertised. Tests also pass.

Thanks, Zbyszek

On Mon, Sep 27, 2010 at 12:29:45PM -0500, Brandon Casey wrote:
Show 51 quoted lines
> From: Brandon Casey <drafnel@gmail.com>
> 
> 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@in.waw.pl>
> Signed-off-by: Brandon Casey <casey@nrlssc.navy.mil>
> ---
>  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
Previous: Brandon Casey
Message 4 of 4 in “rebase -i segmentation fault and another problem”
  1. Zbyszek SzmekSep 27, 2010
  2. Brandon CaseySep 27, 2010
  3. builtin/revert.c: don't dereference a NULL pointerBrandon Casey, Sep 27, 2010
  4. Zbyszek SzmekSep 28, 2010

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.