[BUGFIX] Image rendering of non-existing files throws exception 93/19393/2
authorOliver Hader <oliver@typo3.org>
Fri, 22 Mar 2013 09:31:29 +0000 (10:31 +0100)
committerOliver Hader <oliver.hader@typo3.org>
Wed, 27 Mar 2013 19:10:24 +0000 (20:10 +0100)
Rendering an image that has no accordant file in a storage in
the frontend (e.g. in TypoScript) fails with an exception like
"Object with identifier xyz does not exist in storage".

A new ResourceDoesNotExistException is introduced to cover
files and folders and is thrown instead of RuntimeException.
This way, the exception is caught in the ContentObjectRenderer
and the frontend rendering just does not output the error,
which is logged instead.

Change-Id: I0affa15a8f0a50bf30a7176972994f209d18daf4
Fixes: #46535
Releases: 6.0, 6.1
Reviewed-on: https://review.typo3.org/19393
Reviewed-by: Oliver Hader
Tested-by: Oliver Hader
typo3/sysext/core/Classes/Resource/Exception/FileDoesNotExistException.php
typo3/sysext/core/Classes/Resource/Exception/FolderDoesNotExistException.php
typo3/sysext/core/Classes/Resource/Exception/ResourceDoesNotExistException.php [new file with mode: 0644]
typo3/sysext/core/Classes/Resource/ResourceFactory.php

index 1afee2a..70922e1 100644 (file)
@@ -27,7 +27,7 @@ namespace TYPO3\CMS\Core\Resource\Exception;
  * An exception to throw if a file does not exist
  *
  */
-class FileDoesNotExistException extends \TYPO3\CMS\Core\Resource\Exception {
+class FileDoesNotExistException extends ResourceDoesNotExistException {
 
 
 }
index dde8cc9..8409fdb 100644 (file)
@@ -27,7 +27,7 @@ namespace TYPO3\CMS\Core\Resource\Exception;
  * An exception to throw if a folder does not exist
  *
  */
-class FolderDoesNotExistException extends \TYPO3\CMS\Core\Resource\Exception {
+class FolderDoesNotExistException extends ResourceDoesNotExistException {
 
 
 }
diff --git a/typo3/sysext/core/Classes/Resource/Exception/ResourceDoesNotExistException.php b/typo3/sysext/core/Classes/Resource/Exception/ResourceDoesNotExistException.php
new file mode 100644 (file)
index 0000000..69f402f
--- /dev/null
@@ -0,0 +1,32 @@
+<?php
+namespace TYPO3\CMS\Core\Resource\Exception;
+
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2013 Oliver Hader <oliver.hader@typo3.org>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project is
+ *  free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *
+ *  This script is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+/**
+ * An exception to throw if a resource (file/folder) does not exist
+ */
+class ResourceDoesNotExistException extends \TYPO3\CMS\Core\Resource\Exception {
+
+}
+?>
\ No newline at end of file
index aeb6e19..21e0e9e 100644 (file)
@@ -247,6 +247,7 @@ class ResourceFactory implements \TYPO3\CMS\Core\SingletonInterface {
         * @param array $fileData The record row from database.
         *
         * @throws \InvalidArgumentException
+        * @throws \TYPO3\CMS\Core\Resource\Exception\FileDoesNotExistException
         * @return File
         */
        public function getFileObject($uid, array $fileData = array()) {
@@ -259,7 +260,7 @@ class ResourceFactory implements \TYPO3\CMS\Core\SingletonInterface {
                                /** @var $GLOBALS['TYPO3_DB'] \TYPO3\CMS\Core\Database\DatabaseConnection */
                                $fileData = $GLOBALS['TYPO3_DB']->exec_SELECTgetSingleRow('*', 'sys_file', 'uid=' . intval($uid) . ' AND deleted=0');
                                if (!is_array($fileData)) {
-                                       throw new \InvalidArgumentException('No file found for given UID.', 1317178604);
+                                       throw new \TYPO3\CMS\Core\Resource\Exception\FileDoesNotExistException('No file found for given UID.', 1317178604);
                                }
                        }
                        $this->fileInstances[$uid] = $this->createFileObject($fileData);
@@ -372,7 +373,7 @@ class ResourceFactory implements \TYPO3\CMS\Core\SingletonInterface {
         *
         * @param string $identifier
         *
-        * @throws \RuntimeException
+        * @throws \TYPO3\CMS\Core\Resource\Exception\ResourceDoesNotExistException
         * @return FileInterface|Folder
         */
        public function getObjectFromCombinedIdentifier($identifier) {
@@ -383,7 +384,7 @@ class ResourceFactory implements \TYPO3\CMS\Core\SingletonInterface {
                } elseif ($storage->hasFolder($objectIdentifier)) {
                        return $storage->getFolder($objectIdentifier);
                } else {
-                       throw new \RuntimeException('Object with identifier "' . $identifier . '" does not exist in storage', 1329647780);
+                       throw new \TYPO3\CMS\Core\Resource\Exception\ResourceDoesNotExistException('Object with identifier "' . $identifier . '" does not exist in storage', 1329647780);
                }
        }