]> source.dussan.org Git - nextcloud-server.git/commitdiff
Opening the trashbin causes errors in log for files without preview
authorMorris Jobke <hey@morrisjobke.de>
Fri, 9 Sep 2016 08:58:52 +0000 (10:58 +0200)
committerMorris Jobke <hey@morrisjobke.de>
Tue, 13 Sep 2016 18:18:09 +0000 (20:18 +0200)
* put a file without a generated preview in the trashbin
  (e.g. a *.docx file)
* open the trashbin
* following errors will show up in the nextcloud.log:
- filesize(): stat failed for ...
- fopen(...): failed to open stream: No such file or directory at ...
- fread() expects parameter 1 to be resource, boolean given at ...
- fclose() expects parameter 1 to be resource, boolean given at ...
- imagecreatefromstring(): Empty string or invalid image at ...

This is because the preview code tries to load an SVG image, which
is obviously only text.

The fix simply handles this before the loading happens and the web UI
keeps showing the default mimetype icon.

apps/files_trashbin/ajax/preview.php
lib/composer/composer/autoload_classmap.php
lib/composer/composer/autoload_static.php
lib/private/Preview.php
lib/private/PreviewNotAvailableException.php [new file with mode: 0644]

index 1a0131da28c6eeee65c66c2833d44ffc0aec587a..3f895161f0077b121faae9ca063bfcd97917bdbb 100644 (file)
@@ -72,6 +72,8 @@ try{
        $preview->setScalingUp($scalingUp);
 
        $preview->showPreview();
+} catch (\OC\PreviewNotAvailableException $e) {
+       \OC_Response::setStatus(404);
 }catch(\Exception $e) {
        \OC_Response::setStatus(500);
        \OCP\Util::writeLog('core', $e->getmessage(), \OCP\Util::DEBUG);
index f0e23566a649a9f2e3eb1c8ab0fd80a318b73841..4472d761ae0b4eeb95eecf2d16bfa05d58c03514 100644 (file)
@@ -590,6 +590,7 @@ return array(
     'OC\\OCS\\Result' => $baseDir . '/lib/private/OCS/Result.php',
     'OC\\Preview' => $baseDir . '/lib/private/Preview.php',
     'OC\\PreviewManager' => $baseDir . '/lib/private/PreviewManager.php',
+    'OC\\PreviewNotAvailableException' => $baseDir . '/lib/private/PreviewNotAvailableException.php',
     'OC\\Preview\\BMP' => $baseDir . '/lib/private/Preview/BMP.php',
     'OC\\Preview\\Bitmap' => $baseDir . '/lib/private/Preview/Bitmap.php',
     'OC\\Preview\\Font' => $baseDir . '/lib/private/Preview/Font.php',
index f8f9caf60891c18ae81fa168aa41493e66d090c2..dc274e78bc9bbfd2288172d34cd2a707bb1c715a 100644 (file)
@@ -620,6 +620,7 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
         'OC\\OCS\\Result' => __DIR__ . '/../../..' . '/lib/private/OCS/Result.php',
         'OC\\Preview' => __DIR__ . '/../../..' . '/lib/private/Preview.php',
         'OC\\PreviewManager' => __DIR__ . '/../../..' . '/lib/private/PreviewManager.php',
+        'OC\\PreviewNotAvailableException' => __DIR__ . '/../../..' . '/lib/private/PreviewNotAvailableException.php',
         'OC\\Preview\\BMP' => __DIR__ . '/../../..' . '/lib/private/Preview/BMP.php',
         'OC\\Preview\\Bitmap' => __DIR__ . '/../../..' . '/lib/private/Preview/Bitmap.php',
         'OC\\Preview\\Font' => __DIR__ . '/../../..' . '/lib/private/Preview/Font.php',
index 67838a8d4a318b0a1f019d72b39885f79bf27d07..9c6a7b54988c88db6a7fc6797d3473bc0a058ffe 100644 (file)
@@ -791,6 +791,7 @@ class Preview {
         * @param null|string $mimeTypeForHeaders the media type to use when sending back the reply
         *
         * @throws NotFoundException
+        * @throws PreviewNotAvailableException
         */
        public function showPreview($mimeTypeForHeaders = null) {
                // Check if file is valid
@@ -1172,6 +1173,7 @@ class Preview {
 
        /**
         * Defines the media icon, for the media type of the original file, as the preview
+        * @throws PreviewNotAvailableException
         */
        private function getMimeIcon() {
                $image = new \OC_Image();
@@ -1181,6 +1183,10 @@ class Preview {
                } else {
                        $mimeIconServerPath = str_replace(\OC::$WEBROOT, \OC::$SERVERROOT, $mimeIconWebPath);
                }
+               // we can't load SVGs into an image
+               if (substr($mimeIconWebPath, -4) === '.svg') {
+                       throw new PreviewNotAvailableException('SVG mimetype cannot be rendered');
+               }
                $image->loadFromFile($mimeIconServerPath);
 
                $this->preview = $image;
diff --git a/lib/private/PreviewNotAvailableException.php b/lib/private/PreviewNotAvailableException.php
new file mode 100644 (file)
index 0000000..7d92e86
--- /dev/null
@@ -0,0 +1,27 @@
+<?php
+/**
+ * @copyright Copyright (c) 2016 Morris Jobke <hey@morrisjobke.de>
+ *
+ * @author Morris Jobke <hey@morrisjobke.de>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OC;
+
+class PreviewNotAvailableException extends \Exception {
+}