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);