From a872de0ca302e720d72cd4abe1ee1eb2ff845105 Mon Sep 17 00:00:00 2001 From: vmihaylov Date: Sun, 21 Jun 2026 05:55:27 +0300 Subject: [PATCH] Throw JsonSyntaxException instead of NPE for a null AtomicLongArray element Deserializing a JSON array with a null element into AtomicLongArray (e.g. [1,null,3]) called longValue() on the null returned by the element adapter, throwing a NullPointerException. Throw a JsonSyntaxException for the null element, consistent with how the Long adapter reports malformed numbers. Adds a regression test. --- .../com/google/gson/internal/bind/TypeAdapters.java | 7 +++++-- .../gson/functional/JavaUtilConcurrentAtomicTest.java | 10 ++++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) 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 852ae56c5b..6e0f85ad6d 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 @@ -378,8 +378,11 @@ public AtomicLongArray read(JsonReader in) throws IOException { List list = new ArrayList<>(); in.beginArray(); while (in.hasNext()) { - long value = longAdapter.read(in).longValue(); - list.add(value); + Number value = longAdapter.read(in); + if (value == null) { + throw new JsonSyntaxException("null is not a valid AtomicLongArray element"); + } + list.add(value.longValue()); } in.endArray(); int length = list.size(); 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 4b6f639a9e..41f999ec82 100644 --- a/gson/src/test/java/com/google/gson/functional/JavaUtilConcurrentAtomicTest.java +++ b/gson/src/test/java/com/google/gson/functional/JavaUtilConcurrentAtomicTest.java @@ -17,9 +17,11 @@ package com.google.gson.functional; import static com.google.common.truth.Truth.assertThat; +import static org.junit.Assert.assertThrows; import com.google.gson.Gson; import com.google.gson.GsonBuilder; +import com.google.gson.JsonSyntaxException; import com.google.gson.LongSerializationPolicy; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; @@ -113,4 +115,12 @@ public void testAtomicLongArrayWithStringSerializationPolicy() { private static class AtomicLongHolder { AtomicLong value; } + + @Test + public void testAtomicLongArrayWithNullElement() { + JsonSyntaxException e = + assertThrows( + JsonSyntaxException.class, () -> gson.fromJson("[1,null,3]", AtomicLongArray.class)); + assertThat(e).hasMessageThat().isEqualTo("null is not a valid AtomicLongArray element"); + } }