Aleksander Machniak
2013-03-24 e5a3e61052aaeebf9c58ae501aaf0d046a270371
program/lib/Roundcube/rcube_mime.php
@@ -672,7 +672,16 @@
        // try fileinfo extension if available
        if (!$mime_type && function_exists('finfo_open')) {
            if ($finfo = finfo_open(FILEINFO_MIME, $mime_magic)) {
            // null as a 2nd argument should be the same as no argument
            // this however is not true on all systems/versions
            if ($mime_magic) {
                $finfo = finfo_open(FILEINFO_MIME, $mime_magic);
            }
            else {
                $finfo = finfo_open(FILEINFO_MIME);
            }
            if ($finfo) {
                if ($is_stream)
                    $mime_type = finfo_buffer($finfo, $path);
                else
@@ -718,21 +727,27 @@
        // load mapping file
        $file_paths = array();
        if ($mime_types = rcube::get_instance()->config->get('mime_types'))
        if ($mime_types = rcube::get_instance()->config->get('mime_types')) {
            $file_paths[] = $mime_types;
        }
        // try common locations
        $file_paths[] = '/etc/mime.types';
        $file_paths[] = '/etc/httpd/mime.types';
        $file_paths[] = '/etc/httpd2/mime.types';
        $file_paths[] = '/etc/apache/mime.types';
        $file_paths[] = '/etc/apache2/mime.types';
        $file_paths[] = '/usr/local/etc/httpd/conf/mime.types';
        $file_paths[] = '/usr/local/etc/apache/conf/mime.types';
        if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN') {
            $file_paths[] = 'C:/xampp/apache/conf/mime.types.';
        }
        else {
            $file_paths[] = '/etc/mime.types';
            $file_paths[] = '/etc/httpd/mime.types';
            $file_paths[] = '/etc/httpd2/mime.types';
            $file_paths[] = '/etc/apache/mime.types';
            $file_paths[] = '/etc/apache2/mime.types';
            $file_paths[] = '/usr/local/etc/httpd/conf/mime.types';
            $file_paths[] = '/usr/local/etc/apache/conf/mime.types';
        }
        foreach ($file_paths as $fp) {
            if (is_readable($fp)) {
                $lines = file($fp, FILE_IGNORE_NEW_LINES);
                $lines = file($fp, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
                break;
            }
        }
@@ -754,11 +769,35 @@
        // fallback to some well-known types most important for daily emails
        if (empty($mime_types)) {
            $mime_extensions = @include(RCUBE_CONFIG_DIR . '/mimetypes.php');
            $mime_extensions += array('gif' => 'image/gif', 'png' => 'image/png', 'jpg' => 'image/jpeg', 'jpeg' => 'image/jpeg', 'tif' => 'image/tiff');
            $mime_extensions = (array) @include(RCUBE_CONFIG_DIR . '/mimetypes.php');
            foreach ($mime_extensions as $ext => $mime)
            foreach ($mime_extensions as $ext => $mime) {
                $mime_types[$mime][] = $ext;
            }
        }
        // Add some known aliases that aren't included by some mime.types (#1488891)
        // the order is important here so standard extensions have higher prio
        $aliases = array(
            'image/gif'      => array('gif'),
            'image/png'      => array('png'),
            'image/x-png'    => array('png'),
            'image/jpeg'     => array('jpg', 'jpeg', 'jpe'),
            'image/jpg'      => array('jpg', 'jpeg', 'jpe'),
            'image/pjpeg'    => array('jpg', 'jpeg', 'jpe'),
            'image/tiff'     => array('tif'),
            'message/rfc822' => array('eml'),
            'text/x-mail'    => array('eml'),
        );
        foreach ($aliases as $mime => $exts) {
            $mime_types[$mime] = array_unique(array_merge((array) $mime_types[$mime], $exts));
            foreach ($exts as $ext) {
                if (!isset($mime_extensions[$ext])) {
                    $mime_extensions[$ext] = $mime;
                }
            }
        }
        return $mimetype ? $mime_types[$mimetype] : $mime_extensions;