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 {

Reply via email to