Fix for ticket #2853: fix for some unknown MIME type error cases by adjusting the PEAR error handling temporarily around MIME_Type_Extension usage.

This commit is contained in:
Brion Vibber 2010-11-03 17:05:26 -07:00
parent 28e009898f
commit 2692b5fc84
2 changed files with 17 additions and 3 deletions

View File

@ -217,12 +217,19 @@ class File extends Memcached_DataObject
static function filename($profile, $basename, $mimetype) static function filename($profile, $basename, $mimetype)
{ {
require_once 'MIME/Type/Extension.php'; require_once 'MIME/Type/Extension.php';
// We have to temporarily disable auto handling of PEAR errors...
PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
$mte = new MIME_Type_Extension(); $mte = new MIME_Type_Extension();
try {
$ext = $mte->getExtension($mimetype); $ext = $mte->getExtension($mimetype);
} catch ( Exception $e) { if (PEAR::isError($ext)) {
$ext = strtolower(preg_replace('/\W/', '', $mimetype)); $ext = strtolower(preg_replace('/\W/', '', $mimetype));
} }
// Restore error handling.
PEAR::staticPopErrorHandling();
$nickname = $profile->nickname; $nickname = $profile->nickname;
$datestamp = strftime('%Y%m%dT%H%M%S', time()); $datestamp = strftime('%Y%m%dT%H%M%S', time());
$random = strtolower(common_confirmation_code(32)); $random = strtolower(common_confirmation_code(32));

View File

@ -278,6 +278,9 @@ class MediaFile
static function getUploadedFileType($f, $originalFilename=false) { static function getUploadedFileType($f, $originalFilename=false) {
require_once 'MIME/Type.php'; require_once 'MIME/Type.php';
require_once 'MIME/Type/Extension.php'; require_once 'MIME/Type/Extension.php';
// We have to disable auto handling of PEAR errors
PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);
$mte = new MIME_Type_Extension(); $mte = new MIME_Type_Extension();
$cmd = &PEAR::getStaticProperty('MIME_Type', 'fileCmd'); $cmd = &PEAR::getStaticProperty('MIME_Type', 'fileCmd');
@ -330,6 +333,8 @@ class MediaFile
} }
} }
if ($supported === true || in_array($filetype, $supported)) { if ($supported === true || in_array($filetype, $supported)) {
// Restore PEAR error handlers for our DB code...
PEAR::staticPopErrorHandling();
return $filetype; return $filetype;
} }
$media = MIME_Type::getMedia($filetype); $media = MIME_Type::getMedia($filetype);
@ -344,6 +349,8 @@ class MediaFile
// TRANS: %s is the file type that was denied. // TRANS: %s is the file type that was denied.
$hint = sprintf(_('"%s" is not a supported file type on this server.'), $filetype); $hint = sprintf(_('"%s" is not a supported file type on this server.'), $filetype);
} }
// Restore PEAR error handlers for our DB code...
PEAR::staticPopErrorHandling();
throw new ClientException($hint); throw new ClientException($hint);
} }