WordPress.org

Make WordPress Core


Ignore:
Timestamp:
09/11/2014 07:06:33 PM (5 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/module.audio-video.asf.php

    r23766 r29734  
    44//  available at http://getid3.sourceforge.net                 //
    55//            or http://www.getid3.org                         //
     6//          also https://github.com/JamesHeinrich/getID3       //
    67/////////////////////////////////////////////////////////////////
    78// See readme.txt for more details                             //
     
    1617getid3_lib::IncludeDependency(GETID3_INCLUDEPATH.'module.audio-video.riff.php', __FILE__, true);
    1718
    18 class getid3_asf extends getid3_handler
    19 {
     19class getid3_asf extends getid3_handler {
    2020
    2121    public function __construct(getID3 $getid3) {
     
    6767        $info['fileformat'] = 'asf';
    6868
    69         fseek($this->getid3->fp, $info['avdataoffset'], SEEK_SET);
    70         $HeaderObjectData = fread($this->getid3->fp, 30);
     69        $this->fseek($info['avdataoffset']);
     70        $HeaderObjectData = $this->fread(30);
    7171
    7272        $thisfile_asf_headerobject['objectid']      = substr($HeaderObjectData, 0, 16);
    7373        $thisfile_asf_headerobject['objectid_guid'] = $this->BytestringToGUID($thisfile_asf_headerobject['objectid']);
    7474        if ($thisfile_asf_headerobject['objectid'] != GETID3_ASF_Header_Object) {
    75             $info['warning'][] = 'ASF header GUID {'.$this->BytestringToGUID($thisfile_asf_headerobject['objectid']).'} does not match expected "GETID3_ASF_Header_Object" GUID {'.$this->BytestringToGUID(GETID3_ASF_Header_Object).'}';
    76             unset($info['fileformat']);
    77             unset($info['asf']);
    78             return false;
    79             break;
     75            unset($info['fileformat'], $info['asf']);
     76            return $this->error('ASF header GUID {'.$this->BytestringToGUID($thisfile_asf_headerobject['objectid']).'} does not match expected "GETID3_ASF_Header_Object" GUID {'.$this->BytestringToGUID(GETID3_ASF_Header_Object).'}');
    8077        }
    8178        $thisfile_asf_headerobject['objectsize']    = getid3_lib::LittleEndian2Int(substr($HeaderObjectData, 16, 8));
     
    8481        $thisfile_asf_headerobject['reserved2']     = getid3_lib::LittleEndian2Int(substr($HeaderObjectData, 29, 1));
    8582
    86         $NextObjectOffset = ftell($this->getid3->fp);
    87         $ASFHeaderData = fread($this->getid3->fp, $thisfile_asf_headerobject['objectsize'] - 30);
     83        $NextObjectOffset = $this->ftell();
     84        $ASFHeaderData = $this->fread($thisfile_asf_headerobject['objectsize'] - 30);
    8885        $offset = 0;
    8986
     
    285282                    $thisfile_asf_headerextensionobject['extension_data']      =                              substr($ASFHeaderData, $offset, $thisfile_asf_headerextensionobject['extension_data_size']);
    286283                    $unhandled_sections = 0;
    287                     $thisfile_asf_headerextensionobject['extension_data_parsed'] = $this->ASF_HeaderExtensionObjectDataParse($thisfile_asf_headerextensionobject['extension_data'], $unhandled_sections);
     284                    $thisfile_asf_headerextensionobject['extension_data_parsed'] = $this->HeaderExtensionObjectDataParse($thisfile_asf_headerextensionobject['extension_data'], $unhandled_sections);
    288285                    if ($unhandled_sections === 0) {
    289286                        unset($thisfile_asf_headerextensionobject['extension_data']);
     
    333330                        $thisfile_asf_codeclistobject_codecentries_current['type_raw'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2));
    334331                        $offset += 2;
    335                         $thisfile_asf_codeclistobject_codecentries_current['type'] = $this->ASFCodecListObjectTypeLookup($thisfile_asf_codeclistobject_codecentries_current['type_raw']);
     332                        $thisfile_asf_codeclistobject_codecentries_current['type'] = self::codecListObjectTypeLookup($thisfile_asf_codeclistobject_codecentries_current['type_raw']);
    336333
    337334                        $CodecNameLength = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2)) * 2; // 2 bytes per character
     
    827824
    828825                            case 'id3':
    829                                 // id3v2 module might not be loaded
    830                                 if (class_exists('getid3_id3v2')) {
    831                                     $tempfile         = tempnam(GETID3_TEMP_DIR, 'getID3');
    832                                     $tempfilehandle   = fopen($tempfile, 'wb');
    833                                     $tempThisfileInfo = array('encoding'=>$info['encoding']);
    834                                     fwrite($tempfilehandle, $thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value']);
    835                                     fclose($tempfilehandle);
    836 
    837                                     $getid3_temp = new getID3();
    838                                     $getid3_temp->openfile($tempfile);
    839                                     $getid3_id3v2 = new getid3_id3v2($getid3_temp);
    840                                     $getid3_id3v2->Analyze();
    841                                     $info['id3v2'] = $getid3_temp->info['id3v2'];
    842                                     unset($getid3_temp, $getid3_id3v2);
    843 
    844                                     unlink($tempfile);
     826                                $this->getid3->include_module('tag.id3v2');
     827
     828                                $getid3_id3v2 = new getid3_id3v2($this->getid3);
     829                                $getid3_id3v2->AnalyzeString($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value']);
     830                                unset($getid3_id3v2);
     831
     832                                if ($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value_length'] > 1024) {
     833                                    $thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value'] = '<value too large to display>';
    845834                                }
    846835                                break;
     
    861850                                $thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['image_type_id'] = getid3_lib::LittleEndian2Int(substr($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value'], $wm_picture_offset, 1));
    862851                                $wm_picture_offset += 1;
    863                                 $thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['image_type']    = $this->WMpictureTypeLookup($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['image_type_id']);
     852                                $thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['image_type']    = self::WMpictureTypeLookup($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['image_type_id']);
    864853                                $thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['image_size']    = getid3_lib::LittleEndian2Int(substr($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value'], $wm_picture_offset, 4));
    865854                                $wm_picture_offset += 4;
     
    11571146        }
    11581147
    1159         while (ftell($this->getid3->fp) < $info['avdataend']) {
    1160             $NextObjectDataHeader = fread($this->getid3->fp, 24);
     1148        while ($this->ftell() < $info['avdataend']) {
     1149            $NextObjectDataHeader = $this->fread(24);
    11611150            $offset = 0;
    11621151            $NextObjectGUID = substr($NextObjectDataHeader, 0, 16);
     
    11801169                    $thisfile_asf_dataobject     = &$thisfile_asf['data_object'];
    11811170
    1182                     $DataObjectData = $NextObjectDataHeader.fread($this->getid3->fp, 50 - 24);
     1171                    $DataObjectData = $NextObjectDataHeader.$this->fread(50 - 24);
    11831172                    $offset = 24;
    11841173
     
    12081197                    // * Error Correction Data
    12091198
    1210                     $info['avdataoffset'] = ftell($this->getid3->fp);
    1211                     fseek($this->getid3->fp, ($thisfile_asf_dataobject['objectsize'] - 50), SEEK_CUR); // skip actual audio/video data
    1212                     $info['avdataend'] = ftell($this->getid3->fp);
     1199                    $info['avdataoffset'] = $this->ftell();
     1200                    $this->fseek(($thisfile_asf_dataobject['objectsize'] - 50), SEEK_CUR); // skip actual audio/video data
     1201                    $info['avdataend'] = $this->ftell();
    12131202                    break;
    12141203
     
    12301219                    $thisfile_asf_simpleindexobject      = &$thisfile_asf['simple_index_object'];
    12311220
    1232                     $SimpleIndexObjectData = $NextObjectDataHeader.fread($this->getid3->fp, 56 - 24);
     1221                    $SimpleIndexObjectData = $NextObjectDataHeader.$this->fread(56 - 24);
    12331222                    $offset = 24;
    12341223
     
    12471236                    $offset += 4;
    12481237
    1249                     $IndexEntriesData = $SimpleIndexObjectData.fread($this->getid3->fp, 6 * $thisfile_asf_simpleindexobject['index_entries_count']);
     1238                    $IndexEntriesData = $SimpleIndexObjectData.$this->fread(6 * $thisfile_asf_simpleindexobject['index_entries_count']);
    12501239                    for ($IndexEntriesCounter = 0; $IndexEntriesCounter < $thisfile_asf_simpleindexobject['index_entries_count']; $IndexEntriesCounter++) {
    12511240                        $thisfile_asf_simpleindexobject['index_entries'][$IndexEntriesCounter]['packet_number'] = getid3_lib::LittleEndian2Int(substr($IndexEntriesData, $offset, 4));
     
    12841273                    $thisfile_asf_asfindexobject      = &$thisfile_asf['asf_index_object'];
    12851274
    1286                     $ASFIndexObjectData = $NextObjectDataHeader.fread($this->getid3->fp, 34 - 24);
     1275                    $ASFIndexObjectData = $NextObjectDataHeader.$this->fread(34 - 24);
    12871276                    $offset = 24;
    12881277
     
    12981287                    $offset += 4;
    12991288
    1300                     $ASFIndexObjectData .= fread($this->getid3->fp, 4 * $thisfile_asf_asfindexobject['index_specifiers_count']);
     1289                    $ASFIndexObjectData .= $this->fread(4 * $thisfile_asf_asfindexobject['index_specifiers_count']);
    13011290                    for ($IndexSpecifiersCounter = 0; $IndexSpecifiersCounter < $thisfile_asf_asfindexobject['index_specifiers_count']; $IndexSpecifiersCounter++) {
    13021291                        $IndexSpecifierStreamNumber = getid3_lib::LittleEndian2Int(substr($ASFIndexObjectData, $offset, 2));
     
    13081297                    }
    13091298
    1310                     $ASFIndexObjectData .= fread($this->getid3->fp, 4);
     1299                    $ASFIndexObjectData .= $this->fread(4);
    13111300                    $thisfile_asf_asfindexobject['index_entry_count'] = getid3_lib::LittleEndian2Int(substr($ASFIndexObjectData, $offset, 4));
    13121301                    $offset += 4;
    13131302
    1314                     $ASFIndexObjectData .= fread($this->getid3->fp, 8 * $thisfile_asf_asfindexobject['index_specifiers_count']);
     1303                    $ASFIndexObjectData .= $this->fread(8 * $thisfile_asf_asfindexobject['index_specifiers_count']);
    13151304                    for ($IndexSpecifiersCounter = 0; $IndexSpecifiersCounter < $thisfile_asf_asfindexobject['index_specifiers_count']; $IndexSpecifiersCounter++) {
    13161305                        $thisfile_asf_asfindexobject['block_positions'][$IndexSpecifiersCounter] = getid3_lib::LittleEndian2Int(substr($ASFIndexObjectData, $offset, 8));
     
    13181307                    }
    13191308
    1320                     $ASFIndexObjectData .= fread($this->getid3->fp, 4 * $thisfile_asf_asfindexobject['index_specifiers_count'] * $thisfile_asf_asfindexobject['index_entry_count']);
     1309                    $ASFIndexObjectData .= $this->fread(4 * $thisfile_asf_asfindexobject['index_specifiers_count'] * $thisfile_asf_asfindexobject['index_entry_count']);
    13211310                    for ($IndexEntryCounter = 0; $IndexEntryCounter < $thisfile_asf_asfindexobject['index_entry_count']; $IndexEntryCounter++) {
    13221311                        for ($IndexSpecifiersCounter = 0; $IndexSpecifiersCounter < $thisfile_asf_asfindexobject['index_specifiers_count']; $IndexSpecifiersCounter++) {
     
    13331322                        $info['warning'][] = 'unhandled GUID "'.$this->GUIDname($NextObjectGUIDtext).'" {'.$NextObjectGUIDtext.'} in ASF body at offset '.($offset - 16 - 8);
    13341323                    } else {
    1335                         $info['warning'][] = 'unknown GUID {'.$NextObjectGUIDtext.'} in ASF body at offset '.(ftell($this->getid3->fp) - 16 - 8);
    1336                     }
    1337                     fseek($this->getid3->fp, ($NextObjectSize - 16 - 8), SEEK_CUR);
     1324                        $info['warning'][] = 'unknown GUID {'.$NextObjectGUIDtext.'} in ASF body at offset '.($this->ftell() - 16 - 8);
     1325                    }
     1326                    $this->fseek(($NextObjectSize - 16 - 8), SEEK_CUR);
    13381327                    break;
    13391328            }
     
    14341423        }
    14351424        if (!empty($thisfile_video['streams'])) {
    1436             $thisfile_video['streams']['resolution_x'] = 0;
    1437             $thisfile_video['streams']['resolution_y'] = 0;
     1425            $thisfile_video['resolution_x'] = 0;
     1426            $thisfile_video['resolution_y'] = 0;
    14381427            foreach ($thisfile_video['streams'] as $key => $valuearray) {
    1439                 if (($valuearray['resolution_x'] > $thisfile_video['streams']['resolution_x']) || ($valuearray['resolution_y'] > $thisfile_video['streams']['resolution_y'])) {
     1428                if (($valuearray['resolution_x'] > $thisfile_video['resolution_x']) || ($valuearray['resolution_y'] > $thisfile_video['resolution_y'])) {
    14401429                    $thisfile_video['resolution_x'] = $valuearray['resolution_x'];
    14411430                    $thisfile_video['resolution_y'] = $valuearray['resolution_y'];
     
    14521441    }
    14531442
    1454     public static function ASFCodecListObjectTypeLookup($CodecListType) {
    1455         static $ASFCodecListObjectTypeLookup = array();
    1456         if (empty($ASFCodecListObjectTypeLookup)) {
    1457             $ASFCodecListObjectTypeLookup[0x0001] = 'Video Codec';
    1458             $ASFCodecListObjectTypeLookup[0x0002] = 'Audio Codec';
    1459             $ASFCodecListObjectTypeLookup[0xFFFF] = 'Unknown Codec';
    1460         }
    1461 
    1462         return (isset($ASFCodecListObjectTypeLookup[$CodecListType]) ? $ASFCodecListObjectTypeLookup[$CodecListType] : 'Invalid Codec Type');
     1443    public static function codecListObjectTypeLookup($CodecListType) {
     1444        static $lookup = array(
     1445            0x0001 => 'Video Codec',
     1446            0x0002 => 'Audio Codec',
     1447            0xFFFF => 'Unknown Codec'
     1448        );
     1449
     1450        return (isset($lookup[$CodecListType]) ? $lookup[$CodecListType] : 'Invalid Codec Type');
    14631451    }
    14641452
     
    16671655
    16681656    public static function WMpictureTypeLookup($WMpictureType) {
    1669         static $WMpictureTypeLookup = array();
    1670         if (empty($WMpictureTypeLookup)) {
    1671             $WMpictureTypeLookup[0x03] = getid3_lib::iconv_fallback('ISO-8859-1', 'UTF-16LE', 'Front Cover');
    1672             $WMpictureTypeLookup[0x04] = getid3_lib::iconv_fallback('ISO-8859-1', 'UTF-16LE', 'Back Cover');
    1673             $WMpictureTypeLookup[0x00] = getid3_lib::iconv_fallback('ISO-8859-1', 'UTF-16LE', 'User Defined');
    1674             $WMpictureTypeLookup[0x05] = getid3_lib::iconv_fallback('ISO-8859-1', 'UTF-16LE', 'Leaflet Page');
    1675             $WMpictureTypeLookup[0x06] = getid3_lib::iconv_fallback('ISO-8859-1', 'UTF-16LE', 'Media Label');
    1676             $WMpictureTypeLookup[0x07] = getid3_lib::iconv_fallback('ISO-8859-1', 'UTF-16LE', 'Lead Artist');
    1677             $WMpictureTypeLookup[0x08] = getid3_lib::iconv_fallback('ISO-8859-1', 'UTF-16LE', 'Artist');
    1678             $WMpictureTypeLookup[0x09] = getid3_lib::iconv_fallback('ISO-8859-1', 'UTF-16LE', 'Conductor');
    1679             $WMpictureTypeLookup[0x0A] = getid3_lib::iconv_fallback('ISO-8859-1', 'UTF-16LE', 'Band');
    1680             $WMpictureTypeLookup[0x0B] = getid3_lib::iconv_fallback('ISO-8859-1', 'UTF-16LE', 'Composer');
    1681             $WMpictureTypeLookup[0x0C] = getid3_lib::iconv_fallback('ISO-8859-1', 'UTF-16LE', 'Lyricist');
    1682             $WMpictureTypeLookup[0x0D] = getid3_lib::iconv_fallback('ISO-8859-1', 'UTF-16LE', 'Recording Location');
    1683             $WMpictureTypeLookup[0x0E] = getid3_lib::iconv_fallback('ISO-8859-1', 'UTF-16LE', 'During Recording');
    1684             $WMpictureTypeLookup[0x0F] = getid3_lib::iconv_fallback('ISO-8859-1', 'UTF-16LE', 'During Performance');
    1685             $WMpictureTypeLookup[0x10] = getid3_lib::iconv_fallback('ISO-8859-1', 'UTF-16LE', 'Video Screen Capture');
    1686             $WMpictureTypeLookup[0x12] = getid3_lib::iconv_fallback('ISO-8859-1', 'UTF-16LE', 'Illustration');
    1687             $WMpictureTypeLookup[0x13] = getid3_lib::iconv_fallback('ISO-8859-1', 'UTF-16LE', 'Band Logotype');
    1688             $WMpictureTypeLookup[0x14] = getid3_lib::iconv_fallback('ISO-8859-1', 'UTF-16LE', 'Publisher Logotype');
     1657        static $lookup = null;
     1658        if ($lookup === null) {
     1659            $lookup = array(
     1660                0x03 => 'Front Cover',
     1661                0x04 => 'Back Cover',
     1662                0x00 => 'User Defined',
     1663                0x05 => 'Leaflet Page',
     1664                0x06 => 'Media Label',
     1665                0x07 => 'Lead Artist',
     1666                0x08 => 'Artist',
     1667                0x09 => 'Conductor',
     1668                0x0A => 'Band',
     1669                0x0B => 'Composer',
     1670                0x0C => 'Lyricist',
     1671                0x0D => 'Recording Location',
     1672                0x0E => 'During Recording',
     1673                0x0F => 'During Performance',
     1674                0x10 => 'Video Screen Capture',
     1675                0x12 => 'Illustration',
     1676                0x13 => 'Band Logotype',
     1677                0x14 => 'Publisher Logotype'
     1678            );
     1679            $lookup = array_map(function($str) {
     1680                return getid3_lib::iconv_fallback('UTF-8', 'UTF-16LE', $str);
     1681            }, $lookup);
    16891682        }
    1690         return (isset($WMpictureTypeLookup[$WMpictureType]) ? $WMpictureTypeLookup[$WMpictureType] : '');
     1683
     1684        return (isset($lookup[$WMpictureType]) ? $lookup[$WMpictureType] : '');
    16911685    }
    16921686
    1693     public function ASF_HeaderExtensionObjectDataParse(&$asf_header_extension_object_data, &$unhandled_sections) {
     1687    public function HeaderExtensionObjectDataParse(&$asf_header_extension_object_data, &$unhandled_sections) {
    16941688        // http://msdn.microsoft.com/en-us/library/bb643323.aspx
    16951689
     
    18261820                        $descriptionRecord['data_type']          = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  2));
    18271821                        $offset += 2;
    1828                         $descriptionRecord['data_type_text'] = $this->ASFmetadataLibraryObjectDataTypeLookup($descriptionRecord['data_type']);
     1822                        $descriptionRecord['data_type_text'] = self::metadataLibraryObjectDataTypeLookup($descriptionRecord['data_type']);
    18291823
    18301824                        $descriptionRecord['data_length']        = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  4));
     
    18981892                        $descriptionRecord['data_type']           = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  2));
    18991893                        $offset += 2;
    1900                         $descriptionRecord['data_type_text'] = $this->ASFmetadataLibraryObjectDataTypeLookup($descriptionRecord['data_type']);
     1894                        $descriptionRecord['data_type_text'] = self::metadataLibraryObjectDataTypeLookup($descriptionRecord['data_type']);
    19011895
    19021896                        $descriptionRecord['data_length']         = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  4));
     
    19381932
    19391933
    1940     public static function ASFmetadataLibraryObjectDataTypeLookup($id) {
    1941         static $ASFmetadataLibraryObjectDataTypeLookup = array(
     1934    public static function metadataLibraryObjectDataTypeLookup($id) {
     1935        static $lookup = array(
    19421936            0x0000 => 'Unicode string', // The data consists of a sequence of Unicode characters
    19431937            0x0001 => 'BYTE array',     // The type of the data is implementation-specific
     
    19481942            0x0006 => 'GUID',           // The data is 16 bytes long and should be interpreted as a 128-bit GUID
    19491943        );
    1950         return (isset($ASFmetadataLibraryObjectDataTypeLookup[$id]) ? $ASFmetadataLibraryObjectDataTypeLookup[$id] : 'invalid');
     1944        return (isset($lookup[$id]) ? $lookup[$id] : 'invalid');
    19511945    }
    19521946
     
    19651959        $WMpicture['image_type_id'] = getid3_lib::LittleEndian2Int(substr($data, $offset, 1));
    19661960        $offset += 1;
    1967         $WMpicture['image_type']    = $this->WMpictureTypeLookup($WMpicture['image_type_id']);
     1961        $WMpicture['image_type']    = self::WMpictureTypeLookup($WMpicture['image_type_id']);
    19681962        $WMpicture['image_size']    = getid3_lib::LittleEndian2Int(substr($data, $offset, 4));
    19691963        $offset += 4;
Note: See TracChangeset for help on using the changeset viewer.