Make WordPress Core

Ticket #49945: 49945.1.patch

File 49945.1.patch, 36.1 KB (added by ayeshrajans, 4 years ago)

A patch to update all existing files in ID3 library to its current version. No new files are added, only modified local files. I doubt we have tests for them though.

  • src/wp-includes/ID3/getid3.lib.php

    diff --git a/src/wp-includes/ID3/getid3.lib.php b/src/wp-includes/ID3/getid3.lib.php
    index 1d51e8c4f3..7566b39da4 100644
    a b  
    1515class getid3_lib
    1616{
    1717        /**
    18          * @param string $string
    19          * @param bool   $hex
    20          * @param bool   $spaces
    21          * @param string $htmlencoding
     18         * @param string      $string
     19         * @param bool        $hex
     20         * @param bool        $spaces
     21         * @param string|bool $htmlencoding
    2222         *
    2323         * @return string
    2424         */
    public static function Float2String($floatvalue, $bits) { 
    216216
    217217                        default:
    218218                                return false;
    219                                 break;
    220219                }
    221220                if ($floatvalue >= 0) {
    222221                        $signbit = '0';
    public static function BigEndian2Float($byteword) { 
    284283                                        $floatvalue *= -1;
    285284                                }
    286285                                return $floatvalue;
    287                                 break;
    288286
    289287                        default:
    290288                                return false;
    291                                 break;
    292289                }
    293290                $exponentstring = substr($bitword, 1, $exponentbits);
    294291                $fractionstring = substr($bitword, $exponentbits + 1, $fractionbits);
    public static function LittleEndian2String($number, $minbytes=1, $synchsafe=fals 
    500497        }
    501498
    502499        /**
    503          * @param array $array1
    504          * @param array $array2
     500         * @param mixed $array1
     501         * @param mixed $array2
    505502         *
    506503         * @return array|false
    507504         */
    public static function array_merge_clobber($array1, $array2) { 
    523520        }
    524521
    525522        /**
    526          * @param array $array1
    527          * @param array $array2
     523         * @param mixed $array1
     524         * @param mixed $array2
    528525         *
    529526         * @return array|false
    530527         */
    public static function array_merge_noclobber($array1, $array2) { 
    544541        }
    545542
    546543        /**
    547          * @param array $array1
    548          * @param array $array2
     544         * @param mixed $array1
     545         * @param mixed $array2
    549546         *
    550547         * @return array|false|null
    551548         */
    public static function XML2array($XMLstring) { 
    735732        }
    736733
    737734        /**
    738         * @param SimpleXMLElement|array $XMLobject
     735        * @param SimpleXMLElement|array|mixed $XMLobject
    739736        *
    740         * @return array
     737        * @return mixed
    741738        */
    742739        public static function SimpleXMLelement2array($XMLobject) {
    743740                if (!is_object($XMLobject) && !is_array($XMLobject)) {
    public static function RGADamplitude2dB($amplitude) { 
    14791476         * @return array|false
    14801477         */
    14811478        public static function GetDataImageSize($imgData, &$imageinfo=array()) {
     1479                if (PHP_VERSION_ID >= 50400) {
     1480                        $GetDataImageSize = @getimagesizefromstring($imgData, $imageinfo);
     1481                        if ($GetDataImageSize === false || !isset($GetDataImageSize[0], $GetDataImageSize[1])) {
     1482                                return false;
     1483                        }
     1484                        $GetDataImageSize['height'] = $GetDataImageSize[0];
     1485                        $GetDataImageSize['width'] = $GetDataImageSize[1];
     1486                        return $GetDataImageSize;
     1487                }
    14821488                static $tempdir = '';
    14831489                if (empty($tempdir)) {
    14841490                        if (function_exists('sys_get_temp_dir')) {
    public static function GetDataImageSize($imgData, &$imageinfo=array()) { 
    14871493
    14881494                        // yes this is ugly, feel free to suggest a better way
    14891495                        if (include_once(dirname(__FILE__).'/getid3.php')) {
    1490                                 if ($getid3_temp = new getID3()) {
    1491                                         if ($getid3_temp_tempdir = $getid3_temp->tempdir) {
    1492                                                 $tempdir = $getid3_temp_tempdir;
    1493                                         }
    1494                                         unset($getid3_temp, $getid3_temp_tempdir);
     1496                                $getid3_temp = new getID3();
     1497                                if ($getid3_temp_tempdir = $getid3_temp->tempdir) {
     1498                                        $tempdir = $getid3_temp_tempdir;
    14951499                                }
     1500                                unset($getid3_temp, $getid3_temp_tempdir);
    14961501                        }
    14971502                }
    14981503                $GetDataImageSize = false;
    public static function CopyTagsToComments(&$ThisFileInfo) { 
    15681573                                                                if (!is_int($key) && !ctype_digit($key)) {
    15691574                                                                        $ThisFileInfo['comments'][$tagname][$key] = $value;
    15701575                                                                } else {
    1571                                                                         if (isset($ThisFileInfo['comments'][$tagname])) {
     1576                                                                        if (!isset($ThisFileInfo['comments'][$tagname])) {
    15721577                                                                                $ThisFileInfo['comments'][$tagname] = array($value);
    15731578                                                                        } else {
    15741579                                                                                $ThisFileInfo['comments'][$tagname][] = $value;
  • src/wp-includes/ID3/getid3.php

    diff --git a/src/wp-includes/ID3/getid3.php b/src/wp-includes/ID3/getid3.php
    index cb25253e22..a6260f0689 100644
    a b class getID3 
    250250         */
    251251        protected $startup_warning = '';
    252252
    253         const VERSION           = '1.9.18-201907240906';
     253        const VERSION           = '1.9.19-201912131005';
    254254        const FREAD_BUFFER_SIZE = 32768;
    255255
    256256        const ATTACHMENTS_NONE   = false;
    public function __construct() { 
    266266                }
    267267
    268268                // Check memory
    269                 $this->memory_limit = ini_get('memory_limit');
    270                 if (preg_match('#([0-9]+) ?M#i', $this->memory_limit, $matches)) {
     269                $memoryLimit = ini_get('memory_limit');
     270                if (preg_match('#([0-9]+) ?M#i', $memoryLimit, $matches)) {
    271271                        // could be stored as "16M" rather than 16777216 for example
    272                         $this->memory_limit = $matches[1] * 1048576;
    273                 } elseif (preg_match('#([0-9]+) ?G#i', $this->memory_limit, $matches)) { // The 'G' modifier is available since PHP 5.1.0
     272                        $memoryLimit = $matches[1] * 1048576;
     273                } elseif (preg_match('#([0-9]+) ?G#i', $memoryLimit, $matches)) { // The 'G' modifier is available since PHP 5.1.0
    274274                        // could be stored as "2G" rather than 2147483648 for example
    275                         $this->memory_limit = $matches[1] * 1073741824;
     275                        $memoryLimit = $matches[1] * 1073741824;
    276276                }
     277                $this->memory_limit = $memoryLimit;
     278
    277279                if ($this->memory_limit <= 0) {
    278280                        // memory limits probably disabled
    279281                } elseif ($this->memory_limit <= 4194304) {
    public function __construct() { 
    287289                        $this->warning('WARNING: Safe mode is on, shorten support disabled, md5data/sha1data for ogg vorbis disabled, ogg vorbos/flac tag writing disabled.');
    288290                }
    289291
    290                 if (($mbstring_func_overload = ini_get('mbstring.func_overload')) && ($mbstring_func_overload & 0x02)) {
     292                if (($mbstring_func_overload = (int) ini_get('mbstring.func_overload')) && ($mbstring_func_overload & 0x02)) {
    291293                        // http://php.net/manual/en/mbstring.overload.php
    292294                        // "mbstring.func_overload in php.ini is a positive value that represents a combination of bitmasks specifying the categories of functions to be overloaded. It should be set to 1 to overload the mail() function. 2 for string functions, 4 for regular expression functions"
    293295                        // getID3 cannot run when string functions are overloaded. It doesn't matter if mail() or ereg* functions are overloaded since getID3 does not use those.
    294296                        $this->startup_error .= 'WARNING: php.ini contains "mbstring.func_overload = '.ini_get('mbstring.func_overload').'", getID3 cannot run with this setting (bitmask 2 (string functions) cannot be set). Recommended to disable entirely.'."\n";
    295297                }
    296298
    297                 // WORDPRESS CHANGE FROM UPSTREAM
    298                 // Comment out deprecated function
    299                 /*
    300                 // Check for magic_quotes_runtime
    301                 if (function_exists('get_magic_quotes_runtime')) {
    302                         if (get_magic_quotes_runtime()) {
    303                                 $this->startup_error .= 'magic_quotes_runtime must be disabled before running getID3(). Surround getid3 block by set_magic_quotes_runtime(0) and set_magic_quotes_runtime(1).'."\n";
     299                // check for magic quotes in PHP < 7.4.0 (when these functions became deprecated)
     300                if (version_compare(PHP_VERSION, '7.4.0', '<')) {
     301                        // Check for magic_quotes_runtime
     302                        if (function_exists('get_magic_quotes_runtime')) {
     303                                if (get_magic_quotes_runtime()) {
     304                                        $this->startup_error .= 'magic_quotes_runtime must be disabled before running getID3(). Surround getid3 block by set_magic_quotes_runtime(0) and set_magic_quotes_runtime(1).'."\n";
     305                                }
    304306                        }
    305                 }
    306 
    307                 // Check for magic_quotes_gpc
    308                 if (function_exists('magic_quotes_gpc')) {
    309                         if (get_magic_quotes_gpc()) {
    310                                 $this->startup_error .= 'magic_quotes_gpc must be disabled before running getID3(). Surround getid3 block by set_magic_quotes_gpc(0) and set_magic_quotes_gpc(1).'."\n";
     307                        // Check for magic_quotes_gpc
     308                        if (function_exists('get_magic_quotes_gpc')) {
     309                                if (get_magic_quotes_gpc()) {
     310                                        $this->startup_error .= 'magic_quotes_gpc must be disabled before running getID3(). Surround getid3 block by set_magic_quotes_gpc(0) and set_magic_quotes_gpc(1).'."\n";
     311                                }
    311312                        }
    312313                }
    313                 **/
    314314
    315315                // Load support library
    316316                if (!include_once(GETID3_INCLUDEPATH.'getid3.lib.php')) {
    public function setOption($optArray) { 
    402402        }
    403403
    404404        /**
    405          * @param string $filename
    406          * @param int    $filesize
     405         * @param string   $filename
     406         * @param int      $filesize
     407         * @param resource $fp
    407408         *
    408409         * @return bool
    409410         *
    public function openfile($filename, $filesize=null, $fp=null) { 
    513514        /**
    514515         * analyze file
    515516         *
    516          * @param string $filename
    517          * @param int    $filesize
    518          * @param string $original_filename
     517         * @param string   $filename
     518         * @param int      $filesize
     519         * @param string   $original_filename
     520         * @param resource $fp
    519521         *
    520522         * @return array
    521523         */
    public function GetFileFormatArray() { 
    11061108                                                        'mime_type' => 'video/MP2T',
    11071109                                                ),
    11081110
     1111                                // WTV - audio/video - Windows Recorded TV Show
     1112                                'wtv' => array(
     1113                                                        'pattern'   => '^\\xB7\\xD8\\x00\\x20\\x37\\x49\\xDA\\x11\\xA6\\x4E\\x00\\x07\\xE9\\x5E\\xAD\\x8D',
     1114                                                        'group'     => 'audio-video',
     1115                                                        'module'    => 'wtv',
     1116                                                        'mime_type' => 'video/x-ms-wtv',
     1117                                                ),
     1118
    11091119
    11101120                                // Still-Image formats
    11111121
    public function getHashdata($algorithm) { 
    15281538
    15291539                        default:
    15301540                                return $this->error('bad algorithm "'.$algorithm.'" in getHashdata()');
    1531                                 break;
    15321541                }
    15331542
    15341543                if (!empty($this->info['fileformat']) && !empty($this->info['dataformat']) && ($this->info['fileformat'] == 'ogg') && ($this->info['audio']['dataformat'] == 'vorbis')) {
  • src/wp-includes/ID3/module.audio-video.asf.php

    diff --git a/src/wp-includes/ID3/module.audio-video.asf.php b/src/wp-includes/ID3/module.audio-video.asf.php
    index 0a2132dd1d..cb680f8930 100644
    a b public function Analyze() { 
    363363                                                                $thisfile_audio['codec'] = $this->TrimConvert($thisfile_asf_codeclistobject_codecentries_current['name']);
    364364
    365365                                                                if (!isset($thisfile_audio['bitrate']) && strstr($AudioCodecBitrate, 'kbps')) {
    366                                                                         $thisfile_audio['bitrate'] = (int) (trim(str_replace('kbps', '', $AudioCodecBitrate)) * 1000);
     366                                                                        $thisfile_audio['bitrate'] = (int) trim(str_replace('kbps', '', $AudioCodecBitrate)) * 1000;
    367367                                                                }
    368368                                                                //if (!isset($thisfile_video['bitrate']) && isset($thisfile_audio['bitrate']) && isset($thisfile_asf['file_properties_object']['max_bitrate']) && ($thisfile_asf_codeclistobject['codec_entries_count'] > 1)) {
    369369                                                                if (empty($thisfile_video['bitrate']) && !empty($thisfile_audio['bitrate']) && !empty($info['bitrate'])) {
    public function Analyze() { 
    807807
    808808                                                        case 'wm/track':
    809809                                                                if (empty($thisfile_asf_comments['track_number'])) {
    810                                                                         $thisfile_asf_comments['track_number'] = array(1 + $this->TrimConvert($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value']));
     810                                                                        $thisfile_asf_comments['track_number'] = array(1 + (int) $this->TrimConvert($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value']));
    811811                                                                }
    812812                                                                break;
    813813
  • src/wp-includes/ID3/module.audio-video.flv.php

    diff --git a/src/wp-includes/ID3/module.audio-video.flv.php b/src/wp-includes/ID3/module.audio-video.flv.php
    index eb292c6136..b6703b5a71 100644
    a b public function readData() { 
    597597                        // null
    598598                        case 6:
    599599                                return null;
    600                                 break;
    601600
    602601                        // Mixed array
    603602                        case 8:
  • src/wp-includes/ID3/module.audio-video.quicktime.php

    diff --git a/src/wp-includes/ID3/module.audio-video.quicktime.php b/src/wp-includes/ID3/module.audio-video.quicktime.php
    index cb1173bdbd..cfe8ff5a8c 100644
    a b public function Analyze() { 
    112112                if (!empty($info['quicktime']['comments']['location.ISO6709'])) {
    113113                        // https://en.wikipedia.org/wiki/ISO_6709
    114114                        foreach ($info['quicktime']['comments']['location.ISO6709'] as $ISO6709string) {
    115                                 $latitude  = false;
    116                                 $longitude = false;
    117                                 $altitude  = false;
     115                                $ISO6709parsed = array('latitude'=>false, 'longitude'=>false, 'altitude'=>false);
    118116                                if (preg_match('#^([\\+\\-])([0-9]{2}|[0-9]{4}|[0-9]{6})(\\.[0-9]+)?([\\+\\-])([0-9]{3}|[0-9]{5}|[0-9]{7})(\\.[0-9]+)?(([\\+\\-])([0-9]{3}|[0-9]{5}|[0-9]{7})(\\.[0-9]+)?)?/$#', $ISO6709string, $matches)) {
    119117                                        @list($dummy, $lat_sign, $lat_deg, $lat_deg_dec, $lon_sign, $lon_deg, $lon_deg_dec, $dummy, $alt_sign, $alt_deg, $alt_deg_dec) = $matches;
    120118
    121119                                        if (strlen($lat_deg) == 2) {        // [+-]DD.D
    122                                                 $latitude = floatval(ltrim($lat_deg, '0').$lat_deg_dec);
     120                                                $ISO6709parsed['latitude'] = (($lat_sign == '-') ? -1 : 1) * floatval(ltrim($lat_deg, '0').$lat_deg_dec);
    123121                                        } elseif (strlen($lat_deg) == 4) {  // [+-]DDMM.M
    124                                                 $latitude = floatval(ltrim(substr($lat_deg, 0, 2), '0')) + floatval(ltrim(substr($lat_deg, 2, 2), '0').$lat_deg_dec / 60);
     122                                                $ISO6709parsed['latitude'] = (($lat_sign == '-') ? -1 : 1) * floatval(ltrim(substr($lat_deg, 0, 2), '0')) + floatval(ltrim(substr($lat_deg, 2, 2), '0').$lat_deg_dec / 60);
    125123                                        } elseif (strlen($lat_deg) == 6) {  // [+-]DDMMSS.S
    126                                                 $latitude = floatval(ltrim(substr($lat_deg, 0, 2), '0')) + floatval(ltrim(substr($lat_deg, 2, 2), '0') / 60) + floatval(ltrim(substr($lat_deg, 4, 2), '0').$lat_deg_dec / 3600);
     124                                                $ISO6709parsed['latitude'] = (($lat_sign == '-') ? -1 : 1) * floatval(ltrim(substr($lat_deg, 0, 2), '0')) + floatval(ltrim(substr($lat_deg, 2, 2), '0') / 60) + floatval(ltrim(substr($lat_deg, 4, 2), '0').$lat_deg_dec / 3600);
    127125                                        }
    128126
    129127                                        if (strlen($lon_deg) == 3) {        // [+-]DDD.D
    130                                                 $longitude = floatval(ltrim($lon_deg, '0').$lon_deg_dec);
     128                                                $ISO6709parsed['longitude'] = (($lon_sign == '-') ? -1 : 1) * floatval(ltrim($lon_deg, '0').$lon_deg_dec);
    131129                                        } elseif (strlen($lon_deg) == 5) {  // [+-]DDDMM.M
    132                                                 $longitude = floatval(ltrim(substr($lon_deg, 0, 2), '0')) + floatval(ltrim(substr($lon_deg, 2, 2), '0').$lon_deg_dec / 60);
     130                                                $ISO6709parsed['longitude'] = (($lon_sign == '-') ? -1 : 1) * floatval(ltrim(substr($lon_deg, 0, 2), '0')) + floatval(ltrim(substr($lon_deg, 2, 2), '0').$lon_deg_dec / 60);
    133131                                        } elseif (strlen($lon_deg) == 7) {  // [+-]DDDMMSS.S
    134                                                 $longitude = floatval(ltrim(substr($lon_deg, 0, 2), '0')) + floatval(ltrim(substr($lon_deg, 2, 2), '0') / 60) + floatval(ltrim(substr($lon_deg, 4, 2), '0').$lon_deg_dec / 3600);
     132                                                $ISO6709parsed['longitude'] = (($lon_sign == '-') ? -1 : 1) * floatval(ltrim(substr($lon_deg, 0, 2), '0')) + floatval(ltrim(substr($lon_deg, 2, 2), '0') / 60) + floatval(ltrim(substr($lon_deg, 4, 2), '0').$lon_deg_dec / 3600);
    135133                                        }
    136134
    137135                                        if (strlen($alt_deg) == 3) {        // [+-]DDD.D
    138                                                 $altitude = floatval(ltrim($alt_deg, '0').$alt_deg_dec);
     136                                                $ISO6709parsed['altitude'] = (($alt_sign == '-') ? -1 : 1) * floatval(ltrim($alt_deg, '0').$alt_deg_dec);
    139137                                        } elseif (strlen($alt_deg) == 5) {  // [+-]DDDMM.M
    140                                                 $altitude = floatval(ltrim(substr($alt_deg, 0, 2), '0')) + floatval(ltrim(substr($alt_deg, 2, 2), '0').$alt_deg_dec / 60);
     138                                                $ISO6709parsed['altitude'] = (($alt_sign == '-') ? -1 : 1) * floatval(ltrim(substr($alt_deg, 0, 2), '0')) + floatval(ltrim(substr($alt_deg, 2, 2), '0').$alt_deg_dec / 60);
    141139                                        } elseif (strlen($alt_deg) == 7) {  // [+-]DDDMMSS.S
    142                                                 $altitude = floatval(ltrim(substr($alt_deg, 0, 2), '0')) + floatval(ltrim(substr($alt_deg, 2, 2), '0') / 60) + floatval(ltrim(substr($alt_deg, 4, 2), '0').$alt_deg_dec / 3600);
     140                                                $ISO6709parsed['altitude'] = (($alt_sign == '-') ? -1 : 1) * floatval(ltrim(substr($alt_deg, 0, 2), '0')) + floatval(ltrim(substr($alt_deg, 2, 2), '0') / 60) + floatval(ltrim(substr($alt_deg, 4, 2), '0').$alt_deg_dec / 3600);
    143141                                        }
    144142
    145                                         if ($latitude !== false) {
    146                                                 $info['quicktime']['comments']['gps_latitude'][]  = (($lat_sign == '-') ? -1 : 1) * floatval($latitude);
    147                                         }
    148                                         if ($longitude !== false) {
    149                                                 $info['quicktime']['comments']['gps_longitude'][] = (($lon_sign == '-') ? -1 : 1) * floatval($longitude);
    150                                         }
    151                                         if ($altitude !== false) {
    152                                                 $info['quicktime']['comments']['gps_altitude'][]  = (($alt_sign == '-') ? -1 : 1) * floatval($altitude);
     143                                        foreach (array('latitude', 'longitude', 'altitude') as $key) {
     144                                                if ($ISO6709parsed[$key] !== false) {
     145                                                        $value = (($lat_sign == '-') ? -1 : 1) * floatval($ISO6709parsed[$key]);
     146                                                        if (!in_array($value, $info['quicktime']['comments']['gps_'.$key])) {
     147                                                                $info['quicktime']['comments']['gps_'.$key][]  = (($lat_sign == '-') ? -1 : 1) * floatval($ISO6709parsed[$key]);
     148                                                        }
     149                                                }
    153150                                        }
    154151                                }
    155                                 if ($latitude === false) {
     152                                if ($ISO6709parsed['latitude'] === false) {
    156153                                        $this->warning('location.ISO6709 string not parsed correctly: "'.$ISO6709string.'", please submit as a bug');
    157154                                }
    158155                                break;
    public function QuicktimeParseAtom($atomname, $atomsize, $atom_data, $baseoffset 
    224221
    225222                $atom_parent = end($atomHierarchy); // not array_pop($atomHierarchy); see https://www.getid3.org/phpBB3/viewtopic.php?t=1717
    226223                array_push($atomHierarchy, $atomname);
     224                $atom_structure              = array();
    227225                $atom_structure['hierarchy'] = implode(' ', $atomHierarchy);
    228226                $atom_structure['name']      = $atomname;
    229227                $atom_structure['size']      = $atomsize;
    public function QuicktimeParseAtom($atomname, $atomsize, $atom_data, $baseoffset 
    244242                                case 'mdia': // MeDIA container atom
    245243                                case 'minf': // Media INFormation container atom
    246244                                case 'dinf': // Data INFormation container atom
     245                                case 'nmhd': // Null Media HeaDer container atom
    247246                                case 'udta': // User DaTA container atom
    248247                                case 'cmov': // Compressed MOVie container atom
    249248                                case 'rmra': // Reference Movie Record Atom
    public function QuicktimeParseAtom($atomname, $atomsize, $atom_data, $baseoffset 
    10441043
    10451044
    10461045                                case 'stco': // Sample Table Chunk Offset atom
     1046//                                      if (true) {
    10471047                                        if ($ParseAllPossibleAtoms) {
    10481048                                                $atom_structure['version']        = getid3_lib::BigEndian2Int(substr($atom_data,  0, 1));
    10491049                                                $atom_structure['flags_raw']      = getid3_lib::BigEndian2Int(substr($atom_data,  1, 3)); // hardcoded: 0x0000
    public function QuicktimeParseAtom($atomname, $atomsize, $atom_data, $baseoffset 
    16391639                                        }
    16401640                                        break;
    16411641
     1642                                case 'uuid': // Atom holding 360fly spatial data??
     1643                                        /* code in this block by Paul Lewis 2019-Oct-31 */
     1644                                        /*      Sensor Timestamps need to be calculated using the recordings base time at ['quicktime']['moov']['subatoms'][0]['creation_time_unix']. */
     1645                                        $atom_structure['title'] = '360Fly Sensor Data';
     1646
     1647                                        //Get the UUID ID in first 16 bytes
     1648                                        $uuid_bytes_read = unpack('H8time_low/H4time_mid/H4time_hi/H4clock_seq_hi/H12clock_seq_low', substr($atom_data, 0, 16));
     1649                                        $atom_structure['uuid_field_id'] = print_r(implode('-', $uuid_bytes_read), true);
     1650
     1651                                        //Get the UUID HEADER data
     1652                                        $uuid_bytes_read = unpack('Sheader_size/Sheader_version/Stimescale/Shardware_version/x/x/x/x/x/x/x/x/x/x/x/x/x/x/x/x/', substr($atom_data, 16, 32));
     1653                                        $atom_structure['uuid_header'] = json_encode($uuid_bytes_read, true);
     1654
     1655                                        $start_byte = 48;
     1656                                        $atom_SENSOR_data = substr($atom_data, $start_byte);
     1657                                        $atom_structure['sensor_data']['data_type'] = array(
     1658                                                        'fusion_count'   => 0,       // ID 250
     1659                                                        'fusion_data'    => array(),
     1660                                                        'accel_count'    => 0,       // ID 1
     1661                                                        'accel_data'     => array(),
     1662                                                        'gyro_count'     => 0,       // ID 2
     1663                                                        'gyro_data'      => array(),
     1664                                                        'magno_count'    => 0,       // ID 3
     1665                                                        'magno_data'     => array(),
     1666                                                        'gps_count'      => 0,       // ID 5
     1667                                                        'gps_data'       => array(),
     1668                                                        'rotation_count' => 0,       // ID 6
     1669                                                        'rotation_data'  => array(),
     1670                                                        'unknown_count'  => 0,       // ID ??
     1671                                                        'unknown_data'   => array(),
     1672                                                        'debug_list'     => '',      // Used to debug variables stored as comma delimited strings
     1673                                        );
     1674                                        $debug_structure['debug_items'] = array();
     1675                                        // Can start loop here to decode all sensor data in 32 Byte chunks:
     1676                                        foreach (str_split($atom_SENSOR_data, 32) as $sensor_key => $sensor_data) {
     1677                                                // This gets me a data_type code to work out what data is in the next 31 bytes.
     1678                                                $sensor_data_type = substr($sensor_data, 0, 1);
     1679                                                $sensor_data_content = substr($sensor_data, 1);
     1680                                                $uuid_bytes_read = unpack('C*', $sensor_data_type);
     1681                                                $sensor_data_array = array();
     1682                                                switch ($uuid_bytes_read[1]) {
     1683                                                        case 250:
     1684                                                                $atom_structure['sensor_data']['data_type']['fusion_count']++;
     1685                                                                $uuid_bytes_read = unpack('cmode/Jtimestamp/Gyaw/Gpitch/Groll/x*', $sensor_data_content);
     1686                                                                $sensor_data_array['mode']      = $uuid_bytes_read['mode'];
     1687                                                                $sensor_data_array['timestamp'] = $uuid_bytes_read['timestamp'];
     1688                                                                $sensor_data_array['yaw']       = $uuid_bytes_read['yaw'];
     1689                                                                $sensor_data_array['pitch']     = $uuid_bytes_read['pitch'];
     1690                                                                $sensor_data_array['roll']      = $uuid_bytes_read['roll'];
     1691                                                                array_push($atom_structure['sensor_data']['data_type']['fusion_data'], $sensor_data_array);
     1692                                                                break;
     1693                                                        case 1:
     1694                                                                $atom_structure['sensor_data']['data_type']['accel_count']++;
     1695                                                                $uuid_bytes_read = unpack('cmode/Jtimestamp/Gyaw/Gpitch/Groll/x*', $sensor_data_content);
     1696                                                                $sensor_data_array['mode']      = $uuid_bytes_read['mode'];
     1697                                                                $sensor_data_array['timestamp'] = $uuid_bytes_read['timestamp'];
     1698                                                                $sensor_data_array['yaw']       = $uuid_bytes_read['yaw'];
     1699                                                                $sensor_data_array['pitch']     = $uuid_bytes_read['pitch'];
     1700                                                                $sensor_data_array['roll']      = $uuid_bytes_read['roll'];
     1701                                                                array_push($atom_structure['sensor_data']['data_type']['accel_data'], $sensor_data_array);
     1702                                                                break;
     1703                                                        case 2:
     1704                                                                $atom_structure['sensor_data']['data_type']['gyro_count']++;
     1705                                                                $uuid_bytes_read = unpack('cmode/Jtimestamp/Gyaw/Gpitch/Groll/x*', $sensor_data_content);
     1706                                                                $sensor_data_array['mode']      = $uuid_bytes_read['mode'];
     1707                                                                $sensor_data_array['timestamp'] = $uuid_bytes_read['timestamp'];
     1708                                                                $sensor_data_array['yaw']       = $uuid_bytes_read['yaw'];
     1709                                                                $sensor_data_array['pitch']     = $uuid_bytes_read['pitch'];
     1710                                                                $sensor_data_array['roll']      = $uuid_bytes_read['roll'];
     1711                                                                array_push($atom_structure['sensor_data']['data_type']['gyro_data'], $sensor_data_array);
     1712                                                                break;
     1713                                                        case 3:
     1714                                                                $atom_structure['sensor_data']['data_type']['magno_count']++;
     1715                                                                $uuid_bytes_read = unpack('cmode/Jtimestamp/Gmagx/Gmagy/Gmagz/x*', $sensor_data_content);
     1716                                                                $sensor_data_array['mode']      = $uuid_bytes_read['mode'];
     1717                                                                $sensor_data_array['timestamp'] = $uuid_bytes_read['timestamp'];
     1718                                                                $sensor_data_array['magx']      = $uuid_bytes_read['magx'];
     1719                                                                $sensor_data_array['magy']      = $uuid_bytes_read['magy'];
     1720                                                                $sensor_data_array['magz']      = $uuid_bytes_read['magz'];
     1721                                                                array_push($atom_structure['sensor_data']['data_type']['magno_data'], $sensor_data_array);
     1722                                                                break;
     1723                                                        case 5:
     1724                                                                $atom_structure['sensor_data']['data_type']['gps_count']++;
     1725                                                                $uuid_bytes_read = unpack('cmode/Jtimestamp/Glat/Glon/Galt/Gspeed/nbearing/nacc/x*', $sensor_data_content);
     1726                                                                $sensor_data_array['mode']      = $uuid_bytes_read['mode'];
     1727                                                                $sensor_data_array['timestamp'] = $uuid_bytes_read['timestamp'];
     1728                                                                $sensor_data_array['lat']       = $uuid_bytes_read['lat'];
     1729                                                                $sensor_data_array['lon']       = $uuid_bytes_read['lon'];
     1730                                                                $sensor_data_array['alt']       = $uuid_bytes_read['alt'];
     1731                                                                $sensor_data_array['speed']     = $uuid_bytes_read['speed'];
     1732                                                                $sensor_data_array['bearing']   = $uuid_bytes_read['bearing'];
     1733                                                                $sensor_data_array['acc']       = $uuid_bytes_read['acc'];
     1734                                                                //$sensor_data_array = print_r($uuid_bytes_read, true);
     1735                                                                array_push($atom_structure['sensor_data']['data_type']['gps_data'], $sensor_data_array);
     1736                                                                //array_push($debug_structure['debug_items'], $uuid_bytes_read['timestamp']);
     1737                                                                break;
     1738                                                        case 6:
     1739                                                                $atom_structure['sensor_data']['data_type']['rotation_count']++;
     1740                                                                $uuid_bytes_read = unpack('cmode/Jtimestamp/Grotx/Groty/Grotz/x*', $sensor_data_content);
     1741                                                                $sensor_data_array['mode']      = $uuid_bytes_read['mode'];
     1742                                                                $sensor_data_array['timestamp'] = $uuid_bytes_read['timestamp'];
     1743                                                                $sensor_data_array['rotx']      = $uuid_bytes_read['rotx'];
     1744                                                                $sensor_data_array['roty']      = $uuid_bytes_read['roty'];
     1745                                                                $sensor_data_array['rotz']      = $uuid_bytes_read['rotz'];
     1746                                                                array_push($atom_structure['sensor_data']['data_type']['rotation_data'], $sensor_data_array);
     1747                                                                break;
     1748                                                        default:
     1749                                                                $atom_structure['sensor_data']['data_type']['unknown_count']++;
     1750                                                                break;
     1751                                                }
     1752                                        }
     1753//                                      if (isset($debug_structure['debug_items']) && count($debug_structure['debug_items']) > 0) {
     1754//                                              $atom_structure['sensor_data']['data_type']['debug_list'] = implode(',', $debug_structure['debug_items']);
     1755//                                      } else {
     1756                                                $atom_structure['sensor_data']['data_type']['debug_list'] = 'No debug items in list!';
     1757//                                      }
     1758                                        break;
     1759
    16421760                                case 'gps ':
    16431761                                        // https://dashcamtalk.com/forum/threads/script-to-extract-gps-data-from-novatek-mp4.20808/page-2#post-291730
    16441762                                        // The 'gps ' contains simple look up table made up of 8byte rows, that point to the 'free' atoms that contains the actual GPS data.
    public function QuicktimeParseAtom($atomname, $atomsize, $atom_data, $baseoffset 
    16831801                                                                // $GPRMC,094347.000,A,5342.0061,N,00737.9908,W,0.01,156.75,140217,,,A*7D
    16841802                                                                if (preg_match('#\\$GPRMC,([0-9\\.]*),([AV]),([0-9\\.]*),([NS]),([0-9\\.]*),([EW]),([0-9\\.]*),([0-9\\.]*),([0-9]*),([0-9\\.]*),([EW]?)(,[A])?(\\*[0-9A-F]{2})#', $GPS_free_data, $matches)) {
    16851803                                                                        $GPS_this_GPRMC = array();
     1804                                                                        $GPS_this_GPRMC_raw = array();
    16861805                                                                        list(
    1687                                                                                 $GPS_this_GPRMC['raw']['gprmc'],
    1688                                                                                 $GPS_this_GPRMC['raw']['timestamp'],
    1689                                                                                 $GPS_this_GPRMC['raw']['status'],
    1690                                                                                 $GPS_this_GPRMC['raw']['latitude'],
    1691                                                                                 $GPS_this_GPRMC['raw']['latitude_direction'],
    1692                                                                                 $GPS_this_GPRMC['raw']['longitude'],
    1693                                                                                 $GPS_this_GPRMC['raw']['longitude_direction'],
    1694                                                                                 $GPS_this_GPRMC['raw']['knots'],
    1695                                                                                 $GPS_this_GPRMC['raw']['angle'],
    1696                                                                                 $GPS_this_GPRMC['raw']['datestamp'],
    1697                                                                                 $GPS_this_GPRMC['raw']['variation'],
    1698                                                                                 $GPS_this_GPRMC['raw']['variation_direction'],
     1806                                                                                $GPS_this_GPRMC_raw['gprmc'],
     1807                                                                                $GPS_this_GPRMC_raw['timestamp'],
     1808                                                                                $GPS_this_GPRMC_raw['status'],
     1809                                                                                $GPS_this_GPRMC_raw['latitude'],
     1810                                                                                $GPS_this_GPRMC_raw['latitude_direction'],
     1811                                                                                $GPS_this_GPRMC_raw['longitude'],
     1812                                                                                $GPS_this_GPRMC_raw['longitude_direction'],
     1813                                                                                $GPS_this_GPRMC_raw['knots'],
     1814                                                                                $GPS_this_GPRMC_raw['angle'],
     1815                                                                                $GPS_this_GPRMC_raw['datestamp'],
     1816                                                                                $GPS_this_GPRMC_raw['variation'],
     1817                                                                                $GPS_this_GPRMC_raw['variation_direction'],
    16991818                                                                                $dummy,
    1700                                                                                 $GPS_this_GPRMC['raw']['checksum'],
     1819                                                                                $GPS_this_GPRMC_raw['checksum'],
    17011820                                                                        ) = $matches;
     1821                                                                        $GPS_this_GPRMC['raw'] = $GPS_this_GPRMC_raw;
    17021822
    17031823                                                                        $hour   = substr($GPS_this_GPRMC['raw']['timestamp'], 0, 2);
    17041824                                                                        $minute = substr($GPS_this_GPRMC['raw']['timestamp'], 2, 2);
    public function QuicktimeParseAtom($atomname, $atomsize, $atom_data, $baseoffset 
    17061826                                                                        $ms     = substr($GPS_this_GPRMC['raw']['timestamp'], 6);    // may contain decimal seconds
    17071827                                                                        $day    = substr($GPS_this_GPRMC['raw']['datestamp'], 0, 2);
    17081828                                                                        $month  = substr($GPS_this_GPRMC['raw']['datestamp'], 2, 2);
    1709                                                                         $year   = substr($GPS_this_GPRMC['raw']['datestamp'], 4, 2);
     1829                                                                        $year   = (int) substr($GPS_this_GPRMC['raw']['datestamp'], 4, 2);
    17101830                                                                        $year += (($year > 90) ? 1900 : 2000); // complete lack of foresight: datestamps are stored with 2-digit years, take best guess
    17111831                                                                        $GPS_this_GPRMC['timestamp'] = $year.'-'.$month.'-'.$day.' '.$hour.':'.$minute.':'.$second.$ms;
    17121832
    public function CopyToAppropriateCommentsSection($keyname, $data, $boxname='') { 
    27402860                                $gooddata = explode(';', $data);
    27412861                        }
    27422862                        foreach ($gooddata as $data) {
     2863                                if (is_array($data) || (!empty($info['quicktime']['comments'][$comment_key]) && in_array($data, $info['quicktime']['comments'][$comment_key]))) {
     2864                                        // avoid duplicate copies of identical data
     2865                                        continue;
     2866                                }
    27432867                                $info['quicktime']['comments'][$comment_key][] = $data;
    27442868                        }
    27452869                }
  • src/wp-includes/ID3/module.audio-video.riff.php

    diff --git a/src/wp-includes/ID3/module.audio-video.riff.php b/src/wp-includes/ID3/module.audio-video.riff.php
    index 276f131eaa..02adb72d60 100644
    a b public function Analyze() { 
    203203                                        unset($thisfile_riff_audio[$streamindex]['raw']);
    204204                                        $thisfile_audio['streams'][$streamindex] = $thisfile_riff_audio[$streamindex];
    205205
    206                                         $thisfile_audio = getid3_lib::array_merge_noclobber($thisfile_audio, $thisfile_riff_audio[$streamindex]);
     206                                        $thisfile_audio = (array) getid3_lib::array_merge_noclobber($thisfile_audio, $thisfile_riff_audio[$streamindex]);
    207207                                        if (substr($thisfile_audio['codec'], 0, strlen('unknown: 0x')) == 'unknown: 0x') {
    208208                                                $this->warning('Audio codec = '.$thisfile_audio['codec']);
    209209                                        }
  • src/wp-includes/ID3/module.audio.ac3.php

    diff --git a/src/wp-includes/ID3/module.audio.ac3.php b/src/wp-includes/ID3/module.audio.ac3.php
    index 364681b632..6faa4e3d64 100644
    a b public function Analyze() { 
    485485        /**
    486486         * @param int $length
    487487         *
    488          * @return float|int
     488         * @return int
    489489         */
    490490        private function readHeaderBSI($length) {
    491491                $data = substr($this->AC3header['bsi'], $this->BSIoffset, $length);
  • src/wp-includes/ID3/module.audio.dts.php

    diff --git a/src/wp-includes/ID3/module.audio.dts.php b/src/wp-includes/ID3/module.audio.dts.php
    index 9be8f1ba36..dafaf0bbd2 100644
    a b public function Analyze() { 
    149149         * @param string $bin
    150150         * @param int $length
    151151         *
    152          * @return float|int
     152         * @return int
    153153         */
    154154        private function readBinData($bin, $length) {
    155155                $data = substr($bin, $this->readBinDataOffset, $length);
    public static function numChannelsLookup($index) { 
    252252                switch ($index) {
    253253                        case 0:
    254254                                return 1;
    255                                 break;
    256255                        case 1:
    257256                        case 2:
    258257                        case 3:
    259258                        case 4:
    260259                                return 2;
    261                                 break;
    262260                        case 5:
    263261                        case 6:
    264262                                return 3;
    265                                 break;
    266263                        case 7:
    267264                        case 8:
    268265                                return 4;
    269                                 break;
    270266                        case 9:
    271267                                return 5;
    272                                 break;
    273268                        case 10:
    274269                        case 11:
    275270                        case 12:
    276271                                return 6;
    277                                 break;
    278272                        case 13:
    279273                                return 7;
    280                                 break;
    281274                        case 14:
    282275                        case 15:
    283276                                return 8;
    284                                 break;
    285277                }
    286278                return false;
    287279        }
    public static function dialogNormalization($index, $version) { 
    323315                switch ($version) {
    324316                        case 7:
    325317                                return 0 - $index;
    326                                 break;
    327318                        case 6:
    328319                                return 0 - 16 - $index;
    329                                 break;
    330320                }
    331321                return false;
    332322        }
  • src/wp-includes/ID3/module.audio.mp3.php

    diff --git a/src/wp-includes/ID3/module.audio.mp3.php b/src/wp-includes/ID3/module.audio.mp3.php
    index 4bd75a0219..192317467c 100644
    a b public function decodeMPEGaudioHeader($offset, &$info, $recursivesearch=true, $S 
    719719
    720720                                        $thisfile_mpeg_audio_lame['long_version']  = substr($headerstring, $VBRidOffset + 120, 20);
    721721                                        $thisfile_mpeg_audio_lame['short_version'] = substr($thisfile_mpeg_audio_lame['long_version'], 0, 9);
     722                                        $thisfile_mpeg_audio_lame['numeric_version'] = str_replace('LAME', '', $thisfile_mpeg_audio_lame['short_version']);
     723                                        if (preg_match('#^LAME([0-9\\.a-z]+)#', $thisfile_mpeg_audio_lame['long_version'], $matches)) {
     724                                                $thisfile_mpeg_audio_lame['short_version']   = $matches[0];
     725                                                $thisfile_mpeg_audio_lame['numeric_version'] = $matches[1];
     726                                        }
     727                                        foreach (explode('.', $thisfile_mpeg_audio_lame['numeric_version']) as $key => $number) {
     728                                                $thisfile_mpeg_audio_lame['integer_version'][$key] = intval($number);
     729                                        }
    722730
    723                                         if ($thisfile_mpeg_audio_lame['short_version'] >= 'LAME3.90') {
     731                                        //if ($thisfile_mpeg_audio_lame['short_version'] >= 'LAME3.90') {
     732                                        if ((($thisfile_mpeg_audio_lame['integer_version'][0] * 1000) + $thisfile_mpeg_audio_lame['integer_version'][1]) >= 3090) { // cannot use string version compare, may have "LAME3.90" or "LAME3.100" -- see https://github.com/JamesHeinrich/getID3/issues/207
    724733
    725734                                                // extra 11 chars are not part of version string when LAMEtag present
    726735                                                unset($thisfile_mpeg_audio_lame['long_version']);
    public function getOnlyMPEGaudioInfoBruteForce() { 
    13241333                                                if ($MPEGaudioHeaderValidCache[$next4]) {
    13251334                                                        $this->fseek(-4, SEEK_CUR);
    13261335
    1327                                                         getid3_lib::safe_inc($Distribution['bitrate'][$LongMPEGbitrateLookup[$head4]]);
    1328                                                         getid3_lib::safe_inc($Distribution['layer'][$LongMPEGlayerLookup[$head4]]);
    1329                                                         getid3_lib::safe_inc($Distribution['version'][$LongMPEGversionLookup[$head4]]);
    1330                                                         getid3_lib::safe_inc($Distribution['padding'][intval($LongMPEGpaddingLookup[$head4])]);
    1331                                                         getid3_lib::safe_inc($Distribution['frequency'][$LongMPEGfrequencyLookup[$head4]]);
    1332                                                         if ($max_frames_scan && (++$frames_scanned >= $max_frames_scan)) {
     1336                                                        $Distribution['bitrate'][$LongMPEGbitrateLookup[$head4]] = isset($Distribution['bitrate'][$LongMPEGbitrateLookup[$head4]]) ? ++$Distribution['bitrate'][$LongMPEGbitrateLookup[$head4]] : 1;
     1337                                                        $Distribution['layer'][$LongMPEGlayerLookup[$head4]] = isset($Distribution['layer'][$LongMPEGlayerLookup[$head4]]) ? ++$Distribution['layer'][$LongMPEGlayerLookup[$head4]] : 1;
     1338                                                        $Distribution['version'][$LongMPEGversionLookup[$head4]] = isset($Distribution['version'][$LongMPEGversionLookup[$head4]]) ? ++$Distribution['version'][$LongMPEGversionLookup[$head4]] : 1;
     1339                                                        $Distribution['padding'][intval($LongMPEGpaddingLookup[$head4])] = isset($Distribution['padding'][intval($LongMPEGpaddingLookup[$head4])]) ? ++$Distribution['padding'][intval($LongMPEGpaddingLookup[$head4])] : 1;
     1340                                                        $Distribution['frequency'][$LongMPEGfrequencyLookup[$head4]] = isset($Distribution['frequency'][$LongMPEGfrequencyLookup[$head4]]) ? ++$Distribution['frequency'][$LongMPEGfrequencyLookup[$head4]] : 1;
     1341                                                        if (++$frames_scanned >= $max_frames_scan) {
    13331342                                                                $pct_data_scanned = ($this->ftell() - $info['avdataoffset']) / ($info['avdataend'] - $info['avdataoffset']);
    13341343                                                                $this->warning('too many MPEG audio frames to scan, only scanned first '.$max_frames_scan.' frames ('.number_format($pct_data_scanned * 100, 1).'% of file) and extrapolated distribution, playtime and bitrate may be incorrect.');
    13351344                                                                foreach ($Distribution as $key1 => $value1) {
  • src/wp-includes/ID3/module.audio.ogg.php

    diff --git a/src/wp-includes/ID3/module.audio.ogg.php b/src/wp-includes/ID3/module.audio.ogg.php
    index 51fee3e1ce..fd69c68558 100644
    a b public function ParseVorbisComments() { 
    615615
    616616                        default:
    617617                                return false;
    618                                 break;
    619618                }
    620619
    621620                $VendorSize = getid3_lib::LittleEndian2Int(substr($commentdata, $commentdataoffset, 4));
  • src/wp-includes/ID3/module.tag.id3v2.php

    diff --git a/src/wp-includes/ID3/module.tag.id3v2.php b/src/wp-includes/ID3/module.tag.id3v2.php
    index 0c7c34bf6f..d0ddd9ebea 100644
    a b public static function IsValidID3v2FrameName($framename, $id3v2majorversion) { 
    37233723                switch ($id3v2majorversion) {
    37243724                        case 2:
    37253725                                return preg_match('#[A-Z][A-Z0-9]{2}#', $framename);
    3726                                 break;
    37273726
    37283727                        case 3:
    37293728                        case 4:
    37303729                                return preg_match('#[A-Z][A-Z0-9]{3}#', $framename);
    3731                                 break;
    37323730                }
    37333731                return false;
    37343732        }
  • src/wp-includes/ID3/module.tag.lyrics3.php

    diff --git a/src/wp-includes/ID3/module.tag.lyrics3.php b/src/wp-includes/ID3/module.tag.lyrics3.php
    index 80e81658c7..27e51e0b82 100644
    a b public function Analyze() { 
    3232
    3333                $this->fseek((0 - 128 - 9 - 6), SEEK_END);          // end - ID3v1 - "LYRICSEND" - [Lyrics3size]
    3434                $lyrics3_id3v1 = $this->fread(128 + 9 + 6);
    35                 $lyrics3lsz    = substr($lyrics3_id3v1,  0,  6); // Lyrics3size
     35                $lyrics3lsz    = (int) substr($lyrics3_id3v1, 0, 6); // Lyrics3size
    3636                $lyrics3end    = substr($lyrics3_id3v1,  6,   9); // LYRICSEND or LYRICS200
    3737                $id3v1tag      = substr($lyrics3_id3v1, 15, 128); // ID3v1
    3838
    public function getLyrics3Data($endoffset, $version, $length) { 
    240240                        default:
    241241                                $this->error('Cannot process Lyrics3 version '.$version.' (only v1 and v2)');
    242242                                return false;
    243                                 break;
    244243                }
    245244
    246245