From 3b916ff36f27a50e0d0ce1515954fac3520847ec Mon Sep 17 00:00:00 2001 From: martin Date: Sat, 10 May 2008 12:14:53 -0700 Subject: [PATCH] 6691215: (coll) IdentityHashMap.containsValue(null) returns true when null value not present Reviewed-by: dl, chegar, alanb Contributed-by: scottb@google.com --- src/share/classes/java/util/IdentityHashMap.java | 6 ++---- test/java/util/Collection/MOAT.java | 9 ++++++++- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/share/classes/java/util/IdentityHashMap.java b/src/share/classes/java/util/IdentityHashMap.java index 7e27bd76e..adf900381 100644 --- a/src/share/classes/java/util/IdentityHashMap.java +++ b/src/share/classes/java/util/IdentityHashMap.java @@ -188,7 +188,6 @@ public class IdentityHashMap /** * Use NULL_KEY for key if it is null. */ - private static Object maskNull(Object key) { return (key == null ? NULL_KEY : key); } @@ -378,8 +377,8 @@ public class IdentityHashMap */ public boolean containsValue(Object value) { Object[] tab = table; - for (int i = 1; i < tab.length; i+= 2) - if (tab[i] == value) + for (int i = 1; i < tab.length; i += 2) + if (tab[i] == value && tab[i - 1] != null) return true; return false; @@ -905,7 +904,6 @@ public class IdentityHashMap * view the first time this view is requested. The view is stateless, * so there's no reason to create more than one. */ - private transient Set> entrySet = null; /** diff --git a/test/java/util/Collection/MOAT.java b/test/java/util/Collection/MOAT.java index 677de4e31..0dd89f355 100644 --- a/test/java/util/Collection/MOAT.java +++ b/test/java/util/Collection/MOAT.java @@ -25,7 +25,7 @@ * @test * @bug 6207984 6272521 6192552 6269713 6197726 6260652 5073546 4137464 * 4155650 4216399 4294891 6282555 6318622 6355327 6383475 6420753 - * 6431845 4802633 6570566 6570575 6570631 6570924 6691185 + * 6431845 4802633 6570566 6570575 6570631 6570924 6691185 6691215 * @summary Run many tests on many Collection and Map implementations * @author Martin Buchholz */ @@ -247,6 +247,13 @@ public class MOAT { testEmptySet(m.keySet()); testEmptySet(m.entrySet()); testEmptyCollection(m.values()); + + try { check(! m.containsValue(null)); } + catch (NullPointerException _) { /* OK */ } + try { check(! m.containsKey(null)); } + catch (NullPointerException _) { /* OK */ } + check(! m.containsValue(1)); + check(! m.containsKey(1)); } private static void testImmutableMap(final Map m) { -- GitLab