From 174f7599e575e350bc6177fd315a7657c37323f7 Mon Sep 17 00:00:00 2001 From: Vincent Petry Date: Wed, 9 Dec 2015 17:31:14 +0100 Subject: [PATCH] Catch exception when querying direct download link --- apps/dav/lib/connector/sabre/filesplugin.php | 11 +++++--- .../unit/connector/sabre/filesplugin.php | 25 +++++++++++++++++++ 2 files changed, 33 insertions(+), 3 deletions(-) diff --git a/apps/dav/lib/connector/sabre/filesplugin.php b/apps/dav/lib/connector/sabre/filesplugin.php index 1c78e9dc845..aa756281745 100644 --- a/apps/dav/lib/connector/sabre/filesplugin.php +++ b/apps/dav/lib/connector/sabre/filesplugin.php @@ -31,6 +31,7 @@ use \Sabre\DAV\PropFind; use \Sabre\DAV\PropPatch; use \Sabre\HTTP\RequestInterface; use \Sabre\HTTP\ResponseInterface; +use OCP\Files\StorageNotAvailableException; class FilesPlugin extends \Sabre\DAV\ServerPlugin { @@ -225,9 +226,13 @@ class FilesPlugin extends \Sabre\DAV\ServerPlugin { if ($node instanceof \OCA\DAV\Connector\Sabre\File) { $propFind->handle(self::DOWNLOADURL_PROPERTYNAME, function() use ($node) { /** @var $node \OCA\DAV\Connector\Sabre\File */ - $directDownloadUrl = $node->getDirectDownload(); - if (isset($directDownloadUrl['url'])) { - return $directDownloadUrl['url']; + try { + $directDownloadUrl = $node->getDirectDownload(); + if (isset($directDownloadUrl['url'])) { + return $directDownloadUrl['url']; + } + } catch (StorageNotAvailableException $e) { + return false; } return false; }); diff --git a/apps/dav/tests/unit/connector/sabre/filesplugin.php b/apps/dav/tests/unit/connector/sabre/filesplugin.php index b33c8340f72..642fc3258cd 100644 --- a/apps/dav/tests/unit/connector/sabre/filesplugin.php +++ b/apps/dav/tests/unit/connector/sabre/filesplugin.php @@ -2,6 +2,8 @@ namespace OCA\DAV\Tests\Unit\Connector\Sabre; +use OCP\Files\StorageNotAvailableException; + /** * Copyright (c) 2015 Vincent Petry * This file is licensed under the Affero General Public License version 3 or @@ -143,6 +145,29 @@ class FilesPlugin extends \Test\TestCase { $this->assertEquals(array(self::SIZE_PROPERTYNAME), $propFind->get404Properties()); } + public function testGetPropertiesStorageNotAvailable() { + $node = $this->createTestNode('\OCA\DAV\Connector\Sabre\File'); + + $propFind = new \Sabre\DAV\PropFind( + '/dummyPath', + array( + self::DOWNLOADURL_PROPERTYNAME, + ), + 0 + ); + + $node->expects($this->once()) + ->method('getDirectDownload') + ->will($this->throwException(new StorageNotAvailableException())); + + $this->plugin->handleGetProperties( + $propFind, + $node + ); + + $this->assertEquals(null, $propFind->get(self::DOWNLOADURL_PROPERTYNAME)); + } + public function testGetPublicPermissions() { $this->plugin = new \OCA\DAV\Connector\Sabre\FilesPlugin($this->tree, $this->view, true); $this->plugin->initialize($this->server); -- 2.39.5