- runtests: fix `codeset-utf8` feature detection. Before this patch it
detected if the calling environment had UTF-8 enabled. If not, UTF-8
tests were all skipped. After this patch, it detects if UTF-8 is
supported by the calling environment regardless of what's currently
enabled.
Follow-up to
0b70b23ef4d007031bc2ae4fc63d5ed9136bc2b5 #15039
- GHA/linux: sync `codeset-test` to also reset `LC_CTYPE` and
`LC_NUMBER`. To give it more spin.
Follow-up to
c221c0ee5935497168c52686a9d8cc87b45bbca9 #17938
- GHA/macos: fix to actually enable `codeset-test`. Also set `LC_ALL`,
which seems necessary to trigger issues.
Follow-up to
c221c0ee5935497168c52686a9d8cc87b45bbca9 #17938
- tests/data: replace `LC_CTYPE` env with `LC_ALL` in all tests
requiring a locale. Also to avoid potential issues with a blank or
unset `LC_ALL`, as seen earlier. And to ensure that the override works
on all platforms (as tested in CI.)
Slight downside is that this now resets the language/culture to `C`.
Ref:
b4c9982382469398115cc0e3e0747e79db083455 #4743
Ref:
23208e330ac0c2164d59971baf79e87c45da1840 #4738
- replace `en_US.UTF-8` with `C.UTF-8` to be language/culture-agnostic.
- TEST-SUITE.md: drop `UTF-8` as a requirement for tests.
Tests shall work (or least be skipped) without UTF-8 support.
Tests requiring UTF-8 locale:
165, 962, 963, 964, 965, 966, 967, 1448, 1560, 2046, 2047
Tests requiring UTF-8 locale, but passing without one anyway:
955, 956, 957, 958, 959, 960, 961, 968, 1034, 1035
Spec 1997: https://pubs.opengroup.org/onlinepubs/
7908799/xbd/envvar.html
Spec 2008: https://pubs.opengroup.org/onlinepubs/
9699919799/basedefs/V1_chap08.html
Ref:
c221c0ee5935497168c52686a9d8cc87b45bbca9 #17938
Ref:
7cf8414fabc3063cc3d2121eacec4a6daa4164a8
Ref:
4c140a56283703161e5f26ae022bad694a481603
Ref:
28faaacee287b019bcf2961da3bf2f91d331bcbd #2436
Ref:
ecd1d020abdae3c3ce3643ddab3106501e62e7c0
Closes #17988
fi
fi
[ -x ~/venv/bin/activate ] && source ~/venv/bin/activate
- [[ "${MATRIX_INSTALL_STEPS}" = *'codeset-test'* ]] && export LC_ALL=C
+ if [[ "${MATRIX_INSTALL_STEPS}" = *'codeset-test'* ]]; then
+ locale || true
+ export LC_ALL=C
+ export LC_CTYPE=C
+ export LC_NUMERIC=fr_FR.UTF-8
+ fi
if [ "${MATRIX_BUILD}" = 'cmake' ]; then
cmake --build bld --verbose --target "${TEST_TARGET}"
else
MATRIX_BUILD: ${{ matrix.build.generate && 'cmake' || 'autotools' }}
MATRIX_COMPILER: '${{ matrix.compiler }}'
MATRIX_INSTALL: '${{ matrix.build.install }}'
+ MATRIX_INSTALL_STEPS: '${{ matrix.build.install_steps }}'
MATRIX_MACOS_VERSION_MIN: '${{ matrix.build.macos-version-min }}'
strategy:
fail-fast: false
MATRIX_CHKPREFILL: '${{ matrix.build.chkprefill }}'
MATRIX_CONFIGURE: '${{ matrix.build.configure }}'
MATRIX_GENERATE: '${{ matrix.build.generate }}'
- MATRIX_INSTALL_STEPS: '${{ matrix.build.install_steps }}'
run: |
if [[ "${MATRIX_COMPILER}" = 'gcc'* ]]; then
sysroot="$("${CC}" --print-sysroot)" # Must match the SDK gcc was built for
TFLAGS="-j20 ${TFLAGS}"
source ~/venv/bin/activate
if [[ "${MATRIX_INSTALL_STEPS}" = *'codeset-test'* ]]; then
+ locale || true
+ export LC_ALL=C
export LC_CTYPE=C
export LC_NUMERIC=fr_FR.UTF-8
fi
- `openssl` (the command line tool, for generating test server certificates)
- `openssh` or `SunSSH` (for SCP and SFTP tests)
- `nghttpx` (for HTTP/2 and HTTP/3 tests)
- - An available `en_US.UTF-8` locale
### Installation of impacket
codeset-utf8
</features>
<setenv>
-LC_ALL=
-LC_CTYPE=en_US.UTF-8
+LC_ALL=C.UTF-8
</setenv>
<name>
HTTP over proxy with malformatted IDN host name
codeset-utf8
</features>
<setenv>
-LC_ALL=
-LC_CTYPE=en_US.UTF-8
+LC_ALL=C.UTF-8
</setenv>
<name>
HTTP over proxy with too long IDN host name
codeset-utf8
</features>
<setenv>
-LC_ALL=en_US.UTF-8
-LC_CTYPE=en_US.UTF-8
+LC_ALL=C.UTF-8
</setenv>
<name>
Redirect following to UTF-8 IDN host name
none
</server>
<setenv>
-LC_ALL=en_US.UTF-8
+LC_ALL=C.UTF-8
</setenv>
<features>
file
codeset-utf8
</features>
<setenv>
-LC_ALL=en_US.UTF-8
-LC_CTYPE=en_US.UTF-8
+LC_ALL=C.UTF-8
</setenv>
<name>
HTTP over proxy with IDN host name
codeset-utf8
</features>
<setenv>
-LC_ALL=en_US.UTF-8
-LC_CTYPE=en_US.UTF-8
+LC_ALL=C.UTF-8
</setenv>
<name>
Connection reuse with IDN host name
codeset-utf8
</features>
<setenv>
-LC_ALL=en_US.UTF-8
-LC_CTYPE=en_US.UTF-8
+LC_ALL=C.UTF-8
</setenv>
<name>
Connection reuse with IDN host name over HTTP proxy
codeset-utf8
</features>
<setenv>
-LC_ALL=en_US.UTF-8
-LC_CTYPE=en_US.UTF-8
+LC_ALL=C.UTF-8
</setenv>
<name>
SMTP without SMTPUTF8 support - UTF-8 based sender (local part only)
codeset-utf8
</features>
<setenv>
-LC_ALL=en_US.UTF-8
-LC_CTYPE=en_US.UTF-8
+LC_ALL=C.UTF-8
</setenv>
<name>
SMTP without SMTPUTF8 support - UTF-8 based recipient (local part only)
codeset-utf8
</features>
<setenv>
-LC_ALL=en_US.UTF-8
-LC_CTYPE=en_US.UTF-8
+LC_ALL=C.UTF-8
</setenv>
<name>
SMTP VRFY without SMTPUTF8 support - UTF-8 recipient (local part only)
codeset-utf8
</features>
<setenv>
-LC_ALL=en_US.UTF-8
-LC_CTYPE=en_US.UTF-8
+LC_ALL=C.UTF-8
</setenv>
<name>
SMTP external VRFY without SMTPUTF8 - UTF-8 recipient (local part only)
codeset-utf8
</features>
<setenv>
-LC_ALL=en_US.UTF-8
-LC_CTYPE=en_US.UTF-8
+LC_ALL=C.UTF-8
</setenv>
<name>
SMTP without SMTPUTF8 support - UTF-8 based sender (host part only)
codeset-utf8
</features>
<setenv>
-LC_ALL=en_US.UTF-8
-LC_CTYPE=en_US.UTF-8
+LC_ALL=C.UTF-8
</setenv>
<name>
SMTP without SMTPUTF8 support - UTF-8 based recipient (host part only)
codeset-utf8
</features>
<setenv>
-LC_ALL=en_US.UTF-8
-LC_CTYPE=en_US.UTF-8
+LC_ALL=C.UTF-8
</setenv>
<name>
SMTP external VRFY without SMTPUTF8 - UTF-8 recipient (host part only)
codeset-utf8
</features>
<setenv>
-LC_ALL=en_US.UTF-8
-LC_CTYPE=en_US.UTF-8
+LC_ALL=C.UTF-8
</setenv>
<name>
SMTP without SMTPUTF8 support - UTF-8 based sender (host part only)
codeset-utf8
</features>
<setenv>
-LC_ALL=en_US.UTF-8
-LC_CTYPE=en_US.UTF-8
+LC_ALL=C.UTF-8
</setenv>
<name>
SMTP without SMTPUTF8 support (IDN) - UTF-8 recipient (host part only)
codeset-utf8
</features>
<setenv>
-LC_ALL=en_US.UTF-8
-LC_CTYPE=en_US.UTF-8
+LC_ALL=C.UTF-8
</setenv>
<name>
SMTP external VRFY without SMTPUTF8 (IDN) - UTF-8 recipient (host part)
codeset-utf8
</features>
<setenv>
-LC_ALL=en_US.UTF-8
-LC_CTYPE=en_US.UTF-8
+LC_ALL=C.UTF-8
</setenv>
<name>
SMTP with SMTPUTF8 support - UTF-8 based sender
codeset-utf8
</features>
<setenv>
-LC_ALL=en_US.UTF-8
-LC_CTYPE=en_US.UTF-8
+LC_ALL=C.UTF-8
</setenv>
<name>
SMTP with SMTPUTF8 support - UTF-8 based recipient
codeset-utf8
</features>
<setenv>
-LC_ALL=en_US.UTF-8
-LC_CTYPE=en_US.UTF-8
+LC_ALL=C.UTF-8
</setenv>
<name>
SMTP external VRFY with SMTPUTF8 support
codeset-utf8
</features>
<setenv>
-LC_ALL=en_US.UTF-8
-LC_CTYPE=en_US.UTF-8
+LC_ALL=C.UTF-8
</setenv>
<name>
SMTP VRFY with SMTPUTF8 support
use Digest::MD5 qw(md5);
use List::Util 'sum';
use I18N::Langinfo qw(langinfo CODESET);
+use POSIX qw(setlocale LC_ALL);
use serverhelp qw(
server_exe
push @protocols, 'none';
}
+#######################################################################
+# Check if the operating environment supports UTF-8.
+sub is_utf8_supported {
+ my $result;
+ my $old_LC_ALL;
+ my $was_defined = defined $ENV{'LC_ALL'};
+ if($was_defined) {
+ $old_LC_ALL = $ENV{'LC_ALL'};
+ }
+ setlocale(LC_ALL, $ENV{'LC_ALL'} = "C.UTF-8");
+ $result = lc(langinfo(CODESET())) eq "utf-8";
+ if($was_defined) {
+ $ENV{'LC_ALL'} = $old_LC_ALL;
+ }
+ else {
+ delete $ENV{'LC_ALL'};
+ }
+ return $result;
+}
#######################################################################
# Check & display information about curl and the host the test suite runs on.
# Use this as a proxy for any cryptographic authentication
$feature{"crypto"} = $feature{"NTLM"} || $feature{"Kerberos"} || $feature{"SPNEGO"};
$feature{"local-http"} = servers::localhttp();
- $feature{"codeset-utf8"} = lc(langinfo(CODESET())) eq "utf-8";
+ $feature{"codeset-utf8"} = is_utf8_supported();
if($feature{"codeset-utf8"}) {
$ENV{'CURL_TEST_HAVE_CODESET_UTF8'} = 1;
}