threads / patch / 52362

patchFix broken test with zsh as /bin/sh

Subject: [PATCH 0/1] Fix broken test with zsh as /bin/sh

## tl;dr

2 messages between Nov 27, 2019 and Nov 27, 2019. Diffs are folded; open one to read it.

replies: 1people: 1as markdown or json

brian m. carlson· Nov 27, 2019, 19:01 UTC · lore

macOS Catalina provides zsh as one of the three options for /bin/sh (the other two being bash and dash). Therefore, it's possible that people will use zsh as /bin/sh and expect it to work when running Git and the testsuite.

There are two things required for this to happen. One is a patch to zsh to make it run all items in a pipeline in a subshell in sh mode, just as POSIX requires. I've sent a patch[0] upstream to make that happen; without that patch, multiple tests fail.

The other is this patch, which addresses a difference in behavior between bash and dash, which strip out NUL bytes from the output of a command substitution, and zsh, which does not. Both behaviors are permitted by POSIX, so this patch makes the test work in either case.

[0] https://www.zsh.org/mla/workers/2019/msg00960.html
brian m. carlson (1):
  t9001: avoid including non-trailing NUL bytes in variables
 t/t9001-send-email.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
brian m. carlson· Nov 27, 2019, 19:01 UTC · re: brian m. carlson · lore

[PATCH 1/1] t9001: avoid including non-trailing NUL bytes in variables

In this test, we have a command substitution whose output starts with a NUL byte. bash and dash strip out any NUL bytes from the output; zsh does not. As a consequence, zsh fails this test, since the command line argument we use the variable in is truncated by the NUL byte.

POSIX says of a command substitution that if "the output contains any null bytes, the behavior is unspecified," so all of the shells are in compliance with POSIX. To make our code more portable, let's avoid prefacing our variables with NUL bytes and instead leave only the trailing one behind.

Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
---
 t/t9001-send-email.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
Show changes to t/t9001-send-email.sh +1 −1
diff --git a/t/t9001-send-email.sh b/t/t9001-send-email.sh
index 997f90b42b..51be0b8cd6 100755
--- a/t/t9001-send-email.sh
+++ b/t/t9001-send-email.sh
@@ -2066,7 +2066,7 @@ test_expect_success $PREREQ 'leading and trailing whitespaces are removed' '
 	TO1=$(echo "QTo 1 <to1@example.com>" | q_to_tab) &&
 	TO2=$(echo "QZto2" | qz_to_tab_space) &&
 	CC1=$(echo "cc1" | append_cr) &&
-	BCC1=$(echo "Q bcc1@example.com Q" | q_to_nul) &&
+	BCC1=$(echo " bcc1@example.com Q" | q_to_nul) &&
 	git send-email \
 	--dry-run \
 	--from="	Example <from@example.com>" \

← back to recent threads