[java-identity-provider] branch master updated: IDP-1647 Preemptively avoid duplicate values in Unmodifiable maps

Rod Widdowson rdw at steadingsoftware.com
Mon Jul 27 09:38:12 UTC 2020


This is an automated email from the git hooks/post-receive script.

rdw pushed a commit to branch master
in repository java-identity-provider.

View the commit online:
http://git.shibboleth.net/view/?p=java-identity-provider.git;a=commit;h=ab67be5bef630df6daf2a32a013c253f4f6a0655

The following commit(s) were added to refs/heads/master by this push:
       new  ab67be5be IDP-1647 Preemptively avoid duplicate values in Unmodifiable maps
ab67be5be is described below

commit ab67be5bef630df6daf2a32a013c253f4f6a0655
Author: Rod Widdowson <rdw at steadingsoftware.com>
AuthorDate: Mon Jul 27 10:35:37 2020 +0100

    IDP-1647 Preemptively avoid duplicate values in Unmodifiable maps
    
    https://issues.shibboleth.net/jira/browse/IDP-1647
    
    In all cases our uses of the API aboid this, but many APIs are
    public so future proof ourselves.
---
 .../net/shibboleth/idp/attribute/context/AttributeContext.java   | 9 +++++++--
 .../idp/attribute/filter/context/AttributeFilterContext.java     | 8 ++++++--
 .../attribute/resolver/context/AttributeResolutionContext.java   | 4 +++-
 .../idp/attribute/resolver/dc/impl/StaticDataConnector.java      | 5 ++++-
 .../net/shibboleth/idp/installer/ant/impl/V4InstallTask.java     | 5 ++++-
 5 files changed, 24 insertions(+), 7 deletions(-)

diff --git a/idp-attribute-api/src/main/java/net/shibboleth/idp/attribute/context/AttributeContext.java b/idp-attribute-api/src/main/java/net/shibboleth/idp/attribute/context/AttributeContext.java
index 612632f91..93ba16a96 100644
--- a/idp-attribute-api/src/main/java/net/shibboleth/idp/attribute/context/AttributeContext.java
+++ b/idp-attribute-api/src/main/java/net/shibboleth/idp/attribute/context/AttributeContext.java
@@ -32,6 +32,7 @@ import net.shibboleth.idp.attribute.IdPAttribute;
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
 import net.shibboleth.utilities.java.support.annotation.constraint.NotLive;
 import net.shibboleth.utilities.java.support.annotation.constraint.Unmodifiable;
+import net.shibboleth.utilities.java.support.collection.CollectionSupport;
 
 /**
  * A {@link BaseContext} that tracks a set of attributes. Usually the tracked attributes are about a particular user and
@@ -71,7 +72,9 @@ public final class AttributeContext extends BaseContext {
         if (newAttributes != null) {
             attributes = newAttributes.
                     stream().
-                    collect(Collectors.toUnmodifiableMap(IdPAttribute::getId, a -> a));
+                    collect(Collectors.toUnmodifiableMap(IdPAttribute::getId,
+                            a -> a,
+                            CollectionSupport.warningMergeFunction("AttrtibuteContext", true)));
         } else {
             attributes = Collections.emptyMap();
         }
@@ -96,7 +99,9 @@ public final class AttributeContext extends BaseContext {
         if (null != unfilteredAttributes) {
             unfilteredAttributes = newAttributes.
                     stream().
-                    collect(Collectors.toUnmodifiableMap(IdPAttribute::getId, a -> a));
+                    collect(Collectors.toUnmodifiableMap(IdPAttribute::getId,
+                            a -> a,
+                            CollectionSupport.warningMergeFunction("AttrtibuteContextUnfiltered", true)));
         } else {
             unfilteredAttributes = Collections.emptyMap();
         }
diff --git a/idp-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/context/AttributeFilterContext.java b/idp-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/context/AttributeFilterContext.java
index 35a021431..891a00ff4 100644
--- a/idp-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/context/AttributeFilterContext.java
+++ b/idp-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/context/AttributeFilterContext.java
@@ -41,6 +41,7 @@ import net.shibboleth.idp.attribute.filter.AttributeFilterException;
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
 import net.shibboleth.utilities.java.support.annotation.constraint.NotLive;
 import net.shibboleth.utilities.java.support.annotation.constraint.Unmodifiable;
+import net.shibboleth.utilities.java.support.collection.CollectionSupport;
 import net.shibboleth.utilities.java.support.logic.Constraint;
 import net.shibboleth.utilities.java.support.service.ReloadableService;
 import net.shibboleth.utilities.java.support.service.ServiceableComponent;
@@ -163,7 +164,8 @@ public final class AttributeFilterContext extends BaseContext {
         if (attributes != null) {
             prefilteredAttributes = attributes.
                     stream().
-                    collect(Collectors.toUnmodifiableMap(IdPAttribute::getId, e -> e));
+                    collect(Collectors.toUnmodifiableMap(IdPAttribute::getId, e -> e,
+                            CollectionSupport.warningMergeFunction("AttrtibuteFilterContextPrefiltered", true)));
         } else {
             prefilteredAttributes = Collections.emptyMap();
         }
@@ -193,7 +195,9 @@ public final class AttributeFilterContext extends BaseContext {
         if (attributes != null) {
             filteredAttributes = attributes.
                     stream().
-                    collect(Collectors.toUnmodifiableMap(IdPAttribute::getId, e -> e));
+                    collect(Collectors.toUnmodifiableMap(IdPAttribute::getId,
+                            e -> e,
+                            CollectionSupport.warningMergeFunction("AttrtibuteFilterContextFiltered", true)));
         } else {
             filteredAttributes = Collections.emptyMap();
         }
diff --git a/idp-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/context/AttributeResolutionContext.java b/idp-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/context/AttributeResolutionContext.java
index 4eaaa9e55..0a3a56776 100644
--- a/idp-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/context/AttributeResolutionContext.java
+++ b/idp-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/context/AttributeResolutionContext.java
@@ -40,6 +40,7 @@ import net.shibboleth.utilities.java.support.annotation.constraint.Live;
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
 import net.shibboleth.utilities.java.support.annotation.constraint.NotLive;
 import net.shibboleth.utilities.java.support.annotation.constraint.Unmodifiable;
+import net.shibboleth.utilities.java.support.collection.CollectionSupport;
 import net.shibboleth.utilities.java.support.logic.Constraint;
 import net.shibboleth.utilities.java.support.primitive.StringSupport;
 import net.shibboleth.utilities.java.support.service.ReloadableService;
@@ -308,7 +309,8 @@ public final class AttributeResolutionContext extends BaseContext {
         Constraint.isNotNull(attributes, "Null attribute set cannot be inserted into a context");
         resolvedAttributes = attributes.
                 stream().
-                collect(Collectors.toUnmodifiableMap(IdPAttribute::getId, a -> a));
+                collect(Collectors.toUnmodifiableMap(IdPAttribute::getId, a -> a,
+                        CollectionSupport.warningMergeFunction("AttrtibuteResolutionContext", true)));
         return this;
     }
 
diff --git a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/StaticDataConnector.java b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/StaticDataConnector.java
index 845d704ba..0edd9ff14 100644
--- a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/StaticDataConnector.java
+++ b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/StaticDataConnector.java
@@ -35,6 +35,7 @@ import net.shibboleth.idp.attribute.resolver.context.AttributeResolutionContext;
 import net.shibboleth.idp.attribute.resolver.context.AttributeResolverWorkContext;
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
+import net.shibboleth.utilities.java.support.collection.CollectionSupport;
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
 import net.shibboleth.utilities.java.support.component.ComponentSupport;
 import net.shibboleth.utilities.java.support.logic.Constraint;
@@ -75,7 +76,9 @@ public class StaticDataConnector extends AbstractDataConnector {
         attributes = newValues.
                 stream().
                 map(e -> Constraint.isNotNull(e, "non null Attribute in connector")).
-                collect(Collectors.toUnmodifiableMap(IdPAttribute::getId, i -> i));
+                collect(Collectors.toUnmodifiableMap(IdPAttribute::getId,
+                        i -> i,
+                        CollectionSupport.warningMergeFunction("StaticDataConnector " + getId(), true)));
     }
 
     /** {@inheritDoc} */
diff --git a/idp-installer/src/main/java/net/shibboleth/idp/installer/ant/impl/V4InstallTask.java b/idp-installer/src/main/java/net/shibboleth/idp/installer/ant/impl/V4InstallTask.java
index 558596e8c..e11912e58 100644
--- a/idp-installer/src/main/java/net/shibboleth/idp/installer/ant/impl/V4InstallTask.java
+++ b/idp-installer/src/main/java/net/shibboleth/idp/installer/ant/impl/V4InstallTask.java
@@ -33,6 +33,7 @@ import net.shibboleth.idp.installer.InstallerPropertiesImpl;
 import net.shibboleth.idp.installer.V4Install;
 import net.shibboleth.idp.installer.impl.CurrentInstallStateImpl;
 import net.shibboleth.idp.installer.metadata.impl.MetadataGeneratorImpl;
+import net.shibboleth.utilities.java.support.collection.CollectionSupport;
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
 import net.shibboleth.utilities.java.support.logic.Constraint;
 import net.shibboleth.utilities.java.support.primitive.StringSupport;
@@ -76,7 +77,9 @@ public class V4InstallTask extends Task {
                     stream().
                     filter(e -> System.getProperty(e.getKey()) == null).
                     filter(e -> e.getValue() instanceof String).
-                    collect(Collectors.toUnmodifiableMap(Entry::getKey, e-> (String) e.getValue())));
+                    collect(Collectors.toUnmodifiableMap(Entry::getKey,
+                            e-> (String) e.getValue(),
+                            CollectionSupport.warningMergeFunction("InstallerProperties", true))));
 
             final CurrentInstallStateImpl is;
             ip.initialize();

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the commits mailing list