[perl #38464] chdir() on closed handles
Peter Dintelmann [Wed, 8 Feb 2006 01:33:54 +0000 (17:33 -0800)]
From: Peter Dintelmann (via RT) <perlbug-followup@perl.org>
Message-ID: <rt-3.0.11-38464-129771.3.46114092925276@perl.org>

Plus a regression test.

p4raw-id: //depot/perl@27130

pp_sys.c
t/lib/warnings/pp_sys

index 8e8004a..5437c62 100644 (file)
--- a/pp_sys.c
+++ b/pp_sys.c
@@ -3345,10 +3345,16 @@ PP(pp_chdir)
 #endif
            }
            else {
+               if (ckWARN2(WARN_UNOPENED,WARN_CLOSED))
+                   report_evil_fh(gv, io, PL_op->op_type);
+               SETERRNO(EBADF, RMS_IFI);
                PUSHi(0);
            }
         }
        else {
+           if (ckWARN2(WARN_UNOPENED,WARN_CLOSED))
+               report_evil_fh(gv, io, PL_op->op_type);
+           SETERRNO(EBADF,RMS_IFI);
            PUSHi(0);
        }
 #else
index d84ff75..4149117 100644 (file)
@@ -457,3 +457,22 @@ no warnings 'misc';
 select $x, undef, undef, undef;
 EXPECT
 Non-string passed as bitmask at - line 4.
+########
+opendir FOO, '.'; closedir FOO;
+open BAR, '.'; close BAR;
+opendir $dh, '.'; closedir $dh;
+open $fh, '.'; close $fh;
+chdir FOO;
+chdir BAR;
+chdir $dh;
+chdir $fh;
+use warnings qw(unopened closed) ;
+chdir FOO;
+chdir BAR;
+chdir $dh;
+chdir $fh;
+EXPECT
+chdir() on unopened filehandle FOO at - line 10.
+chdir() on closed filehandle BAR at - line 11.
+chdir() on unopened filehandle $dh at - line 12.
+chdir() on closed filehandle $fh at - line 13.