[Pkg-owncloud-commits] [owncloud] 82/205: make sure that we always read the header from the original file

David Prévot taffit at moszumanska.debian.org
Thu Jul 2 17:36:58 UTC 2015


This is an automated email from the git hooks/post-receive script.

taffit pushed a commit to branch stable8
in repository owncloud.

commit 95602d4069a1eb9a45e1d08edeecc0d5b90e01ca
Author: Bjoern Schiessle <schiessle at owncloud.com>
Date:   Tue Jun 23 10:43:28 2015 +0200

    make sure that we always read the header from the original file
---
 lib/private/files/storage/wrapper/encryption.php |  8 +--
 tests/lib/files/storage/wrapper/encryption.php   | 63 ++++++++++++++++++++++--
 2 files changed, 65 insertions(+), 6 deletions(-)

diff --git a/lib/private/files/storage/wrapper/encryption.php b/lib/private/files/storage/wrapper/encryption.php
index 056f823..8d1f80c 100644
--- a/lib/private/files/storage/wrapper/encryption.php
+++ b/lib/private/files/storage/wrapper/encryption.php
@@ -349,7 +349,8 @@ class Encryption extends Wrapper {
 		if ($this->util->isExcluded($fullPath) === false) {
 
 			$size = $unencryptedSize = 0;
-			$targetExists = $this->file_exists($path);
+			$realFile = $this->util->stripPartialFileExtension($path);
+			$targetExists = $this->file_exists($realFile);
 			$targetIsEncrypted = false;
 			if ($targetExists) {
 				// in case the file exists we require the explicit module as
@@ -605,8 +606,9 @@ class Encryption extends Wrapper {
 	 */
 	protected function getHeader($path) {
 		$header = '';
-		if ($this->storage->file_exists($path)) {
-			$handle = $this->storage->fopen($path, 'r');
+		$realFile = $this->util->stripPartialFileExtension($path);
+		if ($this->storage->file_exists($realFile)) {
+			$handle = $this->storage->fopen($realFile, '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 520091d..175713d 100644
--- a/tests/lib/files/storage/wrapper/encryption.php
+++ b/tests/lib/files/storage/wrapper/encryption.php
@@ -68,6 +68,17 @@ class Encryption extends \Test\Files\Storage\Storage {
 	 */
 	private $mountManager;
 
+	/**
+	 * @var \OC\Group\Manager | \PHPUnit_Framework_MockObject_MockObject
+	 */
+	private $groupManager;
+
+	/**
+	 * @var \OCP\IConfig | \PHPUnit_Framework_MockObject_MockObject
+	 */
+	private $config;
+
+
 	/** @var  integer dummy unencrypted size */
 	private $dummySize = -1;
 
@@ -84,14 +95,16 @@ class Encryption extends \Test\Files\Storage\Storage {
 			->method('getEncryptionModule')
 			->willReturn($mockModule);
 
-		$config = $this->getMockBuilder('\OCP\IConfig')
+		$this->config = $this->getMockBuilder('\OCP\IConfig')
 			->disableOriginalConstructor()
 			->getMock();
-		$groupManager = $this->getMockBuilder('\OC\Group\Manager')
+		$this->groupManager = $this->getMockBuilder('\OC\Group\Manager')
 			->disableOriginalConstructor()
 			->getMock();
 
-		$this->util = $this->getMock('\OC\Encryption\Util', ['getUidAndFilename', 'isFile', 'isExcluded'], [new View(), new \OC\User\Manager(), $groupManager, $config]);
+		$this->util = $this->getMock('\OC\Encryption\Util',
+			['getUidAndFilename', 'isFile', 'isExcluded'],
+			[new View(), new \OC\User\Manager(), $this->groupManager, $this->config]);
 		$this->util->expects($this->any())
 			->method('getUidAndFilename')
 			->willReturnCallback(function ($path) {
@@ -365,4 +378,48 @@ class Encryption extends \Test\Files\Storage\Storage {
 			array(false, true),
 		);
 	}
+
+	/**
+	 * @dataProvider dataTestGetHeader
+	 * @param $path
+	 * @param $strippedPath
+	 */
+	public function testGetHeader($path, $strippedPath) {
+
+		$sourceStorage = $this->getMockBuilder('\OC\Files\Storage\Storage')
+			->disableOriginalConstructor()->getMock();
+
+		$util = $this->getMockBuilder('\OC\Encryption\Util')
+			->setConstructorArgs([new View(), new \OC\User\Manager(), $this->groupManager, $this->config])
+			->getMock();
+
+		$instance = $this->getMockBuilder('\OC\Files\Storage\Wrapper\Encryption')
+			->setConstructorArgs(
+				[
+					[
+						'storage' => $sourceStorage,
+						'root' => 'foo',
+						'mountPoint' => '/',
+						'mount' => $this->mount
+					],
+					$this->encryptionManager, $util, $this->logger, $this->file, null, $this->keyStore, $this->update, $this->mountManager
+				]
+			)
+			->getMock();
+
+		$util->expects($this->once())->method('stripPartialFileExtension')
+			->with($path)->willReturn($strippedPath);
+		$sourceStorage->expects($this->once())->method('file_exists')
+			->with($strippedPath)->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'),
+		);
+	}
 }

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-owncloud/owncloud.git



More information about the Pkg-owncloud-commits mailing list