From 0215fd9d70a21f0fa32bfa24527c28c20afe5148 Mon Sep 17 00:00:00 2001 From: khazra Date: Wed, 9 May 2012 11:14:22 -0700 Subject: [PATCH] 7165118: (prefs) AbstractPreferences.remove(null) does not throw NPE Summary: Insert null argument check in AbstractPreferences.remove() Reviewed-by: dholmes, chegar, alanb --- .../java/util/prefs/AbstractPreferences.java | 2 + test/java/util/prefs/RemoveNullKeyCheck.java | 72 ++++++++++++++++--- 2 files changed, 65 insertions(+), 9 deletions(-) diff --git a/src/share/classes/java/util/prefs/AbstractPreferences.java b/src/share/classes/java/util/prefs/AbstractPreferences.java index f4a7e5e0a..5ba264e53 100644 --- a/src/share/classes/java/util/prefs/AbstractPreferences.java +++ b/src/share/classes/java/util/prefs/AbstractPreferences.java @@ -305,8 +305,10 @@ public abstract class AbstractPreferences extends Preferences { * @param key key whose mapping is to be removed from the preference node. * @throws IllegalStateException if this node (or an ancestor) has been * removed with the {@link #removeNode()} method. + * @throws NullPointerException {@inheritDoc}. */ public void remove(String key) { + Objects.requireNonNull(key, "Specified key cannot be null"); synchronized(lock) { if (removed) throw new IllegalStateException("Node has been removed."); diff --git a/test/java/util/prefs/RemoveNullKeyCheck.java b/test/java/util/prefs/RemoveNullKeyCheck.java index e45459b44..c74f0d82d 100644 --- a/test/java/util/prefs/RemoveNullKeyCheck.java +++ b/test/java/util/prefs/RemoveNullKeyCheck.java @@ -22,23 +22,77 @@ */ /* @test - * @bug 7160242 + * @bug 7160242 7165118 * @summary Check if NullPointerException is thrown if the key passed * to remove() is null. */ import java.util.prefs.Preferences; +import java.util.prefs.AbstractPreferences; +import java.util.prefs.BackingStoreException; public class RemoveNullKeyCheck { + private static boolean failed = false; + public static void main(String[] args) throws Exception { - try { - Preferences node = Preferences.userRoot().node("N1"); - node.remove(null); - throw new RuntimeException("Expected NullPointerException " + - "not thrown"); - } catch (NullPointerException npe) { - System.out.println("NullPointerException thrown"); - } + checkPreferencesRemove(); + checkAbstractPreferencesRemove(); + if (failed) { + throw new RuntimeException("Expected NullPointerException " + + "not thrown"); + } + } + + public static void checkPreferencesRemove() { + try { + Preferences node = Preferences.userRoot().node("N1"); + node.remove(null); + failed = true; + } catch (NullPointerException npe) { + } + } + + public static void checkAbstractPreferencesRemove() { + + Preferences abstrPrefs = new AbstractPreferences(null, "") { + @Override + protected void putSpi(String key, String value) { + } + @Override + protected String getSpi(String key) { + return null; + } + @Override + protected void removeSpi(String key) { + } + @Override + protected void removeNodeSpi() throws BackingStoreException { + } + @Override + protected String[] keysSpi() throws BackingStoreException { + return new String[0]; + } + @Override + protected String[] childrenNamesSpi() throws BackingStoreException { + return new String[0]; + } + @Override + protected AbstractPreferences childSpi(String name) { + return null; + } + @Override + protected void syncSpi() throws BackingStoreException { + } + @Override + protected void flushSpi() throws BackingStoreException { + } + }; + + try { + abstrPrefs.remove(null); + failed = true; + } catch(NullPointerException npe) { + } } } -- GitLab