<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[54376] trunk/src/wp-includes/ID3: External Libraries: Update getID3 to version `1.9.22`.</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { white-space: pre-line; overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta" style="font-size: 105%">
<dt style="float: left; width: 6em; font-weight: bold">Revision</dt> <dd><a style="font-weight: bold" href="https://core.trac.wordpress.org/changeset/54376">54376</a><script type="application/ld+json">{"@context":"http://schema.org","@type":"EmailMessage","description":"Review this Commit","action":{"@type":"ViewAction","url":"https://core.trac.wordpress.org/changeset/54376","name":"Review Commit"}}</script></dd>
<dt style="float: left; width: 6em; font-weight: bold">Author</dt> <dd>desrosj</dd>
<dt style="float: left; width: 6em; font-weight: bold">Date</dt> <dd>2022-10-04 02:06:29 +0000 (Tue, 04 Oct 2022)</dd>
</dl>

<pre style='padding-left: 1em; margin: 2em 0; border-left: 2px solid #ccc; line-height: 1.25; font-size: 105%; font-family: sans-serif'>External Libraries: Update getID3 to version `1.9.22`.

This updates the getID3 library from version `1.9.21` to `1.9.22`, which contains a number of bug fixes and improvements to PHP 8.1 support.

A full list of changes can be found on GitHub: https://github.com/JamesHeinrich/getID3/compare/v1.9.21...v1.9.22.

Props jrf, desrosj.
Fixes <a href="https://core.trac.wordpress.org/ticket/56692">#56692</a>.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunksrcwpincludesID3getid3libphp">trunk/src/wp-includes/ID3/getid3.lib.php</a></li>
<li><a href="#trunksrcwpincludesID3getid3php">trunk/src/wp-includes/ID3/getid3.php</a></li>
<li><a href="#trunksrcwpincludesID3moduleaudiovideoasfphp">trunk/src/wp-includes/ID3/module.audio-video.asf.php</a></li>
<li><a href="#trunksrcwpincludesID3moduleaudiovideoquicktimephp">trunk/src/wp-includes/ID3/module.audio-video.quicktime.php</a></li>
<li><a href="#trunksrcwpincludesID3moduleaudiovideoriffphp">trunk/src/wp-includes/ID3/module.audio-video.riff.php</a></li>
<li><a href="#trunksrcwpincludesID3moduleaudiomp3php">trunk/src/wp-includes/ID3/module.audio.mp3.php</a></li>
<li><a href="#trunksrcwpincludesID3moduleaudiooggphp">trunk/src/wp-includes/ID3/module.audio.ogg.php</a></li>
<li><a href="#trunksrcwpincludesID3moduletagid3v2php">trunk/src/wp-includes/ID3/module.tag.id3v2.php</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunksrcwpincludesID3getid3libphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/ID3/getid3.lib.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/ID3/getid3.lib.php  2022-10-04 01:50:33 UTC (rev 54375)
+++ trunk/src/wp-includes/ID3/getid3.lib.php    2022-10-04 02:06:29 UTC (rev 54376)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -11,6 +11,13 @@
</span><span class="cx" style="display: block; padding: 0 10px"> //                                                            ///
</span><span class="cx" style="display: block; padding: 0 10px"> /////////////////////////////////////////////////////////////////
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+if(!defined('GETID3_LIBXML_OPTIONS') && defined('LIBXML_VERSION')) {
+       if(LIBXML_VERSION >= 20621) {
+               define('GETID3_LIBXML_OPTIONS', LIBXML_NOENT | LIBXML_NONET | LIBXML_NOWARNING | LIBXML_COMPACT);
+       } else {
+               define('GETID3_LIBXML_OPTIONS', LIBXML_NOENT | LIBXML_NONET | LIBXML_NOWARNING);
+       }
+}
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> class getid3_lib
</span><span class="cx" style="display: block; padding: 0 10px"> {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -303,11 +310,10 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><span class="cx" style="display: block; padding: 0 10px">                } elseif (($exponent == 0) && ($fraction == 0)) {
</span><span class="cx" style="display: block; padding: 0 10px">                        if ($signbit == '1') {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                $floatvalue = -0;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         $floatvalue = -0.0;
</ins><span class="cx" style="display: block; padding: 0 10px">                         } else {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                $floatvalue = 0;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         $floatvalue = 0.0;
</ins><span class="cx" style="display: block; padding: 0 10px">                         }
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        $floatvalue = ($signbit ? 0 : -0);
</del><span class="cx" style="display: block; padding: 0 10px">                 } elseif (($exponent == 0) && ($fraction != 0)) {
</span><span class="cx" style="display: block; padding: 0 10px">                        // These are 'unnormalized' values
</span><span class="cx" style="display: block; padding: 0 10px">                        $floatvalue = pow(2, (-1 * (pow(2, $exponentbits - 1) - 2))) * self::DecimalBinary2Float($fractionstring);
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -732,7 +738,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        // This function has been deprecated in PHP 8.0 because in libxml 2.9.0, external entity loading is
</span><span class="cx" style="display: block; padding: 0 10px">                        // disabled by default, but is still needed when LIBXML_NOENT is used.
</span><span class="cx" style="display: block; padding: 0 10px">                        $loader = @libxml_disable_entity_loader(true);
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        $XMLobject = simplexml_load_string($XMLstring, 'SimpleXMLElement', LIBXML_NOENT);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 $XMLobject = simplexml_load_string($XMLstring, 'SimpleXMLElement', GETID3_LIBXML_OPTIONS);
</ins><span class="cx" style="display: block; padding: 0 10px">                         $return = self::SimpleXMLelement2array($XMLobject);
</span><span class="cx" style="display: block; padding: 0 10px">                        @libxml_disable_entity_loader($loader);
</span><span class="cx" style="display: block; padding: 0 10px">                        return $return;
</span></span></pre></div>
<a id="trunksrcwpincludesID3getid3php"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/ID3/getid3.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/ID3/getid3.php      2022-10-04 01:50:33 UTC (rev 54375)
+++ trunk/src/wp-includes/ID3/getid3.php        2022-10-04 02:06:29 UTC (rev 54376)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -182,7 +182,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">        public $option_md5_data          = false;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        /**
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-         * Use MD5 of source file if availble - only FLAC and OptimFROG
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+  * Use MD5 of source file if available - only FLAC and OptimFROG
</ins><span class="cx" style="display: block; padding: 0 10px">          *
</span><span class="cx" style="display: block; padding: 0 10px">         * @var bool
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -387,12 +387,15 @@
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><span class="cx" style="display: block; padding: 0 10px">        protected $startup_warning = '';
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        const VERSION           = '1.9.21-202109171300';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ const VERSION           = '1.9.22-202207161647';
</ins><span class="cx" style="display: block; padding: 0 10px">         const FREAD_BUFFER_SIZE = 32768;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        const ATTACHMENTS_NONE   = false;
</span><span class="cx" style="display: block; padding: 0 10px">        const ATTACHMENTS_INLINE = true;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        /**
+        * @throws getid3_exception
+        */
</ins><span class="cx" style="display: block; padding: 0 10px">         public function __construct() {
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                // Check for PHP version
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -569,7 +572,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        $this->info['php_memory_limit'] = (($this->memory_limit > 0) ? $this->memory_limit : false);
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        // remote files not supported
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        if (preg_match('#^(ht|f)tp://#', $filename)) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 if (preg_match('#^(ht|f)tps?://#', $filename)) {
</ins><span class="cx" style="display: block; padding: 0 10px">                                 throw new getid3_exception('Remote files are not supported - please copy the file locally first');
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1055,16 +1058,17 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                                        'mime_type' => 'audio/x-monkeys-audio',
</span><span class="cx" style="display: block; padding: 0 10px">                                                ),
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-// has been known to produce false matches in random files (e.g. JPEGs), leave out until more precise matching available
-//                             // MOD  - audio       - MODule (assorted sub-formats)
-//                             'mod'  => array(
-//                                                     'pattern'   => '^.{1080}(M\\.K\\.|M!K!|FLT4|FLT8|[5-9]CHN|[1-3][0-9]CH)',
-//                                                     'group'     => 'audio',
-//                                                     'module'    => 'mod',
-//                                                     'option'    => 'mod',
-//                                                     'mime_type' => 'audio/mod',
-//                                             ),
</del><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                // MOD  - audio       - MODule (SoundTracker)
+                               'mod'  => array(
+                                                       //'pattern'   => '^.{1080}(M\\.K\\.|M!K!|FLT4|FLT8|[5-9]CHN|[1-3][0-9]CH)', // has been known to produce false matches in random files (e.g. JPEGs), leave out until more precise matching available
+                                                       'pattern'   => '^.{1080}(M\\.K\\.)',
+                                                       'group'     => 'audio',
+                                                       'module'    => 'mod',
+                                                       'option'    => 'mod',
+                                                       'mime_type' => 'audio/mod',
+                                               ),
+
</ins><span class="cx" style="display: block; padding: 0 10px">                                 // MOD  - audio       - MODule (Impulse Tracker)
</span><span class="cx" style="display: block; padding: 0 10px">                                'it'   => array(
</span><span class="cx" style="display: block; padding: 0 10px">                                                        'pattern'   => '^IMPM',
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1094,7 +1098,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                // MPC  - audio       - Musepack / MPEGplus
</span><span class="cx" style="display: block; padding: 0 10px">                                'mpc'  => array(
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                                        'pattern'   => '^(MPCK|MP\\+|[\\x00\\x01\\x10\\x11\\x40\\x41\\x50\\x51\\x80\\x81\\x90\\x91\\xC0\\xC1\\xD0\\xD1][\\x20-\\x37][\\x00\\x20\\x40\\x60\\x80\\xA0\\xC0\\xE0])',
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                                 'pattern'   => '^(MPCK|MP\\+)',
</ins><span class="cx" style="display: block; padding: 0 10px">                                                         'group'     => 'audio',
</span><span class="cx" style="display: block; padding: 0 10px">                                                        'module'    => 'mpc',
</span><span class="cx" style="display: block; padding: 0 10px">                                                        'mime_type' => 'audio/x-musepack',
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1551,6 +1555,13 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        $info = $GetFileFormatArray['mp3'];
</span><span class="cx" style="display: block; padding: 0 10px">                        $info['include'] = 'module.'.$info['group'].'.'.$info['module'].'.php';
</span><span class="cx" style="display: block; padding: 0 10px">                        return $info;
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                } elseif (preg_match('#\\.mp[cp\\+]$#i', $filename) && preg_match('#[\x00\x01\x10\x11\x40\x41\x50\x51\x80\x81\x90\x91\xC0\xC1\xD0\xD1][\x20-37][\x00\x20\x40\x60\x80\xA0\xC0\xE0]#s', $filedata)) {
+                       // old-format (SV4-SV6) Musepack header that has a very loose pattern match and could falsely match other data (e.g. corrupt mp3)
+                       // only enable this pattern check if the filename ends in .mpc/mpp/mp+
+                       $GetFileFormatArray = $this->GetFileFormatArray();
+                       $info = $GetFileFormatArray['mpc'];
+                       $info['include'] = 'module.'.$info['group'].'.'.$info['module'].'.php';
+                       return $info;
</ins><span class="cx" style="display: block; padding: 0 10px">                 } elseif (preg_match('#\\.cue$#i', $filename) && preg_match('#FILE "[^"]+" (BINARY|MOTOROLA|AIFF|WAVE|MP3)#', $filedata)) {
</span><span class="cx" style="display: block; padding: 0 10px">                        // there's not really a useful consistent "magic" at the beginning of .cue files to identify them
</span><span class="cx" style="display: block; padding: 0 10px">                        // so until I think of something better, just go by filename if all other format checks fail
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2198,6 +2209,11 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        $this->data_string_position += $bytes;
</span><span class="cx" style="display: block; padding: 0 10px">                        return substr($this->data_string, $this->data_string_position - $bytes, $bytes);
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                if ($bytes == 0) {
+                       return '';
+               } elseif ($bytes < 0) {
+                       throw new getid3_exception('cannot fread('.$bytes.' from '.$this->ftell().')', 10);
+               }
</ins><span class="cx" style="display: block; padding: 0 10px">                 $pos = $this->ftell() + $bytes;
</span><span class="cx" style="display: block; padding: 0 10px">                if (!getid3_lib::intValueSupported($pos)) {
</span><span class="cx" style="display: block; padding: 0 10px">                        throw new getid3_exception('cannot fread('.$bytes.' from '.$this->ftell().') because beyond PHP filesystem limit', 10);
</span></span></pre></div>
<a id="trunksrcwpincludesID3moduleaudiovideoasfphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/ID3/module.audio-video.asf.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/ID3/module.audio-video.asf.php      2022-10-04 01:50:33 UTC (rev 54375)
+++ trunk/src/wp-includes/ID3/module.audio-video.asf.php        2022-10-04 02:06:29 UTC (rev 54376)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -20,6 +20,24 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> class getid3_asf extends getid3_handler
</span><span class="cx" style="display: block; padding: 0 10px"> {
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        protected static $ASFIndexParametersObjectIndexSpecifiersIndexTypes = array(
+               1 => 'Nearest Past Data Packet',
+               2 => 'Nearest Past Media Object',
+               3 => 'Nearest Past Cleanpoint'
+       );
+
+       protected static $ASFMediaObjectIndexParametersObjectIndexSpecifiersIndexTypes = array(
+               1 => 'Nearest Past Data Packet',
+               2 => 'Nearest Past Media Object',
+               3 => 'Nearest Past Cleanpoint',
+               0xFF => 'Frame Number Offset'
+       );
+
+       protected static $ASFTimecodeIndexParametersObjectIndexSpecifiersIndexTypes = array(
+               2 => 'Nearest Past Media Object',
+               3 => 'Nearest Past Cleanpoint'
+       );
+
</ins><span class="cx" style="display: block; padding: 0 10px">         /**
</span><span class="cx" style="display: block; padding: 0 10px">         * @param getID3 $getid3
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -317,6 +335,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                        // shortcut
</span><span class="cx" style="display: block; padding: 0 10px">                                        $thisfile_asf['codec_list_object'] = array();
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                        /** @var mixed[] $thisfile_asf_codeclistobject */
</ins><span class="cx" style="display: block; padding: 0 10px">                                         $thisfile_asf_codeclistobject      = &$thisfile_asf['codec_list_object'];
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                        $thisfile_asf_codeclistobject['offset']                    = $NextObjectOffset + $offset;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -332,6 +351,9 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                                break;
</span><span class="cx" style="display: block; padding: 0 10px">                                        }
</span><span class="cx" style="display: block; padding: 0 10px">                                        $thisfile_asf_codeclistobject['codec_entries_count'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 4));
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                        if ($thisfile_asf_codeclistobject['codec_entries_count'] > 0) {
+                                               $thisfile_asf_codeclistobject['codec_entries'] = array();
+                                       }
</ins><span class="cx" style="display: block; padding: 0 10px">                                         $offset += 4;
</span><span class="cx" style="display: block; padding: 0 10px">                                        for ($CodecEntryCounter = 0; $CodecEntryCounter < $thisfile_asf_codeclistobject['codec_entries_count']; $CodecEntryCounter++) {
</span><span class="cx" style="display: block; padding: 0 10px">                                                // shortcut
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -528,7 +550,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                        $offset += 16;
</span><span class="cx" style="display: block; padding: 0 10px">                                        $thisfile_asf_markerobject['reserved_guid']        = $this->BytestringToGUID($thisfile_asf_markerobject['reserved']);
</span><span class="cx" style="display: block; padding: 0 10px">                                        if ($thisfile_asf_markerobject['reserved'] != $this->GUIDtoBytestring('4CFEDB20-75F6-11CF-9C0F-00A0C90349CB')) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                                $this->warning('marker_object.reserved GUID {'.$this->BytestringToGUID($thisfile_asf_markerobject['reserved_1']).'} does not match expected "GETID3_ASF_Reserved_1" GUID {4CFEDB20-75F6-11CF-9C0F-00A0C90349CB}');
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                         $this->warning('marker_object.reserved GUID {'.$this->BytestringToGUID($thisfile_asf_markerobject['reserved']).'} does not match expected "GETID3_ASF_Reserved_1" GUID {4CFEDB20-75F6-11CF-9C0F-00A0C90349CB}');
</ins><span class="cx" style="display: block; padding: 0 10px">                                                 break;
</span><span class="cx" style="display: block; padding: 0 10px">                                        }
</span><span class="cx" style="display: block; padding: 0 10px">                                        $thisfile_asf_markerobject['markers_count'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 4));
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -648,7 +670,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                                        break;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                                default:
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                                        $this->warning('error_correction_object.error_correction_type GUID {'.$this->BytestringToGUID($thisfile_asf_errorcorrectionobject['reserved']).'} does not match expected "GETID3_ASF_No_Error_Correction" GUID {'.$this->BytestringToGUID(GETID3_ASF_No_Error_Correction).'} or  "GETID3_ASF_Audio_Spread" GUID {'.$this->BytestringToGUID(GETID3_ASF_Audio_Spread).'}');
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                                 $this->warning('error_correction_object.error_correction_type GUID {'.$this->BytestringToGUID($thisfile_asf_errorcorrectionobject['error_correction_type']).'} does not match expected "GETID3_ASF_No_Error_Correction" GUID {'.$this->BytestringToGUID(GETID3_ASF_No_Error_Correction).'} or  "GETID3_ASF_Audio_Spread" GUID {'.$this->BytestringToGUID(GETID3_ASF_Audio_Spread).'}');
</ins><span class="cx" style="display: block; padding: 0 10px">                                                         //return false;
</span><span class="cx" style="display: block; padding: 0 10px">                                                        break;
</span><span class="cx" style="display: block; padding: 0 10px">                                        }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1442,7 +1464,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                }
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                $info['bitrate'] = (isset($thisfile_audio['bitrate']) ? $thisfile_audio['bitrate'] : 0) + (isset($thisfile_video['bitrate']) ? $thisfile_video['bitrate'] : 0);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         $info['bitrate'] = 0 + (isset($thisfile_audio['bitrate']) ? $thisfile_audio['bitrate'] : 0) + (isset($thisfile_video['bitrate']) ? $thisfile_video['bitrate'] : 0);
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                if ((!isset($info['playtime_seconds']) || ($info['playtime_seconds'] <= 0)) && ($info['bitrate'] > 0)) {
</span><span class="cx" style="display: block; padding: 0 10px">                        $info['playtime_seconds'] = ($info['filesize'] - $info['avdataoffset']) / ($info['bitrate'] / 8);
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1577,8 +1599,9 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        'GETID3_ASF_Audio_Media'                         => 'F8699E40-5B4D-11CF-A8FD-00805F5C442B',
</span><span class="cx" style="display: block; padding: 0 10px">                        'GETID3_ASF_Media_Object_Index_Object'           => 'FEB103F8-12AD-4C64-840F-2A1D2F7AD48C',
</span><span class="cx" style="display: block; padding: 0 10px">                        'GETID3_ASF_Alt_Extended_Content_Encryption_Obj' => 'FF889EF1-ADEE-40DA-9E71-98704BB928CE',
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        'GETID3_ASF_Index_Placeholder_Object'            => 'D9AADE20-7C17-4F9C-BC28-8555DD98E2A2', // http://cpan.uwinnipeg.ca/htdocs/Audio-WMA/Audio/WMA.pm.html
-                       'GETID3_ASF_Compatibility_Object'                => '26F18B5D-4584-47EC-9F5F-0E651F0452C9', // http://cpan.uwinnipeg.ca/htdocs/Audio-WMA/Audio/WMA.pm.html
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 'GETID3_ASF_Index_Placeholder_Object'            => 'D9AADE20-7C17-4F9C-BC28-8555DD98E2A2', // https://metacpan.org/dist/Audio-WMA/source/WMA.pm
+                       'GETID3_ASF_Compatibility_Object'                => '26F18B5D-4584-47EC-9F5F-0E651F0452C9', // https://metacpan.org/dist/Audio-WMA/source/WMA.pm
+                       'GETID3_ASF_Media_Object_Index_Parameters_Object'=> '6B203BAD-3F11-48E4-ACA8-D7613DE2CFA7',
</ins><span class="cx" style="display: block; padding: 0 10px">                 );
</span><span class="cx" style="display: block; padding: 0 10px">                return $GUIDarray;
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1741,7 +1764,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         * @return array
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><span class="cx" style="display: block; padding: 0 10px">        public function HeaderExtensionObjectDataParse(&$asf_header_extension_object_data, &$unhandled_sections) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                // http://msdn.microsoft.com/en-us/library/bb643323.aspx
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         // https://web.archive.org/web/20140419205228/http://msdn.microsoft.com/en-us/library/bb643323.aspx
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                $offset = 0;
</span><span class="cx" style="display: block; padding: 0 10px">                $objectOffset = 0;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1805,8 +1828,8 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                        $thisObject['stream_language_id_index']          = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  2));
</span><span class="cx" style="display: block; padding: 0 10px">                                        $offset += 2;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                        $thisObject['average_time_per_frame']            = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  4));
-                                       $offset += 4;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                 $thisObject['average_time_per_frame']            = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  8));
+                                       $offset += 8;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                        $thisObject['stream_name_count']                 = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  2));
</span><span class="cx" style="display: block; padding: 0 10px">                                        $offset += 2;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1823,7 +1846,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                                $streamName['stream_name_length']            = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  2));
</span><span class="cx" style="display: block; padding: 0 10px">                                                $offset += 2;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                                $streamName['stream_name']                   = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  $streamName['stream_name_length']));
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                         $streamName['stream_name']                   =                              substr($asf_header_extension_object_data, $offset,  $streamName['stream_name_length']);
</ins><span class="cx" style="display: block; padding: 0 10px">                                                 $offset += $streamName['stream_name_length'];
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                                $thisObject['stream_names'][$i] = $streamName;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1845,7 +1868,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                                $payloadExtensionSystem['extension_system_info_length'] = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  4));
</span><span class="cx" style="display: block; padding: 0 10px">                                                $offset += 4;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                                $payloadExtensionSystem['extension_system_info_length'] = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  $payloadExtensionSystem['extension_system_info_length']));
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                         $payloadExtensionSystem['extension_system_info'] = substr($asf_header_extension_object_data, $offset,  $payloadExtensionSystem['extension_system_info_length']);
</ins><span class="cx" style="display: block; padding: 0 10px">                                                 $offset += $payloadExtensionSystem['extension_system_info_length'];
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                                $thisObject['payload_extension_systems'][$i] = $payloadExtensionSystem;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1853,6 +1876,40 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                        break;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                case GETID3_ASF_Advanced_Mutual_Exclusion_Object:
+                                       $thisObject['exclusion_type']       = substr($asf_header_extension_object_data, $offset, 16);
+                                       $offset += 16;
+                                       $thisObject['exclusion_type_text']  = $this->BytestringToGUID($thisObject['exclusion_type']);
+
+                                       $thisObject['stream_numbers_count'] = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  2));
+                                       $offset += 2;
+
+                                       for ($i = 0; $i < $thisObject['stream_numbers_count']; $i++) {
+                                               $thisObject['stream_numbers'][$i] = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  2));
+                                               $offset += 2;
+                                       }
+
+                                       break;
+
+                               case GETID3_ASF_Stream_Prioritization_Object:
+                                       $thisObject['priority_records_count'] = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  2));
+                                       $offset += 2;
+
+                                       for ($i = 0; $i < $thisObject['priority_records_count']; $i++) {
+                                               $priorityRecord = array();
+
+                                               $priorityRecord['stream_number'] = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  2));
+                                               $offset += 2;
+
+                                               $priorityRecord['flags_raw']     = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset, 2));
+                                               $offset += 2;
+                                               $priorityRecord['flags']['mandatory'] = (bool) $priorityRecord['flags_raw'] & 0x00000001;
+
+                                               $thisObject['priority_records'][$i] = $priorityRecord;
+                                       }
+
+                                       break;
+
</ins><span class="cx" style="display: block; padding: 0 10px">                                 case GETID3_ASF_Padding_Object:
</span><span class="cx" style="display: block; padding: 0 10px">                                        // padding, skip it
</span><span class="cx" style="display: block; padding: 0 10px">                                        break;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1970,6 +2027,103 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                        }
</span><span class="cx" style="display: block; padding: 0 10px">                                        break;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                case GETID3_ASF_Index_Parameters_Object:
+                                       $thisObject['index_entry_time_interval'] = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset, 4));
+                                       $offset += 4;
+
+                                       $thisObject['index_specifiers_count']    = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset, 2));
+                                       $offset += 2;
+
+                                       for ($i = 0; $i < $thisObject['index_specifiers_count']; $i++) {
+                                               $indexSpecifier = array();
+
+                                               $indexSpecifier['stream_number']   = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset, 2));
+                                               $offset += 2;
+
+                                               $indexSpecifier['index_type']      = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset, 2));
+                                               $offset += 2;
+                                               $indexSpecifier['index_type_text'] = isset(static::$ASFIndexParametersObjectIndexSpecifiersIndexTypes[$indexSpecifier['index_type']])
+                                                       ? static::$ASFIndexParametersObjectIndexSpecifiersIndexTypes[$indexSpecifier['index_type']]
+                                                       : 'invalid'
+                                               ;
+
+                                               $thisObject['index_specifiers'][$i] = $indexSpecifier;
+                                       }
+
+                                       break;
+
+                               case GETID3_ASF_Media_Object_Index_Parameters_Object:
+                                       $thisObject['index_entry_count_interval'] = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset, 4));
+                                       $offset += 4;
+
+                                       $thisObject['index_specifiers_count']     = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset, 2));
+                                       $offset += 2;
+
+                                       for ($i = 0; $i < $thisObject['index_specifiers_count']; $i++) {
+                                               $indexSpecifier = array();
+
+                                               $indexSpecifier['stream_number']   = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset, 2));
+                                               $offset += 2;
+
+                                               $indexSpecifier['index_type']      = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset, 2));
+                                               $offset += 2;
+                                               $indexSpecifier['index_type_text'] = isset(static::$ASFMediaObjectIndexParametersObjectIndexSpecifiersIndexTypes[$indexSpecifier['index_type']])
+                                                       ? static::$ASFMediaObjectIndexParametersObjectIndexSpecifiersIndexTypes[$indexSpecifier['index_type']]
+                                                       : 'invalid'
+                                               ;
+
+                                               $thisObject['index_specifiers'][$i] = $indexSpecifier;
+                                       }
+
+                                       break;
+
+                               case GETID3_ASF_Timecode_Index_Parameters_Object:
+                                       // 4.11 Timecode Index Parameters Object (mandatory only if TIMECODE index is present in file, 0 or 1)
+                                       // Field name                     Field type   Size (bits)
+                                       // Object ID                      GUID         128             // GUID for the Timecode Index Parameters Object - ASF_Timecode_Index_Parameters_Object
+                                       // Object Size                    QWORD        64              // Specifies the size, in bytes, of the Timecode Index Parameters Object. Valid values are at least 34 bytes.
+                                       // Index Entry Count Interval     DWORD        32              // This value is ignored for the Timecode Index Parameters Object.
+                                       // Index Specifiers Count         WORD         16              // Specifies the number of entries in the Index Specifiers list. Valid values are 1 and greater.
+                                       // Index Specifiers               array of:    varies          //
+                                       // * Stream Number                WORD         16              // Specifies the stream number that the Index Specifiers refer to. Valid values are between 1 and 127.
+                                       // * Index Type                   WORD         16              // Specifies the type of index. Values are defined as follows (1 is not a valid value):
+                                                                                                      // 2 = Nearest Past Media Object - indexes point to the closest data packet containing an entire video frame or the first fragment of a video frame
+                                                                                                      // 3 = Nearest Past Cleanpoint - indexes point to the closest data packet containing an entire video frame (or first fragment of a video frame) that is a key frame.
+                                                                                                      // Nearest Past Media Object is the most common value
+
+                                       $thisObject['index_entry_count_interval'] = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset, 4));
+                                       $offset += 4;
+
+                                       $thisObject['index_specifiers_count']     = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset, 2));
+                                       $offset += 2;
+
+                                       for ($i = 0; $i < $thisObject['index_specifiers_count']; $i++) {
+                                               $indexSpecifier = array();
+
+                                               $indexSpecifier['stream_number']   = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset, 2));
+                                               $offset += 2;
+
+                                               $indexSpecifier['index_type']      = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset, 2));
+                                               $offset += 2;
+                                               $indexSpecifier['index_type_text'] = isset(static::$ASFTimecodeIndexParametersObjectIndexSpecifiersIndexTypes[$indexSpecifier['index_type']])
+                                                       ? static::$ASFTimecodeIndexParametersObjectIndexSpecifiersIndexTypes[$indexSpecifier['index_type']]
+                                                       : 'invalid'
+                                               ;
+
+                                               $thisObject['index_specifiers'][$i] = $indexSpecifier;
+                                       }
+
+                                       break;
+
+                               case GETID3_ASF_Compatibility_Object:
+                                       $thisObject['profile'] = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset, 1));
+                                       $offset += 1;
+
+                                       $thisObject['mode']    = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset, 1));
+                                       $offset += 1;
+
+                                       break;
+
</ins><span class="cx" style="display: block; padding: 0 10px">                                 default:
</span><span class="cx" style="display: block; padding: 0 10px">                                        $unhandled_sections++;
</span><span class="cx" style="display: block; padding: 0 10px">                                        if ($this->GUIDname($thisObject['guid_text'])) {
</span></span></pre></div>
<a id="trunksrcwpincludesID3moduleaudiovideoquicktimephp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/ID3/module.audio-video.quicktime.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/ID3/module.audio-video.quicktime.php        2022-10-04 01:50:33 UTC (rev 54375)
+++ trunk/src/wp-includes/ID3/module.audio-video.quicktime.php  2022-10-04 02:06:29 UTC (rev 54376)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -61,12 +61,16 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        $this->fseek($offset);
</span><span class="cx" style="display: block; padding: 0 10px">                        $AtomHeader = $this->fread(8);
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                        // https://github.com/JamesHeinrich/getID3/issues/382
+                       // Atom sizes are stored as 32-bit number in most cases, but sometimes (notably for "mdat")
+                       // a 64-bit value is required, in which case the normal 32-bit size field is set to 0x00000001
+                       // and the 64-bit "real" size value is the next 8 bytes.
+                       $atom_size_extended_bytes = 0;
</ins><span class="cx" style="display: block; padding: 0 10px">                         $atomsize = getid3_lib::BigEndian2Int(substr($AtomHeader, 0, 4));
</span><span class="cx" style="display: block; padding: 0 10px">                        $atomname = substr($AtomHeader, 4, 4);
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-
-                       // 64-bit MOV patch by jlegateØktnc*com
</del><span class="cx" style="display: block; padding: 0 10px">                         if ($atomsize == 1) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                $atomsize = getid3_lib::BigEndian2Int($this->fread(8));
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         $atom_size_extended_bytes = 8;
+                               $atomsize = getid3_lib::BigEndian2Int($this->fread($atom_size_extended_bytes));
</ins><span class="cx" style="display: block; padding: 0 10px">                         }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        if (($offset + $atomsize) > $info['avdataend']) {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -85,12 +89,14 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                $info['quicktime'][$atomname]['offset'] = $offset;
</span><span class="cx" style="display: block; padding: 0 10px">                                break;
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-
</del><span class="cx" style="display: block; padding: 0 10px">                         $atomHierarchy = array();
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        $parsedAtomData = $this->QuicktimeParseAtom($atomname, $atomsize, $this->fread(min($atomsize, $atom_data_read_buffer_size)), $offset, $atomHierarchy, $this->ParseAllPossibleAtoms);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 $parsedAtomData = $this->QuicktimeParseAtom($atomname, $atomsize, $this->fread(min($atomsize - $atom_size_extended_bytes, $atom_data_read_buffer_size)), $offset, $atomHierarchy, $this->ParseAllPossibleAtoms);
</ins><span class="cx" style="display: block; padding: 0 10px">                         $parsedAtomData['name']   = $atomname;
</span><span class="cx" style="display: block; padding: 0 10px">                        $parsedAtomData['size']   = $atomsize;
</span><span class="cx" style="display: block; padding: 0 10px">                        $parsedAtomData['offset'] = $offset;
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                        if ($atom_size_extended_bytes) {
+                               $parsedAtomData['xsize_bytes'] = $atom_size_extended_bytes;
+                       }
</ins><span class="cx" style="display: block; padding: 0 10px">                         if (in_array($atomname, array('uuid'))) {
</span><span class="cx" style="display: block; padding: 0 10px">                                @$info['quicktime'][$atomname][] = $parsedAtomData;
</span><span class="cx" style="display: block; padding: 0 10px">                        } else {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -108,7 +114,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        unset($info['avdataend_tmp']);
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                if (!empty($info['quicktime']['comments']['chapters']) && is_array($info['quicktime']['comments']['chapters']) && (count($info['quicktime']['comments']['chapters']) > 0)) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         if (isset($info['quicktime']['comments']['chapters']) && is_array($info['quicktime']['comments']['chapters']) && (count($info['quicktime']['comments']['chapters']) > 0)) {
</ins><span class="cx" style="display: block; padding: 0 10px">                         $durations = $this->quicktime_time_to_sample_table($info);
</span><span class="cx" style="display: block; padding: 0 10px">                        for ($i = 0; $i < count($info['quicktime']['comments']['chapters']); $i++) {
</span><span class="cx" style="display: block; padding: 0 10px">                                $bookmark = array();
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -259,7 +265,9 @@
</span><span class="cx" style="display: block; padding: 0 10px">                } else {
</span><span class="cx" style="display: block; padding: 0 10px">                        switch ($atomname) {
</span><span class="cx" style="display: block; padding: 0 10px">                                case 'moov': // MOVie container atom
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                case 'moof': // MOvie Fragment box
</ins><span class="cx" style="display: block; padding: 0 10px">                                 case 'trak': // TRAcK container atom
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                case 'traf': // TRAck Fragment box
</ins><span class="cx" style="display: block; padding: 0 10px">                                 case 'clip': // CLIPping container atom
</span><span class="cx" style="display: block; padding: 0 10px">                                case 'matt': // track MATTe container atom
</span><span class="cx" style="display: block; padding: 0 10px">                                case 'edts': // EDiTS container atom
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -843,6 +851,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                                                        case 'dvcp':
</span><span class="cx" style="display: block; padding: 0 10px">                                                                        case 'gif ':
</span><span class="cx" style="display: block; padding: 0 10px">                                                                        case 'h263':
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                                                        case 'hvc1':
</ins><span class="cx" style="display: block; padding: 0 10px">                                                                         case 'jpeg':
</span><span class="cx" style="display: block; padding: 0 10px">                                                                        case 'kpcd':
</span><span class="cx" style="display: block; padding: 0 10px">                                                                        case 'mjpa':
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1541,6 +1550,21 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                        unset($mdat_offset, $chapter_string_length, $chapter_matches);
</span><span class="cx" style="display: block; padding: 0 10px">                                        break;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                case 'ID32': // ID3v2
+                                       getid3_lib::IncludeDependency(GETID3_INCLUDEPATH.'module.tag.id3v2.php', __FILE__, true);
+
+                                       $getid3_temp = new getID3();
+                                       $getid3_temp->openfile($this->getid3->filename, $this->getid3->info['filesize'], $this->getid3->fp);
+                                       $getid3_id3v2 = new getid3_id3v2($getid3_temp);
+                                       $getid3_id3v2->StartingOffset = $atom_structure['offset'] + 14; // framelength(4)+framename(4)+flags(4)+??(2)
+                                       if ($atom_structure['valid'] = $getid3_id3v2->Analyze()) {
+                                               $atom_structure['id3v2'] = $getid3_temp->info['id3v2'];
+                                       } else {
+                                               $this->warning('ID32 frame at offset '.$atom_structure['offset'].' did not parse');
+                                       }
+                                       unset($getid3_temp, $getid3_id3v2);
+                                       break;
+
</ins><span class="cx" style="display: block; padding: 0 10px">                                 case 'free': // FREE space atom
</span><span class="cx" style="display: block; padding: 0 10px">                                case 'skip': // SKIP atom
</span><span class="cx" style="display: block; padding: 0 10px">                                case 'wide': // 64-bit expansion placeholder atom
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1700,7 +1724,8 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                        $atom_structure['language'] =                           substr($atom_data, 4 + 0, 2);
</span><span class="cx" style="display: block; padding: 0 10px">                                        $atom_structure['unknown']  = getid3_lib::BigEndian2Int(substr($atom_data, 4 + 2, 2));
</span><span class="cx" style="display: block; padding: 0 10px">                                        $atom_structure['data']     =                           substr($atom_data, 4 + 4);
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                        $atom_structure['key_name'] = @$info['quicktime']['temp_meta_key_names'][$metaDATAkey++];
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                 $atom_structure['key_name'] = (isset($info['quicktime']['temp_meta_key_names'][$metaDATAkey]) ? $info['quicktime']['temp_meta_key_names'][$metaDATAkey] : '');
+                                       $metaDATAkey++;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                        if ($atom_structure['key_name'] && $atom_structure['data']) {
</span><span class="cx" style="display: block; padding: 0 10px">                                                @$info['quicktime']['comments'][str_replace('com.apple.quicktime.', '', $atom_structure['key_name'])][] = $atom_structure['data'];
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2075,6 +2100,28 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                        $atom_structure['track_number'] = getid3_lib::BigEndian2Int($atom_data);
</span><span class="cx" style="display: block; padding: 0 10px">                                        break;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
+// AVIF-related - https://docs.rs/avif-parse/0.13.2/src/avif_parse/boxes.rs.html
+                               case 'pitm': // Primary ITeM
+                               case 'iloc': // Item LOCation
+                               case 'iinf': // Item INFo
+                               case 'iref': // Image REFerence
+                               case 'iprp': // Image PRoPerties
+$this->error('AVIF files not currently supported');
+                                       $atom_structure['data'] = $atom_data;
+                                       break;
+
+                               case 'tfdt': // Track Fragment base media Decode Time box
+                               case 'tfhd': // Track Fragment HeaDer box
+                               case 'mfhd': // Movie Fragment HeaDer box
+                               case 'trun': // Track fragment RUN box
+$this->error('fragmented mp4 files not currently supported');
+                                       $atom_structure['data'] = $atom_data;
+                                       break;
+
+                               case 'mvex': // MoVie EXtends box
+                               case 'pssh': // Protection System Specific Header box
+                               case 'sidx': // Segment InDeX box
</ins><span class="cx" style="display: block; padding: 0 10px">                                 default:
</span><span class="cx" style="display: block; padding: 0 10px">                                        $this->warning('Unknown QuickTime atom type: "'.preg_replace('#[^a-zA-Z0-9 _\\-]#', '?', $atomname).'" ('.trim(getid3_lib::PrintHexBytes($atomname)).'), '.$atomsize.' bytes at offset '.$baseoffset);
</span><span class="cx" style="display: block; padding: 0 10px">                                        $atom_structure['data'] = $atom_data;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2323,6 +2370,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        $QuicktimeVideoCodecLookup['gif '] = 'GIF';
</span><span class="cx" style="display: block; padding: 0 10px">                        $QuicktimeVideoCodecLookup['h261'] = 'H261';
</span><span class="cx" style="display: block; padding: 0 10px">                        $QuicktimeVideoCodecLookup['h263'] = 'H263';
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                        $QuicktimeVideoCodecLookup['hvc1'] = 'H.265/HEVC';
</ins><span class="cx" style="display: block; padding: 0 10px">                         $QuicktimeVideoCodecLookup['IV41'] = 'Indeo4';
</span><span class="cx" style="display: block; padding: 0 10px">                        $QuicktimeVideoCodecLookup['jpeg'] = 'JPEG';
</span><span class="cx" style="display: block; padding: 0 10px">                        $QuicktimeVideoCodecLookup['kpcd'] = 'PhotoCD';
</span></span></pre></div>
<a id="trunksrcwpincludesID3moduleaudiovideoriffphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/ID3/module.audio-video.riff.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/ID3/module.audio-video.riff.php     2022-10-04 01:50:33 UTC (rev 54375)
+++ trunk/src/wp-includes/ID3/module.audio-video.riff.php       2022-10-04 02:06:29 UTC (rev 54376)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -808,6 +808,9 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                                                if (isset($thisfile_riff['AVI ']['hdrl']['strl']['strf'][$i]['data'])) {
</span><span class="cx" style="display: block; padding: 0 10px">                                                                        $strfData = $thisfile_riff['AVI ']['hdrl']['strl']['strf'][$i]['data'];
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                                                        if (!isset($thisfile_riff_raw['strf'][$strhfccType][$streamindex])) {
+                                                                               $thisfile_riff_raw['strf'][$strhfccType][$streamindex] = null;
+                                                                       }
</ins><span class="cx" style="display: block; padding: 0 10px">                                                                         // shortcut
</span><span class="cx" style="display: block; padding: 0 10px">                                                                        $thisfile_riff_raw_strf_strhfccType_streamindex = &$thisfile_riff_raw['strf'][$strhfccType][$streamindex];
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1353,10 +1356,10 @@
</span><span class="cx" style="display: block; padding: 0 10px">                if (!isset($info['playtime_seconds'])) {
</span><span class="cx" style="display: block; padding: 0 10px">                        $info['playtime_seconds'] = 0;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                if (isset($thisfile_riff_raw['strh'][0]['dwLength']) && isset($thisfile_riff_raw['avih']['dwMicroSecPerFrame'])) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         if (isset($thisfile_riff_raw['strh'][0]['dwLength']) && isset($thisfile_riff_raw['avih']['dwMicroSecPerFrame'])) { // @phpstan-ignore-line
</ins><span class="cx" style="display: block; padding: 0 10px">                         // needed for >2GB AVIs where 'avih' chunk only lists number of frames in that chunk, not entire movie
</span><span class="cx" style="display: block; padding: 0 10px">                        $info['playtime_seconds'] = $thisfile_riff_raw['strh'][0]['dwLength'] * ($thisfile_riff_raw['avih']['dwMicroSecPerFrame'] / 1000000);
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                } elseif (isset($thisfile_riff_raw['avih']['dwTotalFrames']) && isset($thisfile_riff_raw['avih']['dwMicroSecPerFrame'])) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         } elseif (isset($thisfile_riff_raw['avih']['dwTotalFrames']) && isset($thisfile_riff_raw['avih']['dwMicroSecPerFrame'])) { // @phpstan-ignore-line
</ins><span class="cx" style="display: block; padding: 0 10px">                         $info['playtime_seconds'] = $thisfile_riff_raw['avih']['dwTotalFrames'] * ($thisfile_riff_raw['avih']['dwMicroSecPerFrame'] / 1000000);
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1579,7 +1582,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">        public function ParseRIFF($startoffset, $maxoffset) {
</span><span class="cx" style="display: block; padding: 0 10px">                $info = &$this->getid3->info;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                $RIFFchunk = false;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         $RIFFchunk = array();
</ins><span class="cx" style="display: block; padding: 0 10px">                 $FoundAllChunksWeNeed = false;
</span><span class="cx" style="display: block; padding: 0 10px">                $LISTchunkParent = null;
</span><span class="cx" style="display: block; padding: 0 10px">                $LISTchunkMaxOffset = null;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1934,7 +1937,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                return $RIFFchunk;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         return !empty($RIFFchunk) ? $RIFFchunk : false;
</ins><span class="cx" style="display: block; padding: 0 10px">         }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        /**
</span></span></pre></div>
<a id="trunksrcwpincludesID3moduleaudiomp3php"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/ID3/module.audio.mp3.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/ID3/module.audio.mp3.php    2022-10-04 01:50:33 UTC (rev 54375)
+++ trunk/src/wp-includes/ID3/module.audio.mp3.php      2022-10-04 02:06:29 UTC (rev 54376)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -315,6 +315,10 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        $encoder_options .= ' -b'.$thisfile_mpeg_audio_lame['bitrate_min'];
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                if (isset($thisfile_mpeg_audio['bitrate']) && $thisfile_mpeg_audio['bitrate'] === 'free') {
+                       $encoder_options .= ' --freeformat';
+               }
+
</ins><span class="cx" style="display: block; padding: 0 10px">                 if (!empty($thisfile_mpeg_audio_lame['encoding_flags']['nogap_prev']) || !empty($thisfile_mpeg_audio_lame['encoding_flags']['nogap_next'])) {
</span><span class="cx" style="display: block; padding: 0 10px">                        $encoder_options .= ' --nogap';
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -750,7 +754,8 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                                        unset($thisfile_mpeg_audio_lame['long_version']);
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                                        // It the LAME tag was only introduced in LAME v3.90
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                                        // http://www.hydrogenaudio.org/?act=ST&f=15&t=9933
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                                 // https://wiki.hydrogenaud.io/index.php/LAME#VBR_header_and_LAME_tag
+                                                       // https://hydrogenaud.io/index.php?topic=9933
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                                        // Offsets of various bytes in http://gabriel.mp3-tech.org/mp3infotag.html
</span><span class="cx" style="display: block; padding: 0 10px">                                                        // are assuming a 'Xing' identifier offset of 0x24, which is the case for
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -786,7 +791,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                                        $thisfile_mpeg_audio_lame['lowpass_frequency'] = getid3_lib::BigEndian2Int(substr($headerstring, $LAMEtagOffsetContant + 0xA6, 1)) * 100;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                                        // bytes $A7-$AE  Replay Gain
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                                        // http://privatewww.essex.ac.uk/~djmrob/replaygain/rg_data_format.html
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                                 // https://web.archive.org/web/20021015212753/http://privatewww.essex.ac.uk/~djmrob/replaygain/rg_data_format.html
</ins><span class="cx" style="display: block; padding: 0 10px">                                                         // bytes $A7-$AA : 32 bit floating point "Peak signal amplitude"
</span><span class="cx" style="display: block; padding: 0 10px">                                                        if ($thisfile_mpeg_audio_lame['short_version'] >= 'LAME3.94b') {
</span><span class="cx" style="display: block; padding: 0 10px">                                                                // LAME 3.94a16 and later - 9.23 fixed point
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -914,7 +919,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                                        // LAME CBR
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                                        if ($thisfile_mpeg_audio_lame_raw['vbr_method'] == 1) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                                 if ($thisfile_mpeg_audio_lame_raw['vbr_method'] == 1 && $thisfile_mpeg_audio['bitrate'] !== 'free') {
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                                                $thisfile_mpeg_audio['bitrate_mode'] = 'cbr';
</span><span class="cx" style="display: block; padding: 0 10px">                                                                $thisfile_mpeg_audio['bitrate'] = self::ClosestStandardMP3Bitrate($thisfile_mpeg_audio['bitrate']);
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1169,6 +1174,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        $nextframetestarray = array('error' => array(), 'warning' => array(), 'avdataend' => $info['avdataend'], 'avdataoffset'=>$info['avdataoffset']);
</span><span class="cx" style="display: block; padding: 0 10px">                        if ($this->decodeMPEGaudioHeader($nextframetestoffset, $nextframetestarray, false)) {
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                /** @phpstan-ignore-next-line */
</ins><span class="cx" style="display: block; padding: 0 10px">                                 getid3_lib::safe_inc($info['mp3_validity_check_bitrates'][$nextframetestarray['mpeg']['audio']['bitrate']]);
</span><span class="cx" style="display: block; padding: 0 10px">                                if ($ScanAsCBR) {
</span><span class="cx" style="display: block; padding: 0 10px">                                        // force CBR mode, used for trying to pick out invalid audio streams with valid(?) VBR headers, or VBR streams with no VBR header
</span></span></pre></div>
<a id="trunksrcwpincludesID3moduleaudiooggphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/ID3/module.audio.ogg.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/ID3/module.audio.ogg.php    2022-10-04 01:50:33 UTC (rev 54375)
+++ trunk/src/wp-includes/ID3/module.audio.ogg.php      2022-10-04 02:06:29 UTC (rev 54376)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -186,7 +186,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        if ($info['ogg']['pageheader']['theora']['pixel_aspect_denominator'] > 0) {
</span><span class="cx" style="display: block; padding: 0 10px">                                $info['video']['pixel_aspect_ratio'] = (float) $info['ogg']['pageheader']['theora']['pixel_aspect_numerator'] / $info['ogg']['pageheader']['theora']['pixel_aspect_denominator'];
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        $this->warning('Ogg Theora (v3) not fully supported in this version of getID3 ['.$this->getid3->version().'] -- bitrate, playtime and all audio data are currently unavailable');
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+$this->warning('Ogg Theora (v3) not fully supported in this version of getID3 ['.$this->getid3->version().'] -- bitrate, playtime and all audio data are currently unavailable');
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                } elseif (substr($filedata, 0, 8) == "fishead\x00") {
</span></span></pre></div>
<a id="trunksrcwpincludesID3moduletagid3v2php"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/ID3/module.tag.id3v2.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/ID3/module.tag.id3v2.php    2022-10-04 01:50:33 UTC (rev 54375)
+++ trunk/src/wp-includes/ID3/module.tag.id3v2.php      2022-10-04 02:06:29 UTC (rev 54376)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2064,7 +2064,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                                        $parsedFrame['subframes'][] = $subframe;
</span><span class="cx" style="display: block; padding: 0 10px">                                                        break;
</span><span class="cx" style="display: block; padding: 0 10px">                                                case 'WXXX':
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                                        list($subframe['chapter_url_description'], $subframe['chapter_url']) = explode("\x00", $encoding_converted_text, 2);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                                 @list($subframe['chapter_url_description'], $subframe['chapter_url']) = explode("\x00", $encoding_converted_text, 2);
</ins><span class="cx" style="display: block; padding: 0 10px">                                                         $parsedFrame['chapter_url'][$subframe['chapter_url_description']] = $subframe['chapter_url'];
</span><span class="cx" style="display: block; padding: 0 10px">                                                        $parsedFrame['subframes'][] = $subframe;
</span><span class="cx" style="display: block; padding: 0 10px">                                                        break;
</span></span></pre>
</div>
</div>

</body>
</html>