summaryrefslogtreecommitdiff
path: root/perlio.c
diff options
context:
space:
mode:
Diffstat (limited to 'perlio.c')
-rw-r--r--perlio.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/perlio.c b/perlio.c
index 91db1e1856..38db370b62 100644
--- a/perlio.c
+++ b/perlio.c
@@ -3421,8 +3421,10 @@ PerlIOBuf_open(pTHX_ PerlIO_funcs *self, PerlIO_list_t *layers,
* mode++;
*/
}
- f = (*tab->Open) (aTHX_ tab, layers, n - 1, mode, fd, imode, perm,
- f, narg, args);
+ f = tab && tab->Open ?
+ (*tab->Open) (aTHX_ tab, layers, n - 1, mode, fd, imode, perm,
+ f, narg, args)
+ : Nullfp;
if (f) {
if (PerlIO_push(aTHX_ f, self, mode, PerlIOArg) == 0) {
/*
@@ -3451,6 +3453,8 @@ PerlIOBuf_open(pTHX_ PerlIO_funcs *self, PerlIO_list_t *layers,
#endif
}
}
+ else
+ SETERRNO(EINVAL, SS_IVCHAN);
}
return f;
}