diff options
| author | Tristan Darricau <github@nicofuma.fr> | 2014-09-06 13:53:43 +0200 |
|---|---|---|
| committer | Tristan Darricau <github@nicofuma.fr> | 2014-09-06 13:53:43 +0200 |
| commit | 6387bf8d1399b9ccf995b8eb5a4b93425d27e873 (patch) | |
| tree | eebf5374ee0f46ee5ddebc92f9847613ba87e27e /phpBB/phpbb | |
| parent | 6eaeae60f6a2602cb44b1aa596af794629828313 (diff) | |
| parent | 21029e9fd295bedfcc34555d32afd928a03392a1 (diff) | |
| download | forums-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.php | 39 |
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; } } |
