summaryrefslogtreecommitdiff
path: root/sv.c
diff options
context:
space:
mode:
Diffstat (limited to 'sv.c')
-rw-r--r--sv.c12
1 files changed, 5 insertions, 7 deletions
diff --git a/sv.c b/sv.c
index d776e15e6d..ab21d765df 100644
--- a/sv.c
+++ b/sv.c
@@ -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);
}