From 3a90dbbd0011416d7116da7a901c215f1186a682 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Thu, 1 Feb 2018 13:01:43 -0800 Subject: [PATCH] GUACAMOLE-96: Do not rely on Map.remove(key, value) which is specific to Java 8. --- .../auth/jdbc/base/ArbitraryAttributeMap.java | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/base/ArbitraryAttributeMap.java b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/base/ArbitraryAttributeMap.java index 61a7ff77c..219abe85b 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/base/ArbitraryAttributeMap.java +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/base/ArbitraryAttributeMap.java @@ -83,10 +83,22 @@ public class ArbitraryAttributeMap extends HashMap { if (!(o instanceof ArbitraryAttributeModel)) return false; - // The attribute should be removed only if the value matches + // Remove only if key is actually present ArbitraryAttributeModel model = (ArbitraryAttributeModel) o; - return ArbitraryAttributeMap.this.remove(model.getName(), - model.getValue()); + if (!ArbitraryAttributeMap.this.containsKey(model.getName())) + return false; + + // The attribute should be removed only if the value matches + String currentValue = ArbitraryAttributeMap.this.get(model.getName()); + if (currentValue == null) { + if (model.getValue() != null) + return false; + } + else if (!currentValue.equals(model.getValue())) + return false; + + ArbitraryAttributeMap.this.remove(model.getName()); + return true; }