diff --git a/phpseclib/Net/SFTP.php b/phpseclib/Net/SFTP.php index 14c6191b..36e1fc4d 100644 --- a/phpseclib/Net/SFTP.php +++ b/phpseclib/Net/SFTP.php @@ -2177,6 +2177,7 @@ class SFTP extends SSH2 if (!$this->_send_sftp_packet(NET_SFTP_REMOVE, pack('Na*', strlen($temp), $temp))) { return false; } + $this->_remove_from_stat_cache($temp); $i++; @@ -2187,12 +2188,12 @@ class SFTP extends SSH2 $i = 0; } } - $this->_remove_from_stat_cache($path); } if (!$this->_send_sftp_packet(NET_SFTP_RMDIR, pack('Na*', strlen($path), $path))) { return false; } + $this->_remove_from_stat_cache($path); $i++; diff --git a/tests/Functional/Net/SFTPUserStoryTest.php b/tests/Functional/Net/SFTPUserStoryTest.php index 673df448..3b468426 100644 --- a/tests/Functional/Net/SFTPUserStoryTest.php +++ b/tests/Functional/Net/SFTPUserStoryTest.php @@ -567,5 +567,34 @@ class Functional_Net_SFTPUserStoryTest extends PhpseclibFunctionalTestCase 'Failed asserting that nonexistent scratch directory could ' . 'not be deleted using rmdir().' ); + + return $sftp; + } + + /** + * @depends testRmDirScratchNonexistent + * @group github706 + */ + public function testDeleteEmptyDir($sftp) + { + $this->assertTrue( + $sftp->mkdir(self::$scratchDir), + 'Failed asserting that scratch directory could ' . + 'be created.' + ); + $this->assertInternalType( + 'array', + $sftp->stat(self::$scratchDir), + 'Failed asserting that stat on an existant empty directory returns an array' + ); + $this->assertTrue( + $sftp->delete(self::$scratchDir), + 'Failed asserting that empty scratch directory could ' . + 'be deleted using recursive delete().' + ); + $this->assertFalse( + $sftp->stat(self::$scratchDir), + 'Failed asserting that stat on a deleted directory returns false' + ); } }