This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Fix edge case test failure in ext/POSIX/t/mb.t
authorDominic Hargreaves <dom@earth.li>
Fri, 7 Jun 2019 09:04:26 +0000 (10:04 +0100)
committerKarl Williamson <khw@cpan.org>
Sat, 11 Apr 2020 23:44:22 +0000 (17:44 -0600)
This new test fails in an environment where LANG is set to one thing and
LC_ALL is set to another, and where LANG is set to a locale which is
not installed in the environment in question.

Such a test environment is arguably broken, but appears in common
chroot setups such as Debian's sbuild tool where LANG is inherited from
the parent environment, and LC_ALL is used to override it.

(Committer rebased the patch)

This fixes GH #17039

ext/POSIX/t/mb.t

index fd3ee5c..84d477f 100644 (file)
@@ -35,10 +35,13 @@ SKIP: {
       unless locales_enabled('LC_CTYPE');
 
     skip("no utf8 locale available", 4) unless $utf8_locale;
-
+    # Here we need to influence LC_CTYPE, but it's not enough to just
+    # set this because LC_ALL could override it. It's also not enough
+    # to delete LC_ALL because it could be used to override other
+    # variables such as LANG in the underlying test environment.
+    #¬†Continue to set LC_CTYPE just in case...
     local $ENV{LC_CTYPE} = $utf8_locale;
-    local $ENV{LC_ALL};
-    delete $ENV{LC_ALL};
+    local $ENV{LC_ALL} = $utf8_locale;
 
     fresh_perl_like(
         'use POSIX; print &POSIX::MB_CUR_MAX',
@@ -84,8 +87,7 @@ SKIP: {
     skip("no utf8 locale available", 3) unless $utf8_locale;
 
     local $ENV{LC_CTYPE} = $utf8_locale;
-    local $ENV{LC_ALL};
-    delete $ENV{LC_ALL};
+    local $ENV{LC_ALL} = $utf8_locale;
     local $ENV{PERL_UNICODE};
     delete $ENV{PERL_UNICODE};
 
@@ -128,8 +130,7 @@ SKIP: {
     skip("no utf8 locale available", 1) unless $utf8_locale;
 
     local $ENV{LC_CTYPE} = $utf8_locale;
-    local $ENV{LC_ALL};
-    delete $ENV{LC_ALL};
+    local $ENV{LC_ALL} = $utf8_locale;
     local $ENV{PERL_UNICODE};
     delete $ENV{PERL_UNICODE};