Skip to content

Commit 78ed1d2

Browse files
Michael J Grubergitster
authored andcommitted
t0300: work around bug in dash 0.5.6
The construct 'while IFS== read' makes dash 0.5.6 execute read without changing IFS, which results in test breakages all over the place in t0300. Neither dash 0.5.5.1 and older nor dash 0.5.7 and newer are affected: The problem was introduded resp. fixed by the commits 55c46b7 ([BUILTIN] Honor tab as IFS whitespace when splitting fields in readcmd, 2009-08-11) 1d806ac ([VAR] Do not poplocalvars prematurely on regular utilities, 2010-05-27) in http://git.kernel.org/?p=utils/dash/dash.git Putting 'IFS==' before that line makes all versions of dash work. This looks like a dash bug, not a misinterpretation of the standard. However, it's worth working around for two reasons. One, this version of dash was released in Fedora 14-16, so the bug is found in the wild. And two, at least one other shell, Solaris /bin/sh, choked on this by persisting IFS after the read invocation. That is not a shell we usually care about, and I think this use of IFS is acceptable by POSIX (which allows other behavior near "special builtins", but "read" is not one of those). But it seems that this may be a subtle, not-well-tested case for some shells. Given that the workaround is so simple, it's worth just being defensive. Signed-off-by: Michael J Gruber <[email protected]> Signed-off-by: Jeff King <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent fe6c64a commit 78ed1d2

File tree

1 file changed

+4
-1
lines changed

1 file changed

+4
-1
lines changed

t/t0300-credentials.sh

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,13 @@ test_expect_success 'setup helper scripts' '
88
cat >dump <<-\EOF &&
99
whoami=`echo $0 | sed s/.*git-credential-//`
1010
echo >&2 "$whoami: $*"
11-
while IFS== read key value; do
11+
OIFS=$IFS
12+
IFS==
13+
while read key value; do
1214
echo >&2 "$whoami: $key=$value"
1315
eval "$key=$value"
1416
done
17+
IFS=$OIFS
1518
EOF
1619
1720
cat >git-credential-useless <<-\EOF &&

0 commit comments

Comments
 (0)