mirror of
https://github.com/nextcloud/server.git
synced 2026-05-28 04:32:30 -04:00
Merge pull request #35649 from nextcloud/bugfix/object-storage-master-key-enc
Update the unencrypted file size when closing streams
This commit is contained in:
commit
87e638b1f8
2 changed files with 13 additions and 10 deletions
|
|
@ -465,7 +465,7 @@ class Encryption extends Wrapper {
|
|||
$cacheEntry = $cache->get($this->internalPath);
|
||||
if ($cacheEntry) {
|
||||
$version = $cacheEntry['encryptedVersion'] + 1;
|
||||
$cache->update($cacheEntry->getId(), ['encrypted' => $version, 'encryptedVersion' => $version]);
|
||||
$cache->update($cacheEntry->getId(), ['encrypted' => $version, 'encryptedVersion' => $version, 'unencrypted_size' => $this->unencryptedSize]);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -528,6 +528,7 @@ class Encryption extends Wrapper {
|
|||
*/
|
||||
protected function writeHeader() {
|
||||
$header = $this->util->createHeader($this->newHeader, $this->encryptionModule);
|
||||
$this->fileUpdated = true;
|
||||
return parent::stream_write($header);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@ use OCP\IConfig;
|
|||
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
|
||||
|
||||
class EncryptionTest extends \Test\TestCase {
|
||||
public const DEFAULT_WRAPPER = '\OC\Files\Stream\Encryption';
|
||||
|
||||
/** @var \OCP\Encryption\IEncryptionModule | \PHPUnit\Framework\MockObject\MockObject */
|
||||
private $encryptionModule;
|
||||
|
|
@ -22,7 +23,7 @@ class EncryptionTest extends \Test\TestCase {
|
|||
* @param integer $unencryptedSize
|
||||
* @return resource
|
||||
*/
|
||||
protected function getStream($fileName, $mode, $unencryptedSize, $wrapper = '\OC\Files\Stream\Encryption') {
|
||||
protected function getStream($fileName, $mode, $unencryptedSize, $wrapper = self::DEFAULT_WRAPPER, $unencryptedSizeOnClose = 0) {
|
||||
clearstatcache();
|
||||
$size = filesize($fileName);
|
||||
$source = fopen($fileName, $mode);
|
||||
|
|
@ -64,9 +65,10 @@ class EncryptionTest extends \Test\TestCase {
|
|||
$entry = new CacheEntry([
|
||||
'fileid' => 5,
|
||||
'encryptedVersion' => 2,
|
||||
'unencrypted_size' => $unencryptedSizeOnClose,
|
||||
]);
|
||||
$cache->expects($this->any())->method('get')->willReturn($entry);
|
||||
$cache->expects($this->any())->method('update')->with(5, ['encrypted' => 3, 'encryptedVersion' => 3]);
|
||||
$cache->expects($this->any())->method('update')->with(5, ['encrypted' => 3, 'encryptedVersion' => 3, 'unencrypted_size' => $unencryptedSizeOnClose]);
|
||||
|
||||
|
||||
return $wrapper::wrap($source, $internalPath,
|
||||
|
|
@ -188,7 +190,7 @@ class EncryptionTest extends \Test\TestCase {
|
|||
|
||||
public function testWriteRead() {
|
||||
$fileName = tempnam("/tmp", "FOO");
|
||||
$stream = $this->getStream($fileName, 'w+', 0);
|
||||
$stream = $this->getStream($fileName, 'w+', 0, self::DEFAULT_WRAPPER, 6);
|
||||
$this->assertEquals(6, fwrite($stream, 'foobar'));
|
||||
fclose($stream);
|
||||
|
||||
|
|
@ -196,7 +198,7 @@ class EncryptionTest extends \Test\TestCase {
|
|||
$this->assertEquals('foobar', fread($stream, 100));
|
||||
fclose($stream);
|
||||
|
||||
$stream = $this->getStream($fileName, 'r+', 6);
|
||||
$stream = $this->getStream($fileName, 'r+', 6, self::DEFAULT_WRAPPER, 6);
|
||||
$this->assertEquals(3, fwrite($stream, 'bar'));
|
||||
fclose($stream);
|
||||
|
||||
|
|
@ -209,7 +211,7 @@ class EncryptionTest extends \Test\TestCase {
|
|||
|
||||
public function testRewind() {
|
||||
$fileName = tempnam("/tmp", "FOO");
|
||||
$stream = $this->getStream($fileName, 'w+', 0);
|
||||
$stream = $this->getStream($fileName, 'w+', 0, self::DEFAULT_WRAPPER, 6);
|
||||
$this->assertEquals(6, fwrite($stream, 'foobar'));
|
||||
$this->assertEquals(true, rewind($stream));
|
||||
$this->assertEquals('foobar', fread($stream, 100));
|
||||
|
|
@ -227,7 +229,7 @@ class EncryptionTest extends \Test\TestCase {
|
|||
public function testSeek() {
|
||||
$fileName = tempnam("/tmp", "FOO");
|
||||
|
||||
$stream = $this->getStream($fileName, 'w+', 0);
|
||||
$stream = $this->getStream($fileName, 'w+', 0, self::DEFAULT_WRAPPER, 9);
|
||||
$this->assertEquals(6, fwrite($stream, 'foobar'));
|
||||
$this->assertEquals(0, fseek($stream, 3));
|
||||
$this->assertEquals(6, fwrite($stream, 'foobar'));
|
||||
|
|
@ -261,7 +263,7 @@ class EncryptionTest extends \Test\TestCase {
|
|||
$expectedData = file_get_contents(\OC::$SERVERROOT . '/tests/data/' . $testFile);
|
||||
// write it
|
||||
$fileName = tempnam("/tmp", "FOO");
|
||||
$stream = $this->getStream($fileName, 'w+', 0);
|
||||
$stream = $this->getStream($fileName, 'w+', 0, self::DEFAULT_WRAPPER, strlen($expectedData));
|
||||
// while writing the file from the beginning to the end we should never try
|
||||
// to read parts of the file. This should only happen for write operations
|
||||
// in the middle of a file
|
||||
|
|
@ -302,7 +304,7 @@ class EncryptionTest extends \Test\TestCase {
|
|||
$expectedData = file_get_contents(\OC::$SERVERROOT . '/tests/data/' . $testFile);
|
||||
// write it
|
||||
$fileName = tempnam("/tmp", "FOO");
|
||||
$stream = $this->getStream($fileName, 'w+', 0, '\Test\Files\Stream\DummyEncryptionWrapper');
|
||||
$stream = $this->getStream($fileName, 'w+', 0, '\Test\Files\Stream\DummyEncryptionWrapper', strlen($expectedData));
|
||||
// while writing the file from the beginning to the end we should never try
|
||||
// to read parts of the file. This should only happen for write operations
|
||||
// in the middle of a file
|
||||
|
|
@ -311,7 +313,7 @@ class EncryptionTest extends \Test\TestCase {
|
|||
fclose($stream);
|
||||
|
||||
// read it all
|
||||
$stream = $this->getStream($fileName, 'r', strlen($expectedData), '\Test\Files\Stream\DummyEncryptionWrapper');
|
||||
$stream = $this->getStream($fileName, 'r', strlen($expectedData), '\Test\Files\Stream\DummyEncryptionWrapper', strlen($expectedData));
|
||||
$data = stream_get_contents($stream);
|
||||
fclose($stream);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue