diff options
Diffstat (limited to 'sv.c')
-rw-r--r-- | sv.c | 12 |
1 files changed, 5 insertions, 7 deletions
@@ -3936,18 +3936,15 @@ Perl_sv_utf8_upgrade_flags(pTHX_ register SV *sv, I32 flags) U8 *s, *t, *e; int hibit = 0; - if (!sv) - return 0; - if (!SvPOK(sv)) { STRLEN len = 0; - (void) sv_2pv_flags(sv,&len, flags); - if (!SvPOK(sv)) - return len; + (void) SvPV_force(sv,len); } - if (SvUTF8(sv)) + if (SvUTF8(sv)) { + SvSETMAGIC(sv); return SvCUR(sv); + } if (SvIsCOW(sv)) { sv_force_normal_flags(sv, 0); @@ -3982,6 +3979,7 @@ Perl_sv_utf8_upgrade_flags(pTHX_ register SV *sv, I32 flags) /* Mark as UTF-8 even if no hibit - saves scanning loop */ SvUTF8_on(sv); } + SvSETMAGIC(sv); return SvCUR(sv); } |