WordPress.org

Make WordPress Core


Ignore:
Timestamp:
05/01/2020 02:24:42 PM (18 months ago)
Author:
desrosj
Message:

External Libraries: Update the SimplePie library to the latest version (1.5.5).

This brings SimplePie in sync with the most up to date version, 1.5.5.

This update brings many bug fixes, small enhancements, and PHP compatibility fixes for newer versions of PHP.

For a full list of changes, see https://github.com/simplepie/simplepie/blob/master/CHANGELOG.md#155-may-1-2020.

Props dshanske, slushman, etruel, wpshades, dmenard, desrosj, hareesh-pillai, stevenkword, jrf, Ipstenu, johnbillion.
Fixes #36669.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/SimplePie/Locator.php

    r22798 r47733  
    66 * Takes the hard work out of managing a complete RSS/Atom solution.
    77 *
    8  * Copyright (c) 2004-2012, Ryan Parman, Geoffrey Sneddon, Ryan McCue, and contributors
     8 * Copyright (c) 2004-2016, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
    99 * All rights reserved.
    1010 *
     
    3434 *
    3535 * @package SimplePie
    36  * @version 1.3.1
    37  * @copyright 2004-2012 Ryan Parman, Geoffrey Sneddon, Ryan McCue
     36 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
    3837 * @author Ryan Parman
    39  * @author Geoffrey Sneddon
     38 * @author Sam Sneddon
    4039 * @author Ryan McCue
    4140 * @link http://simplepie.org/ SimplePie
     
    6463    var $checked_feeds = 0;
    6564    var $max_checked_feeds = 10;
     65    var $force_fsockopen = false;
     66    var $curl_options = array();
    6667    protected $registry;
    6768
    68     public function __construct(SimplePie_File $file, $timeout = 10, $useragent = null, $max_checked_feeds = 10)
     69    public function __construct(SimplePie_File $file, $timeout = 10, $useragent = null, $max_checked_feeds = 10, $force_fsockopen = false, $curl_options = array())
    6970    {
    7071        $this->file = $file;
     
    7273        $this->timeout = $timeout;
    7374        $this->max_checked_feeds = $max_checked_feeds;
     75        $this->force_fsockopen = $force_fsockopen;
     76        $this->curl_options = $curl_options;
    7477
    7578        if (class_exists('DOMDocument'))
     
    122125            if ($type & SIMPLEPIE_LOCATOR_LOCAL_EXTENSION && $working = $this->extension($this->local))
    123126            {
    124                 return $working;
     127                return $working[0];
    125128            }
    126129
    127130            if ($type & SIMPLEPIE_LOCATOR_LOCAL_BODY && $working = $this->body($this->local))
    128131            {
    129                 return $working;
     132                return $working[0];
    130133            }
    131134
    132135            if ($type & SIMPLEPIE_LOCATOR_REMOTE_EXTENSION && $working = $this->extension($this->elsewhere))
    133136            {
    134                 return $working;
     137                return $working[0];
    135138            }
    136139
    137140            if ($type & SIMPLEPIE_LOCATOR_REMOTE_BODY && $working = $this->body($this->elsewhere))
    138141            {
    139                 return $working;
    140             }
    141         }
    142         return null;
    143     }
    144 
    145     public function is_feed($file)
     142                return $working[0];
     143            }
     144        }
     145        return null;
     146    }
     147
     148    public function is_feed($file, $check_html = false)
    146149    {
    147150        if ($file->method & SIMPLEPIE_FILE_SOURCE_REMOTE)
     
    149152            $sniffer = $this->registry->create('Content_Type_Sniffer', array($file));
    150153            $sniffed = $sniffer->get_type();
    151             if (in_array($sniffed, array('application/rss+xml', 'application/rdf+xml', 'text/rdf', 'application/atom+xml', 'text/xml', 'application/xml')))
    152             {
    153                 return true;
    154             }
    155             else
    156             {
    157                 return false;
    158             }
     154            $mime_types = array('application/rss+xml', 'application/rdf+xml',
     155                                'text/rdf', 'application/atom+xml', 'text/xml',
     156                                'application/xml', 'application/x-rss+xml');
     157            if ($check_html)
     158            {
     159                $mime_types[] = 'text/html';
     160            }
     161
     162            return in_array($sniffed, $mime_types);
    159163        }
    160164        elseif ($file->method & SIMPLEPIE_FILE_SOURCE_LOCAL)
     
    205209            return array_values($feeds);
    206210        }
    207         else
    208         {
    209             return null;
    210         }
     211
     212        return null;
    211213    }
    212214
     
    227229            if ($link->hasAttribute('href') && $link->hasAttribute('rel'))
    228230            {
    229                 $rel = array_unique($this->registry->call('Misc', 'space_seperated_tokens', array(strtolower($link->getAttribute('rel')))));
     231                $rel = array_unique($this->registry->call('Misc', 'space_separated_tokens', array(strtolower($link->getAttribute('rel')))));
    230232                $line = method_exists($link, 'getLineNo') ? $link->getLineNo() : 1;
    231233
     
    243245                }
    244246
    245                 if (!in_array($href, $done) && in_array('feed', $rel) || (in_array('alternate', $rel) && !in_array('stylesheet', $rel) && $link->hasAttribute('type') && in_array(strtolower($this->registry->call('Misc', 'parse_mime', array($link->getAttribute('type')))), array('application/rss+xml', 'application/atom+xml'))) && !isset($feeds[$href]))
     247                if (!in_array($href, $done) && in_array('feed', $rel) || (in_array('alternate', $rel) && !in_array('stylesheet', $rel) && $link->hasAttribute('type') && in_array(strtolower($this->registry->call('Misc', 'parse_mime', array($link->getAttribute('type')))), array('text/html', 'application/rss+xml', 'application/atom+xml'))) && !isset($feeds[$href]))
    246248                {
    247249                    $this->checked_feeds++;
     
    249251                        'Accept' => 'application/atom+xml, application/rss+xml, application/rdf+xml;q=0.9, application/xml;q=0.8, text/xml;q=0.8, text/html;q=0.7, unknown/unknown;q=0.1, application/unknown;q=0.1, */*;q=0.1',
    250252                    );
    251                     $feed = $this->registry->create('File', array($href, $this->timeout, 5, $headers, $this->useragent));
    252                     if ($feed->success && ($feed->method & SIMPLEPIE_FILE_SOURCE_REMOTE === 0 || ($feed->status_code === 200 || $feed->status_code > 206 && $feed->status_code < 300)) && $this->is_feed($feed))
     253                    $feed = $this->registry->create('File', array($href, $this->timeout, 5, $headers, $this->useragent, $this->force_fsockopen, $this->curl_options));
     254                    if ($feed->success && ($feed->method & SIMPLEPIE_FILE_SOURCE_REMOTE === 0 || ($feed->status_code === 200 || $feed->status_code > 206 && $feed->status_code < 300)) && $this->is_feed($feed, true))
    253255                    {
    254256                        $feeds[$href] = $feed;
     
    276278                $href = trim($link->getAttribute('href'));
    277279                $parsed = $this->registry->call('Misc', 'parse_url', array($href));
    278                 if ($parsed['scheme'] === '' || preg_match('/^(http(s)|feed)?$/i', $parsed['scheme']))
     280                if ($parsed['scheme'] === '' || preg_match('/^(https?|feed)?$/i', $parsed['scheme']))
    279281                {
    280282                    if (method_exists($link, 'getLineNo') && $this->base_location < $link->getLineNo())
     
    313315    }
    314316
     317    public function get_rel_link($rel)
     318    {
     319        if ($this->dom === null)
     320        {
     321            throw new SimplePie_Exception('DOMDocument not found, unable to use '.
     322                                          'locator');
     323        }
     324        if (!class_exists('DOMXpath'))
     325        {
     326            throw new SimplePie_Exception('DOMXpath not found, unable to use '.
     327                                          'get_rel_link');
     328        }
     329
     330        $xpath = new DOMXpath($this->dom);
     331        $query = '//a[@rel and @href] | //link[@rel and @href]';
     332        foreach ($xpath->query($query) as $link)
     333        {
     334            $href = trim($link->getAttribute('href'));
     335            $parsed = $this->registry->call('Misc', 'parse_url', array($href));
     336            if ($parsed['scheme'] === '' ||
     337                preg_match('/^https?$/i', $parsed['scheme']))
     338            {
     339                if (method_exists($link, 'getLineNo') &&
     340                    $this->base_location < $link->getLineNo())
     341                {
     342                    $href =
     343                        $this->registry->call('Misc', 'absolutize_url',
     344                                              array(trim($link->getAttribute('href')),
     345                                                    $this->base));
     346                }
     347                else
     348                {
     349                    $href =
     350                        $this->registry->call('Misc', 'absolutize_url',
     351                                              array(trim($link->getAttribute('href')),
     352                                                    $this->http_base));
     353                }
     354                if ($href === false)
     355                {
     356                    return null;
     357                }
     358                $rel_values = explode(' ', strtolower($link->getAttribute('rel')));
     359                if (in_array($rel, $rel_values))
     360                {
     361                    return $href;
     362                }
     363            }
     364        }
     365        return null;
     366    }
     367
    315368    public function extension(&$array)
    316369    {
     
    328381                    'Accept' => 'application/atom+xml, application/rss+xml, application/rdf+xml;q=0.9, application/xml;q=0.8, text/xml;q=0.8, text/html;q=0.7, unknown/unknown;q=0.1, application/unknown;q=0.1, */*;q=0.1',
    329382                );
    330                 $feed = $this->registry->create('File', array($value, $this->timeout, 5, $headers, $this->useragent));
     383                $feed = $this->registry->create('File', array($value, $this->timeout, 5, $headers, $this->useragent, $this->force_fsockopen, $this->curl_options));
    331384                if ($feed->success && ($feed->method & SIMPLEPIE_FILE_SOURCE_REMOTE === 0 || ($feed->status_code === 200 || $feed->status_code > 206 && $feed->status_code < 300)) && $this->is_feed($feed))
    332385                {
    333                     return $feed;
     386                    return array($feed);
    334387                }
    335388                else
     
    350403                break;
    351404            }
    352             if (preg_match('/(rss|rdf|atom|xml)/i', $value))
     405            if (preg_match('/(feed|rss|rdf|atom|xml)/i', $value))
    353406            {
    354407                $this->checked_feeds++;
     
    356409                    'Accept' => 'application/atom+xml, application/rss+xml, application/rdf+xml;q=0.9, application/xml;q=0.8, text/xml;q=0.8, text/html;q=0.7, unknown/unknown;q=0.1, application/unknown;q=0.1, */*;q=0.1',
    357410                );
    358                 $feed = $this->registry->create('File', array($value, $this->timeout, 5, null, $this->useragent));
     411                $feed = $this->registry->create('File', array($value, $this->timeout, 5, null, $this->useragent, $this->force_fsockopen, $this->curl_options));
    359412                if ($feed->success && ($feed->method & SIMPLEPIE_FILE_SOURCE_REMOTE === 0 || ($feed->status_code === 200 || $feed->status_code > 206 && $feed->status_code < 300)) && $this->is_feed($feed))
    360413                {
    361                     return $feed;
     414                    return array($feed);
    362415                }
    363416                else
     
    370423    }
    371424}
    372 
Note: See TracChangeset for help on using the changeset viewer.