<!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>[56975] trunk/src/wp-includes/ID3: External Libraries: Update getID3 to version 1.9.23.</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/56975">56975</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/56975","name":"Review Commit"}}</script></dd>
<dt style="float: left; width: 6em; font-weight: bold">Author</dt> <dd>SergeyBiryukov</dd>
<dt style="float: left; width: 6em; font-weight: bold">Date</dt> <dd>2023-10-20 13:27:56 +0000 (Fri, 20 Oct 2023)</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.23.

The latest version includes numerous bug fixes, a few new features, as well as various improvements for PHP 8.1 and PHP 8.2 support.

This commit also includes PHPCS adjustments previously made for a passing PHP Compatibility scan.

References:
* [https://github.com/JamesHeinrich/getID3/releases/tag/v1.9.23 getID3 1.9.23 release notes]
* [https://github.com/JamesHeinrich/getID3/compare/v1.9.22...v1.9.23 Full list of changes in getID3 1.9.23]

Follow-up to <a href="https://core.trac.wordpress.org/changeset/47601">[47601]</a>, <a href="https://core.trac.wordpress.org/changeset/48278">[48278]</a>, <a href="https://core.trac.wordpress.org/changeset/52254">[52254]</a>, <a href="https://core.trac.wordpress.org/changeset/54376">[54376]</a>.

Props jrf.
Fixes <a href="https://core.trac.wordpress.org/ticket/59683">#59683</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="#trunksrcwpincludesID3licensetxt">trunk/src/wp-includes/ID3/license.txt</a></li>
<li><a href="#trunksrcwpincludesID3moduleaudiovideoasfphp">trunk/src/wp-includes/ID3/module.audio-video.asf.php</a></li>
<li><a href="#trunksrcwpincludesID3moduleaudiovideomatroskaphp">trunk/src/wp-includes/ID3/module.audio-video.matroska.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="#trunksrcwpincludesID3moduletagapetagphp">trunk/src/wp-includes/ID3/module.tag.apetag.php</a></li>
<li><a href="#trunksrcwpincludesID3moduletagid3v1php">trunk/src/wp-includes/ID3/module.tag.id3v1.php</a></li>
<li><a href="#trunksrcwpincludesID3moduletagid3v2php">trunk/src/wp-includes/ID3/module.tag.id3v2.php</a></li>
<li><a href="#trunksrcwpincludesID3readmetxt">trunk/src/wp-includes/ID3/readme.txt</a></li>
</ul>

<h3>Removed Paths</h3>
<ul>
<li><a href="#trunksrcwpincludesID3licensecommercialtxt">trunk/src/wp-includes/ID3/license.commercial.txt</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  2023-10-19 19:07:13 UTC (rev 56974)
+++ trunk/src/wp-includes/ID3/getid3.lib.php    2023-10-20 13:27:56 UTC (rev 56975)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -121,7 +121,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">                // if integers are 64-bit - no other check required
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                if ($hasINT64 || (($num <= PHP_INT_MAX) && ($num >= PHP_INT_MIN))) { // phpcs:ignore PHPCompatibility.Constants.NewConstants.php_int_minFound
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         if ($hasINT64 || (($num <= PHP_INT_MAX) && ($num >= PHP_INT_MIN))) {
</ins><span class="cx" style="display: block; padding: 0 10px">                         return true;
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px">                return false;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -128,6 +128,18 @@
</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">+         * Perform a division, guarding against division by zero
+        *
+        * @param float|int $numerator
+        * @param float|int $denominator
+        * @param float|int $fallback
+        * @return float|int
+        */
+       public static function SafeDiv($numerator, $denominator, $fallback = 0) {
+               return $denominator ? $numerator / $denominator : $fallback;
+       }
+
+       /**
</ins><span class="cx" style="display: block; padding: 0 10px">          * @param string $fraction
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @return float
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -134,7 +146,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><span class="cx" style="display: block; padding: 0 10px">        public static function DecimalizeFraction($fraction) {
</span><span class="cx" style="display: block; padding: 0 10px">                list($numerator, $denominator) = explode('/', $fraction);
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                return $numerator / ($denominator ? $denominator : 1);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         return (int) $numerator / ($denominator ? $denominator : 1);
</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 class="lines" style="display: block; padding: 0 10px; color: #888">@@ -871,10 +883,6 @@
</span><span class="cx" style="display: block; padding: 0 10px">         * @return string
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><span class="cx" style="display: block; padding: 0 10px">        public static function iconv_fallback_iso88591_utf8($string, $bom=false) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                if (function_exists('utf8_encode')) {
-                       return utf8_encode($string);
-               }
-               // utf8_encode() unavailable, use getID3()'s iconv_fallback() conversions (possibly PHP is compiled without XML support)
</del><span class="cx" style="display: block; padding: 0 10px">                 $newcharstring = '';
</span><span class="cx" style="display: block; padding: 0 10px">                if ($bom) {
</span><span class="cx" style="display: block; padding: 0 10px">                        $newcharstring .= "\xEF\xBB\xBF";
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -943,10 +951,6 @@
</span><span class="cx" style="display: block; padding: 0 10px">         * @return string
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><span class="cx" style="display: block; padding: 0 10px">        public static function iconv_fallback_utf8_iso88591($string) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                if (function_exists('utf8_decode')) {
-                       return utf8_decode($string);
-               }
-               // utf8_decode() unavailable, use getID3()'s iconv_fallback() conversions (possibly PHP is compiled without XML support)
</del><span class="cx" style="display: block; padding: 0 10px">                 $newcharstring = '';
</span><span class="cx" style="display: block; padding: 0 10px">                $offset = 0;
</span><span class="cx" style="display: block; padding: 0 10px">                $stringlength = strlen($string);
</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      2023-10-19 19:07:13 UTC (rev 56974)
+++ trunk/src/wp-includes/ID3/getid3.php        2023-10-20 13:27:56 UTC (rev 56975)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -387,7 +387,7 @@
</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.22-202207161647';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ const VERSION           = '1.9.23-202310190849';
</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="lines" style="display: block; padding: 0 10px; color: #888">@@ -438,12 +438,12 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        $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";
</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">-                // check for magic quotes in PHP < 7.4.0 (when these functions became deprecated)
-               if (version_compare(PHP_VERSION, '7.4.0', '<')) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         // check for magic quotes in PHP < 5.4.0 (when these options were removed and getters always return false)
+               if (version_compare(PHP_VERSION, '5.4.0', '<')) {
</ins><span class="cx" style="display: block; padding: 0 10px">                         // Check for magic_quotes_runtime
</span><span class="cx" style="display: block; padding: 0 10px">                        if (function_exists('get_magic_quotes_runtime')) {
</span><span class="cx" style="display: block; padding: 0 10px">                                // phpcs:ignore PHPCompatibility.FunctionUse.RemovedFunctions.get_magic_quotes_runtimeDeprecated
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                if (get_magic_quotes_runtime()) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         if (get_magic_quotes_runtime()) { // @phpstan-ignore-line
</ins><span class="cx" style="display: block; padding: 0 10px">                                         $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";
</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">@@ -450,7 +450,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        // Check for magic_quotes_gpc
</span><span class="cx" style="display: block; padding: 0 10px">                        if (function_exists('get_magic_quotes_gpc')) {
</span><span class="cx" style="display: block; padding: 0 10px">                                // phpcs:ignore PHPCompatibility.FunctionUse.RemovedFunctions.get_magic_quotes_gpcDeprecated
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                if (get_magic_quotes_gpc()) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         if (get_magic_quotes_gpc()) { // @phpstan-ignore-line
</ins><span class="cx" style="display: block; padding: 0 10px">                                         $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";
</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">@@ -1468,7 +1468,17 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                                        'fail_ape'  => 'ERROR',
</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">+                                // XZ   - data         - XZ compressed data
+                               '7zip'  => array(
+                                                       'pattern'   => '^7z\\xBC\\xAF\\x27\\x1C',
+                                                       'group'     => 'archive',
+                                                       'module'    => '7zip',
+                                                       'mime_type' => 'application/x-7z-compressed',
+                                                       'fail_id3'  => 'ERROR',
+                                                       'fail_ape'  => 'ERROR',
+                                               ),
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                                 // Misc other formats
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                // PAR2 - data        - Parity Volume Set Specification 2.0
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1982,7 +1992,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px">                $BitrateUncompressed = $this->info['video']['resolution_x'] * $this->info['video']['resolution_y'] * $this->info['video']['bits_per_sample'] * $FrameRate;
</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->info['video']['compression_ratio'] = $BitrateCompressed / $BitrateUncompressed;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         $this->info['video']['compression_ratio'] = getid3_lib::SafeDiv($BitrateCompressed, $BitrateUncompressed, 1);
</ins><span class="cx" style="display: block; padding: 0 10px">                 return true;
</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">@@ -2188,6 +2198,8 @@
</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">+         * @phpstan-impure
+        *
</ins><span class="cx" style="display: block; padding: 0 10px">          * @return int|bool
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><span class="cx" style="display: block; padding: 0 10px">        protected function ftell() {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2200,6 +2212,8 @@
</span><span class="cx" style="display: block; padding: 0 10px">        /**
</span><span class="cx" style="display: block; padding: 0 10px">         * @param int $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">+         * @phpstan-impure
+        *
</ins><span class="cx" style="display: block; padding: 0 10px">          * @return string|false
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @throws getid3_exception
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2245,6 +2259,8 @@
</span><span class="cx" style="display: block; padding: 0 10px">         * @param int $bytes
</span><span class="cx" style="display: block; padding: 0 10px">         * @param int $whence
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         * @phpstan-impure
+        *
</ins><span class="cx" style="display: block; padding: 0 10px">          * @return int
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @throws getid3_exception
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2286,6 +2302,8 @@
</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">+         * @phpstan-impure
+        *
</ins><span class="cx" style="display: block; padding: 0 10px">          * @return string|false
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><span class="cx" style="display: block; padding: 0 10px">         * @throws getid3_exception
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2341,6 +2359,8 @@
</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">+         * @phpstan-impure
+        *
</ins><span class="cx" style="display: block; padding: 0 10px">          * @return bool
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><span class="cx" style="display: block; padding: 0 10px">        protected function feof() {
</span></span></pre></div>
<a id="trunksrcwpincludesID3licensecommercialtxt"></a>
<div class="delfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Deleted: trunk/src/wp-includes/ID3/license.commercial.txt</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/ID3/license.commercial.txt  2023-10-19 19:07:13 UTC (rev 56974)
+++ trunk/src/wp-includes/ID3/license.commercial.txt    2023-10-20 13:27:56 UTC (rev 56975)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,27 +0,0 @@
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                  getID3() Commercial License
-                  ===========================
-
-getID3() is licensed under the "GNU Public License" (GPL) and/or the
-"getID3() Commercial License" (gCL). This document describes the gCL.
-
----------------------------------------------------------------------
-
-The license is non-exclusively granted to a single person or company,
-per payment of the license fee, for the lifetime of that person or
-company. The license is non-transferrable.
-
-The gCL grants the licensee the right to use getID3() in commercial
-closed-source projects. Modifications may be made to getID3() with no
-obligation to release the modified source code. getID3() (or pieces
-thereof) may be included in any number of projects authored (in whole
-or in part) by the licensee.
-
-The licensee may use any version of getID3(), past, present or future,
-as is most convenient. This license does not entitle the licensee to
-receive any technical support, updates or bugfixes, except as such are
-made publicly available to all getID3() users.
-
-The licensee may not sub-license getID3() itself, meaning that any
-commercially released product containing all or parts of getID3() must
-have added functionality beyond what is available in getID3();
-getID3() itself may not be re-licensed by the licensee.
</del></span></pre></div>
<a id="trunksrcwpincludesID3licensetxt"></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/license.txt</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/ID3/license.txt     2023-10-19 19:07:13 UTC (rev 56974)
+++ trunk/src/wp-includes/ID3/license.txt       2023-10-20 13:27:56 UTC (rev 56975)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -20,7 +20,8 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> Mozilla MPL: https://www.mozilla.org/MPL/2.0/                (v2)
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-getID3 Commercial License: https://www.getid3.org/#gCL (payment required)
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+getID3 Commercial License: https://www.getid3.org/#gCL
+(no longer available, existing licenses remain valid)
</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="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      2023-10-19 19:07:13 UTC (rev 56974)
+++ trunk/src/wp-includes/ID3/module.audio-video.asf.php        2023-10-20 13:27:56 UTC (rev 56975)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -193,7 +193,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                                $info['playtime_seconds'] = ($thisfile_asf_filepropertiesobject['play_duration'] / 10000000) - ($thisfile_asf_filepropertiesobject['preroll'] / 1000);
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                                //$info['bitrate'] = $thisfile_asf_filepropertiesobject['max_bitrate'];
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                                $info['bitrate'] = ((isset($thisfile_asf_filepropertiesobject['filesize']) ? $thisfile_asf_filepropertiesobject['filesize'] : $info['filesize']) * 8) / $info['playtime_seconds'];
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                         $info['bitrate'] = getid3_lib::SafeDiv($thisfile_asf_filepropertiesobject['filesize'] * 8, $info['playtime_seconds']);
</ins><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><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1066,7 +1066,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"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                                if (!empty($thisfile_asf['stream_bitrate_properties_object']['bitrate_records'])) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                         if (!empty($thisfile_asf['stream_bitrate_properties_object']['bitrate_records'])) { // @phpstan-ignore-line
</ins><span class="cx" style="display: block; padding: 0 10px">                                                         foreach ($thisfile_asf['stream_bitrate_properties_object']['bitrate_records'] as $dummy => $dataarray) {
</span><span class="cx" style="display: block; padding: 0 10px">                                                                if (isset($dataarray['flags']['stream_number']) && ($dataarray['flags']['stream_number'] == $streamnumber)) {
</span><span class="cx" style="display: block; padding: 0 10px">                                                                        $thisfile_asf_audiomedia_currentstream['bitrate'] = $dataarray['bitrate'];
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1152,7 +1152,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                                $videomediaoffset += 4;
</span><span class="cx" style="display: block; padding: 0 10px">                                                $thisfile_asf_videomedia_currentstream['format_data']['codec_data']       = substr($streamdata['type_specific_data'], $videomediaoffset);
</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($thisfile_asf['stream_bitrate_properties_object']['bitrate_records'])) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                         if (!empty($thisfile_asf['stream_bitrate_properties_object']['bitrate_records'])) { // @phpstan-ignore-line
</ins><span class="cx" style="display: block; padding: 0 10px">                                                         foreach ($thisfile_asf['stream_bitrate_properties_object']['bitrate_records'] as $dummy => $dataarray) {
</span><span class="cx" style="display: block; padding: 0 10px">                                                                if (isset($dataarray['flags']['stream_number']) && ($dataarray['flags']['stream_number'] == $streamnumber)) {
</span><span class="cx" style="display: block; padding: 0 10px">                                                                        $thisfile_asf_videomedia_currentstream['bitrate'] = $dataarray['bitrate'];
</span></span></pre></div>
<a id="trunksrcwpincludesID3moduleaudiovideomatroskaphp"></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.matroska.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.matroska.php 2023-10-19 19:07:13 UTC (rev 56974)
+++ trunk/src/wp-includes/ID3/module.audio-video.matroska.php   2023-10-20 13:27:56 UTC (rev 56975)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -292,12 +292,12 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                                $track_info['display_x']    = (isset($trackarray['DisplayWidth']) ? $trackarray['DisplayWidth'] : $trackarray['PixelWidth']);
</span><span class="cx" style="display: block; padding: 0 10px">                                                $track_info['display_y']    = (isset($trackarray['DisplayHeight']) ? $trackarray['DisplayHeight'] : $trackarray['PixelHeight']);
</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($trackarray['PixelCropBottom'])) { $track_info['crop_bottom'] = $trackarray['PixelCropBottom']; }
-                                               if (isset($trackarray['PixelCropTop']))    { $track_info['crop_top']    = $trackarray['PixelCropTop']; }
-                                               if (isset($trackarray['PixelCropLeft']))   { $track_info['crop_left']   = $trackarray['PixelCropLeft']; }
-                                               if (isset($trackarray['PixelCropRight']))  { $track_info['crop_right']  = $trackarray['PixelCropRight']; }
-                                               if (isset($trackarray['DefaultDuration'])) { $track_info['frame_rate']  = round(1000000000 / $trackarray['DefaultDuration'], 3); }
-                                               if (isset($trackarray['CodecName']))       { $track_info['codec']       = $trackarray['CodecName']; }
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                         if (isset($trackarray['PixelCropBottom']))  { $track_info['crop_bottom'] = $trackarray['PixelCropBottom']; }
+                                               if (isset($trackarray['PixelCropTop']))     { $track_info['crop_top']    = $trackarray['PixelCropTop']; }
+                                               if (isset($trackarray['PixelCropLeft']))    { $track_info['crop_left']   = $trackarray['PixelCropLeft']; }
+                                               if (isset($trackarray['PixelCropRight']))   { $track_info['crop_right']  = $trackarray['PixelCropRight']; }
+                                               if (!empty($trackarray['DefaultDuration'])) { $track_info['frame_rate']  = round(1000000000 / $trackarray['DefaultDuration'], 3); }
+                                               if (isset($trackarray['CodecName']))        { $track_info['codec']       = $trackarray['CodecName']; }
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                                switch ($trackarray['CodecID']) {
</span><span class="cx" style="display: block; padding: 0 10px">                                                        case 'V_MS/VFW/FOURCC':
</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        2023-10-19 19:07:13 UTC (rev 56974)
+++ trunk/src/wp-includes/ID3/module.audio-video.quicktime.php  2023-10-20 13:27:56 UTC (rev 56975)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -152,7 +152,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                        } elseif (strlen($lat_deg) == 4) {  // [+-]DDMM.M
</span><span class="cx" style="display: block; padding: 0 10px">                                                $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);
</span><span class="cx" style="display: block; padding: 0 10px">                                        } elseif (strlen($lat_deg) == 6) {  // [+-]DDMMSS.S
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                                $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);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                         $ISO6709parsed['latitude'] = (($lat_sign == '-') ? -1 : 1) * floatval(ltrim(substr($lat_deg, 0, 2), '0')) + floatval((int) ltrim(substr($lat_deg, 2, 2), '0') / 60) + floatval(ltrim(substr($lat_deg, 4, 2), '0').$lat_deg_dec / 3600);
</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 (strlen($lon_deg) == 3) {        // [+-]DDD.D
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -160,7 +160,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                        } elseif (strlen($lon_deg) == 5) {  // [+-]DDDMM.M
</span><span class="cx" style="display: block; padding: 0 10px">                                                $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);
</span><span class="cx" style="display: block; padding: 0 10px">                                        } elseif (strlen($lon_deg) == 7) {  // [+-]DDDMMSS.S
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                                $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);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                         $ISO6709parsed['longitude'] = (($lon_sign == '-') ? -1 : 1) * floatval(ltrim(substr($lon_deg, 0, 2), '0')) + floatval((int) ltrim(substr($lon_deg, 2, 2), '0') / 60) + floatval(ltrim(substr($lon_deg, 4, 2), '0').$lon_deg_dec / 3600);
</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 (strlen($alt_deg) == 3) {        // [+-]DDD.D
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -168,7 +168,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                        } elseif (strlen($alt_deg) == 5) {  // [+-]DDDMM.M
</span><span class="cx" style="display: block; padding: 0 10px">                                                $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);
</span><span class="cx" style="display: block; padding: 0 10px">                                        } elseif (strlen($alt_deg) == 7) {  // [+-]DDDMMSS.S
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                                $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);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                         $ISO6709parsed['altitude'] = (($alt_sign == '-') ? -1 : 1) * floatval(ltrim(substr($alt_deg, 0, 2), '0')) + floatval((int) ltrim(substr($alt_deg, 2, 2), '0') / 60) + floatval(ltrim(substr($alt_deg, 4, 2), '0').$alt_deg_dec / 3600);
</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">                                        foreach (array('latitude', 'longitude', 'altitude') as $key) {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -332,7 +332,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                                        }
</span><span class="cx" style="display: block; padding: 0 10px">                                                } elseif (isset($value_array['time_to_sample_table'])) {
</span><span class="cx" style="display: block; padding: 0 10px">                                                        foreach ($value_array['time_to_sample_table'] as $key2 => $value_array2) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                                                if (isset($value_array2['sample_count']) && isset($value_array2['sample_duration']) && ($value_array2['sample_duration'] > 0)) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                                         if (isset($value_array2['sample_count']) && isset($value_array2['sample_duration']) && ($value_array2['sample_duration'] > 0) && !empty($info['quicktime']['time_scale'])) {
</ins><span class="cx" style="display: block; padding: 0 10px">                                                                         $framerate  = round($info['quicktime']['time_scale'] / $value_array2['sample_duration'], 3);
</span><span class="cx" style="display: block; padding: 0 10px">                                                                        $framecount = $value_array2['sample_count'];
</span><span class="cx" style="display: block; padding: 0 10px">                                                                }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -776,8 +776,8 @@
</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">                                case 'stsd': // Sample Table Sample Description atom
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                        $atom_structure['version']        = getid3_lib::BigEndian2Int(substr($atom_data,  0, 1));
-                                       $atom_structure['flags_raw']      = getid3_lib::BigEndian2Int(substr($atom_data,  1, 3)); // hardcoded: 0x0000
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                 $atom_structure['version']        = getid3_lib::BigEndian2Int(substr($atom_data,  0, 1)); // hardcoded: 0x00
+                                       $atom_structure['flags_raw']      = getid3_lib::BigEndian2Int(substr($atom_data,  1, 3)); // hardcoded: 0x000000
</ins><span class="cx" style="display: block; padding: 0 10px">                                         $atom_structure['number_entries'] = getid3_lib::BigEndian2Int(substr($atom_data,  4, 4));
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                        // see: https://github.com/JamesHeinrich/getID3/issues/111
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -805,7 +805,6 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                                $stsdEntriesDataOffset += 2;
</span><span class="cx" style="display: block; padding: 0 10px">                                                $atom_structure['sample_description_table'][$i]['data']             =                           substr($atom_data, $stsdEntriesDataOffset, ($atom_structure['sample_description_table'][$i]['size'] - 4 - 4 - 6 - 2));
</span><span class="cx" style="display: block; padding: 0 10px">                                                $stsdEntriesDataOffset += ($atom_structure['sample_description_table'][$i]['size'] - 4 - 4 - 6 - 2);
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-
</del><span class="cx" style="display: block; padding: 0 10px">                                                 if (substr($atom_structure['sample_description_table'][$i]['data'],  1, 54) == 'application/octet-stream;type=com.parrot.videometadata') {
</span><span class="cx" style="display: block; padding: 0 10px">                                                        // special handling for apparently-malformed (TextMetaDataSampleEntry?) data for some version of Parrot drones
</span><span class="cx" style="display: block; padding: 0 10px">                                                        $atom_structure['sample_description_table'][$i]['parrot_frame_metadata']['mime_type']        =       substr($atom_structure['sample_description_table'][$i]['data'],  1, 55);
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -893,7 +892,8 @@
</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">                                                                        case 'mp4a':
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                                                        default:
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                                                         $atom_structure['sample_description_table'][$i]['subatoms'] = $this->QuicktimeParseContainerAtom(substr($atom_structure['sample_description_table'][$i]['data'], 20), $baseoffset + $stsdEntriesDataOffset - 20 - 16, $atomHierarchy, $ParseAllPossibleAtoms);
+
</ins><span class="cx" style="display: block; padding: 0 10px">                                                                                 $info['quicktime']['audio']['codec']       = $this->QuicktimeAudioCodecLookup($atom_structure['sample_description_table'][$i]['data_format']);
</span><span class="cx" style="display: block; padding: 0 10px">                                                                                $info['quicktime']['audio']['sample_rate'] = $atom_structure['sample_description_table'][$i]['audio_sample_rate'];
</span><span class="cx" style="display: block; padding: 0 10px">                                                                                $info['quicktime']['audio']['channels']    = $atom_structure['sample_description_table'][$i]['audio_channels'];
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -919,6 +919,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">                                                                                break;
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
+                                                                       default:
+                                                                               break;
</ins><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><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1666,7 +1669,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                                );
</span><span class="cx" style="display: block; padding: 0 10px">                                                $atom_structure['data'] = $atom_data;
</span><span class="cx" style="display: block; padding: 0 10px">                                                $atom_structure['image_mime'] = 'image/jpeg';
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                                $atom_structure['description'] = isset($descriptions[$atomname]) ? $descriptions[$atomname] : 'Nikon preview image';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                         $atom_structure['description'] = $descriptions[$atomname];
</ins><span class="cx" style="display: block; padding: 0 10px">                                                 $info['quicktime']['comments']['picture'][] = array(
</span><span class="cx" style="display: block; padding: 0 10px">                                                        'image_mime' => $atom_structure['image_mime'],
</span><span class="cx" style="display: block; padding: 0 10px">                                                        'data' => $atom_data,
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1683,7 +1686,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                case 'NCHD': // Nikon:MakerNoteVersion  - https://exiftool.org/TagNames/Nikon.html
</span><span class="cx" style="display: block; padding: 0 10px">                                        $makerNoteVersion = '';
</span><span class="cx" style="display: block; padding: 0 10px">                                        for ($i = 0, $iMax = strlen($atom_data); $i < $iMax; ++$i) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                                if (ord($atom_data[$i]) >= 0x00 && ord($atom_data[$i]) <= 0x1F) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                         if (ord($atom_data[$i]) <= 0x1F) {
</ins><span class="cx" style="display: block; padding: 0 10px">                                                         $makerNoteVersion .= ' '.ord($atom_data[$i]);
</span><span class="cx" style="display: block; padding: 0 10px">                                                } else {
</span><span class="cx" style="display: block; padding: 0 10px">                                                        $makerNoteVersion .= $atom_data[$i];
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2101,6 +2104,97 @@
</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"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                case 'esds': // Elementary Stream DeScriptor
+                                       // https://github.com/JamesHeinrich/getID3/issues/414
+                                       // https://chromium.googlesource.com/chromium/src/media/+/refs/heads/main/formats/mp4/es_descriptor.cc
+                                       // https://chromium.googlesource.com/chromium/src/media/+/refs/heads/main/formats/mp4/es_descriptor.h
+                                       $atom_structure['version']   = getid3_lib::BigEndian2Int(substr($atom_data,  0, 1)); // hardcoded: 0x00
+                                       $atom_structure['flags_raw'] = getid3_lib::BigEndian2Int(substr($atom_data,  1, 3)); // hardcoded: 0x000000
+                                       $esds_offset = 4;
+
+                                       $atom_structure['ES_DescrTag'] = getid3_lib::BigEndian2Int(substr($atom_data, $esds_offset, 1));
+                                       $esds_offset += 1;
+                                       if ($atom_structure['ES_DescrTag'] != 0x03) {
+                                               $this->warning('expecting esds.ES_DescrTag = 0x03, found 0x'.getid3_lib::PrintHexBytes($atom_structure['ES_DescrTag']).'), at offset '.$atom_structure['offset']);
+                                               break;
+                                       }
+                                       $atom_structure['ES_DescrSize'] = $this->quicktime_read_mp4_descr_length($atom_data, $esds_offset);
+
+                                       $atom_structure['ES_ID'] = getid3_lib::BigEndian2Int(substr($atom_data, $esds_offset, 2));
+                                       $esds_offset += 2;
+                                       $atom_structure['ES_flagsraw'] = getid3_lib::BigEndian2Int(substr($atom_data, $esds_offset, 1));
+                                       $esds_offset += 1;
+                                       $atom_structure['ES_flags']['stream_dependency'] = (bool) ($atom_structure['ES_flagsraw'] & 0x80);
+                                       $atom_structure['ES_flags']['url_flag']          = (bool) ($atom_structure['ES_flagsraw'] & 0x40);
+                                       $atom_structure['ES_flags']['ocr_stream']        = (bool) ($atom_structure['ES_flagsraw'] & 0x20);
+                                       $atom_structure['ES_stream_priority']            =        ($atom_structure['ES_flagsraw'] & 0x1F);
+                                       if ($atom_structure['ES_flags']['url_flag']) {
+                                               $this->warning('Unsupported esds.url_flag enabled at offset '.$atom_structure['offset']);
+                                               break;
+                                       }
+                                       if ($atom_structure['ES_flags']['stream_dependency']) {
+                                               $atom_structure['ES_dependsOn_ES_ID'] = getid3_lib::BigEndian2Int(substr($atom_data, $esds_offset, 2));
+                                               $esds_offset += 2;
+                                       }
+                                       if ($atom_structure['ES_flags']['ocr_stream']) {
+                                               $atom_structure['ES_OCR_ES_Id'] = getid3_lib::BigEndian2Int(substr($atom_data, $esds_offset, 2));
+                                               $esds_offset += 2;
+                                       }
+
+                                       $atom_structure['ES_DecoderConfigDescrTag'] = getid3_lib::BigEndian2Int(substr($atom_data, $esds_offset, 1));
+                                       $esds_offset += 1;
+                                       if ($atom_structure['ES_DecoderConfigDescrTag'] != 0x04) {
+                                               $this->warning('expecting esds.ES_DecoderConfigDescrTag = 0x04, found 0x'.getid3_lib::PrintHexBytes($atom_structure['ES_DecoderConfigDescrTag']).'), at offset '.$atom_structure['offset']);
+                                               break;
+                                       }
+                                       $atom_structure['ES_DecoderConfigDescrTagSize'] = $this->quicktime_read_mp4_descr_length($atom_data, $esds_offset);
+
+                                       $atom_structure['ES_objectTypeIndication'] = getid3_lib::BigEndian2Int(substr($atom_data, $esds_offset, 1));
+                                       $esds_offset += 1;
+                                       // https://stackoverflow.com/questions/3987850
+                                       // 0x40 = "Audio ISO/IEC 14496-3"                       = MPEG-4 Audio
+                                       // 0x67 = "Audio ISO/IEC 13818-7 LowComplexity Profile" = MPEG-2 AAC LC
+                                       // 0x69 = "Audio ISO/IEC 13818-3"                       = MPEG-2 Backward Compatible Audio (MPEG-2 Layers 1, 2, and 3)
+                                       // 0x6B = "Audio ISO/IEC 11172-3"                       = MPEG-1 Audio (MPEG-1 Layers 1, 2, and 3)
+
+                                       $streamTypePlusFlags = getid3_lib::BigEndian2Int(substr($atom_data, $esds_offset, 1));
+                                       $esds_offset += 1;
+                                       $atom_structure['ES_streamType'] =        ($streamTypePlusFlags & 0xFC) >> 2;
+                                       $atom_structure['ES_upStream']   = (bool) ($streamTypePlusFlags & 0x02) >> 1;
+                                       $atom_structure['ES_bufferSizeDB'] = getid3_lib::BigEndian2Int(substr($atom_data, $esds_offset, 3));
+                                       $esds_offset += 3;
+                                       $atom_structure['ES_maxBitrate'] = getid3_lib::BigEndian2Int(substr($atom_data, $esds_offset, 4));
+                                       $esds_offset += 4;
+                                       $atom_structure['ES_avgBitrate'] = getid3_lib::BigEndian2Int(substr($atom_data, $esds_offset, 4));
+                                       $esds_offset += 4;
+                                       if ($atom_structure['ES_avgBitrate']) {
+                                               $info['quicktime']['audio']['bitrate'] = $atom_structure['ES_avgBitrate'];
+                                               $info['audio']['bitrate']              = $atom_structure['ES_avgBitrate'];
+                                       }
+
+                                       $atom_structure['ES_DecSpecificInfoTag'] = getid3_lib::BigEndian2Int(substr($atom_data, $esds_offset, 1));
+                                       $esds_offset += 1;
+                                       if ($atom_structure['ES_DecSpecificInfoTag'] != 0x05) {
+                                               $this->warning('expecting esds.ES_DecSpecificInfoTag = 0x05, found 0x'.getid3_lib::PrintHexBytes($atom_structure['ES_DecSpecificInfoTag']).'), at offset '.$atom_structure['offset']);
+                                               break;
+                                       }
+                                       $atom_structure['ES_DecSpecificInfoTagSize'] = $this->quicktime_read_mp4_descr_length($atom_data, $esds_offset);
+
+                                       $atom_structure['ES_DecSpecificInfo'] = getid3_lib::BigEndian2Int(substr($atom_data, $esds_offset, $atom_structure['ES_DecSpecificInfoTagSize']));
+                                       $esds_offset += $atom_structure['ES_DecSpecificInfoTagSize'];
+
+                                       $atom_structure['ES_SLConfigDescrTag'] = getid3_lib::BigEndian2Int(substr($atom_data, $esds_offset, 1));
+                                       $esds_offset += 1;
+                                       if ($atom_structure['ES_SLConfigDescrTag'] != 0x06) {
+                                               $this->warning('expecting esds.ES_SLConfigDescrTag = 0x05, found 0x'.getid3_lib::PrintHexBytes($atom_structure['ES_SLConfigDescrTag']).'), at offset '.$atom_structure['offset']);
+                                               break;
+                                       }
+                                       $atom_structure['ES_SLConfigDescrTagSize'] = $this->quicktime_read_mp4_descr_length($atom_data, $esds_offset);
+
+                                       $atom_structure['ES_SLConfigDescr'] = getid3_lib::BigEndian2Int(substr($atom_data, $esds_offset, $atom_structure['ES_SLConfigDescrTagSize']));
+                                       $esds_offset += $atom_structure['ES_SLConfigDescrTagSize'];
+                                       break;
+
</ins><span class="cx" style="display: block; padding: 0 10px"> // AVIF-related - https://docs.rs/avif-parse/0.13.2/src/avif_parse/boxes.rs.html
</span><span class="cx" style="display: block; padding: 0 10px">                                case 'pitm': // Primary ITeM
</span><span class="cx" style="display: block; padding: 0 10px">                                case 'iloc': // Item LOCation
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2991,6 +3085,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"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">         /**
</span><span class="cx" style="display: block; padding: 0 10px">         * @param array $info
</span><span class="cx" style="display: block; padding: 0 10px">         *
</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     2023-10-19 19:07:13 UTC (rev 56974)
+++ trunk/src/wp-includes/ID3/module.audio-video.riff.php       2023-10-20 13:27:56 UTC (rev 56975)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -214,7 +214,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                        $thisfile_audio['bitrate'] = $thisfile_riff_audio[$streamindex]['bitrate'];
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                        if (empty($info['playtime_seconds'])) { // may already be set (e.g. DTS-WAV)
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                                $info['playtime_seconds'] = (float) ((($info['avdataend'] - $info['avdataoffset']) * 8) / $thisfile_audio['bitrate']);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                         $info['playtime_seconds'] =  (float)getid3_lib::SafeDiv(($info['avdataend'] - $info['avdataoffset']) * 8, $thisfile_audio['bitrate']);
</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">                                        $thisfile_audio['lossless'] = false;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -440,11 +440,11 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                                $thisfile_riff_WAVE['iXML'][0]['parsed'] = $parsedXML;
</span><span class="cx" style="display: block; padding: 0 10px">                                                if (isset($parsedXML['SPEED']['MASTER_SPEED'])) {
</span><span class="cx" style="display: block; padding: 0 10px">                                                        @list($numerator, $denominator) = explode('/', $parsedXML['SPEED']['MASTER_SPEED']);
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                                        $thisfile_riff_WAVE['iXML'][0]['master_speed'] = $numerator / ($denominator ? $denominator : 1000);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                                 $thisfile_riff_WAVE['iXML'][0]['master_speed'] = (int) $numerator / ($denominator ? $denominator : 1000);
</ins><span class="cx" style="display: block; padding: 0 10px">                                                 }
</span><span class="cx" style="display: block; padding: 0 10px">                                                if (isset($parsedXML['SPEED']['TIMECODE_RATE'])) {
</span><span class="cx" style="display: block; padding: 0 10px">                                                        @list($numerator, $denominator) = explode('/', $parsedXML['SPEED']['TIMECODE_RATE']);
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                                        $thisfile_riff_WAVE['iXML'][0]['timecode_rate'] = $numerator / ($denominator ? $denominator : 1000);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                                 $thisfile_riff_WAVE['iXML'][0]['timecode_rate'] = (int) $numerator / ($denominator ? $denominator : 1000);
</ins><span class="cx" style="display: block; padding: 0 10px">                                                 }
</span><span class="cx" style="display: block; padding: 0 10px">                                                if (isset($parsedXML['SPEED']['TIMESTAMP_SAMPLES_SINCE_MIDNIGHT_LO']) && !empty($parsedXML['SPEED']['TIMESTAMP_SAMPLE_RATE']) && !empty($thisfile_riff_WAVE['iXML'][0]['timecode_rate'])) {
</span><span class="cx" style="display: block; padding: 0 10px">                                                        $samples_since_midnight = floatval(ltrim($parsedXML['SPEED']['TIMESTAMP_SAMPLES_SINCE_MIDNIGHT_HI'].$parsedXML['SPEED']['TIMESTAMP_SAMPLES_SINCE_MIDNIGHT_LO'], '0'));
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -521,7 +521,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                if (!isset($thisfile_audio['bitrate']) && isset($thisfile_riff_audio[$streamindex]['bitrate'])) {
</span><span class="cx" style="display: block; padding: 0 10px">                                        $thisfile_audio['bitrate'] = $thisfile_riff_audio[$streamindex]['bitrate'];
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                        $info['playtime_seconds'] = (float) ((($info['avdataend'] - $info['avdataoffset']) * 8) / $thisfile_audio['bitrate']);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                 $info['playtime_seconds'] = (float)getid3_lib::SafeDiv((($info['avdataend'] - $info['avdataoffset']) * 8), $thisfile_audio['bitrate']);
</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 (!empty($info['wavpack'])) {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -531,7 +531,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                        // Reset to the way it was - RIFF parsing will have messed this up
</span><span class="cx" style="display: block; padding: 0 10px">                                        $info['avdataend']        = $Original['avdataend'];
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                        $thisfile_audio['bitrate'] = (($info['avdataend'] - $info['avdataoffset']) * 8) / $info['playtime_seconds'];
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                 $thisfile_audio['bitrate'] = getid3_lib::SafeDiv(($info['avdataend'] - $info['avdataoffset']) * 8, $info['playtime_seconds']);
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                        $this->fseek($info['avdataoffset'] - 44);
</span><span class="cx" style="display: block; padding: 0 10px">                                        $RIFFdata = $this->fread(44);
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -632,7 +632,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">                                if ($info['avdataend'] > $info['filesize']) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                        switch (!empty($thisfile_audio_dataformat) ? $thisfile_audio_dataformat : '') {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                 switch ($thisfile_audio_dataformat) {
</ins><span class="cx" style="display: block; padding: 0 10px">                                                 case 'wavpack': // WavPack
</span><span class="cx" style="display: block; padding: 0 10px">                                                case 'lpac':    // LPAC
</span><span class="cx" style="display: block; padding: 0 10px">                                                case 'ofr':     // OptimFROG
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -672,7 +672,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                                $this->warning('Extra null byte at end of MP3 data assumed to be RIFF padding and therefore ignored');
</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 (isset($thisfile_audio_dataformat) && ($thisfile_audio_dataformat == 'ac3')) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         if ($thisfile_audio_dataformat == 'ac3') {
</ins><span class="cx" style="display: block; padding: 0 10px">                                         unset($thisfile_audio['bits_per_sample']);
</span><span class="cx" style="display: block; padding: 0 10px">                                        if (!empty($info['ac3']['bitrate']) && ($info['ac3']['bitrate'] != $thisfile_audio['bitrate'])) {
</span><span class="cx" style="display: block; padding: 0 10px">                                                $thisfile_audio['bitrate'] = $info['ac3']['bitrate'];
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -781,15 +781,15 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                        /** @var array $thisfile_riff_video_current */
</span><span class="cx" style="display: block; padding: 0 10px">                                        $thisfile_riff_video_current = &$thisfile_riff_video[$streamindex];
</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 ($thisfile_riff_raw_avih['dwWidth'] > 0) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                 if ($thisfile_riff_raw_avih['dwWidth'] > 0) { // @phpstan-ignore-line
</ins><span class="cx" style="display: block; padding: 0 10px">                                                 $thisfile_riff_video_current['frame_width'] = $thisfile_riff_raw_avih['dwWidth'];
</span><span class="cx" style="display: block; padding: 0 10px">                                                $thisfile_video['resolution_x']             = $thisfile_riff_video_current['frame_width'];
</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 ($thisfile_riff_raw_avih['dwHeight'] > 0) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                 if ($thisfile_riff_raw_avih['dwHeight'] > 0) { // @phpstan-ignore-line
</ins><span class="cx" style="display: block; padding: 0 10px">                                                 $thisfile_riff_video_current['frame_height'] = $thisfile_riff_raw_avih['dwHeight'];
</span><span class="cx" style="display: block; padding: 0 10px">                                                $thisfile_video['resolution_y']              = $thisfile_riff_video_current['frame_height'];
</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 ($thisfile_riff_raw_avih['dwTotalFrames'] > 0) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                 if ($thisfile_riff_raw_avih['dwTotalFrames'] > 0) { // @phpstan-ignore-line
</ins><span class="cx" style="display: block; padding: 0 10px">                                                 $thisfile_riff_video_current['total_frames'] = $thisfile_riff_raw_avih['dwTotalFrames'];
</span><span class="cx" style="display: block; padding: 0 10px">                                                $thisfile_video['total_frames']              = $thisfile_riff_video_current['total_frames'];
</span><span class="cx" style="display: block; padding: 0 10px">                                        }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1913,7 +1913,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                                                        if (isset($RIFFchunk[$chunkname][$thisindex]) && empty($RIFFchunk[$chunkname][$thisindex])) {
</span><span class="cx" style="display: block; padding: 0 10px">                                                                                unset($RIFFchunk[$chunkname][$thisindex]);
</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($RIFFchunk[$chunkname]) && empty($RIFFchunk[$chunkname])) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                                                 if (count($RIFFchunk[$chunkname]) === 0) {
</ins><span class="cx" style="display: block; padding: 0 10px">                                                                                 unset($RIFFchunk[$chunkname]);
</span><span class="cx" style="display: block; padding: 0 10px">                                                                        }
</span><span class="cx" style="display: block; padding: 0 10px">                                                                        $RIFFchunk[$LISTchunkParent][$chunkname][$thisindex]['data'] = $this->fread($chunksize);
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2034,7 +2034,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                foreach ($RIFFinfoKeyLookup as $key => $value) {
</span><span class="cx" style="display: block; padding: 0 10px">                        if (isset($RIFFinfoArray[$key])) {
</span><span class="cx" style="display: block; padding: 0 10px">                                foreach ($RIFFinfoArray[$key] as $commentid => $commentdata) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                        if (trim($commentdata['data']) != '') {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                 if (!empty($commentdata['data']) && trim($commentdata['data']) != '') {
</ins><span class="cx" style="display: block; padding: 0 10px">                                                 if (isset($CommentsTargetArray[$value])) {
</span><span class="cx" style="display: block; padding: 0 10px">                                                        $CommentsTargetArray[$value][] =     trim($commentdata['data']);
</span><span class="cx" style="display: block; padding: 0 10px">                                                } else {
</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    2023-10-19 19:07:13 UTC (rev 56974)
+++ trunk/src/wp-includes/ID3/module.audio.mp3.php      2023-10-20 13:27:56 UTC (rev 56975)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1380,11 +1380,11 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                                        $Distribution['padding'][intval($LongMPEGpaddingLookup[$head4])] = isset($Distribution['padding'][intval($LongMPEGpaddingLookup[$head4])]) ? ++$Distribution['padding'][intval($LongMPEGpaddingLookup[$head4])] : 1;
</span><span class="cx" style="display: block; padding: 0 10px">                                                        $Distribution['frequency'][$LongMPEGfrequencyLookup[$head4]] = isset($Distribution['frequency'][$LongMPEGfrequencyLookup[$head4]]) ? ++$Distribution['frequency'][$LongMPEGfrequencyLookup[$head4]] : 1;
</span><span class="cx" style="display: block; padding: 0 10px">                                                        if (++$frames_scanned >= $max_frames_scan) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                                                $pct_data_scanned = ($this->ftell() - $info['avdataoffset']) / ($info['avdataend'] - $info['avdataoffset']);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                                         $pct_data_scanned = getid3_lib::SafeDiv($this->ftell() - $info['avdataoffset'], $info['avdataend'] - $info['avdataoffset']);
</ins><span class="cx" style="display: block; padding: 0 10px">                                                                 $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.');
</span><span class="cx" style="display: block; padding: 0 10px">                                                                foreach ($Distribution as $key1 => $value1) {
</span><span class="cx" style="display: block; padding: 0 10px">                                                                        foreach ($value1 as $key2 => $value2) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                                                                $Distribution[$key1][$key2] = round($value2 / $pct_data_scanned);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                                                         $Distribution[$key1][$key2] = $pct_data_scanned ? round($value2 / $pct_data_scanned) : 1;
</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">                                                                break;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1475,7 +1475,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                $SyncSeekAttemptsMax = 1000;
</span><span class="cx" style="display: block; padding: 0 10px">                $FirstFrameThisfileInfo = null;
</span><span class="cx" style="display: block; padding: 0 10px">                while ($SynchSeekOffset < $sync_seek_buffer_size) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        if ((($avdataoffset + $SynchSeekOffset)  < $info['avdataend']) && !feof($this->getid3->fp)) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 if ((($avdataoffset + $SynchSeekOffset)  < $info['avdataend']) && !$this->feof()) {
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                if ($SynchSeekOffset > $sync_seek_buffer_size) {
</span><span class="cx" style="display: block; padding: 0 10px">                                        // if a synch's not found within the first 128k bytes, then give up
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1490,20 +1490,6 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                                unset($info['mpeg']);
</span><span class="cx" style="display: block; padding: 0 10px">                                        }
</span><span class="cx" style="display: block; padding: 0 10px">                                        return false;
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-
-                               } elseif (feof($this->getid3->fp)) {
-
-                                       $this->error('Could not find valid MPEG audio synch before end of file');
-                                       if (isset($info['audio']['bitrate'])) {
-                                               unset($info['audio']['bitrate']);
-                                       }
-                                       if (isset($info['mpeg']['audio'])) {
-                                               unset($info['mpeg']['audio']);
-                                       }
-                                       if (isset($info['mpeg']) && (!is_array($info['mpeg']) || (count($info['mpeg']) == 0))) {
-                                               unset($info['mpeg']);
-                                       }
-                                       return false;
</del><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 class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1652,7 +1638,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                                                }
</span><span class="cx" style="display: block; padding: 0 10px">                                                                $frames_scanned++;
</span><span class="cx" style="display: block; padding: 0 10px">                                                                if ($frames_scan_per_segment && (++$frames_scanned_this_segment >= $frames_scan_per_segment)) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                                                        $this_pct_scanned = ($this->ftell() - $scan_start_offset[$current_segment]) / ($info['avdataend'] - $info['avdataoffset']);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                                                 $this_pct_scanned = getid3_lib::SafeDiv($this->ftell() - $scan_start_offset[$current_segment], $info['avdataend'] - $info['avdataoffset']);
</ins><span class="cx" style="display: block; padding: 0 10px">                                                                         if (($current_segment == 0) && (($this_pct_scanned * $max_scan_segments) >= 1)) {
</span><span class="cx" style="display: block; padding: 0 10px">                                                                                // file likely contains < $max_frames_scan, just scan as one segment
</span><span class="cx" style="display: block; padding: 0 10px">                                                                                $max_scan_segments = 1;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1743,6 +1729,10 @@
</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">                $info['audio']['channels']        = $info['mpeg']['audio']['channels'];
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                if ($info['audio']['channels'] < 1) {
+                       $this->error('Corrupt MP3 file: no channels');
+                       return false;
+               }
</ins><span class="cx" style="display: block; padding: 0 10px">                 $info['audio']['channelmode']     = $info['mpeg']['audio']['channelmode'];
</span><span class="cx" style="display: block; padding: 0 10px">                $info['audio']['sample_rate']     = $info['mpeg']['audio']['sample_rate'];
</span><span class="cx" style="display: block; padding: 0 10px">                return true;
</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    2023-10-19 19:07:13 UTC (rev 56974)
+++ trunk/src/wp-includes/ID3/module.audio.ogg.php      2023-10-20 13:27:56 UTC (rev 56975)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -210,8 +210,8 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        $filedataoffset += 20;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        $info['ogg']['skeleton']['fishead']['version']          = $info['ogg']['skeleton']['fishead']['raw']['version_major'].'.'.$info['ogg']['skeleton']['fishead']['raw']['version_minor'];
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        $info['ogg']['skeleton']['fishead']['presentationtime'] = $info['ogg']['skeleton']['fishead']['raw']['presentationtime_numerator'] / $info['ogg']['skeleton']['fishead']['raw']['presentationtime_denominator'];
-                       $info['ogg']['skeleton']['fishead']['basetime']         = $info['ogg']['skeleton']['fishead']['raw']['basetime_numerator']         / $info['ogg']['skeleton']['fishead']['raw']['basetime_denominator'];
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 $info['ogg']['skeleton']['fishead']['presentationtime'] = getid3_lib::SafeDiv($info['ogg']['skeleton']['fishead']['raw']['presentationtime_numerator'], $info['ogg']['skeleton']['fishead']['raw']['presentationtime_denominator']);
+                       $info['ogg']['skeleton']['fishead']['basetime']         = getid3_lib::SafeDiv($info['ogg']['skeleton']['fishead']['raw']['basetime_numerator'],         $info['ogg']['skeleton']['fishead']['raw']['basetime_denominator']);
</ins><span class="cx" style="display: block; padding: 0 10px">                         $info['ogg']['skeleton']['fishead']['utc']              = $info['ogg']['skeleton']['fishead']['raw']['utc'];
</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">@@ -288,7 +288,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                $info['audio']['sample_rate']     = $info['flac']['STREAMINFO']['sample_rate'];
</span><span class="cx" style="display: block; padding: 0 10px">                                $info['audio']['channels']        = $info['flac']['STREAMINFO']['channels'];
</span><span class="cx" style="display: block; padding: 0 10px">                                $info['audio']['bits_per_sample'] = $info['flac']['STREAMINFO']['bits_per_sample'];
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                $info['playtime_seconds']         = $info['flac']['STREAMINFO']['samples_stream'] / $info['flac']['STREAMINFO']['sample_rate'];
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         $info['playtime_seconds']         = getid3_lib::SafeDiv($info['flac']['STREAMINFO']['samples_stream'], $info['flac']['STREAMINFO']['sample_rate']);
</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">                } else {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -359,7 +359,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                        return false;
</span><span class="cx" style="display: block; padding: 0 10px">                                }
</span><span class="cx" style="display: block; padding: 0 10px">                                if (!empty($info['audio']['sample_rate'])) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                        $info['ogg']['bitrate_average'] = (($info['avdataend'] - $info['avdataoffset']) * 8) / ($info['ogg']['samples'] / $info['audio']['sample_rate']);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                 $info['ogg']['bitrate_average'] = (($info['avdataend'] - $info['avdataoffset']) * 8) * $info['audio']['sample_rate'] / $info['ogg']['samples'];
</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 class="lines" style="display: block; padding: 0 10px; color: #888">@@ -534,12 +534,12 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                $filedata = $this->fread($this->getid3->fread_buffer_size());
</span><span class="cx" style="display: block; padding: 0 10px">                $filedataoffset = 0;
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                while ((substr($filedata, $filedataoffset++, 4) != 'OggS')) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         while (substr($filedata, $filedataoffset++, 4) != 'OggS') {
</ins><span class="cx" style="display: block; padding: 0 10px">                         if (($this->ftell() - $oggheader['page_start_offset']) >= $this->getid3->fread_buffer_size()) {
</span><span class="cx" style="display: block; padding: 0 10px">                                // should be found before here
</span><span class="cx" style="display: block; padding: 0 10px">                                return false;
</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 ((($filedataoffset + 28) > strlen($filedata)) || (strlen($filedata) < 28)) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 if (($filedataoffset + 28) > strlen($filedata)) {
</ins><span class="cx" style="display: block; padding: 0 10px">                                 if ($this->feof() || (($filedata .= $this->fread($this->getid3->fread_buffer_size())) === '')) {
</span><span class="cx" style="display: block; padding: 0 10px">                                        // get some more data, unless eof, in which case fail
</span><span class="cx" style="display: block; padding: 0 10px">                                        return false;
</span></span></pre></div>
<a id="trunksrcwpincludesID3moduletagapetagphp"></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.apetag.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/ID3/module.tag.apetag.php   2023-10-19 19:07:13 UTC (rev 56974)
+++ trunk/src/wp-includes/ID3/module.tag.apetag.php     2023-10-20 13:27:56 UTC (rev 56975)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -267,7 +267,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                case 'cover art (publisher logo)':
</span><span class="cx" style="display: block; padding: 0 10px">                                case 'cover art (recording)':
</span><span class="cx" style="display: block; padding: 0 10px">                                case 'cover art (studio)':
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                        // list of possible cover arts from http://taglib-sharp.sourcearchive.com/documentation/2.0.3.0-2/Ape_2Tag_8cs-source.html
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                 // list of possible cover arts from https://github.com/mono/taglib-sharp/blob/taglib-sharp-2.0.3.2/src/TagLib/Ape/Tag.cs
</ins><span class="cx" style="display: block; padding: 0 10px">                                         if (is_array($thisfile_ape_items_current['data'])) {
</span><span class="cx" style="display: block; padding: 0 10px">                                                $this->warning('APEtag "'.$item_key.'" should be flagged as Binary data, but was incorrectly flagged as UTF-8');
</span><span class="cx" style="display: block; padding: 0 10px">                                                $thisfile_ape_items_current['data'] = implode("\x00", $thisfile_ape_items_current['data']);
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -332,7 +332,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                                        $info['ape']['comments']['picture'][] = $comments_picture_data;
</span><span class="cx" style="display: block; padding: 0 10px">                                                        unset($comments_picture_data);
</span><span class="cx" style="display: block; padding: 0 10px">                                                }
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                        } while (false);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                 } while (false); // @phpstan-ignore-line
</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">                                default:
</span></span></pre></div>
<a id="trunksrcwpincludesID3moduletagid3v1php"></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.id3v1.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/ID3/module.tag.id3v1.php    2023-10-19 19:07:13 UTC (rev 56974)
+++ trunk/src/wp-includes/ID3/module.tag.id3v1.php      2023-10-20 13:27:56 UTC (rev 56975)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -66,7 +66,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        if (!empty($ParsedID3v1['genre'])) {
</span><span class="cx" style="display: block; padding: 0 10px">                                unset($ParsedID3v1['genreid']);
</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($ParsedID3v1['genre']) && (empty($ParsedID3v1['genre']) || ($ParsedID3v1['genre'] == 'Unknown'))) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 if (empty($ParsedID3v1['genre']) || ($ParsedID3v1['genre'] == 'Unknown')) {
</ins><span class="cx" style="display: block; padding: 0 10px">                                 unset($ParsedID3v1['genre']);
</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="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    2023-10-19 19:07:13 UTC (rev 56974)
+++ trunk/src/wp-includes/ID3/module.tag.id3v2.php      2023-10-20 13:27:56 UTC (rev 56975)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1494,7 +1494,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                                        unset($comments_picture_data);
</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">-                                } while (false);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         } while (false); // @phpstan-ignore-line
</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 ((($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'GEOB')) || // 4.15  GEOB General encapsulated object
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -3753,18 +3753,12 @@
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><span class="cx" style="display: block; padding: 0 10px">        public static function IsANumber($numberstring, $allowdecimal=false, $allownegative=false) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                for ($i = 0; $i < strlen($numberstring); $i++) {
-                       if ((chr($numberstring[$i]) < chr('0')) || (chr($numberstring[$i]) > chr('9'))) {
-                               if (($numberstring[$i] == '.') && $allowdecimal) {
-                                       // allowed
-                               } elseif (($numberstring[$i] == '-') && $allownegative && ($i == 0)) {
-                                       // allowed
-                               } else {
-                                       return false;
-                               }
-                       }
-               }
-               return true;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         $pattern  = '#^';
+               $pattern .= ($allownegative ? '\\-?' : '');
+               $pattern .= '[0-9]+';
+               $pattern .= ($allowdecimal  ? '(\\.[0-9]+)?' : '');
+               $pattern .= '$#';
+               return preg_match($pattern, $numberstring);
</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 class="lines" style="display: block; padding: 0 10px; color: #888">@@ -3773,12 +3767,9 @@
</span><span class="cx" style="display: block; padding: 0 10px">         * @return bool
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><span class="cx" style="display: block; padding: 0 10px">        public static function IsValidDateStampString($datestamp) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                if (strlen($datestamp) != 8) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         if (!preg_match('#^[12][0-9]{3}[01][0-9][0123][0-9]$#', $datestamp)) {
</ins><span class="cx" style="display: block; padding: 0 10px">                         return false;
</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 (!self::IsANumber($datestamp, false)) {
-                       return false;
-               }
</del><span class="cx" style="display: block; padding: 0 10px">                 $year  = substr($datestamp, 0, 4);
</span><span class="cx" style="display: block; padding: 0 10px">                $month = substr($datestamp, 4, 2);
</span><span class="cx" style="display: block; padding: 0 10px">                $day   = substr($datestamp, 6, 2);
</span></span></pre></div>
<a id="trunksrcwpincludesID3readmetxt"></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/readme.txt</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/ID3/readme.txt      2023-10-19 19:07:13 UTC (rev 56974)
+++ trunk/src/wp-includes/ID3/readme.txt        2023-10-20 13:27:56 UTC (rev 56975)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -20,7 +20,8 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> Mozilla MPL: https://www.mozilla.org/MPL/2.0/                (v2)
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-getID3 Commercial License: https://www.getid3.org/#gCL (payment required)
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+getID3 Commercial License: https://www.getid3.org/#gCL
+(no longer available, existing licenses remain valid)
</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>
</div>

</body>
</html>