]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - extlib/Auth/Yadis/XML.php
Merge branch 'cas-user-whitelist' into 'nightly'
[quix0rs-gnu-social.git] / extlib / Auth / Yadis / XML.php
index 81b2ce2210a2332a7a82b202b7e3c244542ab3f9..2b8a20eb311287450cd0d44a7a28c7e3c96af518 100644 (file)
@@ -234,7 +234,23 @@ class Auth_Yadis_dom extends Auth_Yadis_XMLParser {
             return false;
         }
 
-        if (!@$this->doc->loadXML($xml_string)) {
+        // libxml_disable_entity_loader (PHP 5 >= 5.2.11)
+        if (function_exists('libxml_disable_entity_loader') && function_exists('libxml_use_internal_errors')) {
+            // disable external entities and libxml errors
+            $loader = libxml_disable_entity_loader(true);
+            $errors = libxml_use_internal_errors(true);
+            $parse_result = @$this->doc->loadXML($xml_string);
+            libxml_disable_entity_loader($loader);
+            libxml_use_internal_errors($errors);
+        } else {
+            $parse_result = @$this->doc->loadXML($xml_string);
+        }
+
+        if (!$parse_result) {
+            return false;
+        }
+
+        if (isset($this->doc->doctype)) {
             return false;
         }
 
@@ -310,20 +326,16 @@ $__Auth_Yadis_defaultParser = null;
  * @param Auth_Yadis_XMLParser $parser An instance of a
  * Auth_Yadis_XMLParser subclass.
  */
-function Auth_Yadis_setDefaultParser(&$parser)
+function Auth_Yadis_setDefaultParser($parser)
 {
     global $__Auth_Yadis_defaultParser;
-    $__Auth_Yadis_defaultParser =& $parser;
+    $__Auth_Yadis_defaultParser = $parser;
 }
 
 function Auth_Yadis_getSupportedExtensions()
 {
-    return array(
-                 'dom' => array('classname' => 'Auth_Yadis_dom',
-                       'libname' => array('dom.so', 'dom.dll')),
-                 'domxml' => array('classname' => 'Auth_Yadis_domxml',
-                       'libname' => array('domxml.so', 'php_domxml.dll')),
-                 );
+    return array('dom'    => 'Auth_Yadis_dom',
+                 'domxml' => 'Auth_Yadis_domxml');
 }
 
 /**
@@ -332,7 +344,7 @@ function Auth_Yadis_getSupportedExtensions()
  * Auth_Yadis_setDefaultParser has been called, the parser used in
  * that call will be returned instead.
  */
-function &Auth_Yadis_getXMLParser()
+function Auth_Yadis_getXMLParser()
 {
     global $__Auth_Yadis_defaultParser;
 
@@ -340,35 +352,17 @@ function &Auth_Yadis_getXMLParser()
         return $__Auth_Yadis_defaultParser;
     }
 
-    $p = null;
-    $classname = null;
-
-    $extensions = Auth_Yadis_getSupportedExtensions();
-
-    // Return a wrapper for the resident implementation, if any.
-    foreach ($extensions as $name => $params) {
-        if (!extension_loaded($name)) {
-            foreach ($params['libname'] as $libname) {
-                if (@dl($libname)) {
-                    $classname = $params['classname'];
-                }
-            }
-        } else {
-            $classname = $params['classname'];
-        }
-        if (isset($classname)) {
-            $p = new $classname();
-            return $p;
-        }
-    }
-
-    if (!isset($p)) {
-        trigger_error('No XML parser was found', E_USER_ERROR);
-    } else {
+    foreach(Auth_Yadis_getSupportedExtensions() as $extension => $classname)
+    {
+      if (extension_loaded($extension))
+      {
+        $p = new $classname();
         Auth_Yadis_setDefaultParser($p);
+        return $p;
+      }
     }
 
-    return $p;
+    return false;
 }
 
-?>
+