Return unencrypted_size of folder when queried
This fixes the "used space" to be based on the unencrypted size, not encrypted size, to be consistent with how quota/space is handled when encryption is enabled
This commit is contained in:
parent
7f24d42ca5
commit
48d63a6278
|
@ -340,6 +340,13 @@ class Proxy extends \OC_FileProxy {
|
||||||
|
|
||||||
// if path is a folder do nothing
|
// if path is a folder do nothing
|
||||||
if ($view->is_dir($path)) {
|
if ($view->is_dir($path)) {
|
||||||
|
$proxyState = \OC_FileProxy::$enabled;
|
||||||
|
\OC_FileProxy::$enabled = false;
|
||||||
|
$fileInfo = $view->getFileInfo($path);
|
||||||
|
\OC_FileProxy::$enabled = $proxyState;
|
||||||
|
if ($fileInfo['unencrypted_size'] > 0) {
|
||||||
|
return $fileInfo['unencrypted_size'];
|
||||||
|
}
|
||||||
return $size;
|
return $size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -112,4 +112,24 @@ class Test_Encryption_Proxy extends \PHPUnit_Framework_TestCase {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function testPostFileSizeWithDirectory() {
|
||||||
|
|
||||||
|
$this->view->file_put_contents($this->filename, $this->data);
|
||||||
|
|
||||||
|
\OC_FileProxy::$enabled = false;
|
||||||
|
|
||||||
|
// get root size, must match the file's unencrypted size
|
||||||
|
$unencryptedSize = $this->view->filesize('');
|
||||||
|
|
||||||
|
\OC_FileProxy::$enabled = true;
|
||||||
|
|
||||||
|
$encryptedSize = $this->view->filesize('');
|
||||||
|
|
||||||
|
$this->assertTrue($encryptedSize !== $unencryptedSize);
|
||||||
|
|
||||||
|
// cleanup
|
||||||
|
$this->view->unlink($this->filename);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,6 +36,11 @@ class Quota extends Wrapper {
|
||||||
$cache = $this->getCache();
|
$cache = $this->getCache();
|
||||||
$data = $cache->get($path);
|
$data = $cache->get($path);
|
||||||
if (is_array($data) and isset($data['size'])) {
|
if (is_array($data) and isset($data['size'])) {
|
||||||
|
if (isset($data['unencrypted_size'])
|
||||||
|
&& $data['unencrypted_size'] > 0
|
||||||
|
) {
|
||||||
|
return $data['unencrypted_size'];
|
||||||
|
}
|
||||||
return $data['size'];
|
return $data['size'];
|
||||||
} else {
|
} else {
|
||||||
return \OC\Files\SPACE_NOT_COMPUTED;
|
return \OC\Files\SPACE_NOT_COMPUTED;
|
||||||
|
|
|
@ -53,6 +53,22 @@ class Quota extends \Test\Files\Storage\Storage {
|
||||||
$this->assertEquals(9, $instance->free_space(''));
|
$this->assertEquals(9, $instance->free_space(''));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testFreeSpaceWithUsedSpace() {
|
||||||
|
$instance = $this->getLimitedStorage(9);
|
||||||
|
$instance->getCache()->put(
|
||||||
|
'', array('size' => 3, 'unencrypted_size' => 0)
|
||||||
|
);
|
||||||
|
$this->assertEquals(6, $instance->free_space(''));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testFreeSpaceWithUsedSpaceAndEncryption() {
|
||||||
|
$instance = $this->getLimitedStorage(9);
|
||||||
|
$instance->getCache()->put(
|
||||||
|
'', array('size' => 7, 'unencrypted_size' => 3)
|
||||||
|
);
|
||||||
|
$this->assertEquals(6, $instance->free_space(''));
|
||||||
|
}
|
||||||
|
|
||||||
public function testFWriteNotEnoughSpace() {
|
public function testFWriteNotEnoughSpace() {
|
||||||
$instance = $this->getLimitedStorage(9);
|
$instance = $this->getLimitedStorage(9);
|
||||||
$stream = $instance->fopen('foo', 'w+');
|
$stream = $instance->fopen('foo', 'w+');
|
||||||
|
|
Loading…
Reference in New Issue