This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
t/loc_tools.pl: Quit immediately if incompat locale
authorKarl Williamson <khw@cpan.org>
Tue, 10 Jan 2017 18:38:34 +0000 (11:38 -0700)
committerKarl Williamson <khw@cpan.org>
Tue, 10 Jan 2017 18:48:41 +0000 (11:48 -0700)
The design of this was to not continue when presented with a locale that
we have discovered is incompatible with Perl.  Instead it was soldiering
on.  Those incompatibilities could cause segfaults, etc if the libc
isn't fully protected against unexpected input.

t/loc_tools.pl

index bc56af3..4b99c45 100644 (file)
@@ -95,14 +95,14 @@ sub _trylocale ($$$$) { # For use only by other functions in this file!
                                             unless $category =~ / ^ -? \d+ $ /x;
 
         return unless setlocale($category, $locale);
                                             unless $category =~ / ^ -? \d+ $ /x;
 
         return unless setlocale($category, $locale);
-        return if ! $plays_well && ! $allow_incompatible;
+        last if $badutf8 || ! $plays_well;
     }
 
     if ($badutf8) {
         ok(0, "Verify locale name doesn't contain malformed utf8");
         return;
     }
     }
 
     if ($badutf8) {
         ok(0, "Verify locale name doesn't contain malformed utf8");
         return;
     }
-    push @$list, $locale;
+    push @$list, $locale if $plays_well || $allow_incompatible;
 }
 
 sub _decode_encodings { # For use only by other functions in this file!
 }
 
 sub _decode_encodings { # For use only by other functions in this file!