Merge pull request #23293 from owncloud/backport-23108
[stable9] Ensure that stored version is at least 1 for cross-storage copy
This commit is contained in:
commit
fefaa1fd87
|
@ -634,7 +634,18 @@ class Encryption extends Wrapper {
|
|||
'encrypted' => (bool)$isEncrypted,
|
||||
];
|
||||
if($isEncrypted === 1) {
|
||||
$cacheInformation['encryptedVersion'] = $sourceStorage->getCache()->get($sourceInternalPath)['encryptedVersion'];
|
||||
$encryptedVersion = $sourceStorage->getCache()->get($sourceInternalPath)['encryptedVersion'];
|
||||
|
||||
// In case of a move operation from an unencrypted to an encrypted
|
||||
// storage the old encrypted version would stay with "0" while the
|
||||
// correct value would be "1". Thus we manually set the value to "1"
|
||||
// for those cases.
|
||||
// See also https://github.com/owncloud/core/issues/23078
|
||||
if($encryptedVersion === 0) {
|
||||
$encryptedVersion = 1;
|
||||
}
|
||||
|
||||
$cacheInformation['encryptedVersion'] = $encryptedVersion;
|
||||
}
|
||||
|
||||
// in case of a rename we need to manipulate the source cache because
|
||||
|
|
|
@ -672,6 +672,48 @@ class Encryption extends Storage {
|
|||
];
|
||||
}
|
||||
|
||||
public function testCopyBetweenStorageMinimumEncryptedVersion() {
|
||||
$storage2 = $this->getMockBuilder('OCP\Files\Storage')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
$sourceInternalPath = $targetInternalPath = 'file.txt';
|
||||
$preserveMtime = $isRename = false;
|
||||
|
||||
$storage2->expects($this->any())
|
||||
->method('fopen')
|
||||
->willReturnCallback(function($path, $mode) {
|
||||
$temp = \OC::$server->getTempManager();
|
||||
return fopen($temp->getTemporaryFile(), $mode);
|
||||
});
|
||||
$cache = $this->getMock('\OCP\Files\Cache\ICache');
|
||||
$cache->expects($this->once())
|
||||
->method('get')
|
||||
->with($sourceInternalPath)
|
||||
->willReturn(['encryptedVersion' => 0]);
|
||||
$storage2->expects($this->once())
|
||||
->method('getCache')
|
||||
->willReturn($cache);
|
||||
$this->encryptionManager->expects($this->any())
|
||||
->method('isEnabled')
|
||||
->willReturn(true);
|
||||
global $mockedMountPointEncryptionEnabled;
|
||||
$mockedMountPointEncryptionEnabled = true;
|
||||
|
||||
$expectedCachePut = [
|
||||
'encrypted' => true,
|
||||
];
|
||||
$expectedCachePut['encryptedVersion'] = 1;
|
||||
|
||||
$this->cache->expects($this->once())
|
||||
->method('put')
|
||||
->with($sourceInternalPath, $expectedCachePut);
|
||||
|
||||
$this->invokePrivate($this->instance, 'copyBetweenStorage', [$storage2, $sourceInternalPath, $targetInternalPath, $preserveMtime, $isRename]);
|
||||
|
||||
$this->assertFalse(false);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider dataCopyBetweenStorage
|
||||
*
|
||||
|
|
Loading…
Reference in New Issue