Make WordPress Core


Ignore:
Timestamp:
09/11/2014 07:06:33 PM (10 years ago)
Author:
wonderboymusic
Message:

Update getID3 library to 1.9.8.

Changes:
https://github.com/JamesHeinrich/getID3/compare/1.9.7...v1.9.8

Fixes #29627.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/ID3/getid3.php

    r24696 r29734  
    44//  available at http://getid3.sourceforge.net                 //
    55//            or http://www.getid3.org                         //
     6//          also https://github.com/JamesHeinrich/getID3       //
    67/////////////////////////////////////////////////////////////////
    78//                                                             //
     
    1819    define('GETID3_INCLUDEPATH', dirname(__FILE__).DIRECTORY_SEPARATOR);
    1920}
     21// Workaround Bug #39923 (https://bugs.php.net/bug.php?id=39923)
     22if (!defined('IMG_JPG') && defined('IMAGETYPE_JPEG')) {
     23    define('IMG_JPG', IMAGETYPE_JPEG);
     24}
    2025
    2126// attempt to define temp dir as something flexible but reliable
     
    2429    $temp_dir = '';
    2530}
    26 if (!$temp_dir && function_exists('sys_get_temp_dir')) {
    27     // PHP v5.2.1+
     31if (!$temp_dir) {
    2832    // sys_get_temp_dir() may give inaccessible temp dir, e.g. with open_basedir on virtual hosts
    2933    $temp_dir = sys_get_temp_dir();
    3034}
    31 $temp_dir = realpath($temp_dir);
     35$temp_dir = @realpath($temp_dir); // see https://github.com/JamesHeinrich/getID3/pull/10
    3236$open_basedir = ini_get('open_basedir');
    3337if ($open_basedir) {
     
    5862}
    5963// $temp_dir = '/something/else/';  // feel free to override temp dir here if it works better for your system
    60 define('GETID3_TEMP_DIR', $temp_dir);
     64if (!defined('GETID3_TEMP_DIR')) {
     65    define('GETID3_TEMP_DIR', $temp_dir);
     66}
    6167unset($open_basedir, $temp_dir);
    6268
     
    98104    public $info;                             // Result array.
    99105    public $tempdir = GETID3_TEMP_DIR;
     106    public $memory_limit = 0;
    100107
    101108    // Protected variables
    102109    protected $startup_error   = '';
    103110    protected $startup_warning = '';
    104     protected $memory_limit    = 0;
    105 
    106     const VERSION           = '1.9.7-20130705';
     111
     112    const VERSION           = '1.9.8-20140511';
    107113    const FREAD_BUFFER_SIZE = 32768;
    108114
     
    112118    // public: constructor
    113119    public function __construct() {
    114 
    115         // Check for PHP version
    116         $required_php_version = '5.0.5';
    117         if (version_compare(PHP_VERSION, $required_php_version, '<')) {
    118             $this->startup_error .= 'getID3() requires PHP v'.$required_php_version.' or higher - you are running v'.PHP_VERSION;
    119             return false;
    120         }
    121120
    122121        // Check memory
     
    262261
    263262            // open local file
    264             if (is_readable($filename) && is_file($filename) && ($this->fp = fopen($filename, 'rb'))) {
     263            //if (is_readable($filename) && is_file($filename) && ($this->fp = fopen($filename, 'rb'))) { // see http://www.getid3.org/phpBB3/viewtopic.php?t=1720
     264            if ((is_readable($filename) || file_exists($filename)) && is_file($filename) && ($this->fp = fopen($filename, 'rb'))) {
    265265                // great
    266266            } else {
    267                 throw new getid3_exception('Could not open "'.$filename.'" (does not exist, or is not a file)');
     267                $errormessagelist = array();
     268                if (!is_readable($filename)) {
     269                    $errormessagelist[] = '!is_readable';
     270                }
     271                if (!is_file($filename)) {
     272                    $errormessagelist[] = '!is_file';
     273                }
     274                if (!file_exists($filename)) {
     275                    $errormessagelist[] = '!file_exists';
     276                }
     277                if (empty($errormessagelist)) {
     278                    $errormessagelist[] = 'fopen failed';
     279                }
     280                throw new getid3_exception('Could not open "'.$filename.'" ('.implode('; ', $errormessagelist).')');
    268281            }
    269282
    270283            $this->info['filesize'] = filesize($filename);
    271284            // set redundant parameters - might be needed in some include file
    272             $this->info['filename']     = basename($filename);
     285            // filenames / filepaths in getID3 are always expressed with forward slashes (unix-style) for both Windows and other to try and minimize confusion
     286            $filename = str_replace('\\', '/', $filename);
    273287            $this->info['filepath']     = str_replace('\\', '/', realpath(dirname($filename)));
     288            $this->info['filename']     = getid3_lib::mb_basename($filename);
    274289            $this->info['filenamepath'] = $this->info['filepath'].'/'.$this->info['filename'];
    275290
     
    353368            // ID3v2 detection (NOT parsing), even if ($this->option_tag_id3v2 == false) done to make fileformat easier
    354369            if (!$this->option_tag_id3v2) {
    355                 fseek($this->fp, 0, SEEK_SET);
     370                fseek($this->fp, 0);
    356371                $header = fread($this->fp, 10);
    357372                if ((substr($header, 0, 3) == 'ID3') && (strlen($header) == 10)) {
     
    364379
    365380            // read 32 kb file data
    366             fseek($this->fp, $this->info['avdataoffset'], SEEK_SET);
     381            fseek($this->fp, $this->info['avdataoffset']);
    367382            $formattest = fread($this->fp, 32774);
    368383
     
    587602                            'module'    => 'au',
    588603                            'mime_type' => 'audio/basic',
     604                        ),
     605
     606                // AMR  - audio       - Adaptive Multi Rate
     607                'amr'  => array(
     608                            'pattern'   => '^\x23\x21AMR\x0A', // #!AMR[0A]
     609                            'group'     => 'audio',
     610                            'module'    => 'amr',
     611                            'mime_type' => 'audio/amr',
    589612                        ),
    590613
     
    11621185                'flac'      => array('vorbiscomment' , 'UTF-8'),
    11631186                'divxtag'   => array('divx'          , 'ISO-8859-1'),
     1187                'iptc'      => array('iptc'          , 'ISO-8859-1'),
    11641188            );
    11651189        }
     
    11821206                        }
    11831207                        if ($value) {
    1184                             $this->info['tags'][trim($tag_name)][trim($tag_key)][] = $value;
     1208                            if (!is_numeric($key)) {
     1209                                $this->info['tags'][trim($tag_name)][trim($tag_key)][$key] = $value;
     1210                            } else {
     1211                                $this->info['tags'][trim($tag_name)][trim($tag_key)][]     = $value;
     1212                            }
    11851213                        }
    11861214                    }
     
    11971225                if ($this->option_tags_html) {
    11981226                    foreach ($this->info['tags'][$tag_name] as $tag_key => $valuearray) {
    1199                         foreach ($valuearray as $key => $value) {
    1200                             if (is_string($value)) {
    1201                                 //$this->info['tags_html'][$tag_name][$tag_key][$key] = getid3_lib::MultiByteCharString2HTML($value, $encoding);
    1202                                 $this->info['tags_html'][$tag_name][$tag_key][$key] = str_replace('&#0;', '', trim(getid3_lib::MultiByteCharString2HTML($value, $encoding)));
    1203                             } else {
    1204                                 $this->info['tags_html'][$tag_name][$tag_key][$key] = $value;
    1205                             }
    1206                         }
     1227                        $this->info['tags_html'][$tag_name][$tag_key] = getid3_lib::recursiveMultiByteCharString2HTML($valuearray, $encoding);
    12071228                    }
    12081229                }
     
    12601281    }
    12611282
    1262 
    12631283    public function getHashdata($algorithm) {
    12641284        switch ($algorithm) {
     
    15661586
    15671587
    1568 abstract class getid3_handler
    1569 {
     1588abstract class getid3_handler {
     1589
     1590    /**
     1591    * @var getID3
     1592    */
    15701593    protected $getid3;                       // pointer
    15711594
     
    15941617    public function AnalyzeString($string) {
    15951618        // Enter string mode
    1596         $this->setStringMode($string);
     1619        $this->setStringMode($string);
    15971620
    15981621        // Save info
     
    16351658            return substr($this->data_string, $this->data_string_position - $bytes, $bytes);
    16361659        }
    1637         $pos = $this->ftell() + $bytes;
    1638         if (!getid3_lib::intValueSupported($pos)) {
     1660        $pos = $this->ftell() + $bytes;
     1661        if (!getid3_lib::intValueSupported($pos)) {
    16391662            throw new getid3_exception('cannot fread('.$bytes.' from '.$this->ftell().') because beyond PHP filesystem limit', 10);
    1640         }
     1663        }
    16411664        return fread($this->getid3->fp, $bytes);
    16421665    }
     
    16581681            }
    16591682            return 0;
    1660         } else {
    1661             $pos = $bytes;
    1662             if ($whence == SEEK_CUR) {
     1683        } else {
     1684            $pos = $bytes;
     1685            if ($whence == SEEK_CUR) {
    16631686                $pos = $this->ftell() + $bytes;
    1664             } elseif ($whence == SEEK_END) {
    1665                 $pos = $this->info['filesize'] + $bytes;
    1666             }
    1667             if (!getid3_lib::intValueSupported($pos)) {
     1687            } elseif ($whence == SEEK_END) {
     1688                $pos = $this->getid3->info['filesize'] + $bytes;
     1689            }
     1690            if (!getid3_lib::intValueSupported($pos)) {
    16681691                throw new getid3_exception('cannot fseek('.$pos.') because beyond PHP filesystem limit', 10);
    16691692            }
     
    16831706    }
    16841707
    1685     protected function error($text)
    1686     {
     1708    protected function error($text) {
    16871709        $this->getid3->info['error'][] = $text;
    16881710
     
    16901712    }
    16911713
    1692     protected function warning($text)
    1693     {
     1714    protected function warning($text) {
    16941715        return $this->getid3->warning($text);
    16951716    }
    16961717
    1697     protected function notice($text)
    1698     {
     1718    protected function notice($text) {
    16991719        // does nothing for now
    17001720    }
Note: See TracChangeset for help on using the changeset viewer.