diff --git a/apps/files_sharing/lib/Controller/PublicPreviewController.php b/apps/files_sharing/lib/Controller/PublicPreviewController.php index 233dc87a0ecfe..e8197e4864b07 100644 --- a/apps/files_sharing/lib/Controller/PublicPreviewController.php +++ b/apps/files_sharing/lib/Controller/PublicPreviewController.php @@ -126,6 +126,9 @@ public function getPreview( try { $node = $share->getNode(); if ($node instanceof Folder) { + if ($file === '') { + return new DataResponse([], Http::STATUS_BAD_REQUEST); + } $file = $node->get($file); } else { $file = $node; diff --git a/apps/files_sharing/tests/Controller/PublicPreviewControllerTest.php b/apps/files_sharing/tests/Controller/PublicPreviewControllerTest.php index d8cbaed227fd1..cf09230d2850b 100644 --- a/apps/files_sharing/tests/Controller/PublicPreviewControllerTest.php +++ b/apps/files_sharing/tests/Controller/PublicPreviewControllerTest.php @@ -253,6 +253,32 @@ public function testPreviewFolderInvalidFile(): void { $this->assertEquals($expected, $res); } + public function testPreviewFolderEmptyFile(): void { + $share = $this->createMock(IShare::class); + $this->shareManager->method('getShareByToken') + ->with($this->equalTo('token')) + ->willReturn($share); + + $share->method('getPermissions') + ->willReturn(Constants::PERMISSION_READ); + + $folder = $this->createMock(Folder::class); + $share->method('getNode') + ->willReturn($folder); + + $share->method('canSeeContent') + ->willReturn(true); + + $folder->expects($this->never()) + ->method('get'); + $this->previewManager->expects($this->never()) + ->method('getPreview'); + + $res = $this->controller->getPreview('token', '', 10, 10, true); + $expected = new DataResponse([], Http::STATUS_BAD_REQUEST); + $this->assertEquals($expected, $res); + } + public function testPreviewFolderValidFile(): void { $share = $this->createMock(IShare::class); $this->shareManager->method('getShareByToken')