aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB/phpbb
diff options
context:
space:
mode:
authorTristan Darricau <github@nicofuma.fr>2014-09-06 13:53:43 +0200
committerTristan Darricau <github@nicofuma.fr>2014-09-06 13:53:43 +0200
commit6387bf8d1399b9ccf995b8eb5a4b93425d27e873 (patch)
treeeebf5374ee0f46ee5ddebc92f9847613ba87e27e /phpBB/phpbb
parent6eaeae60f6a2602cb44b1aa596af794629828313 (diff)
parent21029e9fd295bedfcc34555d32afd928a03392a1 (diff)
downloadforums-6387bf8d1399b9ccf995b8eb5a4b93425d27e873.tar
forums-6387bf8d1399b9ccf995b8eb5a4b93425d27e873.tar.gz
forums-6387bf8d1399b9ccf995b8eb5a4b93425d27e873.tar.bz2
forums-6387bf8d1399b9ccf995b8eb5a4b93425d27e873.tar.xz
forums-6387bf8d1399b9ccf995b8eb5a4b93425d27e873.zip
Merge pull request #2918 from marc1706/ticket/13031
[ticket/13031] Only use mimetype guesser guess if it helps us * marc1706/ticket/13031: [ticket/13031] Slightly change behavior of choose_mime_type and add unit tests [ticket/13031] Guess with all mimetype guessers and pick best guess [ticket/13031] Only use mimetype guesser guess if it helps us
Diffstat (limited to 'phpBB/phpbb')
-rw-r--r--phpBB/phpbb/mimetype/guesser.php39
1 files changed, 32 insertions, 7 deletions
diff --git a/phpBB/phpbb/mimetype/guesser.php b/phpBB/phpbb/mimetype/guesser.php
index 773a1f822a..8baa77089b 100644
--- a/phpBB/phpbb/mimetype/guesser.php
+++ b/phpBB/phpbb/mimetype/guesser.php
@@ -115,17 +115,42 @@ class guesser
return false;
}
+ $mimetype = 'application/octet-stream';
+
foreach ($this->guessers as $guesser)
{
- $mimetype = $guesser->guess($file, $file_name);
+ $mimetype_guess = $guesser->guess($file, $file_name);
- // Try to guess something that is not the fallback application/octet-stream
- if ($mimetype !== null && $mimetype !== 'application/octet-stream')
- {
- return $mimetype;
- }
+ $mimetype = $this->choose_mime_type($mimetype, $mimetype_guess);
}
// Return any mimetype if we got a result or the fallback value
- return (!empty($mimetype)) ? $mimetype : 'application/octet-stream';
+ return $mimetype;
+ }
+
+ /**
+ * Choose the best mime type based on the current mime type and the guess
+ * If a guesser returns nulls or application/octet-stream, we will keep
+ * the current guess. Guesses with a slash inside them will be favored over
+ * already existing ones. However, any guess that will pass the first check
+ * will always overwrite the default application/octet-stream.
+ *
+ * @param string $mime_type The current mime type
+ * @param string $guess The current mime type guess
+ *
+ * @return string The best mime type based on current mime type and guess
+ */
+ public function choose_mime_type($mime_type, $guess)
+ {
+ if ($guess === null || $guess == 'application/octet-stream')
+ {
+ return $mime_type;
+ }
+
+ if ($mime_type == 'application/octet-stream' || strpos($guess, '/') !== false)
+ {
+ $mime_type = $guess;
+ }
+
+ return $mime_type;
}
}