Apparently at some point doing 3-arg open with
Jarkko Hietaniemi [Sat, 13 Sep 2003 10:10:46 +0000 (10:10 +0000)]
illegal mode like ">>>" had stopped croaking.

p4raw-id: //depot/perl@21206

doio.c
t/io/open.t

diff --git a/doio.c b/doio.c
index 0c10519..3bad8f3 100644 (file)
--- a/doio.c
+++ b/doio.c
@@ -422,6 +422,8 @@ Perl_do_openn(pTHX_ GV *gv, register char *name, I32 len, int as_raw,
                    fp = PerlIO_openn(aTHX_ type,mode,-1,0,0,NULL,num_svs,svp);
                }
            } /* !& */
+           if (!fp && type && *type && *type != ':' && !isIDFIRST(*type))
+              goto unknown_open_mode;
        } /* IoTYPE_WRONLY */
        else if (*type == IoTYPE_RDONLY) {
            /*SUPPRESS 530*/
@@ -453,6 +455,8 @@ Perl_do_openn(pTHX_ GV *gv, register char *name, I32 len, int as_raw,
                }
                fp = PerlIO_openn(aTHX_ type,mode,-1,0,0,NULL,num_svs,svp);
            }
+           if (!fp && type && *type && *type != ':' && !isIDFIRST(*type))
+              goto unknown_open_mode;
        } /* IoTYPE_RDONLY */
        else if ((num_svs && /* '-|...' or '...|' */
                  type[0] == IoTYPE_STD && type[1] == IoTYPE_PIPE) ||
index 87a9c55..b8020c2 100755 (executable)
@@ -12,7 +12,7 @@ use Config;
 $Is_VMS = $^O eq 'VMS';
 $Is_MacOS = $^O eq 'MacOS';
 
-plan tests => 100;
+plan tests => 102;
 
 my $Perl = which_perl();
 
@@ -279,3 +279,16 @@ SKIP: {
     like($@, qr/<\$fh3{...}> line 1\./, "autoviv fh lexical helem");
 }
     
+SKIP: {
+    skip("This test uses perlio", 1) unless $Config{useperlio};
+    my $w;
+    use warnings 'layer';
+    local $SIG{__WARN__} = sub { $w = shift };
+
+    eval { open(F, ">>>", "afile") };
+    like($w, qr/perlio: invalid separator character '>' in layer spec/,
+        "bad open warning");
+    like($@, qr/Unknown open\(\) mode '>>>'/,
+        "bad open failure");
+}
+