Browse Source

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
remotes/origin/ldap_group_count
Vincent Petry 12 years ago
parent
commit
48d63a6278
  1. 7
      apps/files_encryption/lib/proxy.php
  2. 20
      apps/files_encryption/tests/proxy.php
  3. 5
      lib/private/files/storage/wrapper/quota.php
  4. 16
      tests/lib/files/storage/wrapper/quota.php

7
apps/files_encryption/lib/proxy.php

@ -340,6 +340,13 @@ class Proxy extends \OC_FileProxy {
// if path is a folder do nothing
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;
}

20
apps/files_encryption/tests/proxy.php

@ -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);
}
}

5
lib/private/files/storage/wrapper/quota.php

@ -36,6 +36,11 @@ class Quota extends Wrapper {
$cache = $this->getCache();
$data = $cache->get($path);
if (is_array($data) and isset($data['size'])) {
if (isset($data['unencrypted_size'])
&& $data['unencrypted_size'] > 0
) {
return $data['unencrypted_size'];
}
return $data['size'];
} else {
return \OC\Files\SPACE_NOT_COMPUTED;

16
tests/lib/files/storage/wrapper/quota.php

@ -53,6 +53,22 @@ class Quota extends \Test\Files\Storage\Storage {
$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() {
$instance = $this->getLimitedStorage(9);
$stream = $instance->fopen('foo', 'w+');

Loading…
Cancel
Save