mirror of
https://github.com/nextcloud/server.git
synced 2026-06-16 20:19:48 -04:00
Merge pull request #48968 from nextcloud/backport/47847/stable29
This commit is contained in:
commit
f99ae3307f
2 changed files with 29 additions and 2 deletions
|
|
@ -605,11 +605,13 @@ class Local extends \OC\Files\Storage\Common {
|
|||
*/
|
||||
public function copyFromStorage(IStorage $sourceStorage, $sourceInternalPath, $targetInternalPath, $preserveMtime = false) {
|
||||
if ($this->canDoCrossStorageMove($sourceStorage)) {
|
||||
if ($sourceStorage->instanceOfStorage(Jail::class)) {
|
||||
// resolve any jailed paths
|
||||
while ($sourceStorage->instanceOfStorage(Jail::class)) {
|
||||
/**
|
||||
* @var \OC\Files\Storage\Wrapper\Jail $sourceStorage
|
||||
*/
|
||||
$sourceInternalPath = $sourceStorage->getUnjailedPath($sourceInternalPath);
|
||||
$sourceStorage = $sourceStorage->getUnjailedStorage();
|
||||
}
|
||||
/**
|
||||
* @var \OC\Files\Storage\Local $sourceStorage
|
||||
|
|
@ -629,11 +631,13 @@ class Local extends \OC\Files\Storage\Common {
|
|||
*/
|
||||
public function moveFromStorage(IStorage $sourceStorage, $sourceInternalPath, $targetInternalPath) {
|
||||
if ($this->canDoCrossStorageMove($sourceStorage)) {
|
||||
if ($sourceStorage->instanceOfStorage(Jail::class)) {
|
||||
// resolve any jailed paths
|
||||
while ($sourceStorage->instanceOfStorage(Jail::class)) {
|
||||
/**
|
||||
* @var \OC\Files\Storage\Wrapper\Jail $sourceStorage
|
||||
*/
|
||||
$sourceInternalPath = $sourceStorage->getUnjailedPath($sourceInternalPath);
|
||||
$sourceStorage = $sourceStorage->getUnjailedStorage();
|
||||
}
|
||||
/**
|
||||
* @var \OC\Files\Storage\Local $sourceStorage
|
||||
|
|
|
|||
|
|
@ -22,6 +22,8 @@
|
|||
|
||||
namespace Test\Files\Storage;
|
||||
|
||||
use OC\Files\Storage\Wrapper\Jail;
|
||||
|
||||
/**
|
||||
* Class LocalTest
|
||||
*
|
||||
|
|
@ -150,4 +152,25 @@ class LocalTest extends Storage {
|
|||
// no exception thrown
|
||||
$this->assertNotNull($this->instance);
|
||||
}
|
||||
|
||||
public function testMoveNestedJail(): void {
|
||||
$this->instance->mkdir('foo');
|
||||
$this->instance->mkdir('foo/bar');
|
||||
$this->instance->mkdir('target');
|
||||
$this->instance->file_put_contents('foo/bar/file.txt', 'foo');
|
||||
$jail1 = new Jail([
|
||||
'storage' => $this->instance,
|
||||
'root' => 'foo'
|
||||
]);
|
||||
$jail2 = new Jail([
|
||||
'storage' => $jail1,
|
||||
'root' => 'bar'
|
||||
]);
|
||||
$jail3 = new Jail([
|
||||
'storage' => $this->instance,
|
||||
'root' => 'target'
|
||||
]);
|
||||
$jail3->moveFromStorage($jail2, 'file.txt', 'file.txt');
|
||||
$this->assertTrue($this->instance->file_exists('target/file.txt'));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue