[perl #73626] get magic wasn't called on 3rd arg of open
David Mitchell [Sun, 21 Mar 2010 14:17:13 +0000 (14:17 +0000)]
Change f6c77cf1bf4d7cb2c7a64dd7608120b471f84062 introduced
    open($fh,"+<",undef)
but in the process stopped calling mg_get() on the third arg,
so tied values etc weren't getting processed

doio.c
t/io/open.t

diff --git a/doio.c b/doio.c
index 87f2da0..eba7b54 100644 (file)
--- a/doio.c
+++ b/doio.c
@@ -214,7 +214,8 @@ Perl_do_openn(pTHX_ GV *gv, register const char *oname, I32 len, int as_raw,
                goto say_false;
            }
 #endif /* USE_STDIO */
-           name = SvOK(*svp) ? savesvpv (*svp) : savepvs ("");
+           name = (SvOK(*svp) || SvGMAGICAL(*svp)) ?
+                       savesvpv (*svp) : savepvs ("");
            SAVEFREEPV(name);
        }
        else {
index 1a58327..443aab3 100644 (file)
@@ -10,7 +10,7 @@ $|  = 1;
 use warnings;
 use Config;
 
-plan tests => 108;
+plan tests => 109;
 
 my $Perl = which_perl();
 
@@ -310,3 +310,17 @@ fresh_perl_is(
 
 eval { open $99, "foo" };
 like($@, qr/Modification of a read-only value attempted/, "readonly fh");
+
+# [perl#73626] mg_get wasn't run on the pipe arg
+
+{
+    package p73626;
+    sub TIESCALAR { bless {} }
+    sub FETCH { "$Perl -e 1"}
+
+    tie my $p, 'p73626';
+
+    package main;
+
+    ok( open(my $f, '-|', $p),     'open -| magic');
+}