diff --git a/apps/files_external/lib/sftp.php b/apps/files_external/lib/sftp.php index c457a87a6c70e5f86ceea4d4b86954d14f41aecc..cbe090311a94582ead4373963b22744f8c178753 100644 --- a/apps/files_external/lib/sftp.php +++ b/apps/files_external/lib/sftp.php @@ -251,7 +251,11 @@ class SFTP extends \OC\Files\Storage\Common { */ public function rmdir($path) { try { - return $this->getConnection()->delete($this->absPath($path), true); + $result = $this->getConnection()->delete($this->absPath($path), true); + // workaround: stray stat cache entry when deleting empty folders + // see https://github.com/phpseclib/phpseclib/issues/706 + $this->getConnection()->clearStatCache(); + return $result; } catch (\Exception $e) { return false; } diff --git a/tests/lib/files/storage/storage.php b/tests/lib/files/storage/storage.php index 2355009c9bfcfde92069032449243a1e7faf6c48..fcd7f73dcde6d03328f5df98557d9ff91d4301b1 100644 --- a/tests/lib/files/storage/storage.php +++ b/tests/lib/files/storage/storage.php @@ -380,6 +380,13 @@ abstract class Storage extends \Test\TestCase { $this->assertFalse($this->instance->file_exists('folder')); } + public function testRmdirEmptyFolder() { + $this->assertTrue($this->instance->mkdir('empty')); + $this->wait(); + $this->assertTrue($this->instance->rmdir('empty')); + $this->assertFalse($this->instance->file_exists('empty')); + } + public function testRecursiveUnlink() { $this->instance->mkdir('folder'); $this->instance->mkdir('folder/bar');