Merge branch 'MDL-60236-master' of git://github.com/ankitagarwal/moodle
authorAndrew Nicols <andrew@nicols.co.uk>
Mon, 2 Oct 2017 02:31:40 +0000 (10:31 +0800)
committerAndrew Nicols <andrew@nicols.co.uk>
Mon, 2 Oct 2017 02:31:40 +0000 (10:31 +0800)
13 files changed:
lib/simplepie/LICENSE.txt [new file with mode: 0644]
lib/simplepie/autoloader.php
lib/simplepie/library/SimplePie.php
lib/simplepie/library/SimplePie/Category.php
lib/simplepie/library/SimplePie/Content/Type/Sniffer.php
lib/simplepie/library/SimplePie/File.php
lib/simplepie/library/SimplePie/Item.php
lib/simplepie/library/SimplePie/Locator.php
lib/simplepie/library/SimplePie/Misc.php
lib/simplepie/library/SimplePie/Parse/Date.php
lib/simplepie/library/SimplePie/Sanitize.php
lib/simplepie/readme_moodle.txt
lib/thirdpartylibs.xml

diff --git a/lib/simplepie/LICENSE.txt b/lib/simplepie/LICENSE.txt
new file mode 100644 (file)
index 0000000..a822a4b
--- /dev/null
@@ -0,0 +1,26 @@
+Copyright (c) 2004-2007, Ryan Parman and Geoffrey Sneddon.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are 
+permitted provided that the following conditions are met:
+
+       * Redistributions of source code must retain the above copyright notice, this list of 
+         conditions and the following disclaimer.
+
+       * Redistributions in binary form must reproduce the above copyright notice, this list 
+         of conditions and the following disclaimer in the documentation and/or other materials 
+         provided with the distribution.
+
+       * Neither the name of the SimplePie Team nor the names of its contributors may be used 
+         to endorse or promote products derived from this software without specific prior 
+         written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS 
+OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY 
+AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS 
+AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
+OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
+POSSIBILITY OF SUCH DAMAGE.
\ No newline at end of file
index c16a8f8..fd7690d 100644 (file)
@@ -5,7 +5,7 @@
  * A PHP-Based RSS and Atom Feed Framework.
  * Takes the hard work out of managing a complete RSS/Atom solution.
  *
- * Copyright (c) 2004-2009, Ryan Parman, Geoffrey Sneddon, Ryan McCue, and contributors
+ * Copyright (c) 2004-2016, Ryan Parman, Geoffrey Sneddon, Ryan McCue, and contributors
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without modification, are
@@ -33,8 +33,7 @@
  * POSSIBILITY OF SUCH DAMAGE.
  *
  * @package SimplePie
- * @version 1.3.1
- * @copyright 2004-2012 Ryan Parman, Geoffrey Sneddon, Ryan McCue
+ * @copyright 2004-2016 Ryan Parman, Geoffrey Sneddon, Ryan McCue
  * @author Ryan Parman
  * @author Geoffrey Sneddon
  * @author Ryan McCue
index 24931b2..428bfc0 100644 (file)
@@ -5,7 +5,7 @@
  * A PHP-Based RSS and Atom Feed Framework.
  * Takes the hard work out of managing a complete RSS/Atom solution.
  *
- * Copyright (c) 2004-2016, Ryan Parman, Geoffrey Sneddon, Ryan McCue, and contributors
+ * Copyright (c) 2004-2017, Ryan Parman, Geoffrey Sneddon, Ryan McCue, and contributors
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without modification, are
@@ -33,8 +33,8 @@
  * POSSIBILITY OF SUCH DAMAGE.
  *
  * @package SimplePie
- * @version 1.4.1
- * @copyright 2004-2016 Ryan Parman, Geoffrey Sneddon, Ryan McCue
+ * @version 1.5
+ * @copyright 2004-2017 Ryan Parman, Geoffrey Sneddon, Ryan McCue
  * @author Ryan Parman
  * @author Geoffrey Sneddon
  * @author Ryan McCue
@@ -50,7 +50,7 @@ define('SIMPLEPIE_NAME', 'SimplePie');
 /**
  * SimplePie Version
  */
-define('SIMPLEPIE_VERSION', '1.4.1');
+define('SIMPLEPIE_VERSION', '1.5');
 
 /**
  * SimplePie Build
@@ -643,6 +643,12 @@ class SimplePie
         */
        public $strip_htmltags = array('base', 'blink', 'body', 'doctype', 'embed', 'font', 'form', 'frame', 'frameset', 'html', 'iframe', 'input', 'marquee', 'meta', 'noscript', 'object', 'param', 'script', 'style');
 
+       /**
+        * @var bool Should we throw exceptions, or use the old-style error property?
+        * @access private
+        */
+       public $enable_exceptions = false;
+       
        /**
         * The SimplePie class contains feed level data and options
         *
@@ -659,9 +665,9 @@ class SimplePie
         */
        public function __construct()
        {
-               if (version_compare(PHP_VERSION, '5.2', '<'))
+               if (version_compare(PHP_VERSION, '5.3', '<'))
                {
-                       trigger_error('PHP 4.x, 5.0 and 5.1 are no longer supported. Please upgrade to PHP 5.2 or newer.');
+                       trigger_error('Please upgrade to PHP 5.3 or newer.');
                        die();
                }
 
@@ -1294,6 +1300,7 @@ class SimplePie
                // Check absolute bare minimum requirements.
                if (!extension_loaded('xml') || !extension_loaded('pcre'))
                {
+                       $this->error = 'XML or PCRE extensions not loaded!';
                        return false;
                }
                // Then check the xml extension is sane (i.e., libxml 2.7.x issue on PHP < 5.2.9 and libxml 2.7.0 to 2.7.2 on any version) if we don't have xmlreader.
@@ -1375,6 +1382,13 @@ class SimplePie
 
                        list($headers, $sniffed) = $fetched;
                }
+               
+               // Empty response check
+               if(empty($this->raw_data)){
+                       $this->error = "A feed could not be found at `$this->feed_url`. Empty body.";
+                       $this->registry->call('Misc', 'error', array($this->error, E_USER_NOTICE, __FILE__, __LINE__));
+                       return false;
+               }
 
                // Set up array of possible encodings
                $encodings = array();
@@ -1438,7 +1452,7 @@ class SimplePie
                                        $this->data = $parser->get_data();
                                        if (!($this->get_type() & ~SIMPLEPIE_TYPE_NONE))
                                        {
-                                               $this->error = "A feed could not be found at $this->feed_url. This does not appear to be a valid RSS or Atom feed.";
+                                               $this->error = "A feed could not be found at `$this->feed_url`. This does not appear to be a valid RSS or Atom feed.";
                                                $this->registry->call('Misc', 'error', array($this->error, E_USER_NOTICE, __FILE__, __LINE__));
                                                return false;
                                        }
@@ -1467,7 +1481,22 @@ class SimplePie
                }
                else
                {
-                       $this->error = 'The data could not be converted to UTF-8. You MUST have either the iconv or mbstring extension installed. Upgrading to PHP 5.x (which includes iconv) is highly recommended.';
+                       $this->error = 'The data could not be converted to UTF-8.';
+                       if (!extension_loaded('mbstring') && !extension_loaded('iconv') && !class_exists('\UConverter')) {
+                               $this->error .= ' You MUST have either the iconv, mbstring or intl (PHP 5.5+) extension installed and enabled.';
+                       } else {
+                               $missingExtensions = array();
+                               if (!extension_loaded('iconv')) {
+                                       $missingExtensions[] = 'iconv';
+                               }
+                               if (!extension_loaded('mbstring')) {
+                                       $missingExtensions[] = 'mbstring';
+                               }
+                               if (!class_exists('\UConverter')) {
+                                       $missingExtensions[] = 'intl (PHP 5.5+)';
+                               }
+                               $this->error .= ' Try installing/enabling the ' . implode(' or ', $missingExtensions) . ' extension.';
+                       }
                }
 
                $this->registry->call('Misc', 'error', array($this->error, E_USER_NOTICE, __FILE__, __LINE__));
index 92d511e..df0f13f 100644 (file)
@@ -56,7 +56,7 @@ class SimplePie_Category
        /**
         * Category identifier
         *
-        * @var string
+        * @var string|null
         * @see get_term
         */
        var $term;
@@ -64,7 +64,7 @@ class SimplePie_Category
        /**
         * Categorization scheme identifier
         *
-        * @var string
+        * @var string|null
         * @see get_scheme()
         */
        var $scheme;
@@ -72,23 +72,36 @@ class SimplePie_Category
        /**
         * Human readable label
         *
-        * @var string
+        * @var string|null
         * @see get_label()
         */
        var $label;
 
+       /**
+        * Category type
+        * 
+        * category for <category>
+        * subject for <dc:subject>
+        *
+        * @var string|null
+        * @see get_type()
+        */
+       var $type;
+
        /**
         * Constructor, used to input the data
         *
-        * @param string $term
-        * @param string $scheme
-        * @param string $label
+        * @param string|null $term
+        * @param string|null $scheme
+        * @param string|null $label
+        * @param string|null $type
         */
-       public function __construct($term = null, $scheme = null, $label = null)
+       public function __construct($term = null, $scheme = null, $label = null, $type = null)
        {
                $this->term = $term;
                $this->scheme = $scheme;
                $this->label = $label;
+               $this->type = $type;
        }
 
        /**
@@ -109,14 +122,7 @@ class SimplePie_Category
         */
        public function get_term()
        {
-               if ($this->term !== null)
-               {
-                       return $this->term;
-               }
-               else
-               {
-                       return null;
-               }
+               return $this->term;
        }
 
        /**
@@ -126,31 +132,32 @@ class SimplePie_Category
         */
        public function get_scheme()
        {
-               if ($this->scheme !== null)
-               {
-                       return $this->scheme;
-               }
-               else
-               {
-                       return null;
-               }
+               return $this->scheme;
        }
 
        /**
         * Get the human readable label
         *
+        * @param bool $strict
         * @return string|null
         */
-       public function get_label()
+       public function get_label($strict = false)
        {
-               if ($this->label !== null)
-               {
-                       return $this->label;
-               }
-               else
+               if ($this->label === null && $strict !== true)
                {
                        return $this->get_term();
                }
+               return $this->label;
+       }
+
+       /**
+        * Get the category type
+        *
+        * @return string|null
+        */
+       public function get_type()
+       {
+               return $this->type;
        }
 }
 
index a681026..ff35de6 100644 (file)
@@ -255,7 +255,7 @@ class SimplePie_Content_Type_Sniffer
        public function feed_or_html()
        {
                $len = strlen($this->file->body);
-               $pos = strspn($this->file->body, "\x09\x0A\x0D\x20");
+               $pos = strspn($this->file->body, "\x09\x0A\x0D\x20\xEF\xBB\xBF");
 
                while ($pos < $len)
                {
index a609adf..e670e05 100644 (file)
@@ -227,7 +227,7 @@ class SimplePie_File
                                                if ($parser->parse())
                                                {
                                                        $this->headers = $parser->headers;
-                                                       $this->body = trim($parser->body);
+                                                       $this->body = $parser->body;
                                                        $this->status_code = $parser->status_code;
                                                        if ((in_array($this->status_code, array(300, 301, 302, 303, 307)) || $this->status_code > 307 && $this->status_code < 400) && isset($this->headers['location']) && $this->redirects < $redirects)
                                                        {
index 5ffc2d2..00f4179 100644 (file)
@@ -206,9 +206,10 @@ class SimplePie_Item
         *
         * @since Beta 2
         * @param boolean $hash Should we force using a hash instead of the supplied ID?
-        * @return string
+        * @param string|false $fn User-supplied function to generate an hash
+        * @return string|null
         */
-       public function get_id($hash = false, $fn = '')
+       public function get_id($hash = false, $fn = 'md5')
        {
                if (!$hash)
                {
@@ -237,7 +238,15 @@ class SimplePie_Item
                                return $this->sanitize($this->data['attribs'][SIMPLEPIE_NAMESPACE_RDF]['about'], SIMPLEPIE_CONSTRUCT_TEXT);
                        }
                }
-               if ($fn === '' || !is_callable($fn)) $fn = 'md5';
+               if ($fn === false)
+               {
+                       return null;
+               }
+               elseif (!is_callable($fn))
+               {
+                       trigger_error('User-supplied function $fn must be callable', E_USER_WARNING);
+                       $fn = 'md5';
+               }
                return call_user_func($fn,
                       $this->get_permalink().$this->get_title().$this->get_content());
        }
@@ -307,41 +316,50 @@ class SimplePie_Item
         */
        public function get_description($description_only = false)
        {
-               if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'summary'))
+               if (($tags = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'summary')) &&
+                   ($return = $this->sanitize($tags[0]['data'], $this->registry->call('Misc', 'atom_10_construct_type', array($tags[0]['attribs'])), $this->get_base($tags[0]))))
                {
-                       return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_10_construct_type', array($return[0]['attribs'])), $this->get_base($return[0]));
+                       return $return;
                }
-               elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'summary'))
+               elseif (($tags = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'summary')) &&
+                       ($return = $this->sanitize($tags[0]['data'], $this->registry->call('Misc', 'atom_03_construct_type', array($tags[0]['attribs'])), $this->get_base($tags[0]))))
                {
-                       return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_03_construct_type', array($return[0]['attribs'])), $this->get_base($return[0]));
+                       return $return;
                }
-               elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'description'))
+               elseif (($tags = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'description')) &&
+                       ($return = $this->sanitize($tags[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($tags[0]))))
                {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
+                       return $return;
                }
-               elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'description'))
+               elseif (($tags = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'description')) &&
+                       ($return = $this->sanitize($tags[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($tags[0]))))
                {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0]));
+                       return $return;
                }
-               elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'description'))
+               elseif (($tags = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'description')) &&
+                       ($return = $this->sanitize($tags[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT)))
                {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+                       return $return;
                }
-               elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'description'))
+               elseif (($tags = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'description')) &&
+                       ($return = $this->sanitize($tags[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT)))
                {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+                       return $return;
                }
-               elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'summary'))
+               elseif (($tags = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'summary')) &&
+                       ($return = $this->sanitize($tags[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($tags[0]))))
                {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0]));
+                       return $return;
                }
-               elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'subtitle'))
+               elseif (($tags = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'subtitle')) &&
+                       ($return = $this->sanitize($tags[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT)))
                {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+                       return $return;
                }
-               elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'description'))
+               elseif (($tags = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'description')) &&
+                       ($return = $this->sanitize($tags[0]['data'], SIMPLEPIE_CONSTRUCT_HTML)))
                {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML);
+                       return $return;
                }
 
                elseif (!$description_only)
@@ -370,17 +388,20 @@ class SimplePie_Item
         */
        public function get_content($content_only = false)
        {
-               if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'content'))
+               if (($tags = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'content')) &&
+                   ($return = $this->sanitize($tags[0]['data'], $this->registry->call('Misc', 'atom_10_content_construct_type', array($tags[0]['attribs'])), $this->get_base($tags[0]))))
                {
-                       return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_10_content_construct_type', array($return[0]['attribs'])), $this->get_base($return[0]));
+                       return $return;
                }
-               elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'content'))
+               elseif (($tags = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'content')) &&
+                       ($return = $this->sanitize($tags[0]['data'], $this->registry->call('Misc', 'atom_03_construct_type', array($tags[0]['attribs'])), $this->get_base($tags[0]))))
                {
-                       return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_03_construct_type', array($return[0]['attribs'])), $this->get_base($return[0]));
+                       return $return;
                }
-               elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_10_MODULES_CONTENT, 'encoded'))
+               elseif (($tags = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_10_MODULES_CONTENT, 'encoded')) &&
+                       ($return = $this->sanitize($tags[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($tags[0]))))
                {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0]));
+                       return $return;
                }
                elseif (!$content_only)
                {
@@ -448,7 +469,8 @@ class SimplePie_Item
        {
                $categories = array();
 
-               foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'category') as $category)
+               $type = 'category';
+               foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, $type) as $category)
                {
                        $term = null;
                        $scheme = null;
@@ -465,9 +487,9 @@ class SimplePie_Item
                        {
                                $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_HTML);
                        }
-                       $categories[] = $this->registry->create('Category', array($term, $scheme, $label));
+                       $categories[] = $this->registry->create('Category', array($term, $scheme, $label, $type));
                }
-               foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'category') as $category)
+               foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, $type) as $category)
                {
                        // This is really the label, but keep this as the term also for BC.
                        // Label will also work on retrieving because that falls back to term.
@@ -480,15 +502,17 @@ class SimplePie_Item
                        {
                                $scheme = null;
                        }
-                       $categories[] = $this->registry->create('Category', array($term, $scheme, null));
+                       $categories[] = $this->registry->create('Category', array($term, $scheme, null, $type));
                }
-               foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'subject') as $category)
+
+               $type = 'subject';
+               foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, $type) as $category)
                {
-                       $categories[] = $this->registry->create('Category', array($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_HTML), null, null));
+                       $categories[] = $this->registry->create('Category', array($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_HTML), null, null, $type));
                }
-               foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'subject') as $category)
+               foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, $type) as $category)
                {
-                       $categories[] = $this->registry->create('Category', array($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_HTML), null, null));
+                       $categories[] = $this->registry->create('Category', array($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_HTML), null, null, $type));
                }
 
                if (!empty($categories))
@@ -2802,9 +2826,17 @@ class SimplePie_Item
                                        {
                                                $length = ceil($link['attribs']['']['length']);
                                        }
+                                       if (isset($link['attribs']['']['title']))
+                                       {
+                                               $title = $this->sanitize($link['attribs']['']['title'], SIMPLEPIE_CONSTRUCT_TEXT);
+                                       }
+                                       else
+                                       {
+                                               $title = $title_parent;
+                                       }
 
                                        // Since we don't have group or content for these, we'll just pass the '*_parent' variables directly to the constructor
-                                       $this->data['enclosures'][] = $this->registry->create('Enclosure', array($url, $type, $length, null, $bitrate, $captions_parent, $categories_parent, $channels, $copyrights_parent, $credits_parent, $description_parent, $duration_parent, $expression, $framerate, $hashes_parent, $height, $keywords_parent, $lang, $medium, $player_parent, $ratings_parent, $restrictions_parent, $samplingrate, $thumbnails_parent, $title_parent, $width));
+                                       $this->data['enclosures'][] = $this->registry->create('Enclosure', array($url, $type, $length, null, $bitrate, $captions_parent, $categories_parent, $channels, $copyrights_parent, $credits_parent, $description_parent, $duration_parent, $expression, $framerate, $hashes_parent, $height, $keywords_parent, $lang, $medium, $player_parent, $ratings_parent, $restrictions_parent, $samplingrate, $thumbnails_parent, $title, $width));
                                }
                        }
 
index 1010066..bc314c2 100644 (file)
@@ -232,7 +232,7 @@ class SimplePie_Locator
                        }
                        if ($link->hasAttribute('href') && $link->hasAttribute('rel'))
                        {
-                               $rel = array_unique($this->registry->call('Misc', 'space_seperated_tokens', array(strtolower($link->getAttribute('rel')))));
+                               $rel = array_unique($this->registry->call('Misc', 'space_separated_tokens', array(strtolower($link->getAttribute('rel')))));
                                $line = method_exists($link, 'getLineNo') ? $link->getLineNo() : 1;
 
                                if ($this->base_location < $line)
index c1ae3b5..2e3107e 100644 (file)
@@ -333,11 +333,16 @@ class SimplePie_Misc
                {
                        return $return;
                }
-               // This is last, as behaviour of this varies with OS userland and PHP version
+               // This is third, as behaviour of this varies with OS userland and PHP version
                elseif (function_exists('iconv') && ($return = SimplePie_Misc::change_encoding_iconv($data, $input, $output)))
                {
                        return $return;
                }
+               // This is last, as behaviour of this varies with OS userland and PHP version
+               elseif (class_exists('\UConverter') && ($return = SimplePie_Misc::change_encoding_uconverter($data, $input, $output)))
+               {
+                       return $return;
+               }
                // If we can't do anything, just fail
                else
                {
@@ -388,6 +393,17 @@ class SimplePie_Misc
                return @iconv($input, $output, $data);
        }
 
+       /**
+        * @param string $data
+        * @param string $input
+        * @param string $output
+        * @return string|false
+        */
+       protected static function change_encoding_uconverter($data, $input, $output)
+       {
+               return @\UConverter::transcode($data, $output, $input);
+       }
+
        /**
         * Normalize an encoding name
         *
@@ -1942,7 +1958,7 @@ class SimplePie_Misc
                return (bool) preg_match('/^([A-Za-z0-9\-._~\x{A0}-\x{D7FF}\x{F900}-\x{FDCF}\x{FDF0}-\x{FFEF}\x{10000}-\x{1FFFD}\x{20000}-\x{2FFFD}\x{30000}-\x{3FFFD}\x{40000}-\x{4FFFD}\x{50000}-\x{5FFFD}\x{60000}-\x{6FFFD}\x{70000}-\x{7FFFD}\x{80000}-\x{8FFFD}\x{90000}-\x{9FFFD}\x{A0000}-\x{AFFFD}\x{B0000}-\x{BFFFD}\x{C0000}-\x{CFFFD}\x{D0000}-\x{DFFFD}\x{E1000}-\x{EFFFD}!$&\'()*+,;=@]|(%[0-9ABCDEF]{2}))+$/u', $string);
        }
 
-       public static function space_seperated_tokens($string)
+       public static function space_separated_tokens($string)
        {
                $space_characters = "\x20\x09\x0A\x0B\x0C\x0D";
                $string_length = strlen($string);
index a415ba6..1f21566 100644 (file)
@@ -630,7 +630,7 @@ class SimplePie_Parse_Date
        /**
         * Parse a superset of W3C-DTF (allows hyphens and colons to be omitted, as
         * well as allowing any of upper or lower case "T", horizontal tabs, or
-        * spaces to be used as the time seperator (including more than one))
+        * spaces to be used as the time separator (including more than one))
         *
         * @access protected
         * @return int Timestamp
@@ -690,7 +690,7 @@ class SimplePie_Parse_Date
                        }
 
                        // Convert the number of seconds to an integer, taking decimals into account
-                       $second = round($match[6] + $match[7] / pow(10, strlen($match[7])));
+                       $second = round((int)$match[6] + (int)$match[7] / pow(10, strlen($match[7])));
 
                        return gmmktime($match[4], $match[5], $second, $match[2], $match[3], $match[1]) - $timezone;
                }
index aeb7039..5a11721 100644 (file)
@@ -273,10 +273,6 @@ class SimplePie_Sanitize
                                $document = new DOMDocument();
                                $document->encoding = 'UTF-8';
 
-                               // See https://github.com/simplepie/simplepie/issues/334
-                               $unique_tag = '#'.uniqid().'#';
-                               $data = trim($unique_tag . $data . $unique_tag);
-
                                $data = $this->preprocess($data, $type);
 
                                set_error_handler(array('SimplePie_Misc', 'silence_errors'));
@@ -366,11 +362,17 @@ class SimplePie_Sanitize
                                        }
                                }
 
+                               // Get content node
+                               $div = $document->getElementsByTagName('body')->item(0)->firstChild;
                                // Finally, convert to a HTML string
-                               $data = trim($document->saveHTML());
-                               $result = explode($unique_tag, $data);
-                               // The tags may not be found again if there was invalid markup.
-                               $data = count($result) === 3 ? $result[1] : '';
+                               if (version_compare(PHP_VERSION, '5.3.6', '>='))
+                               {
+                                       $data = trim($document->saveHTML($div));
+                               }
+                               else
+                               {
+                                       $data = trim($document->saveXML($div));
+                               }
 
                                if ($this->remove_div)
                                {
index 4ec9439..303c9b2 100644 (file)
@@ -15,4 +15,10 @@ Updated to version 1.4.2 (MDL-56001)
 The actual code has not been updated and still reads 1.4.1, but this is tagged as 1.4.2 on the site.
 My guess is that they forgot to update the numbers when tagging the new version number. An issue has
 been created on their github account (https://github.com/simplepie/simplepie/issues/472).
-By Adrian Greeve <adrian@moodle.com>
\ No newline at end of file
+By Adrian Greeve <adrian@moodle.com>
+
+
+2017/09/28
+==========
+Updated to version 1.5.0 (MDL-60236)
+By Ankit Agarwal <ankit.agrr@gmail.com>
\ No newline at end of file
index f19db53..45d591e 100644 (file)
     <location>simplepie</location>
     <name>SimplePie</name>
     <license>BSD</license>
-    <version>1.4.2</version>
+    <version>1.5.0</version>
     <licenseversion></licenseversion>
   </library>
   <library>