Fix mounting wrapped storages resulting in many-layered wrapping

This usually doesn't cause issues, but in unit tests sometimes a wrapped
storage is passed to Filesystem::mount() and gets rewrapped, hitting the
XDebug function nesting level limit when used.
This commit is contained in:
Robin McCorkell 2015-03-07 00:12:46 +00:00
parent df19cabb44
commit 75a5e6e12b
2 changed files with 27 additions and 1 deletions

View File

@ -29,6 +29,7 @@ namespace OC\Files\Mount;
use \OC\Files\Filesystem; use \OC\Files\Filesystem;
use OC\Files\Storage\StorageFactory; use OC\Files\Storage\StorageFactory;
use OC\Files\Storage\Storage; use OC\Files\Storage\Storage;
use OC\Files\Storage\Wrapper\Wrapper;
use OCP\Files\Mount\IMountPoint; use OCP\Files\Mount\IMountPoint;
class MountPoint implements IMountPoint { class MountPoint implements IMountPoint {
@ -92,7 +93,11 @@ class MountPoint implements IMountPoint {
$this->mountPoint = $mountpoint; $this->mountPoint = $mountpoint;
if ($storage instanceof Storage) { if ($storage instanceof Storage) {
$this->class = get_class($storage); $this->class = get_class($storage);
$this->storage = $this->loader->wrap($this, $storage); $this->storage = $storage;
// only wrap if not already wrapped
if (!($this->storage instanceof Wrapper)) {
$this->storage = $this->loader->wrap($this, $this->storage);
}
} else { } else {
// Update old classes to new namespace // Update old classes to new namespace
if (strpos($storage, 'OC_Filestorage_') !== false) { if (strpos($storage, 'OC_Filestorage_') !== false) {

View File

@ -70,4 +70,25 @@ class MountPoint extends \Test\TestCase {
// storage wrapper never called // storage wrapper never called
$this->assertFalse($called); $this->assertFalse($called);
} }
public function testWrappedStorage() {
$storage = $this->getMockBuilder('\OC\Files\Storage\Wrapper\Wrapper')
->disableOriginalConstructor()
->getMock();
$loader = $this->getMock('\OCP\Files\Storage\IStorageFactory');
$loader->expects($this->never())
->method('getInstance');
$loader->expects($this->never())
->method('wrap');
$mountPoint = new \OC\Files\Mount\MountPoint(
$storage,
'/mountpoint',
null,
$loader
);
$this->assertEquals($storage, $mountPoint->getStorage());
}
} }