[perl #77692] substr causes panic: sv_len_utf8 cache...
pp_substr contains this comment, which was added in perl 5.0 alpha 2
(commit
79072805bf63):
PUSHs(TARG); /* avoid SvSETMAGIC here */
Calling set-magic when substr returns an lvalue will cause its argu-
ment to be stringified even if the lvalue is not assigned to. That’s
why set-magic has to be avoided.
But the result is that utf8 caches (stored in magic) on TARG are not
reset properly.
Since substr lvalues now follow a different code path (and do not use
TARG at all), it’s perfectly safe to call set-magic at this point.
It’s also the right thing to do in case of other types of magic that
might get attached to TARG.