This is an automated email from the ASF dual-hosted git repository.

markt-asf pushed a commit to branch 9.0.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git


The following commit(s) were added to refs/heads/9.0.x by this push:
     new 54a002e691 Review "Avoid NullPointerException writing a null bean 
property value"
54a002e691 is described below

commit 54a002e691937b9b964871fbb441130503495c93
Author: Mark Thomas <[email protected]>
AuthorDate: Fri Nov 6 08:24:55 2026 +0000

    Review "Avoid NullPointerException writing a null bean property value"
    
    Fix edge case for handling primitive setters
---
 java/org/apache/jasper/el/JasperELResolver.java    |  5 ++--
 .../org/apache/jasper/el/TestJasperELResolver.java | 30 ++++++++++++++++++++++
 2 files changed, 33 insertions(+), 2 deletions(-)

diff --git a/java/org/apache/jasper/el/JasperELResolver.java 
b/java/org/apache/jasper/el/JasperELResolver.java
index 31de390053..54f21e1dab 100644
--- a/java/org/apache/jasper/el/JasperELResolver.java
+++ b/java/org/apache/jasper/el/JasperELResolver.java
@@ -272,7 +272,8 @@ public class JasperELResolver extends CompositeELResolver {
             Method[] methods = beanClass.getMethods();
             for (Method method : methods) {
                 if (method.getParameterCount() == 1 && 
setter.equals(method.getName()) &&
-                        (valueClass == null || 
method.getParameterTypes()[0].isAssignableFrom(valueClass))) {
+                        (valueClass == null ? 
!method.getParameterTypes()[0].isPrimitive() :
+                                
method.getParameterTypes()[0].isAssignableFrom(valueClass))) {
                     return method;
                 }
             }
@@ -312,4 +313,4 @@ public class JasperELResolver extends CompositeELResolver {
             return null;
         }
     }
-}
\ No newline at end of file
+}
diff --git a/test/org/apache/jasper/el/TestJasperELResolver.java 
b/test/org/apache/jasper/el/TestJasperELResolver.java
index ba3086b180..2bf27131af 100644
--- a/test/org/apache/jasper/el/TestJasperELResolver.java
+++ b/test/org/apache/jasper/el/TestJasperELResolver.java
@@ -138,6 +138,36 @@ public class TestJasperELResolver {
         }
     }
 
+    @Test
+    public void testGraalResolverNullOverloadedSetter() {
+        ELResolver resolver = new JasperELResolver.GraalBeanELResolver();
+        ELContext context = new ELContextImpl(resolver);
+        TestBeanWithOverloadedSetter bean = new TestBeanWithOverloadedSetter();
+        bean.setBla("initial value");
+
+        // The primitive overload cannot accept null. The inherited Object
+        // setter must be used regardless of the order of reflected methods.
+        resolver.setValue(context, bean, "bla", null);
+        Assert.assertNull(bean.getLastBla());
+        Assert.assertTrue(context.isPropertyResolved());
+    }
+
+    @Test
+    public void testGraalResolverNullPrimitiveSetter() {
+        ELResolver resolver = new JasperELResolver.GraalBeanELResolver();
+        ELContext context = new ELContextImpl(resolver);
+
+        // Leave the property unresolved when no setter can accept null.
+        resolver.setValue(context, new TestBean(), "foo2", null);
+        Assert.assertFalse(context.isPropertyResolved());
+    }
+
+    public static class TestBeanWithOverloadedSetter extends TestBean {
+        public void setBla(@SuppressWarnings("unused") int bla) {
+            Assert.fail("A null value must not use the primitive setter");
+        }
+    }
+
     public static class TestBean {
         public String getFoo() {
             return "foo";


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to