diff options
author | =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= <ppisar@redhat.com> | 2013-11-08 02:17:08 +0100 |
---|---|---|
committer | James E Keenan <jkeenan@cpan.org> | 2013-11-08 02:17:08 +0100 |
commit | 35e037e8469de48b1a1e6c7d85c65b342abdfbcf (patch) | |
tree | 9da754756065ce91ac1015a633b9d9bdda67ac21 /dist/Locale-Maketext | |
parent | c584250ab6520bd51e5a66eb42033a7a43507bde (diff) | |
download | perl-35e037e8469de48b1a1e6c7d85c65b342abdfbcf.tar.gz |
Commit 1735f6f53ca19f99c6e9e39496c486af323ba6a8 started to escape all
back-slashes which breaks case when lexicon translations contain substition
and literals with eval-non-safe characters. E.g. these translations:
"[_1]foo\\n\n" => "[_1]bar\\n\n",
'[_1]foo\n' => '[_1]aÄa\n',
got doubled back-slashes on the maketext() output.
This patch de-escapes escaped backslashes if the literal is compiled as
function argument.
Fixes RT #120457.
Diffstat (limited to 'dist/Locale-Maketext')
-rw-r--r-- | dist/Locale-Maketext/lib/Locale/Maketext.pm | 3 | ||||
-rw-r--r-- | dist/Locale-Maketext/t/91_backslash.t | 33 |
2 files changed, 35 insertions, 1 deletions
diff --git a/dist/Locale-Maketext/lib/Locale/Maketext.pm b/dist/Locale-Maketext/lib/Locale/Maketext.pm index a21d679785..c2bd723e91 100644 --- a/dist/Locale-Maketext/lib/Locale/Maketext.pm +++ b/dist/Locale-Maketext/lib/Locale/Maketext.pm @@ -27,7 +27,7 @@ BEGIN { } -$VERSION = '1.24'; +$VERSION = '1.25'; @ISA = (); $MATCH_SUPERS = 1; @@ -570,6 +570,7 @@ sub _compile { $c[-1] = ''; # reuse this slot } else { + $c[-1] =~ s/\\\\/\\/g; push @code, ' $c[' . $#c . "],\n"; push @c, ''; # new chunk } diff --git a/dist/Locale-Maketext/t/91_backslash.t b/dist/Locale-Maketext/t/91_backslash.t new file mode 100644 index 0000000000..f96edd1564 --- /dev/null +++ b/dist/Locale-Maketext/t/91_backslash.t @@ -0,0 +1,33 @@ +#!/usr/bin/perl -Tw + +use strict; +use Test::More tests => 6; + +BEGIN { + use_ok( 'Locale::Maketext' ); +} + +use utf8; + +{ + package My::Localize; + our @ISA = ('Locale::Maketext'); +} +{ + package My::Localize::cs_cz; + our @ISA = ('My::Localize'); + our %Lexicon = ( + '[_1]foo1\n' => '[_1]bar\n', + '[_1]foo2\n' => '[_1]běr\n', + 'foo2\n' => 'aěa\n', + "[_1]foo\\n\n" => "[_1]bar\\n\n", + ); + keys %Lexicon; # dodges the 'used only once' warning +} + +my $lh = My::Localize->get_handle('cs_cz'); +isa_ok( $lh, 'My::Localize::cs_cz' ); +is( $lh->maketext('[_1]foo1\n', 'arg'), 'argbar\n', 'Safe parameterized' ); +is( $lh->maketext('[_1]foo2\n', 'arg'), 'argběr\n', 'Unicode parameterized' ); +is( $lh->maketext('foo2\n'), 'aěa\n', 'Unicode literal' ); +is( $lh->maketext("[_1]foo\\n\n", 'arg'), "argbar\\n\n", 'new line parameterized' ); |