SANTUARIO-496 - Prevent KeyInfoResolver returning NONE keys.

git-svn-id: https://svn.apache.org/repos/asf/santuario/xml-security-cpp/trunk@1843566 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/xsec/enc/XSECKeyInfoResolverDefault.cpp b/xsec/enc/XSECKeyInfoResolverDefault.cpp
index 59e5e87..b0bf10a 100644
--- a/xsec/enc/XSECKeyInfoResolverDefault.cpp
+++ b/xsec/enc/XSECKeyInfoResolverDefault.cpp
@@ -105,7 +105,7 @@
 			const DSIGKeyInfoValue* dsaval = (const DSIGKeyInfoValue *) lst->item(i);
 			if (dsaval->getDSAP() || dsaval->getDSAQ() || dsaval->getDSAG() || dsaval->getDSAY()) {
 
-	            XSECCryptoKeyDSA * dsa = XSECPlatformUtils::g_cryptoProvider->keyDSA();
+	            XSECCryptoKeyDSA* dsa = XSECPlatformUtils::g_cryptoProvider->keyDSA();
 	            Janitor<XSECCryptoKeyDSA> j_dsa(dsa);
 
                 safeBuffer value;
@@ -127,8 +127,10 @@
                     dsa->loadYBase64BigNums(value.rawCharBuffer(), (unsigned int) strlen(value.rawCharBuffer()));
                 }
 
-                j_dsa.release();
-                return dsa;
+                if (dsa->getKeyType() != XSECCryptoKey::KEY_NONE) {
+                    j_dsa.release();
+                    return dsa;
+                }
 			}
 		}
 			break;
@@ -148,8 +150,10 @@
                 value << (*mp_formatter << rsaval->getRSAExponent());
                 rsa->loadPublicExponentBase64BigNums(value.rawCharBuffer(), (unsigned int) strlen(value.rawCharBuffer()));
 
-                j_rsa.release();
-                return rsa;
+                if (rsa->getKeyType() != XSECCryptoKey::KEY_NONE) {
+                    j_rsa.release();
+                    return rsa;
+                }
 		    }
 
 		}
@@ -169,8 +173,10 @@
                 XSECAutoPtrChar curve(ecval->getECNamedCurve());
                 if (curve.get()) {
                     ec->loadPublicKeyBase64(curve.get(), value.rawCharBuffer(), (unsigned int) strlen(value.rawCharBuffer()));
-                    j_ec.release();
-                    return ec;
+                    if (ec->getKeyType() != XSECCryptoKey::KEY_NONE) {
+                        j_ec.release();
+                        return ec;
+                    }
                 }
             }
         }
@@ -184,7 +190,11 @@
                 safeBuffer value;
 
                 value << (*mp_formatter << derval->getData());
-                return XSECPlatformUtils::g_cryptoProvider->keyDER(value.rawCharBuffer(), (unsigned int)strlen(value.rawCharBuffer()), true);
+                XSECCryptoKey* key = XSECPlatformUtils::g_cryptoProvider->keyDER(value.rawCharBuffer(), (unsigned int)strlen(value.rawCharBuffer()), true);
+                if (key && key->getKeyType() != XSECCryptoKey::KEY_NONE) {
+                    return key;
+                }
+                delete key;
             }
         }
             break;