summaryrefslogtreecommitdiff
path: root/includes/MimeMagic.php
diff options
context:
space:
mode:
authorPierre Schmitz <pierre@archlinux.de>2014-06-26 05:36:14 +0200
committerPierre Schmitz <pierre@archlinux.de>2014-06-26 05:36:14 +0200
commitf80b2307028ed4d9231a0bd46496b241dcf4aa5c (patch)
tree304d10d899df0e72a16ea1c07b17c19e8b753467 /includes/MimeMagic.php
parent3d92394be2570f9f49c7904cacc2bc8d790e72f2 (diff)
Update to MediaWiki 1.22.8
Diffstat (limited to 'includes/MimeMagic.php')
-rw-r--r--includes/MimeMagic.php18
1 files changed, 14 insertions, 4 deletions
diff --git a/includes/MimeMagic.php b/includes/MimeMagic.php
index 8220e92f..9180218b 100644
--- a/includes/MimeMagic.php
+++ b/includes/MimeMagic.php
@@ -570,20 +570,30 @@ class MimeMagic {
* @param string $file
* @param mixed $ext
* @return bool|string
+ * @throws MWException
*/
private function doGuessMimeType( $file, $ext ) { // TODO: remove $ext param
// Read a chunk of the file
wfSuppressWarnings();
- // @todo FIXME: Shouldn't this be rb?
- $f = fopen( $file, 'rt' );
+ $f = fopen( $file, 'rb' );
wfRestoreWarnings();
if ( !$f ) {
return 'unknown/unknown';
}
+
+ $fsize = filesize( $file );
+ if ( $fsize === false ) {
+ return 'unknown/unknown';
+ }
+
$head = fread( $f, 1024 );
- fseek( $f, -65558, SEEK_END );
- $tail = fread( $f, 65558 ); // 65558 = maximum size of a zip EOCDR
+ $tailLength = min( 65558, $fsize ); // 65558 = maximum size of a zip EOCDR
+ if ( fseek( $f, -1 * $tailLength, SEEK_END ) === -1 ) {
+ throw new MWException(
+ "Seeking $tailLength bytes from EOF failed in " . __METHOD__ );
+ }
+ $tail = fread( $f, $tailLength );
fclose( $f );
wfDebug( __METHOD__ . ": analyzing head and tail of $file for magic numbers.\n" );