summaryrefslogtreecommitdiff
path: root/pp_sys.c
diff options
context:
space:
mode:
authorTony Cook <tony@develop-help.com>2015-06-25 13:58:57 +1000
committerTony Cook <tony@develop-help.com>2015-06-29 10:56:34 +1000
commit60121127fb9d33a8ca4ab1e213b635fe63c8fa8c (patch)
treeb5a0c466894a0c895f94da96b9bfd46df55a2992 /pp_sys.c
parent51f0b9cd668a8ebc243325d1c5340c661123e44b (diff)
downloadperl-60121127fb9d33a8ca4ab1e213b635fe63c8fa8c.tar.gz
[perl #125305] handle chdir to closed handle correctly
Diffstat (limited to 'pp_sys.c')
-rw-r--r--pp_sys.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/pp_sys.c b/pp_sys.c
index 78d95848eb..da25f0f41e 100644
--- a/pp_sys.c
+++ b/pp_sys.c
@@ -3599,6 +3599,16 @@ PP(pp_chdir)
SV * const sv = POPs;
if (PL_op->op_flags & OPf_SPECIAL) {
gv = gv_fetchsv(sv, 0, SVt_PVIO);
+ if (!gv) {
+ if (ckWARN(WARN_UNOPENED)) {
+ Perl_warner(aTHX_ packWARN(WARN_UNOPENED),
+ "chdir() on unopened filehandle %" SVf, sv);
+ }
+ SETERRNO(EBADF,RMS_IFI);
+ PUSHi(0);
+ TAINT_PROPER("chdir");
+ RETURN;
+ }
}
else if (!(gv = MAYBE_DEREF_GV(sv)))
tmps = SvPV_nomg_const_nolen(sv);