Skip to content
Snippets Groups Projects
Commit 62dd58aa authored by Vincent Petry's avatar Vincent Petry
Browse files

Merge pull request #6838 from owncloud/core-quotawrapperfailedfopenfix

Fixed quota wrapper to not wrap failed fopen streams
parents f88360eb 1af7dab5
No related branches found
No related tags found
No related merge requests found
...@@ -95,7 +95,7 @@ class Quota extends Wrapper { ...@@ -95,7 +95,7 @@ class Quota extends Wrapper {
public function fopen($path, $mode) { public function fopen($path, $mode) {
$source = $this->storage->fopen($path, $mode); $source = $this->storage->fopen($path, $mode);
$free = $this->free_space(''); $free = $this->free_space('');
if ($free >= 0 && $mode !== 'r') { if ($source && $free >= 0 && $mode !== 'r' && $mode !== 'rb') {
return \OC\Files\Stream\Quota::wrap($source, $free); return \OC\Files\Stream\Quota::wrap($source, $free);
} else { } else {
return $source; return $source;
......
...@@ -59,6 +59,20 @@ class Quota extends \Test\Files\Storage\Storage { ...@@ -59,6 +59,20 @@ class Quota extends \Test\Files\Storage\Storage {
$this->assertEquals('foobarqwe', $instance->file_get_contents('foo')); $this->assertEquals('foobarqwe', $instance->file_get_contents('foo'));
} }
public function testReturnFalseWhenFopenFailed(){
$failStorage = $this->getMock(
'\OC\Files\Storage\Local',
array('fopen'),
array(array('datadir' => $this->tmpDir)));
$failStorage->expects($this->any())
->method('fopen')
->will($this->returnValue(false));
$instance = new \OC\Files\Storage\Wrapper\Quota(array('storage' => $failStorage, 'quota' => 1000));
$this->assertFalse($instance->fopen('failedfopen', 'r'));
}
public function testReturnRegularStreamOnRead(){ public function testReturnRegularStreamOnRead(){
$instance = $this->getLimitedStorage(9); $instance = $this->getLimitedStorage(9);
...@@ -71,6 +85,11 @@ class Quota extends \Test\Files\Storage\Storage { ...@@ -71,6 +85,11 @@ class Quota extends \Test\Files\Storage\Storage {
$meta = stream_get_meta_data($stream); $meta = stream_get_meta_data($stream);
$this->assertEquals('plainfile', $meta['wrapper_type']); $this->assertEquals('plainfile', $meta['wrapper_type']);
fclose($stream); fclose($stream);
$stream = $instance->fopen('foo', 'rb');
$meta = stream_get_meta_data($stream);
$this->assertEquals('plainfile', $meta['wrapper_type']);
fclose($stream);
} }
public function testReturnQuotaStreamOnWrite(){ public function testReturnQuotaStreamOnWrite(){
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment