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

Re: [PATCH 2/2] stash show: fix segfault with --{include,only}-untracked

From
Junio C Hamano <gitster@pobox.com>
Date
May 12, 2021, 23:48 UTC
Message-ID
<xmqq35urecns.fsf@gitster.g>
In-Reply-To
<24de72b34de45980196ed6df8b64782887e94f36.1620850247.git.liu.denton@gmail.com>
Denton Liu <liu.denton@gmail.com> writes:
Show 8 quoted lines
> When `git stash show --include-untracked` or
> `git stash show --only-untracked` is run on a stash that doesn't include
> an untracked entry, a segfault occurs. This happens because we do not
> check whether the untracked entry is actually present and just attempt
> to blindly dereference it.
>
> Ensure that the untracked entry is present before actually attempting to
> dereference it.
Makes sense.  Thanks.
Show 52 quoted lines
>
> Signed-off-by: Denton Liu <liu.denton@gmail.com>
> ---
>  builtin/stash.c                    |  8 ++++++--
>  t/t3905-stash-include-untracked.sh | 15 +++++++++++++++
>  2 files changed, 21 insertions(+), 2 deletions(-)
>
> diff --git a/builtin/stash.c b/builtin/stash.c
> index 8922a1240c..82e4829d44 100644
> --- a/builtin/stash.c
> +++ b/builtin/stash.c
> @@ -900,10 +900,14 @@ static int show_stash(int argc, const char **argv, const char *prefix)
>  		diff_tree_oid(&info.b_commit, &info.w_commit, "", &rev.diffopt);
>  		break;
>  	case UNTRACKED_ONLY:
> -		diff_root_tree_oid(&info.u_tree, "", &rev.diffopt);
> +		if (info.has_u)
> +			diff_root_tree_oid(&info.u_tree, "", &rev.diffopt);
>  		break;
>  	case UNTRACKED_INCLUDE:
> -		diff_include_untracked(&info, &rev.diffopt);
> +		if (info.has_u)
> +			diff_include_untracked(&info, &rev.diffopt);
> +		else
> +			diff_tree_oid(&info.b_commit, &info.w_commit, "", &rev.diffopt);
>  		break;
>  	}
>  	log_tree_diff_flush(&rev);
> diff --git a/t/t3905-stash-include-untracked.sh b/t/t3905-stash-include-untracked.sh
> index 2e6796725b..1c9765928d 100755
> --- a/t/t3905-stash-include-untracked.sh
> +++ b/t/t3905-stash-include-untracked.sh
> @@ -405,4 +405,19 @@ test_expect_success 'stash show --include-untracked errors on duplicate files' '
>  	test_i18ngrep "worktree and untracked commit have duplicate entries: tracked" err
>  '
>  
> +test_expect_success 'stash show --{include,only}-untracked on stashes without untracked entries' '
> +	git reset --hard &&
> +	git clean -xf &&
> +	>tracked &&
> +	git add tracked &&
> +	git stash &&
> +
> +	git stash show >expect &&
> +	git stash show --include-untracked >actual &&
> +	test_cmp expect actual &&
> +
> +	git stash show --only-untracked >actual &&
> +	test_must_be_empty actual
> +'
> +
>  test_done
Previous: Denton LiuNext: Denton Liu
Message 3 of 4 in “Fixes for dl/stash-show-untracked”
  1. 0/2 Fixes for dl/stash-show-untrackedDenton Liu, May 12, 2021
  2. 2/2 stash show: fix segfault with --{include,only}-untrackedDenton Liu, May 12, 2021
  3. Junio C HamanoMay 12, 2021
  4. 1/2 t3905: correct test titleDenton Liu, May 12, 2021

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.