toke.c: [RT#73022] Make \N{...} UTF-8 clean.
authorBrian Fraser <fraserbn@gmail.com>
Sun, 28 Oct 2012 16:23:35 +0000 (10:23 -0600)
committerKarl Williamson <public@khwilliamson.com>
Sun, 11 Nov 2012 17:11:34 +0000 (10:11 -0700)
t/lib/charnames/alias
toke.c

index 0424f62..fc13342 100644 (file)
@@ -361,3 +361,11 @@ OPTIONS regex
 Invalid character in charnames alias definition; marked by <-- HERE in '4<-- HERE e_ACUTE'
 Invalid character in charnames alias definition; marked by <-- HERE in 'e_A,<-- HERE CUTE'
 Invalid character in charnames alias definition; marked by <-- HERE in 'e_ACUT(?:\x{d7}|\x{C3}\x{97})<-- HERE E'
+########
+# RT#73022, \N{...} interprets ... as octets rather than UTF-8
+use utf8;
+use open qw( :utf8 :std );
+use charnames ":full", ":alias" => { ニ => "KATAKANA LETTER NI" };
+print "ok\n" if "\N{ニ}" eq "\x{30cb}";
+EXPECT
+ok
diff --git a/toke.c b/toke.c
index 311fab2..91d7f1d 100644 (file)
--- a/toke.c
+++ b/toke.c
@@ -2642,7 +2642,7 @@ S_get_and_check_backslash_N_name(pTHX_ const char* s, const char* const e)
     STRLEN len;
     const char *str;
     const char* i = s;
-    SV* res = newSVpvn(s, e - s);
+    SV* res = newSVpvn_flags(s, e - s, UTF ? SVf_UTF8 : 0);
 
     HV * table;
     SV **cvp;