Re: [perl #17830] open FH, "<&", $fd
Steve Grazzini [Fri, 11 Oct 2002 22:28:58 +0000 (22:28 +0000)]
Message-ID: <20021011222858.452.qmail@onion.perl.org>

p4raw-id: //depot/perl@18023

doio.c
t/io/open.t

diff --git a/doio.c b/doio.c
index fdd83f6..2da66c6 100644 (file)
--- a/doio.c
+++ b/doio.c
@@ -325,6 +325,7 @@ Perl_do_openn(pTHX_ GV *gv, register char *name, I32 len, int as_raw,
                    }
                    if (num_svs && (SvIOK(*svp) || (SvPOK(*svp) && looks_like_number(*svp)))) {
                        fd = SvUV(*svp);
+                       num_svs = 0;
                    }
                    else if (isDIGIT(*type)) {
                        /*SUPPRESS 530*/
index cf1d39d..9e067b7 100755 (executable)
@@ -12,7 +12,7 @@ use Config;
 $Is_VMS = $^O eq 'VMS';
 $Is_MacOS = $^O eq 'MacOS';
 
-plan tests => 94;
+plan tests => 95;
 
 my $Perl = which_perl();
 
@@ -210,14 +210,14 @@ like( $@, qr/Bad filehandle:\s+afile/,          '       right error' );
 {
     local *F;
     for (1..2) {
-        ok( open(F, qq{$Perl -le "print 'ok'"|}), 'open to pipe' );
+       ok( open(F, qq{$Perl -le "print 'ok'"|}), 'open to pipe' );
        is(scalar <F>, "ok\n",  '       readline');
-        ok( close F,            '       close' );
+       ok( close F,            '       close' );
     }
 
     for (1..2) {
-        ok( open(F, "-|", qq{$Perl -le "print 'ok'"}), 'open -|');
-        is( scalar <F>, "ok\n", '       readline');
+       ok( open(F, "-|", qq{$Perl -le "print 'ok'"}), 'open -|');
+       is( scalar <F>, "ok\n", '       readline');
        ok( close F,            '       close' );
     }
 }
@@ -225,8 +225,11 @@ like( $@, qr/Bad filehandle:\s+afile/,          '       right error' );
 
 # other dupping techniques
 {
-    ok( open(my $stdout, ">&", \*STDOUT), 'dup \*STDOUT into lexical fh');
-    ok( open(STDOUT,     ">&", $stdout),  'restore dupped STDOUT from lexical fh');
+    ok( open(my $stdout, ">&", \*STDOUT),       'dup \*STDOUT into lexical fh');
+    ok( open(STDOUT,     ">&", $stdout),        'restore dupped STDOUT from lexical fh');
+
+    # used to try to open a file [perl #17830]
+    ok( open(my $stdin,  "<&", fileno STDIN),   'dup fileno(STDIN) into lexical fh');
 }
 
 SKIP: {