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/Item.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
     
    123122    public function __destruct()
    124123    {
    125         if ((version_compare(PHP_VERSION, '5.3', '<') || !gc_enabled()) && !ini_get('zend.ze1_compatibility_mode'))
     124        if (!gc_enabled())
    126125        {
    127126            unset($this->feed);
     
    149148            return $this->data['child'][$namespace][$tag];
    150149        }
    151         else
    152         {
    153             return null;
    154         }
     150
     151        return null;
    155152    }
    156153
     
    204201     * Uses `<atom:id>`, `<guid>`, `<dc:identifier>` or the `about` attribute
    205202     * for RDF. If none of these are supplied (or `$hash` is true), creates an
    206      * MD5 hash based on the permalink and title. If either of those are not
    207      * supplied, creates a hash based on the full feed data.
     203     * MD5 hash based on the permalink, title and content.
    208204     *
    209205     * @since Beta 2
    210206     * @param boolean $hash Should we force using a hash instead of the supplied ID?
    211      * @return string
    212      */
    213     public function get_id($hash = false)
     207     * @param string|false $fn User-supplied function to generate an hash
     208     * @return string|null
     209     */
     210    public function get_id($hash = false, $fn = 'md5')
    214211    {
    215212        if (!$hash)
     
    239236                return $this->sanitize($this->data['attribs'][SIMPLEPIE_NAMESPACE_RDF]['about'], SIMPLEPIE_CONSTRUCT_TEXT);
    240237            }
    241             elseif (($return = $this->get_permalink()) !== null)
    242             {
    243                 return $return;
    244             }
    245             elseif (($return = $this->get_title()) !== null)
    246             {
    247                 return $return;
    248             }
    249         }
    250         if ($this->get_permalink() !== null || $this->get_title() !== null)
    251         {
    252             return md5($this->get_permalink() . $this->get_title());
    253         }
    254         else
    255         {
    256             return md5(serialize($this->data));
    257         }
     238        }
     239        if ($fn === false)
     240        {
     241            return null;
     242        }
     243        elseif (!is_callable($fn))
     244        {
     245            trigger_error('User-supplied function $fn must be callable', E_USER_WARNING);
     246            $fn = 'md5';
     247        }
     248        return call_user_func($fn,
     249               $this->get_permalink().$this->get_title().$this->get_content());
    258250    }
    259251
     
    323315    public function get_description($description_only = false)
    324316    {
    325         if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'summary'))
    326         {
    327             return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_10_construct_type', array($return[0]['attribs'])), $this->get_base($return[0]));
    328         }
    329         elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'summary'))
    330         {
    331             return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_03_construct_type', array($return[0]['attribs'])), $this->get_base($return[0]));
    332         }
    333         elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'description'))
    334         {
    335             return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
    336         }
    337         elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'description'))
    338         {
    339             return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0]));
    340         }
    341         elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'description'))
    342         {
    343             return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
    344         }
    345         elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'description'))
    346         {
    347             return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
    348         }
    349         elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'summary'))
    350         {
    351             return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0]));
    352         }
    353         elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'subtitle'))
    354         {
    355             return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
    356         }
    357         elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'description'))
    358         {
    359             return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML);
     317        if (($tags = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'summary')) &&
     318            ($return = $this->sanitize($tags[0]['data'], $this->registry->call('Misc', 'atom_10_construct_type', array($tags[0]['attribs'])), $this->get_base($tags[0]))))
     319        {
     320            return $return;
     321        }
     322        elseif (($tags = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'summary')) &&
     323                ($return = $this->sanitize($tags[0]['data'], $this->registry->call('Misc', 'atom_03_construct_type', array($tags[0]['attribs'])), $this->get_base($tags[0]))))
     324        {
     325            return $return;
     326        }
     327        elseif (($tags = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'description')) &&
     328                ($return = $this->sanitize($tags[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($tags[0]))))
     329        {
     330            return $return;
     331        }
     332        elseif (($tags = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'description')) &&
     333                ($return = $this->sanitize($tags[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($tags[0]))))
     334        {
     335            return $return;
     336        }
     337        elseif (($tags = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'description')) &&
     338                ($return = $this->sanitize($tags[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT)))
     339        {
     340            return $return;
     341        }
     342        elseif (($tags = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'description')) &&
     343                ($return = $this->sanitize($tags[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT)))
     344        {
     345            return $return;
     346        }
     347        elseif (($tags = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'summary')) &&
     348                ($return = $this->sanitize($tags[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($tags[0]))))
     349        {
     350            return $return;
     351        }
     352        elseif (($tags = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'subtitle')) &&
     353                ($return = $this->sanitize($tags[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT)))
     354        {
     355            return $return;
     356        }
     357        elseif (($tags = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'description')) &&
     358                ($return = $this->sanitize($tags[0]['data'], SIMPLEPIE_CONSTRUCT_HTML)))
     359        {
     360            return $return;
    360361        }
    361362
     
    364365            return $this->get_content(true);
    365366        }
    366         else
    367         {
    368             return null;
    369         }
     367
     368        return null;
    370369    }
    371370
     
    386385    public function get_content($content_only = false)
    387386    {
    388         if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'content'))
    389         {
    390             return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_10_content_construct_type', array($return[0]['attribs'])), $this->get_base($return[0]));
    391         }
    392         elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'content'))
    393         {
    394             return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_03_construct_type', array($return[0]['attribs'])), $this->get_base($return[0]));
    395         }
    396         elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_10_MODULES_CONTENT, 'encoded'))
    397         {
    398             return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0]));
     387        if (($tags = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'content')) &&
     388            ($return = $this->sanitize($tags[0]['data'], $this->registry->call('Misc', 'atom_10_content_construct_type', array($tags[0]['attribs'])), $this->get_base($tags[0]))))
     389        {
     390            return $return;
     391        }
     392        elseif (($tags = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'content')) &&
     393                ($return = $this->sanitize($tags[0]['data'], $this->registry->call('Misc', 'atom_03_construct_type', array($tags[0]['attribs'])), $this->get_base($tags[0]))))
     394        {
     395            return $return;
     396        }
     397        elseif (($tags = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_10_MODULES_CONTENT, 'encoded')) &&
     398                ($return = $this->sanitize($tags[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($tags[0]))))
     399        {
     400            return $return;
    399401        }
    400402        elseif (!$content_only)
     
    402404            return $this->get_description(true);
    403405        }
    404         else
    405         {
    406             return null;
    407         }
     406
     407        return null;
     408    }
     409
     410    /**
     411     * Get the media:thumbnail of the item
     412     *
     413     * Uses `<media:thumbnail>`
     414     *
     415     *
     416     * @return array|null
     417     */
     418    public function get_thumbnail()
     419    {
     420        if (!isset($this->data['thumbnail']))
     421        {
     422            if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'thumbnail'))
     423            {
     424                $this->data['thumbnail'] = $return[0]['attribs'][''];
     425            }
     426            else
     427            {
     428                $this->data['thumbnail'] = null;
     429            }
     430        }
     431        return $this->data['thumbnail'];
    408432    }
    409433
     
    422446            return $categories[$key];
    423447        }
    424         else
    425         {
    426             return null;
    427         }
     448
     449        return null;
    428450    }
    429451
     
    434456     *
    435457     * @since Beta 3
    436      * @return array|null List of {@see SimplePie_Category} objects
     458     * @return SimplePie_Category[]|null List of {@see SimplePie_Category} objects
    437459     */
    438460    public function get_categories()
     
    440462        $categories = array();
    441463
    442         foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'category') as $category)
     464        $type = 'category';
     465        foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, $type) as $category)
    443466        {
    444467            $term = null;
     
    457480                $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT);
    458481            }
    459             $categories[] = $this->registry->create('Category', array($term, $scheme, $label));
    460         }
    461         foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'category') as $category)
     482            $categories[] = $this->registry->create('Category', array($term, $scheme, $label, $type));
     483        }
     484        foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, $type) as $category)
    462485        {
    463486            // This is really the label, but keep this as the term also for BC.
     
    472495                $scheme = null;
    473496            }
    474             $categories[] = $this->registry->create('Category', array($term, $scheme, null));
    475         }
    476         foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'subject') as $category)
    477         {
    478             $categories[] = $this->registry->create('Category', array($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null));
    479         }
    480         foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'subject') as $category)
    481         {
    482             $categories[] = $this->registry->create('Category', array($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null));
     497            $categories[] = $this->registry->create('Category', array($term, $scheme, null, $type));
     498        }
     499
     500        $type = 'subject';
     501        foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, $type) as $category)
     502        {
     503            $categories[] = $this->registry->create('Category', array($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null, $type));
     504        }
     505        foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, $type) as $category)
     506        {
     507            $categories[] = $this->registry->create('Category', array($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null, $type));
    483508        }
    484509
     
    487512            return array_unique($categories);
    488513        }
    489         else
    490         {
    491             return null;
    492         }
     514
     515        return null;
    493516    }
    494517
     
    507530            return $authors[$key];
    508531        }
    509         else
    510         {
    511             return null;
    512         }
     532
     533        return null;
    513534    }
    514535
     
    527548            return $contributors[$key];
    528549        }
    529         else
    530         {
    531             return null;
    532         }
     550
     551        return null;
    533552    }
    534553
     
    539558     *
    540559     * @since 1.1
    541      * @return array|null List of {@see SimplePie_Author} objects
     560     * @return SimplePie_Author[]|null List of {@see SimplePie_Author} objects
    542561     */
    543562    public function get_contributors()
     
    593612            return array_unique($contributors);
    594613        }
    595         else
    596         {
    597             return null;
    598         }
     614
     615        return null;
    599616    }
    600617
     
    605622     *
    606623     * @since Beta 2
    607      * @return array|null List of {@see SimplePie_Author} objects
     624     * @return SimplePie_Author[]|null List of {@see SimplePie_Author} objects
    608625     */
    609626    public function get_authors()
     
    683700            return $authors;
    684701        }
    685         else
    686         {
    687             return null;
    688         }
     702
     703        return null;
    689704    }
    690705
     
    711726            return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
    712727        }
    713         else
    714         {
    715             return null;
    716         }
     728
     729        return null;
    717730    }
    718731
     
    739752                $this->data['date']['raw'] = $return[0]['data'];
    740753            }
     754            elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'pubDate'))
     755            {
     756                $this->data['date']['raw'] = $return[0]['data'];
     757            }
     758            elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'date'))
     759            {
     760                $this->data['date']['raw'] = $return[0]['data'];
     761            }
     762            elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'date'))
     763            {
     764                $this->data['date']['raw'] = $return[0]['data'];
     765            }
    741766            elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'updated'))
    742767            {
     
    752777            }
    753778            elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'modified'))
    754             {
    755                 $this->data['date']['raw'] = $return[0]['data'];
    756             }
    757             elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'pubDate'))
    758             {
    759                 $this->data['date']['raw'] = $return[0]['data'];
    760             }
    761             elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'date'))
    762             {
    763                 $this->data['date']['raw'] = $return[0]['data'];
    764             }
    765             elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'date'))
    766779            {
    767780                $this->data['date']['raw'] = $return[0]['data'];
     
    793806            }
    794807        }
    795         else
    796         {
    797             return null;
    798         }
     808
     809        return null;
    799810    }
    800811
     
    822833            {
    823834                $parser = $this->registry->call('Parse_Date', 'get');
    824                 $this->data['updated']['parsed'] = $parser->parse($this->data['date']['raw']);
     835                $this->data['updated']['parsed'] = $parser->parse($this->data['updated']['raw']);
    825836            }
    826837            else
     
    844855            }
    845856        }
    846         else
    847         {
    848             return null;
    849         }
     857
     858        return null;
    850859    }
    851860
     
    873882            return strftime($date_format, $date);
    874883        }
    875         else
    876         {
    877             return null;
    878         }
     884
     885        return null;
    879886    }
    880887
     
    937944            return $enclosure->get_link();
    938945        }
    939         else
    940         {
    941             return null;
    942         }
     946
     947        return null;
    943948    }
    944949
     
    954959    {
    955960        $links = $this->get_links($rel);
    956         if ($links[$key] !== null)
     961        if ($links && $links[$key] !== null)
    957962        {
    958963            return $links[$key];
    959964        }
    960         else
    961         {
    962             return null;
    963         }
     965
     966        return null;
    964967    }
    965968
     
    10411044            return $this->data['links'][$rel];
    10421045        }
    1043         else
    1044         {
    1045             return null;
    1046         }
     1046
     1047        return null;
    10471048    }
    10481049
     
    10641065            return $enclosures[$key];
    10651066        }
    1066         else
    1067         {
    1068             return null;
    1069         }
     1067
     1068        return null;
    10701069    }
    10711070
     
    10811080     * @since Beta 2
    10821081     * @todo Add support for end-user defined sorting of enclosures by type/handler (so we can prefer the faster-loading FLV over MP4).
    1083      * @todo If an element exists at a level, but it's value is empty, we should fall back to the value from the parent (if it exists).
    1084      * @return array|null List of SimplePie_Enclosure items
     1082     * @todo If an element exists at a level, but its value is empty, we should fall back to the value from the parent (if it exists).
     1083     * @return SimplePie_Enclosure[]|null List of SimplePie_Enclosure items
    10851084     */
    10861085    public function get_enclosures()
     
    26592658                        if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player']))
    26602659                        {
    2661                             $player = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
     2660                            if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'][0]['attribs']['']['url'])) {
     2661                                $player = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
     2662                            }
    26622663                        }
    26632664                        else
     
    27342735                            foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail'] as $thumbnail)
    27352736                            {
    2736                                 $thumbnails[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
     2737                                if (isset($thumbnail['attribs']['']['url'])) {
     2738                                    $thumbnails[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
     2739                                }
    27372740                            }
    27382741                            if (is_array($thumbnails))
     
    27902793                        $length = ceil($link['attribs']['']['length']);
    27912794                    }
     2795                    if (isset($link['attribs']['']['title']))
     2796                    {
     2797                        $title = $this->sanitize($link['attribs']['']['title'], SIMPLEPIE_CONSTRUCT_TEXT);
     2798                    }
     2799                    else
     2800                    {
     2801                        $title = $title_parent;
     2802                    }
    27922803
    27932804                    // Since we don't have group or content for these, we'll just pass the '*_parent' variables directly to the constructor
    2794                     $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));
     2805                    $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));
    27952806                }
    27962807            }
     
    28782889            return $this->data['enclosures'];
    28792890        }
    2880         else
    2881         {
    2882             return null;
    2883         }
     2891
     2892        return null;
    28842893    }
    28852894
     
    29062915            return (float) $match[1];
    29072916        }
    2908         else
    2909         {
    2910             return null;
    2911         }
     2917
     2918        return null;
    29122919    }
    29132920
     
    29382945            return (float) $match[2];
    29392946        }
    2940         else
    2941         {
    2942             return null;
    2943         }
     2947
     2948        return null;
    29442949    }
    29452950
     
    29562961            return $this->registry->create('Source', array($this, $return[0]));
    29572962        }
    2958         else
    2959         {
    2960             return null;
    2961         }
     2963
     2964        return null;
    29622965    }
    29632966}
    2964 
Note: See TracChangeset for help on using the changeset viewer.