Skip to content

Commit 1f8ea5f

Browse files
committed
Improve parser
1 parent 191a5a0 commit 1f8ea5f

File tree

1 file changed

+6
-2
lines changed

1 file changed

+6
-2
lines changed

lib/Saml2/IdPMetadataParser.php

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ public static function parseXML($xml, $entityId = null, $desiredNameIdFormat = n
138138

139139
$keyDescriptorCertSigningNodes = OneLogin_Saml2_Utils::query($dom, './md:KeyDescriptor[not(contains(@use, "encryption"))]/ds:KeyInfo/ds:X509Data/ds:X509Certificate', $idpDescriptor);
140140

141-
$keyDescriptorCertEncryptionNodes = OneLogin_Saml2_Utils::query($dom, './md:KeyDescriptor[@use="encryption"]/ds:KeyInfo/ds:X509Data/ds:X509Certificate', $idpDescriptor);
141+
$keyDescriptorCertEncryptionNodes = OneLogin_Saml2_Utils::query($dom, './md:KeyDescriptor[not(contains(@use, "signing"))]/ds:KeyInfo/ds:X509Data/ds:X509Certificate', $idpDescriptor);
142142

143143
if (!empty($keyDescriptorCertSigningNodes) || !empty($keyDescriptorCertEncryptionNodes)) {
144144
$metadataInfo['idp']['x509certMulti'] = array();
@@ -157,7 +157,11 @@ public static function parseXML($xml, $entityId = null, $desiredNameIdFormat = n
157157

158158
$idpCertdata = $metadataInfo['idp']['x509certMulti'];
159159
if (count($idpCertdata) == 1 || ((isset($idpCertdata['signing']) && count($idpCertdata['signing']) == 1) && isset($idpCertdata['encryption']) && count($idpCertdata['encryption']) == 1 && strcmp($idpCertdata['signing'][0], $idpCertdata['encryption'][0]) == 0)) {
160-
$metadataInfo['idp']['x509cert'] = $metadataInfo['idp']['x509certMulti']['signing'][0];
160+
if (isset($metadataInfo['idp']['x509certMulti']['signing'][0])) {
161+
$metadataInfo['idp']['x509cert'] = $metadataInfo['idp']['x509certMulti']['signing'][0];
162+
} else {
163+
$metadataInfo['idp']['x509cert'] = $metadataInfo['idp']['x509certMulti']['encryption'][0];
164+
}
161165
unset($metadataInfo['idp']['x509certMulti']);
162166
}
163167
}

0 commit comments

Comments
 (0)