Skip to content

Commit

Permalink
Merge pull request #46672 from nextcloud/fix/preview-invalid-id
Browse files Browse the repository at this point in the history
Avoid using partial file info as valid one
  • Loading branch information
AndyScherzinger committed Jul 25, 2024
2 parents 2e353d8 + 2b0bc8b commit 4f2a29a
Show file tree
Hide file tree
Showing 5 changed files with 25 additions and 3 deletions.
4 changes: 4 additions & 0 deletions apps/files/lib/Controller/ApiController.php
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,10 @@ public function getThumbnail($x, $y, $file) {
throw new NotFoundException();
}

if ($file->getId() <= 0) {
return new DataResponse(['message' => 'File not found.'], Http::STATUS_NOT_FOUND);
}

/** @var File $file */
$preview = $this->previewManager->getPreview($file, $x, $y, true);

Expand Down
12 changes: 12 additions & 0 deletions apps/files/tests/Controller/ApiControllerTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,7 @@ public function testGetThumbnailInvalidSize() {

public function testGetThumbnailInvalidImage() {
$file = $this->createMock(File::class);
$file->method('getId')->willReturn(123);
$this->userFolder->method('get')
->with($this->equalTo('unknown.jpg'))
->willReturn($file);
Expand All @@ -168,8 +169,19 @@ public function testGetThumbnailInvalidImage() {
$this->assertEquals($expected, $this->apiController->getThumbnail(10, 10, 'unknown.jpg'));
}

public function testGetThumbnailInvalidPartFile() {
$file = $this->createMock(File::class);
$file->method('getId')->willReturn(0);
$this->userFolder->method('get')
->with($this->equalTo('unknown.jpg'))
->willReturn($file);
$expected = new DataResponse(['message' => 'File not found.'], Http::STATUS_NOT_FOUND);
$this->assertEquals($expected, $this->apiController->getThumbnail(10, 10, 'unknown.jpg'));
}

public function testGetThumbnail() {
$file = $this->createMock(File::class);
$file->method('getId')->willReturn(123);
$this->userFolder->method('get')
->with($this->equalTo('known.jpg'))
->willReturn($file);
Expand Down
4 changes: 4 additions & 0 deletions core/Controller/PreviewController.php
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,10 @@ private function fetchPreview(
return new DataResponse([], Http::STATUS_FORBIDDEN);
}

if ($node->getId() <= 0) {
return new DataResponse([], Http::STATUS_NOT_FOUND);
}

$storage = $node->getStorage();
if ($storage->instanceOfStorage(SharedStorage::class)) {
/** @var SharedStorage $storage */
Expand Down
7 changes: 4 additions & 3 deletions lib/private/Files/View.php
Original file line number Diff line number Diff line change
Expand Up @@ -1338,9 +1338,6 @@ public function getFileInfo($path, $includeMountPoints = true) {
if (!Filesystem::isValidPath($path)) {
return false;
}
if (Cache\Scanner::isPartialFile($path)) {
return $this->getPartFileInfo($path);
}
$relativePath = $path;
$path = Filesystem::normalizePath($this->fakeRoot . '/' . $path);

Expand All @@ -1351,6 +1348,10 @@ public function getFileInfo($path, $includeMountPoints = true) {
$data = $this->getCacheEntry($storage, $internalPath, $relativePath);

if (!$data instanceof ICacheEntry) {
if (Cache\Scanner::isPartialFile($relativePath)) {
return $this->getPartFileInfo($relativePath);
}

return false;
}

Expand Down
1 change: 1 addition & 0 deletions tests/Core/Controller/PreviewControllerTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -187,6 +187,7 @@ public function testValidPreview() {
->willReturn($userFolder);

$file = $this->createMock(File::class);
$file->method('getId')->willReturn(123);
$userFolder->method('get')
->with($this->equalTo('file'))
->willReturn($file);
Expand Down

0 comments on commit 4f2a29a

Please sign in to comment.