MDL-60236 libraries: Upgrade simplepie to 1.5.0

This commit is contained in:
Ankit Agarwal 2017-09-28 10:19:33 +05:30
parent 22e99d61ca
commit 4f3b046cf9
13 changed files with 210 additions and 93 deletions

26
lib/simplepie/LICENSE.txt Normal file
View file

@ -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.

View file

@ -5,7 +5,7 @@
* A PHP-Based RSS and Atom Feed Framework. * A PHP-Based RSS and Atom Feed Framework.
* Takes the hard work out of managing a complete RSS/Atom solution. * 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. * All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without modification, are * Redistribution and use in source and binary forms, with or without modification, are
@ -33,8 +33,7 @@
* POSSIBILITY OF SUCH DAMAGE. * POSSIBILITY OF SUCH DAMAGE.
* *
* @package SimplePie * @package SimplePie
* @version 1.3.1 * @copyright 2004-2016 Ryan Parman, Geoffrey Sneddon, Ryan McCue
* @copyright 2004-2012 Ryan Parman, Geoffrey Sneddon, Ryan McCue
* @author Ryan Parman * @author Ryan Parman
* @author Geoffrey Sneddon * @author Geoffrey Sneddon
* @author Ryan McCue * @author Ryan McCue

View file

@ -5,7 +5,7 @@
* A PHP-Based RSS and Atom Feed Framework. * A PHP-Based RSS and Atom Feed Framework.
* Takes the hard work out of managing a complete RSS/Atom solution. * 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. * All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without modification, are * Redistribution and use in source and binary forms, with or without modification, are
@ -33,8 +33,8 @@
* POSSIBILITY OF SUCH DAMAGE. * POSSIBILITY OF SUCH DAMAGE.
* *
* @package SimplePie * @package SimplePie
* @version 1.4.1 * @version 1.5
* @copyright 2004-2016 Ryan Parman, Geoffrey Sneddon, Ryan McCue * @copyright 2004-2017 Ryan Parman, Geoffrey Sneddon, Ryan McCue
* @author Ryan Parman * @author Ryan Parman
* @author Geoffrey Sneddon * @author Geoffrey Sneddon
* @author Ryan McCue * @author Ryan McCue
@ -50,7 +50,7 @@ define('SIMPLEPIE_NAME', 'SimplePie');
/** /**
* SimplePie Version * SimplePie Version
*/ */
define('SIMPLEPIE_VERSION', '1.4.1'); define('SIMPLEPIE_VERSION', '1.5');
/** /**
* SimplePie Build * 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'); 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 * The SimplePie class contains feed level data and options
* *
@ -659,9 +665,9 @@ class SimplePie
*/ */
public function __construct() 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(); die();
} }
@ -1294,6 +1300,7 @@ class SimplePie
// Check absolute bare minimum requirements. // Check absolute bare minimum requirements.
if (!extension_loaded('xml') || !extension_loaded('pcre')) if (!extension_loaded('xml') || !extension_loaded('pcre'))
{ {
$this->error = 'XML or PCRE extensions not loaded!';
return false; 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. // 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; 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 // Set up array of possible encodings
$encodings = array(); $encodings = array();
@ -1438,7 +1452,7 @@ class SimplePie
$this->data = $parser->get_data(); $this->data = $parser->get_data();
if (!($this->get_type() & ~SIMPLEPIE_TYPE_NONE)) 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__)); $this->registry->call('Misc', 'error', array($this->error, E_USER_NOTICE, __FILE__, __LINE__));
return false; return false;
} }
@ -1467,7 +1481,22 @@ class SimplePie
} }
else 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__)); $this->registry->call('Misc', 'error', array($this->error, E_USER_NOTICE, __FILE__, __LINE__));

View file

@ -56,7 +56,7 @@ class SimplePie_Category
/** /**
* Category identifier * Category identifier
* *
* @var string * @var string|null
* @see get_term * @see get_term
*/ */
var $term; var $term;
@ -64,7 +64,7 @@ class SimplePie_Category
/** /**
* Categorization scheme identifier * Categorization scheme identifier
* *
* @var string * @var string|null
* @see get_scheme() * @see get_scheme()
*/ */
var $scheme; var $scheme;
@ -72,23 +72,36 @@ class SimplePie_Category
/** /**
* Human readable label * Human readable label
* *
* @var string * @var string|null
* @see get_label() * @see get_label()
*/ */
var $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 * Constructor, used to input the data
* *
* @param string $term * @param string|null $term
* @param string $scheme * @param string|null $scheme
* @param string $label * @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->term = $term;
$this->scheme = $scheme; $this->scheme = $scheme;
$this->label = $label; $this->label = $label;
$this->type = $type;
} }
/** /**
@ -109,14 +122,7 @@ class SimplePie_Category
*/ */
public function get_term() public function get_term()
{ {
if ($this->term !== null) return $this->term;
{
return $this->term;
}
else
{
return null;
}
} }
/** /**
@ -126,31 +132,32 @@ class SimplePie_Category
*/ */
public function get_scheme() public function get_scheme()
{ {
if ($this->scheme !== null) return $this->scheme;
{
return $this->scheme;
}
else
{
return null;
}
} }
/** /**
* Get the human readable label * Get the human readable label
* *
* @param bool $strict
* @return string|null * @return string|null
*/ */
public function get_label() public function get_label($strict = false)
{ {
if ($this->label !== null) if ($this->label === null && $strict !== true)
{
return $this->label;
}
else
{ {
return $this->get_term(); return $this->get_term();
} }
return $this->label;
}
/**
* Get the category type
*
* @return string|null
*/
public function get_type()
{
return $this->type;
} }
} }

View file

@ -255,7 +255,7 @@ class SimplePie_Content_Type_Sniffer
public function feed_or_html() public function feed_or_html()
{ {
$len = strlen($this->file->body); $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) while ($pos < $len)
{ {

View file

@ -227,7 +227,7 @@ class SimplePie_File
if ($parser->parse()) if ($parser->parse())
{ {
$this->headers = $parser->headers; $this->headers = $parser->headers;
$this->body = trim($parser->body); $this->body = $parser->body;
$this->status_code = $parser->status_code; $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) 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)
{ {

View file

@ -206,9 +206,10 @@ class SimplePie_Item
* *
* @since Beta 2 * @since Beta 2
* @param boolean $hash Should we force using a hash instead of the supplied ID? * @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) if (!$hash)
{ {
@ -237,7 +238,15 @@ class SimplePie_Item
return $this->sanitize($this->data['attribs'][SIMPLEPIE_NAMESPACE_RDF]['about'], SIMPLEPIE_CONSTRUCT_TEXT); 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, return call_user_func($fn,
$this->get_permalink().$this->get_title().$this->get_content()); $this->get_permalink().$this->get_title().$this->get_content());
} }
@ -307,41 +316,50 @@ class SimplePie_Item
*/ */
public function get_description($description_only = false) 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) elseif (!$description_only)
@ -370,17 +388,20 @@ class SimplePie_Item
*/ */
public function get_content($content_only = false) 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) elseif (!$content_only)
{ {
@ -448,7 +469,8 @@ class SimplePie_Item
{ {
$categories = array(); $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; $term = null;
$scheme = null; $scheme = null;
@ -465,9 +487,9 @@ class SimplePie_Item
{ {
$label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_HTML); $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. // 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. // Label will also work on retrieving because that falls back to term.
@ -480,15 +502,17 @@ class SimplePie_Item
{ {
$scheme = null; $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)) if (!empty($categories))
@ -2802,9 +2826,17 @@ class SimplePie_Item
{ {
$length = ceil($link['attribs']['']['length']); $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 // 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));
} }
} }

View file

@ -232,7 +232,7 @@ class SimplePie_Locator
} }
if ($link->hasAttribute('href') && $link->hasAttribute('rel')) 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; $line = method_exists($link, 'getLineNo') ? $link->getLineNo() : 1;
if ($this->base_location < $line) if ($this->base_location < $line)

View file

@ -333,11 +333,16 @@ class SimplePie_Misc
{ {
return $return; 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))) elseif (function_exists('iconv') && ($return = SimplePie_Misc::change_encoding_iconv($data, $input, $output)))
{ {
return $return; 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 // If we can't do anything, just fail
else else
{ {
@ -388,6 +393,17 @@ class SimplePie_Misc
return @iconv($input, $output, $data); 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 * 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); 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"; $space_characters = "\x20\x09\x0A\x0B\x0C\x0D";
$string_length = strlen($string); $string_length = strlen($string);

View file

@ -630,7 +630,7 @@ class SimplePie_Parse_Date
/** /**
* Parse a superset of W3C-DTF (allows hyphens and colons to be omitted, as * 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 * 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 * @access protected
* @return int Timestamp * @return int Timestamp
@ -690,7 +690,7 @@ class SimplePie_Parse_Date
} }
// Convert the number of seconds to an integer, taking decimals into account // 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; return gmmktime($match[4], $match[5], $second, $match[2], $match[3], $match[1]) - $timezone;
} }

View file

@ -273,10 +273,6 @@ class SimplePie_Sanitize
$document = new DOMDocument(); $document = new DOMDocument();
$document->encoding = 'UTF-8'; $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); $data = $this->preprocess($data, $type);
set_error_handler(array('SimplePie_Misc', 'silence_errors')); 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 // Finally, convert to a HTML string
$data = trim($document->saveHTML()); if (version_compare(PHP_VERSION, '5.3.6', '>='))
$result = explode($unique_tag, $data); {
// The tags may not be found again if there was invalid markup. $data = trim($document->saveHTML($div));
$data = count($result) === 3 ? $result[1] : ''; }
else
{
$data = trim($document->saveXML($div));
}
if ($this->remove_div) if ($this->remove_div)
{ {

View 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. 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 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). been created on their github account (https://github.com/simplepie/simplepie/issues/472).
By Adrian Greeve <adrian@moodle.com> By Adrian Greeve <adrian@moodle.com>
2017/09/28
==========
Updated to version 1.5.0 (MDL-60236)
By Ankit Agarwal <ankit.agrr@gmail.com>

View file

@ -123,7 +123,7 @@
<location>simplepie</location> <location>simplepie</location>
<name>SimplePie</name> <name>SimplePie</name>
<license>BSD</license> <license>BSD</license>
<version>1.4.2</version> <version>1.5.0</version>
<licenseversion></licenseversion> <licenseversion></licenseversion>
</library> </library>
<library> <library>