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]