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

Re: [PATCH 5/6] t1500: avoid setting environment variables outside of tests

From
Jeff King <peff@peff.net>
Date
May 10, 2016, 18:39 UTC
Message-ID
<20160510183955.GA16211@sigill.intra.peff.net>
In-Reply-To
<20160510052055.32924-6-sunshine@sunshineco.com>
On Tue, May 10, 2016 at 01:20:54AM -0400, Eric Sunshine wrote:
Show 15 quoted lines
> diff --git a/t/t1500-rev-parse.sh b/t/t1500-rev-parse.sh
> index c058aa4..525e6d3 100755
> --- a/t/t1500-rev-parse.sh
> +++ b/t/t1500-rev-parse.sh
> @@ -7,11 +7,13 @@ test_description='test git rev-parse'
>  test_rev_parse () {
>  	dir=
>  	bare=
> +	env=
>  	while :
>  	do
>  		case "$1" in
>  		-C) dir="-C $2"; shift; shift ;;
>  		-b) bare="$2"; shift; shift ;;
> +		-g) env="GIT_DIR=$2; export GIT_DIR"; shift; shift ;;

This will expand $2 inside $env, which is later eval'd. So funny things happen if there are spaces or metacharacters. It looks like you only use it with short relative paths ("../repo.git", etc), which is OK, but this would probably break badly if we ever used absolute paths.

I don't know if it's worth worrying about or not. The usual solution is something like:

  env_git_dir=$2
  env='GIT_DIR=$env_git_dir; export GIT_DIR'
  ...
  eval "$env"
Show 6 quoted lines
> @@ -36,6 +38,8 @@ test_rev_parse () {
>  	do
>  		expect="$1"
>  		test_expect_success "$name: $o" '
> +			test_when_finished "sane_unset GIT_DIR" &&
> +			eval $env &&

I was surprised not to see quoting around $env here, but it probably doesn't matter (I think it may affect how some whitespace is treated, but the contents of $env are pretty tame).

This will set up the sane_unset regardless of whether $env does anything. Would it make more sense to stick the test_when_finished inside $env? You could use regular unset then, too, since you know the variable would be set.

-Peff
Previous: Eric SunshineNext: Eric Sunshine
Message 9 of 24 in “modernize t1500”
  1. 0/6 modernize t1500Eric Sunshine, May 10, 2016
  2. 1/6 t1500: test_rev_parse: facilitate future test enhancementsEric Sunshine, May 10, 2016
  3. 2/6 t1500: reduce dependence upon global stateEric Sunshine, May 10, 2016
  4. 3/6 t1500: avoid changing working directory outside of testsEric Sunshine, May 10, 2016
  5. 4/6 t1500: avoid setting configuration options outside of testsEric Sunshine, May 10, 2016
  6. Eric SunshineMay 10, 2016
  7. Junio C HamanoMay 10, 2016
  8. 5/6 t1500: avoid setting environment variables outside of testsEric Sunshine, May 10, 2016
  9. Jeff KingMay 10, 2016
  10. Eric SunshineMay 10, 2016
  11. Junio C HamanoMay 10, 2016
  12. Eric SunshineMay 10, 2016
  13. Eric SunshineMay 10, 2016
  14. Jeff KingMay 10, 2016
  15. Junio C HamanoMay 10, 2016
  16. SZEDER GáborMay 10, 2016
  17. Junio C HamanoMay 10, 2016
  18. Eric SunshineMay 10, 2016
  19. 6/6 t1500: be considerate to future potential testsEric Sunshine, May 10, 2016
  20. Junio C HamanoMay 10, 2016
  21. Junio C HamanoMay 10, 2016
  22. Junio C HamanoMay 10, 2016
  23. Eric SunshineMay 16, 2016
  24. Junio C HamanoMay 16, 2016

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.