[perl #8262] //g loops infinitely on tainted data
[p5sagit/p5-mst-13.2.git] / pp.c
diff --git a/pp.c b/pp.c
index 254e840..b260ff1 100644 (file)
--- a/pp.c
+++ b/pp.c
@@ -238,9 +238,14 @@ PP(pp_rv2sv)
                if (SvROK(sv))
                    goto wasref;
            }
+           if (PL_op->op_private & HINT_STRICT_REFS) {
+               if (SvOK(sv))
+                   DIE(aTHX_ PL_no_symref_sv, sv, "a SCALAR");
+               else
+                   DIE(aTHX_ PL_no_usym, "a SCALAR");
+           }
            if (!SvOK(sv)) {
-               if (PL_op->op_flags & OPf_REF ||
-                   PL_op->op_private & HINT_STRICT_REFS)
+               if (PL_op->op_flags & OPf_REF)
                    DIE(aTHX_ PL_no_usym, "a SCALAR");
                if (ckWARN(WARN_UNINITIALIZED))
                    report_uninit(sv);
@@ -258,8 +263,6 @@ PP(pp_rv2sv)
                }
            }
            else {
-               if (PL_op->op_private & HINT_STRICT_REFS)
-                   DIE(aTHX_ PL_no_symref_sv, sv, "a SCALAR");
                gv = (GV*)gv_fetchsv(sv, TRUE, SVt_PV);
            }
        }
@@ -4401,7 +4404,7 @@ PP(pp_split)
     else if (gimme != G_ARRAY)
        ary = GvAVn(PL_defgv);
     else
-       ary = Nullav;
+       ary = NULL;
     if (ary && (gimme != G_ARRAY || (pm->op_pmflags & PMf_ONCE))) {
        realarray = 1;
        PUTBACK;