From 84745b05372e63b721cac959a1e64f41b724d83e Mon Sep 17 00:00:00 2001 From: Eric Cochran Date: Sun, 15 Apr 2018 20:45:28 -0700 Subject: [PATCH] Disallow null Type from entering user code. Otherwise, Moshi.adapter(null) will end up calling into user JsonAdapter factories with a null Type parameter. Kotlin fails with java.lang.IllegalArgumentException: Parameter specified as non-null is null That message ends up too far away from the real error. --- moshi/src/main/java/com/squareup/moshi/Moshi.java | 3 +++ moshi/src/test/java/com/squareup/moshi/MoshiTest.java | 11 +++++++++++ 2 files changed, 14 insertions(+) diff --git a/moshi/src/main/java/com/squareup/moshi/Moshi.java b/moshi/src/main/java/com/squareup/moshi/Moshi.java index 50cf20e..8d39c47 100644 --- a/moshi/src/main/java/com/squareup/moshi/Moshi.java +++ b/moshi/src/main/java/com/squareup/moshi/Moshi.java @@ -92,6 +92,9 @@ public final class Moshi { @CheckReturnValue @SuppressWarnings("unchecked") // Factories are required to return only matching JsonAdapters. public JsonAdapter adapter(Type type, Set annotations) { + if (type == null) { + throw new NullPointerException("type == null"); + } if (annotations == null) { throw new NullPointerException("annotations == null"); } diff --git a/moshi/src/test/java/com/squareup/moshi/MoshiTest.java b/moshi/src/test/java/com/squareup/moshi/MoshiTest.java index b7976c7..f81d272 100644 --- a/moshi/src/test/java/com/squareup/moshi/MoshiTest.java +++ b/moshi/src/test/java/com/squareup/moshi/MoshiTest.java @@ -27,6 +27,7 @@ import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; +import java.util.Collections; import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.List; @@ -725,6 +726,16 @@ public final class MoshiTest { .isEqualTo("{\"shout\":\"WHAT'S UP\",\"speak\":\"Yo dog\"}"); } + @Test public void adapterLookupDisallowsNullType() { + Moshi moshi = new Moshi.Builder().build(); + try { + moshi.adapter(null, Collections.emptySet()); + fail(); + } catch (NullPointerException expected) { + assertThat(expected).hasMessage("type == null"); + } + } + @Test public void adapterLookupDisallowsNullAnnotations() { Moshi moshi = new Moshi.Builder().build(); try {