From c75b26c9d3005f25fc3dbc313cfd3780e14cb5a0 Mon Sep 17 00:00:00 2001
From: Wouter Wolters <typo3@wouterwolters.nl>
Date: Wed, 11 May 2016 16:14:53 +0200
Subject: [PATCH] [BUGFIX] Catch exceptions while dumping a file

While dumping a file in the frontend no exceptions are
caught. When a exception happens a 500 HTTP status is thrown.

Catch all exceptions to return the correct 404 HTTP status.

Releases: master,7.6,6.2
Resolves: #76153
Change-Id: Ice7097b6a41432ec580f99185d352307c5f55394
Reviewed-on: https://review.typo3.org/48080
Reviewed-by: Markus Klein <markus.klein@typo3.org>
Reviewed-by: Andreas Fernandez <typo3@scripting-base.de>
Tested-by: Markus Klein <markus.klein@typo3.org>
Reviewed-by: Stefan Neufeind <typo3.neufeind@speedpartner.de>
Reviewed-by: Frans Saris <franssaris@gmail.com>
Tested-by: Frans Saris <franssaris@gmail.com>
---
 .../core/Classes/Controller/FileDumpController.php     | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/typo3/sysext/core/Classes/Controller/FileDumpController.php b/typo3/sysext/core/Classes/Controller/FileDumpController.php
index 7dd268afa932..b8b5a78478e9 100644
--- a/typo3/sysext/core/Classes/Controller/FileDumpController.php
+++ b/typo3/sysext/core/Classes/Controller/FileDumpController.php
@@ -57,13 +57,17 @@ class FileDumpController
 
         if (GeneralUtility::hmac(implode('|', $parameters), 'resourceStorageDumpFile') === $this->getGetOrPost($request, 'token')) {
             if (isset($parameters['f'])) {
-                $file = ResourceFactory::getInstance()->getFileObject($parameters['f']);
-                if ($file->isDeleted() || $file->isMissing()) {
+                try {
+                    $file = ResourceFactory::getInstance()->getFileObject($parameters['f']);
+                    if ($file->isDeleted() || $file->isMissing()) {
+                        $file = null;
+                    }
+                } catch (\Exception $e) {
                     $file = null;
                 }
             } else {
                 $file = GeneralUtility::makeInstance(ProcessedFileRepository::class)->findByUid($parameters['p']);
-                if ($file->isDeleted()) {
+                if (!$file || $file->isDeleted()) {
                     $file = null;
                 }
             }
-- 
GitLab