This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
[perl #54956] crash on binary-or lvalue operation on qr//
[perl5.git] / doop.c
diff --git a/doop.c b/doop.c
index cd9b3b4..c08f84e 100644 (file)
--- a/doop.c
+++ b/doop.c
@@ -1231,7 +1231,13 @@ Perl_do_vop(pTHX_ I32 optype, SV *sv, SV *left, SV *right)
 
     if (sv != left || (optype != OP_BIT_AND && !SvOK(sv) && !SvGMAGICAL(sv)))
        sv_setpvs(sv, "");      /* avoid undef warning on |= and ^= */
 
     if (sv != left || (optype != OP_BIT_AND && !SvOK(sv) && !SvGMAGICAL(sv)))
        sv_setpvs(sv, "");      /* avoid undef warning on |= and ^= */
-    lsave = lc = SvPV_nomg_const(left, leftlen);
+    if (sv == left) {
+       lsave = lc = SvPV_force_nomg(left, leftlen);
+    }
+    else {
+       lsave = lc = SvPV_nomg_const(left, leftlen);
+       SvPV_force_nomg_nolen(sv);
+    }
     rsave = rc = SvPV_nomg_const(right, rightlen);
 
     /* This need to come after SvPV to ensure that string overloading has
     rsave = rc = SvPV_nomg_const(right, rightlen);
 
     /* This need to come after SvPV to ensure that string overloading has