From 2ee7ff23ce9c3ff6c920b68b5f25682d1e76e5e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20K=C4=99pie=C5=84?= Date: Tue, 10 Dec 2019 10:31:33 +0100 Subject: [PATCH] Only use LC_ALL=C where intended The LC_ALL=C assignments in the "idna" system test, which were only meant to affect a certain subset of checks, in fact persist throughout all the subsequent checks in that system test. That affects the test's behavior and is misleading. When the "VARIABLE=value command ..." syntax is used in a shell script, in order for the variable assignment to only apply to "command", the latter must be an external binary; otherwise, the VARIABLE=value assignment persists for all subsequent commands in a script: $ cat foo.sh #!/bin/sh foo() { /bin/sh bar.sh } BAR="baz0" BAR="baz1" /bin/sh bar.sh echo "foo: BAR=${BAR}" BAR="baz2" foo echo "foo: BAR=${BAR}" $ cat bar.sh #!/bin/sh echo "bar: BAR=${BAR}" $ /bin/sh foo.sh bar: BAR=baz1 foo: BAR=baz0 bar: BAR=baz2 foo: BAR=baz2 $ Fix by saving the value of LC_ALL before the relevant set of checks in the "idna" system test, restoring it afterwards, and dropping the "LC_ALL=C command ..." syntax. --- bin/tests/system/idna/tests.sh | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/bin/tests/system/idna/tests.sh b/bin/tests/system/idna/tests.sh index fe8ae5551d..486216662d 100644 --- a/bin/tests/system/idna/tests.sh +++ b/bin/tests/system/idna/tests.sh @@ -252,16 +252,19 @@ idna_enabled_test() { # is displayed as the corresponding A-label. # # The "+[no]idnout" flag has no effect in these cases. + saved_LC_ALL="${LC_ALL}" + LC_ALL="C" text="Checking valid A-label in C locale" label="xn--nxasmq6b.com" - if command -v idn2 >/dev/null && ! LC_ALL=C idn2 -d "$label" >/dev/null 2>/dev/null; then - LC_ALL=C idna_test "$text" "" "$label" "$label." - LC_ALL=C idna_test "$text" "+noidnin +noidnout" "$label" "$label." - LC_ALL=C idna_test "$text" "+noidnin +idnout" "$label" "$label." - LC_ALL=C idna_test "$text" "+idnin +noidnout" "$label" "$label." - LC_ALL=C idna_test "$text" "+idnin +idnout" "$label" "$label." - LC_ALL=C idna_test "$text" "+noidnin +idnout" "$label" "$label." + if command -v idn2 >/dev/null && ! idn2 -d "$label" >/dev/null 2>/dev/null; then + idna_test "$text" "" "$label" "$label." + idna_test "$text" "+noidnin +noidnout" "$label" "$label." + idna_test "$text" "+noidnin +idnout" "$label" "$label." + idna_test "$text" "+idnin +noidnout" "$label" "$label." + idna_test "$text" "+idnin +idnout" "$label" "$label." + idna_test "$text" "+noidnin +idnout" "$label" "$label." fi + LC_ALL="${saved_LC_ALL}"