Multi-line svn commit, see body.
[shibboleth/cpp-xmltooling.git] / xmltooling / signature / impl / InlineKeyResolver.cpp
index 897af8e..9ad79df 100644 (file)
 \r
 #include "internal.h"\r
 #include "signature/CachingKeyResolver.h"\r
+#include "signature/KeyInfo.h"\r
 #include "util/NDC.h"\r
 #include "util/Threads.h"\r
+#include "util/XMLConstants.h"\r
+#include "validation/ValidatorSuite.h"\r
 \r
-#include <algorithm>\r
 #include <log4cpp/Category.hh>\r
 #include <xercesc/util/XMLUniDefs.hpp>\r
 #include <xsec/dsig/DSIGKeyInfoX509.hpp>\r
@@ -122,6 +124,9 @@ XSECCryptoKey* InlineKeyResolver::_resolveKey(const KeyInfo* keyInfo) const
 #endif\r
     Category& log=Category::getInstance(XMLTOOLING_LOGCAT".KeyResolver");\r
 \r
+    if (!keyInfo)\r
+        return NULL;\r
+\r
     // Check for ds:X509Data\r
     const vector<X509Data*>& x509Datas=keyInfo->getX509Datas();\r
     for (vector<X509Data*>::const_iterator j=x509Datas.begin(); j!=x509Datas.end(); ++j) {\r
@@ -153,7 +158,7 @@ XSECCryptoKey* InlineKeyResolver::_resolveKey(const KeyInfo* keyInfo) const
     const vector<KeyValue*>& keyValues = keyInfo->getKeyValues();\r
     for (vector<KeyValue*>::const_iterator i=keyValues.begin(); i!=keyValues.end(); ++i) {\r
         try {\r
-            KeyInfoSchemaValidators.validate(*i);    // see if it's a "valid" key\r
+            SchemaValidators.validate(*i);    // see if it's a "valid" key\r
             RSAKeyValue* rsakv = (*i)->getRSAKeyValue();\r
             if (rsakv) {\r
                 log.debug("resolving ds:RSAKeyValue");\r
@@ -210,6 +215,9 @@ vector<XSECCryptoX509*>::size_type InlineKeyResolver::_resolveCertificates(
 #endif\r
     Category& log=Category::getInstance(XMLTOOLING_LOGCAT".KeyResolver");\r
 \r
+    if (!keyInfo)\r
+        return 0;\r
+\r
     // Check for ds:X509Data\r
     const vector<X509Data*>& x509Datas=keyInfo->getX509Datas();\r
     for (vector<X509Data*>::const_iterator j=x509Datas.begin(); certs.empty() && j!=x509Datas.end(); ++j) {\r
@@ -249,6 +257,9 @@ XSECCryptoX509CRL* InlineKeyResolver::_resolveCRL(const KeyInfo* keyInfo) const
 #endif\r
     Category& log=Category::getInstance(XMLTOOLING_LOGCAT".KeyResolver");\r
 \r
+    if (!keyInfo)\r
+        return NULL;\r
+\r
     // Check for ds:X509Data\r
     const vector<X509Data*>& x509Datas=keyInfo->getX509Datas();\r
     for (vector<X509Data*>::const_iterator j=x509Datas.begin(); j!=x509Datas.end(); ++j) {\r
@@ -378,6 +389,9 @@ XSECCryptoKey* InlineKeyResolver::resolveKey(DSIGKeyInfoList* keyInfo) const
     NDC ndc("resolveKey");\r
 #endif\r
 \r
+    if (!keyInfo)\r
+        return NULL;\r
+\r
     // Default resolver handles RSA/DSAKeyValue and X509Certificate elements.\r
     try {\r
         XSECKeyInfoResolverDefault def;\r
@@ -399,6 +413,10 @@ vector<XSECCryptoX509*>::size_type InlineKeyResolver::resolveCertificates(
 {\r
     accessCertificates(certs).clear();\r
     accessOwned(certs) = false;\r
+\r
+    if (!keyInfo)\r
+        return 0;\r
+\r
        DSIGKeyInfoList::size_type sz = keyInfo->getSize();\r
     for (DSIGKeyInfoList::size_type i=0; accessCertificates(certs).empty() && i<sz; ++i) {\r
         if (keyInfo->item(i)->getKeyInfoType()==DSIGKeyInfo::KEYINFO_X509) {\r
@@ -418,6 +436,9 @@ XSECCryptoX509CRL* InlineKeyResolver::resolveCRL(DSIGKeyInfoList* keyInfo) const
     NDC ndc("resolveCRL");\r
 #endif\r
 \r
+    if (!keyInfo)\r
+        return NULL;\r
+\r
     DSIGKeyInfoList::size_type sz = keyInfo->getSize();\r
     for (DSIGKeyInfoList::size_type i=0; i<sz; ++i) {\r
         if (keyInfo->item(i)->getKeyInfoType()==DSIGKeyInfo::KEYINFO_X509) {\r