From faa68b28cb93bb7368a1817cbbe59880ce3bce5b Mon Sep 17 00:00:00 2001
From: Roeland Jago Douma <roeland@famdouma.nl>
Date: Sun, 7 Jan 2018 11:46:24 +0100
Subject: Only return 1 type

Throw proper exception if we can't get the mimetype for a preview. Catch
it later on so we can just return a not found for the preview.

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
---
 lib/private/Preview/Generator.php | 22 +++++++++++++++++-----
 lib/private/legacy/image.php      |  5 +++--
 2 files changed, 20 insertions(+), 7 deletions(-)

(limited to 'lib')

diff --git a/lib/private/Preview/Generator.php b/lib/private/Preview/Generator.php
index 91173d41afa..70a831530ed 100644
--- a/lib/private/Preview/Generator.php
+++ b/lib/private/Preview/Generator.php
@@ -128,9 +128,13 @@ class Generator {
 
 		// Try to get a cached preview. Else generate (and store) one
 		try {
-			$file = $this->getCachedPreview($previewFolder, $width, $height, $crop, $maxPreview->getMimeType());
-		} catch (NotFoundException $e) {
-			$file = $this->generatePreview($previewFolder, $maxPreview, $width, $height, $crop, $maxWidth, $maxHeight);
+			try {
+				$file = $this->getCachedPreview($previewFolder, $width, $height, $crop, $maxPreview->getMimeType());
+			} catch (NotFoundException $e) {
+				$file = $this->generatePreview($previewFolder, $maxPreview, $width, $height, $crop, $maxWidth, $maxHeight);
+			}
+		} catch (\InvalidArgumentException $e) {
+			throw new NotFoundException();
 		}
 
 		return $file;
@@ -173,7 +177,14 @@ class Generator {
 					continue;
 				}
 
-				$ext = $this->getExtention($preview->dataMimeType());
+				// Try to get the extention.
+				try {
+					$ext = $this->getExtention($preview->dataMimeType());
+				} catch (\InvalidArgumentException $e) {
+					// Just continue to the next iteration if this preview doesn't have a valid mimetype
+					continue;
+				}
+
 				$path = (string)$preview->width() . '-' . (string)$preview->height() . '-max.' . $ext;
 				try {
 					$file = $previewFolder->newFile($path);
@@ -390,6 +401,7 @@ class Generator {
 	/**
 	 * @param string $mimeType
 	 * @return null|string
+	 * @throws \InvalidArgumentException
 	 */
 	private function getExtention($mimeType) {
 		switch ($mimeType) {
@@ -400,7 +412,7 @@ class Generator {
 			case 'image/gif':
 				return 'gif';
 			default:
-				return null;
+				throw new \InvalidArgumentException('Not a valid mimetype');
 		}
 	}
 }
diff --git a/lib/private/legacy/image.php b/lib/private/legacy/image.php
index 925548ef26d..a0159b927f9 100644
--- a/lib/private/legacy/image.php
+++ b/lib/private/legacy/image.php
@@ -305,11 +305,12 @@ class OC_Image implements \OCP\IImage {
 	}
 
 	/**
-	 * @return null|string Returns the mimetype of the data
+	 * @return string Returns the mimetype of the data. Returns the empty string
+	 * if the data is not valid.
 	 */
 	public function dataMimeType() {
 		if (!$this->valid()) {
-			return null;
+			return '';
 		}
 
 		switch ($this->mimeType) {
-- 
cgit v1.2.3