File: SANTUARIO-496-Prevent-KeyInfoResolver-returning-NONE-keys.patch

package info (click to toggle)
xml-security-c 1.7.3-4%2Bdeb9u3
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 8,096 kB
  • sloc: cpp: 47,259; sh: 4,123; makefile: 503
file content (65 lines) | stat: -rw-r--r-- 2,954 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
From: Scott Cantor <scantor@apache.org>
Date: Thu, 11 Oct 2018 15:39:30 +0000
Subject: 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
---
 xsec/enc/XSECKeyInfoResolverDefault.cpp | 24 +++++++++++++++++-------
 1 file changed, 17 insertions(+), 7 deletions(-)

diff --git a/xsec/enc/XSECKeyInfoResolverDefault.cpp b/xsec/enc/XSECKeyInfoResolverDefault.cpp
index c4c81cb..7356fc4 100644
--- a/xsec/enc/XSECKeyInfoResolverDefault.cpp
+++ b/xsec/enc/XSECKeyInfoResolverDefault.cpp
@@ -127,8 +127,10 @@ XSECCryptoKey * XSECKeyInfoResolverDefault::resolveKey(DSIGKeyInfoList * lst) {
                     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 @@ XSECCryptoKey * XSECKeyInfoResolverDefault::resolveKey(DSIGKeyInfoList * lst) {
                 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 @@ XSECCryptoKey * XSECKeyInfoResolverDefault::resolveKey(DSIGKeyInfoList * lst) {
                 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 @@ XSECCryptoKey * XSECKeyInfoResolverDefault::resolveKey(DSIGKeyInfoList * lst) {
                 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;