web/lib/Zend/Feed/Reader.php
changeset 1230 68c69c656a2c
parent 807 877f952ae2bd
equal deleted inserted replaced
1229:5a6b6e770365 1230:68c69c656a2c
    12  * obtain it through the world-wide-web, please send an email
    12  * obtain it through the world-wide-web, please send an email
    13  * to license@zend.com so we can send you a copy immediately.
    13  * to license@zend.com so we can send you a copy immediately.
    14  *
    14  *
    15  * @category   Zend
    15  * @category   Zend
    16  * @package    Zend_Feed_Reader
    16  * @package    Zend_Feed_Reader
    17  * @copyright  Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
    17  * @copyright  Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
    18  * @license    http://framework.zend.com/license/new-bsd     New BSD License
    18  * @license    http://framework.zend.com/license/new-bsd     New BSD License
    19  * @version    $Id: Reader.php 25275 2013-03-06 09:55:33Z frosch $
    19  * @version    $Id$
    20  */
    20  */
    21 
    21 
    22 /**
    22 /**
    23  * @see Zend_Feed
    23  * @see Zend_Feed
    24  */
    24  */
    37 /**
    37 /**
    38  * @see Zend_Feed_Reader_FeedSet
    38  * @see Zend_Feed_Reader_FeedSet
    39  */
    39  */
    40 require_once 'Zend/Feed/Reader/FeedSet.php';
    40 require_once 'Zend/Feed/Reader/FeedSet.php';
    41 
    41 
       
    42 /** @see Zend_Xml_Security */
       
    43 require_once 'Zend/Xml/Security.php';
       
    44 
       
    45 /** @see Zend_Xml_Exception */
       
    46 require_once 'Zend/Xml/Exception.php';
       
    47 
    42 /**
    48 /**
    43  * @category   Zend
    49  * @category   Zend
    44  * @package    Zend_Feed_Reader
    50  * @package    Zend_Feed_Reader
    45  * @copyright  Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
    51  * @copyright  Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
    46  * @license    http://framework.zend.com/license/new-bsd     New BSD License
    52  * @license    http://framework.zend.com/license/new-bsd     New BSD License
    47  */
    53  */
    48 class Zend_Feed_Reader
    54 class Zend_Feed_Reader
    49 {
    55 {
    50     /**
    56     /**
   324 
   330 
   325         return $reader;
   331         return $reader;
   326     }
   332     }
   327 
   333 
   328     /**
   334     /**
   329      * Import a feed froma string
   335      * Import a feed from a string
   330      *
   336      *
   331      * @param  string $string
   337      * @param  string $string
   332      * @return Zend_Feed_Reader_FeedInterface
   338      * @return Zend_Feed_Reader_FeedInterface
   333      */
   339      */
   334     public static function importString($string)
   340     public static function importString($string)
   335     {
   341     {
   336         $libxml_errflag = libxml_use_internal_errors(true);
       
   337         $oldValue = libxml_disable_entity_loader(true);
       
   338         $dom = new DOMDocument;
   342         $dom = new DOMDocument;
   339         $status = $dom->loadXML($string);
   343         try {
   340         foreach ($dom->childNodes as $child) {
   344             $dom = Zend_Xml_Security::scan($string, $dom);        
   341             if ($child->nodeType === XML_DOCUMENT_TYPE_NODE) {
   345         } catch (Zend_Xml_Exception $e) {    
   342                 require_once 'Zend/Feed/Exception.php';
   346             require_once 'Zend/Feed/Exception.php';
   343                 throw new Zend_Feed_Exception(
   347             throw new Zend_Feed_Exception(
   344                     'Invalid XML: Detected use of illegal DOCTYPE'
   348                 $e->getMessage()
   345                 );
   349             );
   346             }
   350         }
   347         }
   351         if (!$dom) {
   348         libxml_disable_entity_loader($oldValue);
       
   349         libxml_use_internal_errors($libxml_errflag);
       
   350 
       
   351         if (!$status) {
       
   352             // Build error message
   352             // Build error message
   353             $error = libxml_get_last_error();
   353             $error = libxml_get_last_error();
   354             if ($error && $error->message) {
   354             if ($error && $error->message) {
   355                 $errormsg = "DOMDocument cannot parse XML: {$error->message}";
   355                 $errormsg = "DOMDocument cannot parse XML: {$error->message}";
   356             } else {
   356             } else {
   453             $dom = $feed->getDomDocument();
   453             $dom = $feed->getDomDocument();
   454         } elseif($feed instanceof DOMDocument) {
   454         } elseif($feed instanceof DOMDocument) {
   455             $dom = $feed;
   455             $dom = $feed;
   456         } elseif(is_string($feed) && !empty($feed)) {
   456         } elseif(is_string($feed) && !empty($feed)) {
   457             @ini_set('track_errors', 1);
   457             @ini_set('track_errors', 1);
   458             $oldValue = libxml_disable_entity_loader(true);
   458             //$oldValue = libxml_disable_entity_loader(true);
   459             $dom = new DOMDocument;
   459             $dom = new DOMDocument;
   460             $status = @$dom->loadXML($feed);
   460             try {
   461             foreach ($dom->childNodes as $child) {
   461                 $dom = Zend_Xml_Security::scan($feed, $dom);
   462                 if ($child->nodeType === XML_DOCUMENT_TYPE_NODE) {
   462             } catch (Zend_Xml_Exception $e) {
   463                     require_once 'Zend/Feed/Exception.php';
   463                 require_once 'Zend/Feed/Exception.php';
   464                     throw new Zend_Feed_Exception(
   464                 throw new Zend_Feed_Exception(
   465                         'Invalid XML: Detected use of illegal DOCTYPE'
   465                     $e->getMessage()
   466                     );
   466                 );
   467                 }
   467             }
   468             }
   468             //libxml_disable_entity_loader($oldValue);
   469             libxml_disable_entity_loader($oldValue);
       
   470             @ini_restore('track_errors');
   469             @ini_restore('track_errors');
   471             if (!$status) {
   470             if (!$dom) {
   472                 if (!isset($php_errormsg)) {
   471                 if (!isset($php_errormsg)) {
   473                     if (function_exists('xdebug_is_enabled')) {
   472                     if (function_exists('xdebug_is_enabled')) {
   474                         $php_errormsg = '(error message not available, when XDebug is running)';
   473                         $php_errormsg = '(error message not available, when XDebug is running)';
   475                     } else {
   474                     } else {
   476                         $php_errormsg = '(error message not available)';
   475                         $php_errormsg = '(error message not available)';