diff options
-rw-r--r-- | pp.c | 3 | ||||
-rw-r--r-- | t/re/substr.t | 14 |
2 files changed, 14 insertions, 3 deletions
@@ -3540,7 +3540,8 @@ PP(pp_substr) } } SPAGAIN; - PUSHs(TARG); /* avoid SvSETMAGIC here */ + SvSETMAGIC(TARG); + PUSHs(TARG); RETURN; bound_fail: diff --git a/t/re/substr.t b/t/re/substr.t index 4f34b2660c..a0cac6ab70 100644 --- a/t/re/substr.t +++ b/t/re/substr.t @@ -22,9 +22,9 @@ $SIG{__WARN__} = sub { } }; -require './test.pl'; +BEGIN { require './test.pl'; } -plan(361); +plan(362); run_tests() unless caller; @@ -735,3 +735,13 @@ $destroyed = 0; $x = bless({}, 'Class'); } is($destroyed, 1, 'Timely scalar destruction with lvalue substr'); + +# [perl #77692] UTF8 cache not being reset when TARG is reused +ok eval { + local ${^UTF8CACHE} = -1; + for my $i (0..1) + { + my $dummy = length(substr("\x{100}",0,$i)); + } + 1 +}, 'UTF8 cache is reset when TARG is reused [perl #77692]'; |