From 66cfccd59689a07e0f7e557f846e8aca4c36c3a6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andreas=20=C3=85kre=20Solberg?= <andreas.solberg@uninett.no>
Date: Sat, 29 Nov 2008 04:32:54 +0000
Subject: [PATCH] Throw exception when no public key was found in metadata XML
 document.

git-svn-id: https://simplesamlphp.googlecode.com/svn/trunk@1028 44740490-163a-0410-bde0-09ae8108e29a
---
 .../Metadata/MetaDataStorageSource.php           | 16 ++++++++--------
 lib/SimpleSAML/Metadata/SAMLParser.php           |  5 +++++
 2 files changed, 13 insertions(+), 8 deletions(-)

diff --git a/lib/SimpleSAML/Metadata/MetaDataStorageSource.php b/lib/SimpleSAML/Metadata/MetaDataStorageSource.php
index 42d6f1edf..2ec89c801 100644
--- a/lib/SimpleSAML/Metadata/MetaDataStorageSource.php
+++ b/lib/SimpleSAML/Metadata/MetaDataStorageSource.php
@@ -61,14 +61,14 @@ abstract class SimpleSAML_Metadata_MetaDataStorageSource {
 		}
 
 		switch($type) {
-		case 'flatfile':
-			return new SimpleSAML_Metadata_MetaDataStorageHandlerFlatFile($sourceConfig);
-		case 'xml':
-			return new SimpleSAML_Metadata_MetaDataStorageHandlerXML($sourceConfig);
-		case 'dynamicxml':
-			return new SimpleSAML_Metadata_MetaDataStorageHandlerDynamicXML($sourceConfig);
-		default:
-			throw new Exception('Invalid metadata source type: "' . $type . '".');
+			case 'flatfile':
+				return new SimpleSAML_Metadata_MetaDataStorageHandlerFlatFile($sourceConfig);
+			case 'xml':
+				return new SimpleSAML_Metadata_MetaDataStorageHandlerXML($sourceConfig);
+			case 'dynamicxml':
+				return new SimpleSAML_Metadata_MetaDataStorageHandlerDynamicXML($sourceConfig);
+			default:
+				throw new Exception('Invalid metadata source type: "' . $type . '".');
 		}
 	}
 
diff --git a/lib/SimpleSAML/Metadata/SAMLParser.php b/lib/SimpleSAML/Metadata/SAMLParser.php
index d1bb42477..3981c865b 100644
--- a/lib/SimpleSAML/Metadata/SAMLParser.php
+++ b/lib/SimpleSAML/Metadata/SAMLParser.php
@@ -598,6 +598,11 @@ class SimpleSAML_Metadata_SAMLParser {
 			$ret['NameIDFormat'] = $spd['nameIDFormats'][0];
 		}
 
+		// Require that a certificate is embedded
+		if (!is_array($idp['keys'])) {
+			throw new Exception('Could not find any embedded certificates in metadata document.');
+		}
+
 		/* Add certificate data. Only the first valid certificate will be added. */
 		foreach($idp['keys'] as $key) {
 			if($key['type'] !== 'X509Certificate') {
-- 
GitLab