If the file is text/plain, see if we accept the extension
This commit is contained in:
parent
4117118e23
commit
71afb5be75
@ -355,6 +355,7 @@ class MediaFile
|
|||||||
$unclearTypes = array('application/octet-stream',
|
$unclearTypes = array('application/octet-stream',
|
||||||
'application/vnd.ms-office',
|
'application/vnd.ms-office',
|
||||||
'application/zip',
|
'application/zip',
|
||||||
|
'text/plain',
|
||||||
'text/html', // Ironically, Wikimedia Commons' SVG_logo.svg is identified as text/html
|
'text/html', // Ironically, Wikimedia Commons' SVG_logo.svg is identified as text/html
|
||||||
// TODO: for XML we could do better content-based sniffing too
|
// TODO: for XML we could do better content-based sniffing too
|
||||||
'text/xml');
|
'text/xml');
|
||||||
@ -364,10 +365,12 @@ class MediaFile
|
|||||||
// If we didn't match, or it is an unclear match
|
// If we didn't match, or it is an unclear match
|
||||||
if ($originalFilename && (!$mimetype || in_array($mimetype, $unclearTypes))) {
|
if ($originalFilename && (!$mimetype || in_array($mimetype, $unclearTypes))) {
|
||||||
try {
|
try {
|
||||||
$type = common_supported_ext_to_mime($originalFilename);
|
$type = common_supported_filename_to_mime($originalFilename);
|
||||||
return $type;
|
return $type;
|
||||||
|
} catch (UnknownExtensionMimeException $e) {
|
||||||
|
// FIXME: I think we should keep the file extension here (supported should be === true here)
|
||||||
} catch (Exception $e) {
|
} catch (Exception $e) {
|
||||||
// Extension not found, so $mimetype is our best guess
|
// Extension parsed but no connected mimetype, so $mimetype is our best guess
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
26
lib/util.php
26
lib/util.php
@ -1991,15 +1991,22 @@ function common_accept_to_prefs($accept, $def = '*/*')
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Match by our supported file extensions
|
// Match by our supported file extensions
|
||||||
function common_supported_ext_to_mime($fileext)
|
function common_supported_filename_to_mime($filename)
|
||||||
{
|
{
|
||||||
// Accept a filename and take out the extension
|
// Accept a filename and take out the extension
|
||||||
if (strpos($fileext, '.') !== false) {
|
if (strpos($filename, '.') === false) {
|
||||||
$fileext = substr(strrchr($fileext, '.'), 1);
|
throw new ServerException(sprintf('No extension on filename: %1$s', _ve($filename)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$fileext = substr(strrchr($filename, '.'), 1);
|
||||||
|
return common_supported_ext_to_mime($fileext);
|
||||||
|
}
|
||||||
|
|
||||||
|
function common_supported_ext_to_mime($fileext)
|
||||||
|
{
|
||||||
$supported = common_config('attachments', 'supported');
|
$supported = common_config('attachments', 'supported');
|
||||||
if ($supported === true) {
|
if ($supported === true) {
|
||||||
|
// FIXME: Should we just accept the extension straight off when supported === true?
|
||||||
throw new UnknownExtensionMimeException($fileext);
|
throw new UnknownExtensionMimeException($fileext);
|
||||||
}
|
}
|
||||||
foreach($supported as $type => $ext) {
|
foreach($supported as $type => $ext) {
|
||||||
@ -2015,16 +2022,15 @@ function common_supported_ext_to_mime($fileext)
|
|||||||
function common_supported_mime_to_ext($mimetype)
|
function common_supported_mime_to_ext($mimetype)
|
||||||
{
|
{
|
||||||
$supported = common_config('attachments', 'supported');
|
$supported = common_config('attachments', 'supported');
|
||||||
if ($supported === true) {
|
if (is_array($supported)) {
|
||||||
throw new UnknownMimeExtensionException($mimetype);
|
foreach($supported as $type => $ext) {
|
||||||
}
|
if ($mimetype === $type) {
|
||||||
foreach($supported as $type => $ext) {
|
return $ext;
|
||||||
if ($mimetype === $type) {
|
}
|
||||||
return $ext;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
throw new ServerException('Unsupported MIME type');
|
throw new UnknownMimeExtensionException($mimetype);
|
||||||
}
|
}
|
||||||
|
|
||||||
// The MIME "media" is the part before the slash (video in video/webm)
|
// The MIME "media" is the part before the slash (video in video/webm)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user