This is an automated email from the ASF dual-hosted git repository.
RyanSkraba pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/avro.git
The following commit(s) were added to refs/heads/main by this push:
new cb1ebc2050 AVRO-4321: Fix NPE on getConversionByClass (#3908)
cb1ebc2050 is described below
commit cb1ebc20506c30eb652b565847bf77dd97b75893
Author: Ryan Skraba <[email protected]>
AuthorDate: Wed Aug 5 11:23:05 2026 +0200
AVRO-4321: Fix NPE on getConversionByClass (#3908)
---
.../avro/src/main/java/org/apache/avro/generic/GenericData.java | 3 +++
.../src/test/java/org/apache/avro/reflect/TestReflectData.java | 7 +++++++
2 files changed, 10 insertions(+)
diff --git
a/lang/java/avro/src/main/java/org/apache/avro/generic/GenericData.java
b/lang/java/avro/src/main/java/org/apache/avro/generic/GenericData.java
index 0098d8da5e..ebbac9a322 100644
--- a/lang/java/avro/src/main/java/org/apache/avro/generic/GenericData.java
+++ b/lang/java/avro/src/main/java/org/apache/avro/generic/GenericData.java
@@ -185,6 +185,9 @@ public class GenericData {
*/
@SuppressWarnings("unchecked")
public <T> Conversion<T> getConversionByClass(Class<T> datumClass,
LogicalType logicalType) {
+ if (logicalType == null) {
+ return null;
+ }
Map<String, Conversion<?>> conversions =
conversionsByClass.get(datumClass);
if (conversions != null) {
return (Conversion<T>) conversions.get(logicalType.getName());
diff --git
a/lang/java/avro/src/test/java/org/apache/avro/reflect/TestReflectData.java
b/lang/java/avro/src/test/java/org/apache/avro/reflect/TestReflectData.java
index 40d9ad6dec..a8e6f8e41a 100644
--- a/lang/java/avro/src/test/java/org/apache/avro/reflect/TestReflectData.java
+++ b/lang/java/avro/src/test/java/org/apache/avro/reflect/TestReflectData.java
@@ -39,9 +39,16 @@ import static org.hamcrest.Matchers.containsInAnyOrder;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.lessThan;
import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
import static org.junit.jupiter.api.Assertions.assertThrows;
public class TestReflectData {
+ @Test
+ void getConversionByClassWithNullLogicalTypeReturnsNull() {
+ // BigDecimal has a conversion registered by default but a null logicalType
+
assertNull(ReflectData.get().getConversionByClass(java.math.BigDecimal.class,
null));
+ }
+
@Test
@SuppressWarnings("unchecked")
void weakSchemaCaching() throws Exception {