From 3f2efac95ef6575e33a7b4c9052d00afe1b83bad Mon Sep 17 00:00:00 2001 From: Joel Leitch Date: Wed, 9 Jan 2013 23:37:38 +0000 Subject: [PATCH] Stop blowing up on a null key, but rather return that the element is not found. --- .../google/gson/internal/LinkedTreeMap.java | 18 ++++++++++-------- .../gson/internal/LinkedTreeMapTest.java | 18 ++++++++++++++++++ 2 files changed, 28 insertions(+), 8 deletions(-) diff --git a/gson/src/main/java/com/google/gson/internal/LinkedTreeMap.java b/gson/src/main/java/com/google/gson/internal/LinkedTreeMap.java index cd2f4ca7..00672514 100644 --- a/gson/src/main/java/com/google/gson/internal/LinkedTreeMap.java +++ b/gson/src/main/java/com/google/gson/internal/LinkedTreeMap.java @@ -387,14 +387,16 @@ public class LinkedTreeMap, V> } private TreeNode find(K key) { - for (TreeNode entry = root; entry != null; ) { - int compareVal = key.compareTo(entry.key); - if (compareVal < 0) { - entry = entry.left; - } else if (compareVal > 0) { - entry = entry.right; - } else { - return entry; + if (key != null) { + for (TreeNode entry = root; entry != null; ) { + int compareVal = key.compareTo(entry.key); + if (compareVal < 0) { + entry = entry.left; + } else if (compareVal > 0) { + entry = entry.right; + } else { + return entry; + } } } return null; diff --git a/gson/src/test/java/com/google/gson/internal/LinkedTreeMapTest.java b/gson/src/test/java/com/google/gson/internal/LinkedTreeMapTest.java index 538ee5f4..a46d2b90 100644 --- a/gson/src/test/java/com/google/gson/internal/LinkedTreeMapTest.java +++ b/gson/src/test/java/com/google/gson/internal/LinkedTreeMapTest.java @@ -56,6 +56,24 @@ public class LinkedTreeMapTest extends TestCase { assertEquals(map.size(), map.entrySet().size()); } + public void testGetAndContainsNullKey() throws Exception { + LinkedTreeMap map = new LinkedTreeMap(); + assertFalse(map.containsKey(null)); + assertNull(map.get(null)); + + map.put("A", 1); + assertFalse(map.containsKey(null)); + assertNull(map.get(null)); + } + + public void testDisallowPutForNullKeys() throws Exception { + LinkedTreeMap map = new LinkedTreeMap(); + try { + map.put(null, 1); + fail(); + } catch (NullPointerException expected) {} + } + public void testSingleElement() throws Exception { LinkedTreeMap map = new LinkedTreeMap(); map.put("A", 1);