From cea40394d63585fa46c74df55f5c8b1c9d6516d8 Mon Sep 17 00:00:00 2001 From: Priyadarshni Sundararajan <29859979+priyadarshnisundararajan@users.noreply.github.com> Date: Mon, 21 Sep 2026 22:06:21 +0000 Subject: [PATCH] Fix AtomicIntegerArray deserialization crashing on JSON null elements The ATOMIC_INTEGER_ARRAY type adapter called in.nextInt() directly and only caught NumberFormatException, so a null array element escaped as a raw IllegalStateException. Mirror the AtomicLongArray fix from #3038: peek for a NULL token and throw JsonSyntaxException with the element path. Fixes #3047 --- .../com/google/gson/internal/bind/TypeAdapters.java | 4 ++++ .../gson/functional/JavaUtilConcurrentAtomicTest.java | 10 ++++++++++ 2 files changed, 14 insertions(+) diff --git a/gson/src/main/java/com/google/gson/internal/bind/TypeAdapters.java b/gson/src/main/java/com/google/gson/internal/bind/TypeAdapters.java index 45f9536b54..d4bed3556e 100644 --- a/gson/src/main/java/com/google/gson/internal/bind/TypeAdapters.java +++ b/gson/src/main/java/com/google/gson/internal/bind/TypeAdapters.java @@ -345,6 +345,10 @@ public AtomicIntegerArray read(JsonReader in) throws IOException { in.beginArray(); while (in.hasNext()) { try { + if (in.peek() == JsonToken.NULL) { + throw new JsonSyntaxException( + "null is not a valid AtomicIntegerArray element; at path " + in.getPath()); + } int integer = in.nextInt(); list.add(integer); } catch (NumberFormatException e) { diff --git a/gson/src/test/java/com/google/gson/functional/JavaUtilConcurrentAtomicTest.java b/gson/src/test/java/com/google/gson/functional/JavaUtilConcurrentAtomicTest.java index a934d585b3..7a49a793c9 100644 --- a/gson/src/test/java/com/google/gson/functional/JavaUtilConcurrentAtomicTest.java +++ b/gson/src/test/java/com/google/gson/functional/JavaUtilConcurrentAtomicTest.java @@ -125,4 +125,14 @@ public void testAtomicLongArrayWithNullElement() { .hasMessageThat() .isEqualTo("null is not a valid AtomicLongArray element; at path $[1]"); } + + @Test + public void testAtomicIntegerArrayWithNullElement() { + JsonSyntaxException e = + assertThrows( + JsonSyntaxException.class, () -> gson.fromJson("[1,null,3]", AtomicIntegerArray.class)); + assertThat(e) + .hasMessageThat() + .isEqualTo("null is not a valid AtomicIntegerArray element; at path $[1]"); + } }