diff options
-rw-r--r-- | doop.c | 1 | ||||
-rw-r--r-- | t/op/unisprintf.t | 15 |
2 files changed, 15 insertions, 1 deletions
@@ -697,6 +697,7 @@ Perl_do_sprintf(pTHX_ SV *sv, I32 len, SV **sarg) char *pat = SvPV(*sarg, patlen); bool do_taint = FALSE; + SvUTF8_off(sv); if (DO_UTF8(*sarg)) SvUTF8_on(sv); sv_vsetpvfn(sv, pat, patlen, Null(va_list*), sarg + 1, len - 1, &do_taint); diff --git a/t/op/unisprintf.t b/t/op/unisprintf.t index 5c9bbb0a47..3c5f574b62 100644 --- a/t/op/unisprintf.t +++ b/t/op/unisprintf.t @@ -6,7 +6,7 @@ BEGIN { require "test.pl"; } -plan tests => 23; +plan tests => 25; $a = "B\x{fc}f"; $b = "G\x{100}r"; @@ -124,3 +124,16 @@ $c = 0x200; is((sprintf "%x %x %d", unpack("U*", $a), length($a)), "1234 5678 2", '\x{1234}%s \x{5678}'); } + +{ + # check that utf8ness doesn't "accumulate" + + my $w = "w\x{fc}"; + my $sprintf; + + $sprintf = sprintf "%s%s", $w, "$w\x{100}"; + is(substr($sprintf,0,2), $w, "utf8 echo"); + + $sprintf = sprintf "%s%s", $w, "$w\x{100}"; + is(substr($sprintf,0,2), $w, "utf8 echo echo"); +} |