From 9e04149ba59f5639f6430fc327813a6b51144523 Mon Sep 17 00:00:00 2001
From: Guillaume Rousse <guillaume.rousse@renater.fr>
Date: Mon, 5 Feb 2018 16:17:43 +0100
Subject: [PATCH] fix type-filtering in metadata

Also exclude entities without identifiable type when filtering on type.
---
 lib/AccountManager/Metadata.pm | 6 ++++++
 t/metadata.t                   | 2 +-
 2 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/lib/AccountManager/Metadata.pm b/lib/AccountManager/Metadata.pm
index 2b73fc4..41fce72 100644
--- a/lib/AccountManager/Metadata.pm
+++ b/lib/AccountManager/Metadata.pm
@@ -55,6 +55,7 @@ sub parse {
             next unless $child->nodeType() == XML_ELEMENT_NODE;
 
             if ($child->localname() eq 'IDPSSODescriptor') {
+                # skip immediatly if requested type differs
                 next ENTITY if $args{type} && $args{type} ne 'idp';
 
                 $data->{type} = 'idp';
@@ -81,6 +82,7 @@ sub parse {
                 }
 
             } elsif ($child->localname() eq 'SPSSODescriptor') {
+                # skip immediatly if requested type differs
                 next ENTITY if $args{type} && $args{type} ne 'sp';
 
                 $data->{type} = 'sp';
@@ -169,6 +171,10 @@ sub parse {
             }
         }
 
+        # skip finaly if specific type was requested,
+        # and no identifiable type was found
+        next ENTITY if $args{type} && !$data->{type};
+
         push @array, $data;
     }
 
diff --git a/t/metadata.t b/t/metadata.t
index cecd79a..4415581 100755
--- a/t/metadata.t
+++ b/t/metadata.t
@@ -100,6 +100,6 @@ ok(scalar @$none == 0, 'filtered metadata extraction: result count');
 my $idp = $metadata->parse(type => 'idp');
 ok(defined $idp, 'filtered metadata extraction: defined result');
 ok(ref $idp eq 'ARRAY', 'filtered metadata extraction: result type');
-ok(scalar @$idp == 2561, 'filtered metadata extraction: result count');
+ok(scalar @$idp == 2556, 'filtered metadata extraction: result count');
 is($idp->[0]->{type}, 'idp', 'filtered entity has expected type');
 
-- 
GitLab