diff --git a/lib/private/files/storage/wrapper/encryption.php b/lib/private/files/storage/wrapper/encryption.php index 8d1f80c53c..675978da2a 100644 --- a/lib/private/files/storage/wrapper/encryption.php +++ b/lib/private/files/storage/wrapper/encryption.php @@ -350,7 +350,7 @@ class Encryption extends Wrapper { $size = $unencryptedSize = 0; $realFile = $this->util->stripPartialFileExtension($path); - $targetExists = $this->file_exists($realFile); + $targetExists = $this->file_exists($realFile) || $this->file_exists($path); $targetIsEncrypted = false; if ($targetExists) { // in case the file exists we require the explicit module as @@ -608,7 +608,11 @@ class Encryption extends Wrapper { $header = ''; $realFile = $this->util->stripPartialFileExtension($path); if ($this->storage->file_exists($realFile)) { - $handle = $this->storage->fopen($realFile, 'r'); + $path = $realFile; + } + + if ($this->storage->file_exists($path)) { + $handle = $this->storage->fopen($path, 'r'); $firstBlock = fread($handle, $this->util->getHeaderSize()); fclose($handle); if (substr($firstBlock, 0, strlen(Util::HEADER_START)) === Util::HEADER_START) { diff --git a/tests/lib/files/storage/wrapper/encryption.php b/tests/lib/files/storage/wrapper/encryption.php index 175713de49..a10e95a3f8 100644 --- a/tests/lib/files/storage/wrapper/encryption.php +++ b/tests/lib/files/storage/wrapper/encryption.php @@ -381,10 +381,12 @@ class Encryption extends \Test\Files\Storage\Storage { /** * @dataProvider dataTestGetHeader - * @param $path - * @param $strippedPath + * + * @param string $path + * @param bool $strippedPathExists + * @param string $strippedPath */ - public function testGetHeader($path, $strippedPath) { + public function testGetHeader($path, $strippedPathExists, $strippedPath) { $sourceStorage = $this->getMockBuilder('\OC\Files\Storage\Storage') ->disableOriginalConstructor()->getMock(); @@ -409,17 +411,25 @@ class Encryption extends \Test\Files\Storage\Storage { $util->expects($this->once())->method('stripPartialFileExtension') ->with($path)->willReturn($strippedPath); - $sourceStorage->expects($this->once())->method('file_exists') - ->with($strippedPath)->willReturn(false); + $sourceStorage->expects($this->at(0)) + ->method('file_exists') + ->with($strippedPath) + ->willReturn($strippedPathExists); + $sourceStorage->expects($this->at(1)) + ->method('file_exists') + ->with($strippedPathExists ? $strippedPath : $path) + ->willReturn(false); $this->invokePrivate($instance, 'getHeader', [$path]); } public function dataTestGetHeader() { return array( - array('/foo/bar.txt', '/foo/bar.txt'), - array('/foo/bar.txt.part', '/foo/bar.txt'), - array('/foo/bar.txt.ocTransferId7437493.part', '/foo/bar.txt'), + array('/foo/bar.txt', false, '/foo/bar.txt'), + array('/foo/bar.txt.part', false, '/foo/bar.txt'), + array('/foo/bar.txt.ocTransferId7437493.part', false, '/foo/bar.txt'), + array('/foo/bar.txt.part', true, '/foo/bar.txt'), + array('/foo/bar.txt.ocTransferId7437493.part', true, '/foo/bar.txt'), ); } }