From 06dda427f38f240539f4d3054da7a5eb80aaaf8b Mon Sep 17 00:00:00 2001 From: Vincent Petry Date: Fri, 5 Jun 2015 12:08:18 +0200 Subject: [PATCH 1/3] Validate path in getChild --- lib/private/connector/sabre/directory.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/private/connector/sabre/directory.php b/lib/private/connector/sabre/directory.php index 58f16a2bd04..7349db3d6e0 100644 --- a/lib/private/connector/sabre/directory.php +++ b/lib/private/connector/sabre/directory.php @@ -150,9 +150,12 @@ class Directory extends \OC\Connector\Sabre\Node $path = $this->path . '/' . $name; if (is_null($info)) { try { + $this->fileView->verifyPath($this->path, $name); $info = $this->fileView->getFileInfo($path); } catch (\OCP\Files\StorageNotAvailableException $e) { throw new \Sabre\DAV\Exception\ServiceUnavailable($e->getMessage()); + } catch (\OCP\Files\InvalidPathException $ex) { + throw new InvalidPath($ex->getMessage()); } } From 249e54e34a578b3b4b679eddb3dde3e13b173734 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Fri, 5 Jun 2015 13:55:12 +0200 Subject: [PATCH 2/3] Add unit tests for InvalidPath Exception being thrown --- tests/lib/connector/sabre/directory.php | 28 ++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/tests/lib/connector/sabre/directory.php b/tests/lib/connector/sabre/directory.php index 2550f2bcef1..a048c7ab30a 100644 --- a/tests/lib/connector/sabre/directory.php +++ b/tests/lib/connector/sabre/directory.php @@ -140,7 +140,33 @@ class Test_OC_Connector_Sabre_Directory extends \Test\TestCase { // calling a second time just returns the cached values, // does not call getDirectoryContents again - $nodes = $dir->getChildren(); + $dir->getChildren(); + } + + /** + * @expectedException \Sabre\DAV\Exception\ServiceUnavailable + */ + public function testGetChildThrowStorageNotAvailableException() { + $this->view->expects($this->once()) + ->method('getFileInfo') + ->willThrowException(new \OCP\Files\StorageNotAvailableException()); + + $dir = new \OC\Connector\Sabre\Directory($this->view, $this->info); + $dir->getChild('.'); + } + + /** + * @expectedException \OC\Connector\Sabre\Exception\InvalidPath + */ + public function testGetChildThrowInvalidPath() { + $this->view->expects($this->once()) + ->method('verifyPath') + ->willThrowException(new \OCP\Files\InvalidPathException()); + $this->view->expects($this->never()) + ->method('getFileInfo'); + + $dir = new \OC\Connector\Sabre\Directory($this->view, $this->info); + $dir->getChild('.'); } public function testGetQuotaInfo() { From 1df95ea1ca67ee31eb1ad8a9c311fed2d558f7c9 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Fri, 5 Jun 2015 13:55:59 +0200 Subject: [PATCH 3/3] Fix "@throws" tags on doc blocks --- lib/private/connector/sabre/directory.php | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/lib/private/connector/sabre/directory.php b/lib/private/connector/sabre/directory.php index 7349db3d6e0..6e028ca9daa 100644 --- a/lib/private/connector/sabre/directory.php +++ b/lib/private/connector/sabre/directory.php @@ -70,8 +70,15 @@ class Directory extends \OC\Connector\Sabre\Node * * @param string $name Name of the file * @param resource|string $data Initial payload - * @throws \Sabre\DAV\Exception\Forbidden * @return null|string + * @throws Exception\EntityTooLarge + * @throws Exception\UnsupportedMediaType + * @throws FileLocked + * @throws InvalidPath + * @throws \Sabre\DAV\Exception + * @throws \Sabre\DAV\Exception\BadRequest + * @throws \Sabre\DAV\Exception\Forbidden + * @throws \Sabre\DAV\Exception\ServiceUnavailable */ public function createFile($name, $data = null) { @@ -115,8 +122,10 @@ class Directory extends \OC\Connector\Sabre\Node * Creates a new subdirectory * * @param string $name + * @throws FileLocked + * @throws InvalidPath * @throws \Sabre\DAV\Exception\Forbidden - * @return void + * @throws \Sabre\DAV\Exception\ServiceUnavailable */ public function createDirectory($name) { try { @@ -143,8 +152,10 @@ class Directory extends \OC\Connector\Sabre\Node * * @param string $name * @param \OCP\Files\FileInfo $info - * @throws \Sabre\DAV\Exception\FileNotFound * @return \Sabre\DAV\INode + * @throws InvalidPath + * @throws \Sabre\DAV\Exception\NotFound + * @throws \Sabre\DAV\Exception\ServiceUnavailable */ public function getChild($name, $info = null) { $path = $this->path . '/' . $name; @@ -214,6 +225,7 @@ class Directory extends \OC\Connector\Sabre\Node * Deletes all files in this directory, and then itself * * @return void + * @throws FileLocked * @throws \Sabre\DAV\Exception\Forbidden */ public function delete() {