From 6a61491389174b8797014428e2d92124cf61e8c4 Mon Sep 17 00:00:00 2001 From: Jaime Perez <jaime.perez@uninett.no> Date: Fri, 20 Jun 2014 16:14:29 +0200 Subject: [PATCH] Fail gracefully while parsing EntitiesDescriptor in the metarefresh module. Now only the offending entity is disregarded. Fixes #70. --- modules/metarefresh/lib/MetaLoader.php | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/modules/metarefresh/lib/MetaLoader.php b/modules/metarefresh/lib/MetaLoader.php index 051cf22bc..750bae677 100644 --- a/modules/metarefresh/lib/MetaLoader.php +++ b/modules/metarefresh/lib/MetaLoader.php @@ -217,7 +217,31 @@ class sspmod_metarefresh_MetaLoader { throw new Exception('Failed to read XML from ' . $source['src']); } if($doc->documentElement === NULL) throw new Exception('Opened file is not an XML document: ' . $source['src']); - $entities = SimpleSAML_Metadata_SAMLParser::parseDescriptorsElement($doc->documentElement); + + if (SimpleSAML_Utilities::isDOMElementOfType($doc->documentElement, 'EntitiesDescriptor', '@md') === TRUE) { + foreach (SAML2_Utils::xpQuery($doc->documentElement, + './saml_metadata:EntityDescriptor|./saml_metadata:EntitiesDescriptor') as $node) { + + if ($node->localName === 'EntityDescriptor') { + try { + $entities = array_merge($entities, + SimpleSAML_Metadata_SAMLParser::parseDescriptorsElement($node)); + } catch (Exception $e) { + $entityID = $node->getAttribute('entityID'); + if (empty($entityID)) { + $entityID = "unknown"; + } + SimpleSAML_Logger::warning('[metarefresh]: Error while parsing entity ('.$entityID.'): '. + $e->getMessage()); + } + } else { + $entities = array_merge($entities, $this->loadXML($node->ownerDocument->saveXML($node), $source)); + } + } + } else { + $entities = SimpleSAML_Metadata_SAMLParser::parseDescriptorsElement($doc->documentElement); + } + return $entities; } -- GitLab