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"); + } }