diff options
-rw-r--r-- | doio.c | 4 | ||||
-rwxr-xr-x | t/io/open.t | 15 |
2 files changed, 18 insertions, 1 deletions
@@ -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 87a9c5580b..b8020c24c3 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"); +} + |