<!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>[47601] trunk/src/wp-includes/ID3: External Libraries: Update getID3() to 1.9.19.</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/47601">47601</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/47601","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>2020-04-20 11:11:48 +0000 (Mon, 20 Apr 2020)</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 1.9.19.

Changelog: https://github.com/JamesHeinrich/getID3/compare/v1.9.18...v1.9.19

Props ayeshrajans, schlessera.
See <a href="https://core.trac.wordpress.org/ticket/49945">#49945</a>.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunksrcwpincludesID3getid3libphp">trunk/src/wp-includes/ID3/getid3.lib.php</a></li>
<li><a href="#trunksrcwpincludesID3getid3php">trunk/src/wp-includes/ID3/getid3.php</a></li>
<li><a href="#trunksrcwpincludesID3moduleaudiovideoasfphp">trunk/src/wp-includes/ID3/module.audio-video.asf.php</a></li>
<li><a href="#trunksrcwpincludesID3moduleaudiovideoflvphp">trunk/src/wp-includes/ID3/module.audio-video.flv.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="#trunksrcwpincludesID3moduleaudioac3php">trunk/src/wp-includes/ID3/module.audio.ac3.php</a></li>
<li><a href="#trunksrcwpincludesID3moduleaudiodtsphp">trunk/src/wp-includes/ID3/module.audio.dts.php</a></li>
<li><a href="#trunksrcwpincludesID3moduleaudiomp3php">trunk/src/wp-includes/ID3/module.audio.mp3.php</a></li>
<li><a href="#trunksrcwpincludesID3moduleaudiooggphp">trunk/src/wp-includes/ID3/module.audio.ogg.php</a></li>
<li><a href="#trunksrcwpincludesID3moduletagid3v2php">trunk/src/wp-includes/ID3/module.tag.id3v2.php</a></li>
<li><a href="#trunksrcwpincludesID3moduletaglyrics3php">trunk/src/wp-includes/ID3/module.tag.lyrics3.php</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunksrcwpincludesID3getid3libphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/ID3/getid3.lib.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/ID3/getid3.lib.php  2020-04-20 08:37:31 UTC (rev 47600)
+++ trunk/src/wp-includes/ID3/getid3.lib.php    2020-04-20 11:11:48 UTC (rev 47601)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -15,10 +15,10 @@
</span><span class="cx" style="display: block; padding: 0 10px"> class getid3_lib
</span><span class="cx" style="display: block; padding: 0 10px"> {
</span><span class="cx" style="display: block; padding: 0 10px">        /**
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-         * @param string $string
-        * @param bool   $hex
-        * @param bool   $spaces
-        * @param string $htmlencoding
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+  * @param string      $string
+        * @param bool        $hex
+        * @param bool        $spaces
+        * @param string|bool $htmlencoding
</ins><span class="cx" style="display: block; padding: 0 10px">          *
</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="lines" style="display: block; padding: 0 10px; color: #888">@@ -216,7 +216,6 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        default:
</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">-                                break;
</del><span class="cx" style="display: block; padding: 0 10px">                 }
</span><span class="cx" style="display: block; padding: 0 10px">                if ($floatvalue >= 0) {
</span><span class="cx" style="display: block; padding: 0 10px">                        $signbit = '0';
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -284,11 +283,9 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                        $floatvalue *= -1;
</span><span class="cx" style="display: block; padding: 0 10px">                                }
</span><span class="cx" style="display: block; padding: 0 10px">                                return $floatvalue;
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                break;
</del><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        default:
</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">-                                break;
</del><span class="cx" style="display: block; padding: 0 10px">                 }
</span><span class="cx" style="display: block; padding: 0 10px">                $exponentstring = substr($bitword, 1, $exponentbits);
</span><span class="cx" style="display: block; padding: 0 10px">                $fractionstring = substr($bitword, $exponentbits + 1, $fractionbits);
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -500,8 +497,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><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-         * @param array $array1
-        * @param array $array2
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+  * @param mixed $array1
+        * @param mixed $array2
</ins><span class="cx" style="display: block; padding: 0 10px">          *
</span><span class="cx" style="display: block; padding: 0 10px">         * @return array|false
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -523,8 +520,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><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-         * @param array $array1
-        * @param array $array2
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+  * @param mixed $array1
+        * @param mixed $array2
</ins><span class="cx" style="display: block; padding: 0 10px">          *
</span><span class="cx" style="display: block; padding: 0 10px">         * @return array|false
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -544,8 +541,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><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-         * @param array $array1
-        * @param array $array2
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+  * @param mixed $array1
+        * @param mixed $array2
</ins><span class="cx" style="display: block; padding: 0 10px">          *
</span><span class="cx" style="display: block; padding: 0 10px">         * @return array|false|null
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -735,9 +732,9 @@
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        /**
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        * @param SimpleXMLElement|array $XMLobject
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ * @param SimpleXMLElement|array|mixed $XMLobject
</ins><span class="cx" style="display: block; padding: 0 10px">         *
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        * @return array
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ * @return mixed
</ins><span class="cx" style="display: block; padding: 0 10px">         */
</span><span class="cx" style="display: block; padding: 0 10px">        public static function SimpleXMLelement2array($XMLobject) {
</span><span class="cx" style="display: block; padding: 0 10px">                if (!is_object($XMLobject) && !is_array($XMLobject)) {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1479,6 +1476,15 @@
</span><span class="cx" style="display: block; padding: 0 10px">         * @return array|false
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><span class="cx" style="display: block; padding: 0 10px">        public static function GetDataImageSize($imgData, &$imageinfo=array()) {
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                if (PHP_VERSION_ID >= 50400) {
+                       $GetDataImageSize = @getimagesizefromstring($imgData, $imageinfo);
+                       if ($GetDataImageSize === false || !isset($GetDataImageSize[0], $GetDataImageSize[1])) {
+                               return false;
+                       }
+                       $GetDataImageSize['height'] = $GetDataImageSize[0];
+                       $GetDataImageSize['width'] = $GetDataImageSize[1];
+                       return $GetDataImageSize;
+               }
</ins><span class="cx" style="display: block; padding: 0 10px">                 static $tempdir = '';
</span><span class="cx" style="display: block; padding: 0 10px">                if (empty($tempdir)) {
</span><span class="cx" style="display: block; padding: 0 10px">                        if (function_exists('sys_get_temp_dir')) {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1487,12 +1493,11 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        // yes this is ugly, feel free to suggest a better way
</span><span class="cx" style="display: block; padding: 0 10px">                        if (include_once(dirname(__FILE__).'/getid3.php')) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                if ($getid3_temp = new getID3()) {
-                                       if ($getid3_temp_tempdir = $getid3_temp->tempdir) {
-                                               $tempdir = $getid3_temp_tempdir;
-                                       }
-                                       unset($getid3_temp, $getid3_temp_tempdir);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         $getid3_temp = new getID3();
+                               if ($getid3_temp_tempdir = $getid3_temp->tempdir) {
+                                       $tempdir = $getid3_temp_tempdir;
</ins><span class="cx" style="display: block; padding: 0 10px">                                 }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                unset($getid3_temp, $getid3_temp_tempdir);
</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">                $GetDataImageSize = false;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1568,7 +1573,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                                                if (!is_int($key) && !ctype_digit($key)) {
</span><span class="cx" style="display: block; padding: 0 10px">                                                                        $ThisFileInfo['comments'][$tagname][$key] = $value;
</span><span class="cx" style="display: block; padding: 0 10px">                                                                } else {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                                                        if (isset($ThisFileInfo['comments'][$tagname])) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                                                 if (!isset($ThisFileInfo['comments'][$tagname])) {
</ins><span class="cx" style="display: block; padding: 0 10px">                                                                                 $ThisFileInfo['comments'][$tagname] = array($value);
</span><span class="cx" style="display: block; padding: 0 10px">                                                                        } else {
</span><span class="cx" style="display: block; padding: 0 10px">                                                                                $ThisFileInfo['comments'][$tagname][] = $value;
</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      2020-04-20 08:37:31 UTC (rev 47600)
+++ trunk/src/wp-includes/ID3/getid3.php        2020-04-20 11:11:48 UTC (rev 47601)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -250,7 +250,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.18-201907240906';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ const VERSION           = '1.9.19-201912131005';
</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">@@ -266,14 +266,16 @@
</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">                // Check memory
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                $this->memory_limit = ini_get('memory_limit');
-               if (preg_match('#([0-9]+) ?M#i', $this->memory_limit, $matches)) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         $memoryLimit = ini_get('memory_limit');
+               if (preg_match('#([0-9]+) ?M#i', $memoryLimit, $matches)) {
</ins><span class="cx" style="display: block; padding: 0 10px">                         // could be stored as "16M" rather than 16777216 for example
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        $this->memory_limit = $matches[1] * 1048576;
-               } elseif (preg_match('#([0-9]+) ?G#i', $this->memory_limit, $matches)) { // The 'G' modifier is available since PHP 5.1.0
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 $memoryLimit = $matches[1] * 1048576;
+               } elseif (preg_match('#([0-9]+) ?G#i', $memoryLimit, $matches)) { // The 'G' modifier is available since PHP 5.1.0
</ins><span class="cx" style="display: block; padding: 0 10px">                         // could be stored as "2G" rather than 2147483648 for example
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        $this->memory_limit = $matches[1] * 1073741824;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 $memoryLimit = $matches[1] * 1073741824;
</ins><span class="cx" style="display: block; padding: 0 10px">                 }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                $this->memory_limit = $memoryLimit;
+
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ($this->memory_limit <= 0) {
</span><span class="cx" style="display: block; padding: 0 10px">                        // memory limits probably disabled
</span><span class="cx" style="display: block; padding: 0 10px">                } elseif ($this->memory_limit <= 4194304) {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -287,7 +289,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        $this->warning('WARNING: Safe mode is on, shorten support disabled, md5data/sha1data for ogg vorbis disabled, ogg vorbos/flac tag writing disabled.');
</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 (($mbstring_func_overload = ini_get('mbstring.func_overload')) && ($mbstring_func_overload & 0x02)) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         if (($mbstring_func_overload = (int) ini_get('mbstring.func_overload')) && ($mbstring_func_overload & 0x02)) {
</ins><span class="cx" style="display: block; padding: 0 10px">                         // http://php.net/manual/en/mbstring.overload.php
</span><span class="cx" style="display: block; padding: 0 10px">                        // "mbstring.func_overload in php.ini is a positive value that represents a combination of bitmasks specifying the categories of functions to be overloaded. It should be set to 1 to overload the mail() function. 2 for string functions, 4 for regular expression functions"
</span><span class="cx" style="display: block; padding: 0 10px">                        // getID3 cannot run when string functions are overloaded. It doesn't matter if mail() or ereg* functions are overloaded since getID3 does not use those.
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -294,23 +296,21 @@
</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">-                // WORDPRESS CHANGE FROM UPSTREAM
-               // Comment out deprecated function
-               /*
-               // Check for magic_quotes_runtime
-               if (function_exists('get_magic_quotes_runtime')) {
-                       if (get_magic_quotes_runtime()) {
-                               $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";
</del><ins style="background-color: #dfd; 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', '<')) {
+                       // Check for magic_quotes_runtime
+                       if (function_exists('get_magic_quotes_runtime')) {
+                               if (get_magic_quotes_runtime()) {
+                                       $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";
+                               }
</ins><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_gpc
-               if (function_exists('magic_quotes_gpc')) {
-                       if (get_magic_quotes_gpc()) {
-                               $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";
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 // Check for magic_quotes_gpc
+                       if (function_exists('get_magic_quotes_gpc')) {
+                               if (get_magic_quotes_gpc()) {
+                                       $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";
+                               }
</ins><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">-                **/
</del><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                // Load support library
</span><span class="cx" style="display: block; padding: 0 10px">                if (!include_once(GETID3_INCLUDEPATH.'getid3.lib.php')) {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -402,8 +402,9 @@
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        /**
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-         * @param string $filename
-        * @param int    $filesize
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+  * @param string   $filename
+        * @param int      $filesize
+        * @param resource $fp
</ins><span class="cx" style="display: block; padding: 0 10px">          *
</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="lines" style="display: block; padding: 0 10px; color: #888">@@ -513,9 +514,10 @@
</span><span class="cx" style="display: block; padding: 0 10px">        /**
</span><span class="cx" style="display: block; padding: 0 10px">         * analyze file
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-         * @param string $filename
-        * @param int    $filesize
-        * @param string $original_filename
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+  * @param string   $filename
+        * @param int      $filesize
+        * @param string   $original_filename
+        * @param resource $fp
</ins><span class="cx" style="display: block; padding: 0 10px">          *
</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="lines" style="display: block; padding: 0 10px; color: #888">@@ -1106,7 +1108,15 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                                        'mime_type' => 'video/MP2T',
</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">+                                // WTV - audio/video - Windows Recorded TV Show
+                               'wtv' => array(
+                                                       'pattern'   => '^\\xB7\\xD8\\x00\\x20\\x37\\x49\\xDA\\x11\\xA6\\x4E\\x00\\x07\\xE9\\x5E\\xAD\\x8D',
+                                                       'group'     => 'audio-video',
+                                                       'module'    => 'wtv',
+                                                       'mime_type' => 'video/x-ms-wtv',
+                                               ),
</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">                                 // Still-Image formats
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                // BMP  - still image - Bitmap (Windows, OS/2; uncompressed, RLE8, RLE4)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1528,7 +1538,6 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        default:
</span><span class="cx" style="display: block; padding: 0 10px">                                return $this->error('bad algorithm "'.$algorithm.'" in getHashdata()');
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                break;
</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">                if (!empty($this->info['fileformat']) && !empty($this->info['dataformat']) && ($this->info['fileformat'] == 'ogg') && ($this->info['audio']['dataformat'] == 'vorbis')) {
</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      2020-04-20 08:37:31 UTC (rev 47600)
+++ trunk/src/wp-includes/ID3/module.audio-video.asf.php        2020-04-20 11:11:48 UTC (rev 47601)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -363,7 +363,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                                                $thisfile_audio['codec'] = $this->TrimConvert($thisfile_asf_codeclistobject_codecentries_current['name']);
</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']) && strstr($AudioCodecBitrate, 'kbps')) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                                                        $thisfile_audio['bitrate'] = (int) (trim(str_replace('kbps', '', $AudioCodecBitrate)) * 1000);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                                                 $thisfile_audio['bitrate'] = (int) trim(str_replace('kbps', '', $AudioCodecBitrate)) * 1000;
</ins><span class="cx" style="display: block; padding: 0 10px">                                                                 }
</span><span class="cx" style="display: block; padding: 0 10px">                                                                //if (!isset($thisfile_video['bitrate']) && isset($thisfile_audio['bitrate']) && isset($thisfile_asf['file_properties_object']['max_bitrate']) && ($thisfile_asf_codeclistobject['codec_entries_count'] > 1)) {
</span><span class="cx" style="display: block; padding: 0 10px">                                                                if (empty($thisfile_video['bitrate']) && !empty($thisfile_audio['bitrate']) && !empty($info['bitrate'])) {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -807,7 +807,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                                        case 'wm/track':
</span><span class="cx" style="display: block; padding: 0 10px">                                                                if (empty($thisfile_asf_comments['track_number'])) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                                                        $thisfile_asf_comments['track_number'] = array(1 + $this->TrimConvert($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value']));
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                                                 $thisfile_asf_comments['track_number'] = array(1 + (int) $this->TrimConvert($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value']));
</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></pre></div>
<a id="trunksrcwpincludesID3moduleaudiovideoflvphp"></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.flv.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.flv.php      2020-04-20 08:37:31 UTC (rev 47600)
+++ trunk/src/wp-includes/ID3/module.audio-video.flv.php        2020-04-20 11:11:48 UTC (rev 47601)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -597,7 +597,6 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        // null
</span><span class="cx" style="display: block; padding: 0 10px">                        case 6:
</span><span class="cx" style="display: block; padding: 0 10px">                                return null;
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                break;
</del><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        // Mixed array
</span><span class="cx" style="display: block; padding: 0 10px">                        case 8:
</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        2020-04-20 08:37:31 UTC (rev 47600)
+++ trunk/src/wp-includes/ID3/module.audio-video.quicktime.php  2020-04-20 11:11:48 UTC (rev 47601)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -112,47 +112,44 @@
</span><span class="cx" style="display: block; padding: 0 10px">                if (!empty($info['quicktime']['comments']['location.ISO6709'])) {
</span><span class="cx" style="display: block; padding: 0 10px">                        // https://en.wikipedia.org/wiki/ISO_6709
</span><span class="cx" style="display: block; padding: 0 10px">                        foreach ($info['quicktime']['comments']['location.ISO6709'] as $ISO6709string) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                $latitude  = false;
-                               $longitude = false;
-                               $altitude  = false;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         $ISO6709parsed = array('latitude'=>false, 'longitude'=>false, 'altitude'=>false);
</ins><span class="cx" style="display: block; padding: 0 10px">                                 if (preg_match('#^([\\+\\-])([0-9]{2}|[0-9]{4}|[0-9]{6})(\\.[0-9]+)?([\\+\\-])([0-9]{3}|[0-9]{5}|[0-9]{7})(\\.[0-9]+)?(([\\+\\-])([0-9]{3}|[0-9]{5}|[0-9]{7})(\\.[0-9]+)?)?/$#', $ISO6709string, $matches)) {
</span><span class="cx" style="display: block; padding: 0 10px">                                        @list($dummy, $lat_sign, $lat_deg, $lat_deg_dec, $lon_sign, $lon_deg, $lon_deg_dec, $dummy, $alt_sign, $alt_deg, $alt_deg_dec) = $matches;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                        if (strlen($lat_deg) == 2) {        // [+-]DD.D
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                                $latitude = floatval(ltrim($lat_deg, '0').$lat_deg_dec);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                         $ISO6709parsed['latitude'] = (($lat_sign == '-') ? -1 : 1) * floatval(ltrim($lat_deg, '0').$lat_deg_dec);
</ins><span class="cx" style="display: block; padding: 0 10px">                                         } elseif (strlen($lat_deg) == 4) {  // [+-]DDMM.M
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                                $latitude = floatval(ltrim(substr($lat_deg, 0, 2), '0')) + floatval(ltrim(substr($lat_deg, 2, 2), '0').$lat_deg_dec / 60);
</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(ltrim(substr($lat_deg, 2, 2), '0').$lat_deg_dec / 60);
</ins><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">-                                                $latitude = floatval(ltrim(substr($lat_deg, 0, 2), '0')) + floatval(ltrim(substr($lat_deg, 2, 2), '0') / 60) + floatval(ltrim(substr($lat_deg, 4, 2), '0').$lat_deg_dec / 3600);
</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(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><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                                $longitude = floatval(ltrim($lon_deg, '0').$lon_deg_dec);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                         $ISO6709parsed['longitude'] = (($lon_sign == '-') ? -1 : 1) * floatval(ltrim($lon_deg, '0').$lon_deg_dec);
</ins><span class="cx" style="display: block; padding: 0 10px">                                         } elseif (strlen($lon_deg) == 5) {  // [+-]DDDMM.M
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                                $longitude = floatval(ltrim(substr($lon_deg, 0, 2), '0')) + floatval(ltrim(substr($lon_deg, 2, 2), '0').$lon_deg_dec / 60);
</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(ltrim(substr($lon_deg, 2, 2), '0').$lon_deg_dec / 60);
</ins><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">-                                                $longitude = floatval(ltrim(substr($lon_deg, 0, 2), '0')) + floatval(ltrim(substr($lon_deg, 2, 2), '0') / 60) + floatval(ltrim(substr($lon_deg, 4, 2), '0').$lon_deg_dec / 3600);
</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(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><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                                $altitude = floatval(ltrim($alt_deg, '0').$alt_deg_dec);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                         $ISO6709parsed['altitude'] = (($alt_sign == '-') ? -1 : 1) * floatval(ltrim($alt_deg, '0').$alt_deg_dec);
</ins><span class="cx" style="display: block; padding: 0 10px">                                         } elseif (strlen($alt_deg) == 5) {  // [+-]DDDMM.M
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                                $altitude = floatval(ltrim(substr($alt_deg, 0, 2), '0')) + floatval(ltrim(substr($alt_deg, 2, 2), '0').$alt_deg_dec / 60);
</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(ltrim(substr($alt_deg, 2, 2), '0').$alt_deg_dec / 60);
</ins><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">-                                                $altitude = floatval(ltrim(substr($alt_deg, 0, 2), '0')) + floatval(ltrim(substr($alt_deg, 2, 2), '0') / 60) + floatval(ltrim(substr($alt_deg, 4, 2), '0').$alt_deg_dec / 3600);
</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(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><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                        if ($latitude !== false) {
-                                               $info['quicktime']['comments']['gps_latitude'][]  = (($lat_sign == '-') ? -1 : 1) * floatval($latitude);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                 foreach (array('latitude', 'longitude', 'altitude') as $key) {
+                                               if ($ISO6709parsed[$key] !== false) {
+                                                       $value = (($lat_sign == '-') ? -1 : 1) * floatval($ISO6709parsed[$key]);
+                                                       if (!in_array($value, $info['quicktime']['comments']['gps_'.$key])) {
+                                                               $info['quicktime']['comments']['gps_'.$key][]  = (($lat_sign == '-') ? -1 : 1) * floatval($ISO6709parsed[$key]);
+                                                       }
+                                               }
</ins><span class="cx" style="display: block; padding: 0 10px">                                         }
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                        if ($longitude !== false) {
-                                               $info['quicktime']['comments']['gps_longitude'][] = (($lon_sign == '-') ? -1 : 1) * floatval($longitude);
-                                       }
-                                       if ($altitude !== false) {
-                                               $info['quicktime']['comments']['gps_altitude'][]  = (($alt_sign == '-') ? -1 : 1) * floatval($altitude);
-                                       }
</del><span class="cx" style="display: block; padding: 0 10px">                                 }
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                if ($latitude === false) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         if ($ISO6709parsed['latitude'] === false) {
</ins><span class="cx" style="display: block; padding: 0 10px">                                         $this->warning('location.ISO6709 string not parsed correctly: "'.$ISO6709string.'", please submit as a bug');
</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">@@ -224,6 +221,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                $atom_parent = end($atomHierarchy); // not array_pop($atomHierarchy); see https://www.getid3.org/phpBB3/viewtopic.php?t=1717
</span><span class="cx" style="display: block; padding: 0 10px">                array_push($atomHierarchy, $atomname);
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                $atom_structure              = array();
</ins><span class="cx" style="display: block; padding: 0 10px">                 $atom_structure['hierarchy'] = implode(' ', $atomHierarchy);
</span><span class="cx" style="display: block; padding: 0 10px">                $atom_structure['name']      = $atomname;
</span><span class="cx" style="display: block; padding: 0 10px">                $atom_structure['size']      = $atomsize;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -244,6 +242,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                case 'mdia': // MeDIA container atom
</span><span class="cx" style="display: block; padding: 0 10px">                                case 'minf': // Media INFormation container atom
</span><span class="cx" style="display: block; padding: 0 10px">                                case 'dinf': // Data INFormation container atom
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                case 'nmhd': // Null Media HeaDer container atom
</ins><span class="cx" style="display: block; padding: 0 10px">                                 case 'udta': // User DaTA container atom
</span><span class="cx" style="display: block; padding: 0 10px">                                case 'cmov': // Compressed MOVie container atom
</span><span class="cx" style="display: block; padding: 0 10px">                                case 'rmra': // Reference Movie Record Atom
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1044,6 +1043,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">                                case 'stco': // Sample Table Chunk Offset atom
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+//                                      if (true) {
</ins><span class="cx" style="display: block; padding: 0 10px">                                         if ($ParseAllPossibleAtoms) {
</span><span class="cx" style="display: block; padding: 0 10px">                                                $atom_structure['version']        = getid3_lib::BigEndian2Int(substr($atom_data,  0, 1));
</span><span class="cx" style="display: block; padding: 0 10px">                                                $atom_structure['flags_raw']      = getid3_lib::BigEndian2Int(substr($atom_data,  1, 3)); // hardcoded: 0x0000
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1639,6 +1639,124 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                        }
</span><span class="cx" style="display: block; padding: 0 10px">                                        break;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                case 'uuid': // Atom holding 360fly spatial data??
+                                       /* code in this block by Paul Lewis 2019-Oct-31 */
+                                       /*      Sensor Timestamps need to be calculated using the recordings base time at ['quicktime']['moov']['subatoms'][0]['creation_time_unix']. */
+                                       $atom_structure['title'] = '360Fly Sensor Data';
+
+                                       //Get the UUID ID in first 16 bytes
+                                       $uuid_bytes_read = unpack('H8time_low/H4time_mid/H4time_hi/H4clock_seq_hi/H12clock_seq_low', substr($atom_data, 0, 16));
+                                       $atom_structure['uuid_field_id'] = print_r(implode('-', $uuid_bytes_read), true);
+
+                                       //Get the UUID HEADER data
+                                       $uuid_bytes_read = unpack('Sheader_size/Sheader_version/Stimescale/Shardware_version/x/x/x/x/x/x/x/x/x/x/x/x/x/x/x/x/', substr($atom_data, 16, 32));
+                                       $atom_structure['uuid_header'] = json_encode($uuid_bytes_read, true);
+
+                                       $start_byte = 48;
+                                       $atom_SENSOR_data = substr($atom_data, $start_byte);
+                                       $atom_structure['sensor_data']['data_type'] = array(
+                                                       'fusion_count'   => 0,       // ID 250
+                                                       'fusion_data'    => array(),
+                                                       'accel_count'    => 0,       // ID 1
+                                                       'accel_data'     => array(),
+                                                       'gyro_count'     => 0,       // ID 2
+                                                       'gyro_data'      => array(),
+                                                       'magno_count'    => 0,       // ID 3
+                                                       'magno_data'     => array(),
+                                                       'gps_count'      => 0,       // ID 5
+                                                       'gps_data'       => array(),
+                                                       'rotation_count' => 0,       // ID 6
+                                                       'rotation_data'  => array(),
+                                                       'unknown_count'  => 0,       // ID ??
+                                                       'unknown_data'   => array(),
+                                                       'debug_list'     => '',      // Used to debug variables stored as comma delimited strings
+                                       );
+                                       $debug_structure['debug_items'] = array();
+                                       // Can start loop here to decode all sensor data in 32 Byte chunks:
+                                       foreach (str_split($atom_SENSOR_data, 32) as $sensor_key => $sensor_data) {
+                                               // This gets me a data_type code to work out what data is in the next 31 bytes.
+                                               $sensor_data_type = substr($sensor_data, 0, 1);
+                                               $sensor_data_content = substr($sensor_data, 1);
+                                               $uuid_bytes_read = unpack('C*', $sensor_data_type);
+                                               $sensor_data_array = array();
+                                               switch ($uuid_bytes_read[1]) {
+                                                       case 250:
+                                                               $atom_structure['sensor_data']['data_type']['fusion_count']++;
+                                                               $uuid_bytes_read = unpack('cmode/Jtimestamp/Gyaw/Gpitch/Groll/x*', $sensor_data_content);
+                                                               $sensor_data_array['mode']      = $uuid_bytes_read['mode'];
+                                                               $sensor_data_array['timestamp'] = $uuid_bytes_read['timestamp'];
+                                                               $sensor_data_array['yaw']       = $uuid_bytes_read['yaw'];
+                                                               $sensor_data_array['pitch']     = $uuid_bytes_read['pitch'];
+                                                               $sensor_data_array['roll']      = $uuid_bytes_read['roll'];
+                                                               array_push($atom_structure['sensor_data']['data_type']['fusion_data'], $sensor_data_array);
+                                                               break;
+                                                       case 1:
+                                                               $atom_structure['sensor_data']['data_type']['accel_count']++;
+                                                               $uuid_bytes_read = unpack('cmode/Jtimestamp/Gyaw/Gpitch/Groll/x*', $sensor_data_content);
+                                                               $sensor_data_array['mode']      = $uuid_bytes_read['mode'];
+                                                               $sensor_data_array['timestamp'] = $uuid_bytes_read['timestamp'];
+                                                               $sensor_data_array['yaw']       = $uuid_bytes_read['yaw'];
+                                                               $sensor_data_array['pitch']     = $uuid_bytes_read['pitch'];
+                                                               $sensor_data_array['roll']      = $uuid_bytes_read['roll'];
+                                                               array_push($atom_structure['sensor_data']['data_type']['accel_data'], $sensor_data_array);
+                                                               break;
+                                                       case 2:
+                                                               $atom_structure['sensor_data']['data_type']['gyro_count']++;
+                                                               $uuid_bytes_read = unpack('cmode/Jtimestamp/Gyaw/Gpitch/Groll/x*', $sensor_data_content);
+                                                               $sensor_data_array['mode']      = $uuid_bytes_read['mode'];
+                                                               $sensor_data_array['timestamp'] = $uuid_bytes_read['timestamp'];
+                                                               $sensor_data_array['yaw']       = $uuid_bytes_read['yaw'];
+                                                               $sensor_data_array['pitch']     = $uuid_bytes_read['pitch'];
+                                                               $sensor_data_array['roll']      = $uuid_bytes_read['roll'];
+                                                               array_push($atom_structure['sensor_data']['data_type']['gyro_data'], $sensor_data_array);
+                                                               break;
+                                                       case 3:
+                                                               $atom_structure['sensor_data']['data_type']['magno_count']++;
+                                                               $uuid_bytes_read = unpack('cmode/Jtimestamp/Gmagx/Gmagy/Gmagz/x*', $sensor_data_content);
+                                                               $sensor_data_array['mode']      = $uuid_bytes_read['mode'];
+                                                               $sensor_data_array['timestamp'] = $uuid_bytes_read['timestamp'];
+                                                               $sensor_data_array['magx']      = $uuid_bytes_read['magx'];
+                                                               $sensor_data_array['magy']      = $uuid_bytes_read['magy'];
+                                                               $sensor_data_array['magz']      = $uuid_bytes_read['magz'];
+                                                               array_push($atom_structure['sensor_data']['data_type']['magno_data'], $sensor_data_array);
+                                                               break;
+                                                       case 5:
+                                                               $atom_structure['sensor_data']['data_type']['gps_count']++;
+                                                               $uuid_bytes_read = unpack('cmode/Jtimestamp/Glat/Glon/Galt/Gspeed/nbearing/nacc/x*', $sensor_data_content);
+                                                               $sensor_data_array['mode']      = $uuid_bytes_read['mode'];
+                                                               $sensor_data_array['timestamp'] = $uuid_bytes_read['timestamp'];
+                                                               $sensor_data_array['lat']       = $uuid_bytes_read['lat'];
+                                                               $sensor_data_array['lon']       = $uuid_bytes_read['lon'];
+                                                               $sensor_data_array['alt']       = $uuid_bytes_read['alt'];
+                                                               $sensor_data_array['speed']     = $uuid_bytes_read['speed'];
+                                                               $sensor_data_array['bearing']   = $uuid_bytes_read['bearing'];
+                                                               $sensor_data_array['acc']       = $uuid_bytes_read['acc'];
+                                                               //$sensor_data_array = print_r($uuid_bytes_read, true);
+                                                               array_push($atom_structure['sensor_data']['data_type']['gps_data'], $sensor_data_array);
+                                                               //array_push($debug_structure['debug_items'], $uuid_bytes_read['timestamp']);
+                                                               break;
+                                                       case 6:
+                                                               $atom_structure['sensor_data']['data_type']['rotation_count']++;
+                                                               $uuid_bytes_read = unpack('cmode/Jtimestamp/Grotx/Groty/Grotz/x*', $sensor_data_content);
+                                                               $sensor_data_array['mode']      = $uuid_bytes_read['mode'];
+                                                               $sensor_data_array['timestamp'] = $uuid_bytes_read['timestamp'];
+                                                               $sensor_data_array['rotx']      = $uuid_bytes_read['rotx'];
+                                                               $sensor_data_array['roty']      = $uuid_bytes_read['roty'];
+                                                               $sensor_data_array['rotz']      = $uuid_bytes_read['rotz'];
+                                                               array_push($atom_structure['sensor_data']['data_type']['rotation_data'], $sensor_data_array);
+                                                               break;
+                                                       default:
+                                                               $atom_structure['sensor_data']['data_type']['unknown_count']++;
+                                                               break;
+                                               }
+                                       }
+//                                     if (isset($debug_structure['debug_items']) && count($debug_structure['debug_items']) > 0) {
+//                                             $atom_structure['sensor_data']['data_type']['debug_list'] = implode(',', $debug_structure['debug_items']);
+//                                     } else {
+                                               $atom_structure['sensor_data']['data_type']['debug_list'] = 'No debug items in list!';
+//                                     }
+                                       break;
+
</ins><span class="cx" style="display: block; padding: 0 10px">                                 case 'gps ':
</span><span class="cx" style="display: block; padding: 0 10px">                                        // https://dashcamtalk.com/forum/threads/script-to-extract-gps-data-from-novatek-mp4.20808/page-2#post-291730
</span><span class="cx" style="display: block; padding: 0 10px">                                        // The 'gps ' contains simple look up table made up of 8byte rows, that point to the 'free' atoms that contains the actual GPS data.
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1683,22 +1801,24 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                                                // $GPRMC,094347.000,A,5342.0061,N,00737.9908,W,0.01,156.75,140217,,,A*7D
</span><span class="cx" style="display: block; padding: 0 10px">                                                                if (preg_match('#\\$GPRMC,([0-9\\.]*),([AV]),([0-9\\.]*),([NS]),([0-9\\.]*),([EW]),([0-9\\.]*),([0-9\\.]*),([0-9]*),([0-9\\.]*),([EW]?)(,[A])?(\\*[0-9A-F]{2})#', $GPS_free_data, $matches)) {
</span><span class="cx" style="display: block; padding: 0 10px">                                                                        $GPS_this_GPRMC = array();
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                                                        $GPS_this_GPRMC_raw = array();
</ins><span class="cx" style="display: block; padding: 0 10px">                                                                         list(
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                                                                $GPS_this_GPRMC['raw']['gprmc'],
-                                                                               $GPS_this_GPRMC['raw']['timestamp'],
-                                                                               $GPS_this_GPRMC['raw']['status'],
-                                                                               $GPS_this_GPRMC['raw']['latitude'],
-                                                                               $GPS_this_GPRMC['raw']['latitude_direction'],
-                                                                               $GPS_this_GPRMC['raw']['longitude'],
-                                                                               $GPS_this_GPRMC['raw']['longitude_direction'],
-                                                                               $GPS_this_GPRMC['raw']['knots'],
-                                                                               $GPS_this_GPRMC['raw']['angle'],
-                                                                               $GPS_this_GPRMC['raw']['datestamp'],
-                                                                               $GPS_this_GPRMC['raw']['variation'],
-                                                                               $GPS_this_GPRMC['raw']['variation_direction'],
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                                                         $GPS_this_GPRMC_raw['gprmc'],
+                                                                               $GPS_this_GPRMC_raw['timestamp'],
+                                                                               $GPS_this_GPRMC_raw['status'],
+                                                                               $GPS_this_GPRMC_raw['latitude'],
+                                                                               $GPS_this_GPRMC_raw['latitude_direction'],
+                                                                               $GPS_this_GPRMC_raw['longitude'],
+                                                                               $GPS_this_GPRMC_raw['longitude_direction'],
+                                                                               $GPS_this_GPRMC_raw['knots'],
+                                                                               $GPS_this_GPRMC_raw['angle'],
+                                                                               $GPS_this_GPRMC_raw['datestamp'],
+                                                                               $GPS_this_GPRMC_raw['variation'],
+                                                                               $GPS_this_GPRMC_raw['variation_direction'],
</ins><span class="cx" style="display: block; padding: 0 10px">                                                                                 $dummy,
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                                                                $GPS_this_GPRMC['raw']['checksum'],
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                                                         $GPS_this_GPRMC_raw['checksum'],
</ins><span class="cx" style="display: block; padding: 0 10px">                                                                         ) = $matches;
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                                                        $GPS_this_GPRMC['raw'] = $GPS_this_GPRMC_raw;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                                                        $hour   = substr($GPS_this_GPRMC['raw']['timestamp'], 0, 2);
</span><span class="cx" style="display: block; padding: 0 10px">                                                                        $minute = substr($GPS_this_GPRMC['raw']['timestamp'], 2, 2);
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1706,7 +1826,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                                                        $ms     = substr($GPS_this_GPRMC['raw']['timestamp'], 6);    // may contain decimal seconds
</span><span class="cx" style="display: block; padding: 0 10px">                                                                        $day    = substr($GPS_this_GPRMC['raw']['datestamp'], 0, 2);
</span><span class="cx" style="display: block; padding: 0 10px">                                                                        $month  = substr($GPS_this_GPRMC['raw']['datestamp'], 2, 2);
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                                                        $year   = substr($GPS_this_GPRMC['raw']['datestamp'], 4, 2);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                                                 $year   = (int) substr($GPS_this_GPRMC['raw']['datestamp'], 4, 2);
</ins><span class="cx" style="display: block; padding: 0 10px">                                                                         $year += (($year > 90) ? 1900 : 2000); // complete lack of foresight: datestamps are stored with 2-digit years, take best guess
</span><span class="cx" style="display: block; padding: 0 10px">                                                                        $GPS_this_GPRMC['timestamp'] = $year.'-'.$month.'-'.$day.' '.$hour.':'.$minute.':'.$second.$ms;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2740,6 +2860,10 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                $gooddata = explode(';', $data);
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><span class="cx" style="display: block; padding: 0 10px">                        foreach ($gooddata as $data) {
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                if (is_array($data) || (!empty($info['quicktime']['comments'][$comment_key]) && in_array($data, $info['quicktime']['comments'][$comment_key]))) {
+                                       // avoid duplicate copies of identical data
+                                       continue;
+                               }
</ins><span class="cx" style="display: block; padding: 0 10px">                                 $info['quicktime']['comments'][$comment_key][] = $data;
</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="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     2020-04-20 08:37:31 UTC (rev 47600)
+++ trunk/src/wp-includes/ID3/module.audio-video.riff.php       2020-04-20 11:11:48 UTC (rev 47601)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -203,7 +203,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                        unset($thisfile_riff_audio[$streamindex]['raw']);
</span><span class="cx" style="display: block; padding: 0 10px">                                        $thisfile_audio['streams'][$streamindex] = $thisfile_riff_audio[$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">-                                        $thisfile_audio = getid3_lib::array_merge_noclobber($thisfile_audio, $thisfile_riff_audio[$streamindex]);
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                 $thisfile_audio = (array) getid3_lib::array_merge_noclobber($thisfile_audio, $thisfile_riff_audio[$streamindex]);
</ins><span class="cx" style="display: block; padding: 0 10px">                                         if (substr($thisfile_audio['codec'], 0, strlen('unknown: 0x')) == 'unknown: 0x') {
</span><span class="cx" style="display: block; padding: 0 10px">                                                $this->warning('Audio codec = '.$thisfile_audio['codec']);
</span><span class="cx" style="display: block; padding: 0 10px">                                        }
</span></span></pre></div>
<a id="trunksrcwpincludesID3moduleaudioac3php"></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.ac3.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/ID3/module.audio.ac3.php    2020-04-20 08:37:31 UTC (rev 47600)
+++ trunk/src/wp-includes/ID3/module.audio.ac3.php      2020-04-20 11:11:48 UTC (rev 47601)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -485,7 +485,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">        /**
</span><span class="cx" style="display: block; padding: 0 10px">         * @param int $length
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-         * @return float|int
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+  * @return int
</ins><span class="cx" style="display: block; padding: 0 10px">          */
</span><span class="cx" style="display: block; padding: 0 10px">        private function readHeaderBSI($length) {
</span><span class="cx" style="display: block; padding: 0 10px">                $data = substr($this->AC3header['bsi'], $this->BSIoffset, $length);
</span></span></pre></div>
<a id="trunksrcwpincludesID3moduleaudiodtsphp"></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.dts.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/ID3/module.audio.dts.php    2020-04-20 08:37:31 UTC (rev 47600)
+++ trunk/src/wp-includes/ID3/module.audio.dts.php      2020-04-20 11:11:48 UTC (rev 47601)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -149,7 +149,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         * @param string $bin
</span><span class="cx" style="display: block; padding: 0 10px">         * @param int $length
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-         * @return float|int
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+  * @return int
</ins><span class="cx" style="display: block; padding: 0 10px">          */
</span><span class="cx" style="display: block; padding: 0 10px">        private function readBinData($bin, $length) {
</span><span class="cx" style="display: block; padding: 0 10px">                $data = substr($bin, $this->readBinDataOffset, $length);
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -252,36 +252,28 @@
</span><span class="cx" style="display: block; padding: 0 10px">                switch ($index) {
</span><span class="cx" style="display: block; padding: 0 10px">                        case 0:
</span><span class="cx" style="display: block; padding: 0 10px">                                return 1;
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                break;
</del><span class="cx" style="display: block; padding: 0 10px">                         case 1:
</span><span class="cx" style="display: block; padding: 0 10px">                        case 2:
</span><span class="cx" style="display: block; padding: 0 10px">                        case 3:
</span><span class="cx" style="display: block; padding: 0 10px">                        case 4:
</span><span class="cx" style="display: block; padding: 0 10px">                                return 2;
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                break;
</del><span class="cx" style="display: block; padding: 0 10px">                         case 5:
</span><span class="cx" style="display: block; padding: 0 10px">                        case 6:
</span><span class="cx" style="display: block; padding: 0 10px">                                return 3;
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                break;
</del><span class="cx" style="display: block; padding: 0 10px">                         case 7:
</span><span class="cx" style="display: block; padding: 0 10px">                        case 8:
</span><span class="cx" style="display: block; padding: 0 10px">                                return 4;
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                break;
</del><span class="cx" style="display: block; padding: 0 10px">                         case 9:
</span><span class="cx" style="display: block; padding: 0 10px">                                return 5;
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                break;
</del><span class="cx" style="display: block; padding: 0 10px">                         case 10:
</span><span class="cx" style="display: block; padding: 0 10px">                        case 11:
</span><span class="cx" style="display: block; padding: 0 10px">                        case 12:
</span><span class="cx" style="display: block; padding: 0 10px">                                return 6;
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                break;
</del><span class="cx" style="display: block; padding: 0 10px">                         case 13:
</span><span class="cx" style="display: block; padding: 0 10px">                                return 7;
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                break;
</del><span class="cx" style="display: block; padding: 0 10px">                         case 14:
</span><span class="cx" style="display: block; padding: 0 10px">                        case 15:
</span><span class="cx" style="display: block; padding: 0 10px">                                return 8;
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                break;
</del><span class="cx" style="display: block; padding: 0 10px">                 }
</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="lines" style="display: block; padding: 0 10px; color: #888">@@ -323,10 +315,8 @@
</span><span class="cx" style="display: block; padding: 0 10px">                switch ($version) {
</span><span class="cx" style="display: block; padding: 0 10px">                        case 7:
</span><span class="cx" style="display: block; padding: 0 10px">                                return 0 - $index;
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                break;
</del><span class="cx" style="display: block; padding: 0 10px">                         case 6:
</span><span class="cx" style="display: block; padding: 0 10px">                                return 0 - 16 - $index;
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                break;
</del><span class="cx" style="display: block; padding: 0 10px">                 }
</span><span class="cx" style="display: block; padding: 0 10px">                return false;
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span></span></pre></div>
<a id="trunksrcwpincludesID3moduleaudiomp3php"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/ID3/module.audio.mp3.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/ID3/module.audio.mp3.php    2020-04-20 08:37:31 UTC (rev 47600)
+++ trunk/src/wp-includes/ID3/module.audio.mp3.php      2020-04-20 11:11:48 UTC (rev 47601)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -719,8 +719,17 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                        $thisfile_mpeg_audio_lame['long_version']  = substr($headerstring, $VBRidOffset + 120, 20);
</span><span class="cx" style="display: block; padding: 0 10px">                                        $thisfile_mpeg_audio_lame['short_version'] = substr($thisfile_mpeg_audio_lame['long_version'], 0, 9);
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                        $thisfile_mpeg_audio_lame['numeric_version'] = str_replace('LAME', '', $thisfile_mpeg_audio_lame['short_version']);
+                                       if (preg_match('#^LAME([0-9\\.a-z]+)#', $thisfile_mpeg_audio_lame['long_version'], $matches)) {
+                                               $thisfile_mpeg_audio_lame['short_version']   = $matches[0];
+                                               $thisfile_mpeg_audio_lame['numeric_version'] = $matches[1];
+                                       }
+                                       foreach (explode('.', $thisfile_mpeg_audio_lame['numeric_version']) as $key => $number) {
+                                               $thisfile_mpeg_audio_lame['integer_version'][$key] = intval($number);
+                                       }
</ins><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_mpeg_audio_lame['short_version'] >= 'LAME3.90') {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                 //if ($thisfile_mpeg_audio_lame['short_version'] >= 'LAME3.90') {
+                                       if ((($thisfile_mpeg_audio_lame['integer_version'][0] * 1000) + $thisfile_mpeg_audio_lame['integer_version'][1]) >= 3090) { // cannot use string version compare, may have "LAME3.90" or "LAME3.100" -- see https://github.com/JamesHeinrich/getID3/issues/207
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                                // extra 11 chars are not part of version string when LAMEtag present
</span><span class="cx" style="display: block; padding: 0 10px">                                                unset($thisfile_mpeg_audio_lame['long_version']);
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1324,12 +1333,12 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                                if ($MPEGaudioHeaderValidCache[$next4]) {
</span><span class="cx" style="display: block; padding: 0 10px">                                                        $this->fseek(-4, SEEK_CUR);
</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_lib::safe_inc($Distribution['bitrate'][$LongMPEGbitrateLookup[$head4]]);
-                                                       getid3_lib::safe_inc($Distribution['layer'][$LongMPEGlayerLookup[$head4]]);
-                                                       getid3_lib::safe_inc($Distribution['version'][$LongMPEGversionLookup[$head4]]);
-                                                       getid3_lib::safe_inc($Distribution['padding'][intval($LongMPEGpaddingLookup[$head4])]);
-                                                       getid3_lib::safe_inc($Distribution['frequency'][$LongMPEGfrequencyLookup[$head4]]);
-                                                       if ($max_frames_scan && (++$frames_scanned >= $max_frames_scan)) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                                 $Distribution['bitrate'][$LongMPEGbitrateLookup[$head4]] = isset($Distribution['bitrate'][$LongMPEGbitrateLookup[$head4]]) ? ++$Distribution['bitrate'][$LongMPEGbitrateLookup[$head4]] : 1;
+                                                       $Distribution['layer'][$LongMPEGlayerLookup[$head4]] = isset($Distribution['layer'][$LongMPEGlayerLookup[$head4]]) ? ++$Distribution['layer'][$LongMPEGlayerLookup[$head4]] : 1;
+                                                       $Distribution['version'][$LongMPEGversionLookup[$head4]] = isset($Distribution['version'][$LongMPEGversionLookup[$head4]]) ? ++$Distribution['version'][$LongMPEGversionLookup[$head4]] : 1;
+                                                       $Distribution['padding'][intval($LongMPEGpaddingLookup[$head4])] = isset($Distribution['padding'][intval($LongMPEGpaddingLookup[$head4])]) ? ++$Distribution['padding'][intval($LongMPEGpaddingLookup[$head4])] : 1;
+                                                       $Distribution['frequency'][$LongMPEGfrequencyLookup[$head4]] = isset($Distribution['frequency'][$LongMPEGfrequencyLookup[$head4]]) ? ++$Distribution['frequency'][$LongMPEGfrequencyLookup[$head4]] : 1;
+                                                       if (++$frames_scanned >= $max_frames_scan) {
</ins><span class="cx" style="display: block; padding: 0 10px">                                                                 $pct_data_scanned = ($this->ftell() - $info['avdataoffset']) / ($info['avdataend'] - $info['avdataoffset']);
</span><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></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    2020-04-20 08:37:31 UTC (rev 47600)
+++ trunk/src/wp-includes/ID3/module.audio.ogg.php      2020-04-20 11:11:48 UTC (rev 47601)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -615,7 +615,6 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        default:
</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">-                                break;
</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">                $VendorSize = getid3_lib::LittleEndian2Int(substr($commentdata, $commentdataoffset, 4));
</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    2020-04-20 08:37:31 UTC (rev 47600)
+++ trunk/src/wp-includes/ID3/module.tag.id3v2.php      2020-04-20 11:11:48 UTC (rev 47601)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -3723,12 +3723,10 @@
</span><span class="cx" style="display: block; padding: 0 10px">                switch ($id3v2majorversion) {
</span><span class="cx" style="display: block; padding: 0 10px">                        case 2:
</span><span class="cx" style="display: block; padding: 0 10px">                                return preg_match('#[A-Z][A-Z0-9]{2}#', $framename);
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                break;
</del><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        case 3:
</span><span class="cx" style="display: block; padding: 0 10px">                        case 4:
</span><span class="cx" style="display: block; padding: 0 10px">                                return preg_match('#[A-Z][A-Z0-9]{3}#', $framename);
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                break;
</del><span class="cx" style="display: block; padding: 0 10px">                 }
</span><span class="cx" style="display: block; padding: 0 10px">                return false;
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span></span></pre></div>
<a id="trunksrcwpincludesID3moduletaglyrics3php"></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.lyrics3.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/ID3/module.tag.lyrics3.php  2020-04-20 08:37:31 UTC (rev 47600)
+++ trunk/src/wp-includes/ID3/module.tag.lyrics3.php    2020-04-20 11:11:48 UTC (rev 47601)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -32,7 +32,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                $this->fseek((0 - 128 - 9 - 6), SEEK_END);          // end - ID3v1 - "LYRICSEND" - [Lyrics3size]
</span><span class="cx" style="display: block; padding: 0 10px">                $lyrics3_id3v1 = $this->fread(128 + 9 + 6);
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                $lyrics3lsz    = substr($lyrics3_id3v1,  0,   6); // Lyrics3size
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         $lyrics3lsz    = (int) substr($lyrics3_id3v1, 0, 6); // Lyrics3size
</ins><span class="cx" style="display: block; padding: 0 10px">                 $lyrics3end    = substr($lyrics3_id3v1,  6,   9); // LYRICSEND or LYRICS200
</span><span class="cx" style="display: block; padding: 0 10px">                $id3v1tag      = substr($lyrics3_id3v1, 15, 128); // ID3v1
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -240,7 +240,6 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        default:
</span><span class="cx" style="display: block; padding: 0 10px">                                $this->error('Cannot process Lyrics3 version '.$version.' (only v1 and v2)');
</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">-                                break;
</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></pre>
</div>
</div>

</body>
</html>