This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Remove get-magic from $/
authorFather Chrysostomos <sprout@cpan.org>
Sun, 8 Feb 2015 20:45:12 +0000 (12:45 -0800)
committerFather Chrysostomos <sprout@cpan.org>
Sun, 8 Feb 2015 22:53:11 +0000 (14:53 -0800)
and use a different approach to prevent $/ from being set to a bad
value.

This should fix ticket #123739.  Commit v5.21.8-197-g5fe499a made
$/’s get-magic read PL_rs, so that the croak when setting $/ to a
bad value would not leave $/ with that bad value, in order to fix
bug #123218.

Some CPAN modules do not like $/ reading PL_rs that way.  So we
have to change this back.  I am not actually removing the get-
magic, but just making it a no-op, as it was before.  The set-
magic now sets $/ back to its previous value before croaking.

mg.c

diff --git a/mg.c b/mg.c
index 237b404..d2a8db0 100644 (file)
--- a/mg.c
+++ b/mg.c
@@ -1103,9 +1103,7 @@ Perl_magic_get(pTHX_ SV *sv, MAGIC *mg)
            sv_setiv(sv, (IV)IoPAGE(GvIOp(PL_defoutgv)));
        break;
     case ':':
-       break;
     case '/':
-        sv_setsv(sv, PL_rs);
        break;
     case '[':
        sv_setiv(sv, 0);
@@ -2869,6 +2867,7 @@ Perl_magic_set(pTHX_ SV *sv, MAGIC *mg)
                         );
                     }
                 } else {
+                    sv_setsv(sv, PL_rs);
               /* diag_listed_as: Setting $/ to %s reference is forbidden */
                     Perl_croak(aTHX_ "Setting $/ to a%s %s reference is forbidden",
                                       *reftype == 'A' ? "n" : "", reftype);