diff --git a/gson/src/main/java/com/google/gson/Gson.java b/gson/src/main/java/com/google/gson/Gson.java index a06f290747..f5c7027b20 100644 --- a/gson/src/main/java/com/google/gson/Gson.java +++ b/gson/src/main/java/com/google/gson/Gson.java @@ -1195,7 +1195,7 @@ public T fromJson(JsonElement json, TypeToken typeOfT) throws JsonSyntaxE private static void assertFullConsumption(Object obj, JsonReader reader) { try { - if (obj != null && reader.peek() != JsonToken.END_DOCUMENT) { + if (obj == null || reader.peek() != JsonToken.END_DOCUMENT) { throw new JsonSyntaxException("JSON document was not fully consumed."); } } catch (MalformedJsonException e) { diff --git a/gson/src/main/java/com/google/gson/JsonParser.java b/gson/src/main/java/com/google/gson/JsonParser.java index d56da87a48..b2fafdd8d6 100644 --- a/gson/src/main/java/com/google/gson/JsonParser.java +++ b/gson/src/main/java/com/google/gson/JsonParser.java @@ -108,7 +108,7 @@ public static JsonElement parseReader(Reader reader) throws JsonIOException, Jso try { JsonReader jsonReader = new JsonReader(reader); JsonElement element = parseReader(jsonReader); - if (!element.isJsonNull() && jsonReader.peek() != JsonToken.END_DOCUMENT) { + if (jsonReader.peek() != JsonToken.END_DOCUMENT) { throw new JsonSyntaxException("Did not consume the entire document."); } return element; diff --git a/gson/src/test/java/com/google/gson/JsonParserTest.java b/gson/src/test/java/com/google/gson/JsonParserTest.java index 47192c797b..55db2dad0a 100644 --- a/gson/src/test/java/com/google/gson/JsonParserTest.java +++ b/gson/src/test/java/com/google/gson/JsonParserTest.java @@ -195,4 +195,19 @@ public void testStrict() { // Original strictness was kept assertThat(reader.getStrictness()).isEqualTo(strictness); } + + // Tests for https://github.com/google/gson/issues/3008 - trailing data after top-level null + @Test + public void testParseTrailingDataAfterNull() { + assertThrows(JsonSyntaxException.class, () -> JsonParser.parseString("null trailing")); + assertThrows(JsonSyntaxException.class, () -> JsonParser.parseString("nulltrailing")); + assertThrows(JsonSyntaxException.class, () -> JsonParser.parseString(" null extra")); + } + + @Test + public void testFromJsonTrailingDataAfterNull() { + Gson gson = new Gson(); + StringReader reader = new StringReader("null trailing"); + assertThrows(JsonSyntaxException.class, () -> gson.fromJson(reader, String.class)); + } }