Merge pull request #14994 from owncloud/sabre-customprops-softfail

Soft fail in custom properties backend
This commit is contained in:
Lukas Reschke 2015-03-18 15:39:35 +01:00
commit 7310575f07
2 changed files with 42 additions and 2 deletions

View File

@ -29,6 +29,7 @@ use Sabre\DAV\PropertyStorage\Backend\BackendInterface;
use Sabre\DAV\PropFind;
use Sabre\DAV\PropPatch;
use Sabre\DAV\Tree;
use Sabre\DAV\Exception\NotFound;
class CustomPropertiesBackend implements BackendInterface {
@ -94,8 +95,19 @@ class CustomPropertiesBackend implements BackendInterface {
* @return void
*/
public function propFind($path, PropFind $propFind) {
$node = $this->tree->getNodeForPath($path);
if (!($node instanceof Node)) {
try {
$node = $this->tree->getNodeForPath($path);
if (!($node instanceof Node)) {
return;
}
} catch (NotFound $e) {
// in some rare (buggy) cases the node might not be found,
// we catch the exception to prevent breaking the whole list with a 404
// (soft fail)
\OC::$server->getLogger()->warning(
'Could not get node for path: \"' . $path . '\" : ' . $e->getMessage(),
array('app' => 'files')
);
return;
}

View File

@ -101,6 +101,34 @@ class CustomPropertiesBackend extends \Test\TestCase {
$this->assertEquals(200, $result['customprop2']);
}
/**
* Test that propFind on a missing file soft fails
*/
public function testPropFindMissingFileSoftFail() {
$this->tree->expects($this->any())
->method('getNodeForPath')
->with('/dummypath')
->will($this->throwException(new \Sabre\DAV\Exception\NotFound()));
$propFind = new \Sabre\DAV\PropFind(
'/dummypath',
array(
'customprop',
'customprop2',
'unsetprop',
),
0
);
$this->plugin->propFind(
'/dummypath',
$propFind
);
// no exception, soft fail
$this->assertTrue(true);
}
/**
* Test setting/getting properties
*/