[java-opensaml COMMIT] /trunk/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/metadata/provider/SignatureVal...

noreply at shibboleth.net noreply at shibboleth.net
Wed Mar 6 16:07:49 EST 2013


Author: scantor
Date: Wed Mar  6 16:07:48 2013
New Revision: 3251

URL: http://svn.shibboleth.net/view/java-opensaml?rev=3251&view=rev
Log:
OSJ-28: ported java-opensaml2 1592

Modified:
    trunk/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/metadata/provider/SignatureValidationFilter.java

Modified: trunk/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/metadata/provider/SignatureValidationFilter.java
URL: http://svn.shibboleth.net/view/java-opensaml/trunk/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/metadata/provider/SignatureValidationFilter.java?rev=3251&r1=3250&r2=3251&view=diff
==============================================================================
--- trunk/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/metadata/provider/SignatureValidationFilter.java (original)
+++ trunk/opensaml-saml-impl/src/main/java/org/opensaml/saml/saml2/metadata/provider/SignatureValidationFilter.java Wed Mar  6 16:07:48 2013
@@ -17,6 +17,7 @@
 
 package org.opensaml.saml.saml2.metadata.provider;
 
+import java.util.HashSet;
 import java.util.Iterator;
 
 import net.shibboleth.utilities.java.support.resolver.CriteriaSet;
@@ -26,8 +27,6 @@
 import org.opensaml.saml.saml2.metadata.EntitiesDescriptor;
 import org.opensaml.saml.saml2.metadata.EntityDescriptor;
 import org.opensaml.saml.saml2.metadata.RoleDescriptor;
-import org.opensaml.saml.saml2.metadata.provider.FilterException;
-import org.opensaml.saml.saml2.metadata.provider.MetadataFilter;
 import org.opensaml.saml.security.SAMLSignatureProfileValidator;
 import org.opensaml.security.SecurityException;
 import org.opensaml.security.credential.UsageType;
@@ -182,7 +181,9 @@
                 log.error("RoleDescriptor '{}' subordinate to entity '{}' failed signature verification, " 
                        + "removing from metadata provider", 
                        roleChild.getElementQName(), entityID); 
-               roleIter.remove();
+                // Note that this is ok since we're iterating over an IndexedXMLObjectChildrenList directly,
+                // rather than a sublist like in processEntityGroup, and iterator remove() is supported there.
+                roleIter.remove();
             }
         }
         
@@ -224,6 +225,10 @@
             verifySignature(entitiesDescriptor, entitiesDescriptor.getName(), true);
         }
         
+        // Can't use IndexedXMLObjectChildrenList sublist iterator remove() to remove members,
+        // so just note them in a set and then remove after iteration has completed.
+        HashSet<XMLObject> toRemove = new HashSet<XMLObject>();
+        
         Iterator<EntityDescriptor> entityIter = entitiesDescriptor.getEntityDescriptors().iterator();
         while (entityIter.hasNext()) {
             EntityDescriptor entityChild = entityIter.next();
@@ -240,8 +245,13 @@
             } catch (FilterException e) {
                log.error("EntityDescriptor '{}' failed signature verification, removing from metadata provider", 
                        entityChild.getEntityID()); 
-               entityIter.remove();
-            }
+               toRemove.add(entityChild);
+            }
+        }
+
+        if (!toRemove.isEmpty()) {
+            entitiesDescriptor.getEntityDescriptors().removeAll(toRemove);
+            toRemove.clear();
         }
         
         Iterator<EntitiesDescriptor> entitiesIter = entitiesDescriptor.getEntitiesDescriptors().iterator();
@@ -253,10 +263,13 @@
             } catch (FilterException e) {
                log.error("EntitiesDescriptor '{}' failed signature verification, removing from metadata provider", 
                        entitiesChild.getName()); 
-               entitiesIter.remove();
-            }
-        }
-        
+               toRemove.add(entitiesChild);
+            }
+        }
+        
+        if (!toRemove.isEmpty()) {
+            entitiesDescriptor.getEntitiesDescriptors().removeAll(toRemove);
+        }
     }
 
     /**



More information about the commits mailing list