A bug introduced in #8217 (the undefined variable in the
[p5sagit/p5-mst-13.2.git] / sv.c
diff --git a/sv.c b/sv.c
index 3a7bb66..93188df 100644 (file)
--- a/sv.c
+++ b/sv.c
@@ -2957,6 +2957,7 @@ Perl_sv_utf8_upgrade(pTHX_ register SV *sv)
 
     if (hibit) {
        STRLEN len;
+
        if (SvREADONLY(sv) && SvFAKE(sv)) {
            sv_force_normal(sv);
            s = SvPVX(sv);
@@ -2987,10 +2988,13 @@ Perl_sv_utf8_downgrade(pTHX_ register SV* sv, bool fail_ok)
 {
     if (SvPOK(sv) && SvUTF8(sv)) {
         if (SvCUR(sv)) {
-           char *c = SvPVX(sv);
-           STRLEN len = SvCUR(sv);
+           char *s;
+           STRLEN len;
 
-           if (!utf8_to_bytes((U8*)c, &len)) {
+           if (SvREADONLY(sv) && SvFAKE(sv))
+               sv_force_normal(sv);
+           s = SvPV(sv, len);
+           if (!utf8_to_bytes((U8*)s, &len)) {
                if (fail_ok)
                    return FALSE;
                else {
@@ -6705,7 +6709,7 @@ Perl_sv_vsetpvfn(pTHX_ SV *sv, const char *pat, STRLEN patlen, va_list *args, SV
 }
 
 I32
-S_expect_number(char** pattern)
+S_expect_number(pTHX_ char** pattern)
 {
     I32 var = 0;
     switch (**pattern) {
@@ -6717,7 +6721,7 @@ S_expect_number(char** pattern)
     }
     return var;
 }
-#define EXPECT_NUMBER(pattern, var) (var = S_expect_number(&pattern))
+#define EXPECT_NUMBER(pattern, var) (var = S_expect_number(aTHX_ &pattern))
 
 /*
 =for apidoc sv_vcatpvfn
@@ -7367,7 +7371,7 @@ Perl_sv_vcatpvfn(pTHX_ SV *sv, const char *pat, STRLEN patlen, va_list *args, SV
 #endif
                }
            }
-           else 
+           else
                sv_setuv_mg(argsv, (UV)i);
            continue;   /* not "break" */
 
@@ -8876,7 +8880,7 @@ perl_clone_using(PerlInterpreter *proto_perl, UV flags,
 
     if (proto_perl->Ipsig_pend) {
        Newz(0, PL_psig_pend, SIG_SIZE, int);
-    } 
+    }
     else {
        PL_psig_pend    = (int*)NULL;
     }