From 7a5ea7e0ae8d36d591e3f73b66b91829e314d03f Mon Sep 17 00:00:00 2001 From: ErnestHysa Date: Sun, 31 May 2026 16:56:11 +0100 Subject: [PATCH] Fix #3008: reject trailing data after top-level null Both Gson.fromJson and JsonParser.parseReader accepted trailing data after a top-level null because the trailing-data check was skipped when the parsed element was null. Changed assertFullConsumption() in Gson.java to always check for END_DOCUMENT (removing the 'obj != null' guard), and changed the check in JsonParser.parseReader() to unconditionally verify END_DOCUMENT (removing the '!element.isJsonNull()' guard). --- gson/src/main/java/com/google/gson/Gson.java | 2 +- gson/src/main/java/com/google/gson/JsonParser.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gson/src/main/java/com/google/gson/Gson.java b/gson/src/main/java/com/google/gson/Gson.java index a06f290747..5fb67d1c32 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 (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;