From: Jarkko Hietaniemi Date: Sat, 13 Sep 2003 10:10:46 +0000 (+0000) Subject: Apparently at some point doing 3-arg open with X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=7e72d50951f9200af403999824e9d3fc17f03570;p=p5sagit%2Fp5-mst-13.2.git Apparently at some point doing 3-arg open with illegal mode like ">>>" had stopped croaking. p4raw-id: //depot/perl@21206 --- diff --git a/doio.c b/doio.c index 0c10519..3bad8f3 100644 --- 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) || diff --git a/t/io/open.t b/t/io/open.t index 87a9c55..b8020c2 100755 --- a/t/io/open.t +++ b/t/io/open.t @@ -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"); +} +