Fixed quota wrapper to not wrap failed fopen streams
When calling fopen() on some storage types, these return false instead of throwing an exception. This fix makes sure that in case the stream wasn't opened (for example when a file doesn't exist any more) the stream isn't wrapped. Also added 'rb' as another case that doesn't need to be wrapped. Fixes #6832
This commit is contained in:
parent
903b330ccc
commit
1af7dab535
|
@ -95,7 +95,7 @@ class Quota extends Wrapper {
|
|||
public function fopen($path, $mode) {
|
||||
$source = $this->storage->fopen($path, $mode);
|
||||
$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);
|
||||
} else {
|
||||
return $source;
|
||||
|
|
|
@ -59,6 +59,20 @@ class Quota extends \Test\Files\Storage\Storage {
|
|||
$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(){
|
||||
$instance = $this->getLimitedStorage(9);
|
||||
|
||||
|
@ -71,6 +85,11 @@ class Quota extends \Test\Files\Storage\Storage {
|
|||
$meta = stream_get_meta_data($stream);
|
||||
$this->assertEquals('plainfile', $meta['wrapper_type']);
|
||||
fclose($stream);
|
||||
|
||||
$stream = $instance->fopen('foo', 'rb');
|
||||
$meta = stream_get_meta_data($stream);
|
||||
$this->assertEquals('plainfile', $meta['wrapper_type']);
|
||||
fclose($stream);
|
||||
}
|
||||
|
||||
public function testReturnQuotaStreamOnWrite(){
|
||||
|
|
Loading…
Reference in New Issue