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

rmaucher pushed a commit to branch 11.0.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git


The following commit(s) were added to refs/heads/11.0.x by this push:
     new eb6bed5a27 Fix bad types in JSP runtime
eb6bed5a27 is described below

commit eb6bed5a27bb67d781226744ee222bc4deb79c5b
Author: remm <[email protected]>
AuthorDate: Mon Jun 1 11:20:17 2026 +0200

    Fix bad types in JSP runtime
    
    Clarify object factories a little (not usable, so avoid them).
    Catch some out of bounds exceptions parsing EL expressions.
---
 java/org/apache/jasper/compiler/Validator.java        |  4 ++--
 java/org/apache/jasper/runtime/JspRuntimeLibrary.java | 10 ++++++----
 java/org/apache/naming/AbstractRef.java               |  4 ++--
 java/org/apache/naming/ContextAccessController.java   |  4 ++--
 4 files changed, 12 insertions(+), 10 deletions(-)

diff --git a/java/org/apache/jasper/compiler/Validator.java 
b/java/org/apache/jasper/compiler/Validator.java
index 4ce9bb42c3..0c5fa434c5 100644
--- a/java/org/apache/jasper/compiler/Validator.java
+++ b/java/org/apache/jasper/compiler/Validator.java
@@ -1130,10 +1130,10 @@ class Validator {
             // valid attribute value in xml).
 
             if (value != null) {
-                if (n.getRoot().isXmlSyntax() && value.startsWith("%=")) {
+                if (n.getRoot().isXmlSyntax() && value.startsWith("%=") && 
value.length() >= 3) {
                     result = new Node.JspAttribute(tai, qName, uri, localName, 
value.substring(2, value.length() - 1),
                             true, null, dynamic);
-                } else if (!n.getRoot().isXmlSyntax() && 
value.startsWith("<%=")) {
+                } else if (!n.getRoot().isXmlSyntax() && 
value.startsWith("<%=") && value.length() >= 5) {
                     result = new Node.JspAttribute(tai, qName, uri, localName, 
value.substring(3, value.length() - 2),
                             true, null, dynamic);
                 } else {
diff --git a/java/org/apache/jasper/runtime/JspRuntimeLibrary.java 
b/java/org/apache/jasper/runtime/JspRuntimeLibrary.java
index cc1a7888dc..0745346909 100644
--- a/java/org/apache/jasper/runtime/JspRuntimeLibrary.java
+++ b/java/org/apache/jasper/runtime/JspRuntimeLibrary.java
@@ -567,7 +567,7 @@ public class JspRuntimeLibrary {
 
         try {
             if (propertyEditorClass != null) {
-                Object[] tmpval = new Integer[values.length];
+                Object[] tmpval = new Object[values.length];
                 for (int i = 0; i < values.length; i++) {
                     tmpval[i] = getValueFromBeanInfoPropertyEditor(t, 
propertyName, values[i], propertyEditorClass);
                 }
@@ -669,7 +669,7 @@ public class JspRuntimeLibrary {
                 }
                 method.invoke(bean, new Object[] { tmpval });
             } else {
-                Object[] tmpval = new Integer[values.length];
+                Object[] tmpval = new Object[values.length];
                 for (int i = 0; i < values.length; i++) {
                     tmpval[i] = getValueFromPropertyEditorManager(t, 
propertyName, values[i]);
                 }
@@ -956,6 +956,7 @@ public class JspRuntimeLibrary {
         Method result = null;
         Class<?> type = null;
         if (GRAAL) {
+            // BeanInfo is approximated with Graal
             String setter = "set" + capitalize(prop);
             Method[] methods = beanClass.getMethods();
             for (Method method : methods) {
@@ -1002,10 +1003,11 @@ public class JspRuntimeLibrary {
         Method result = null;
         Class<?> type = null;
         if (GRAAL) {
-            String setter = "get" + capitalize(prop);
+            // BeanInfo is approximated with Graal
+            String getter = "get" + capitalize(prop);
             Method[] methods = beanClass.getMethods();
             for (Method method : methods) {
-                if (setter.equals(method.getName())) {
+                if (getter.equals(method.getName())) {
                     return method;
                 }
             }
diff --git a/java/org/apache/naming/AbstractRef.java 
b/java/org/apache/naming/AbstractRef.java
index fcbe82117e..da62f6522b 100644
--- a/java/org/apache/naming/AbstractRef.java
+++ b/java/org/apache/naming/AbstractRef.java
@@ -62,8 +62,8 @@ public abstract class AbstractRef extends Reference {
         if (factory != null) {
             return factory;
         } else {
-            factory = System.getProperty(Context.OBJECT_FACTORIES);
-            if (factory != null) {
+            String objectFactories = 
System.getProperty(Context.OBJECT_FACTORIES);
+            if (objectFactories != null) {
                 return null;
             } else {
                 return getDefaultFactoryClassName();
diff --git a/java/org/apache/naming/ContextAccessController.java 
b/java/org/apache/naming/ContextAccessController.java
index c68602f8d6..5b5ee9c7f2 100644
--- a/java/org/apache/naming/ContextAccessController.java
+++ b/java/org/apache/naming/ContextAccessController.java
@@ -52,8 +52,8 @@ public class ContextAccessController {
      * @param token Security token
      */
     public static void setSecurityToken(Object name, Object token) {
-        if ((!securityTokens.containsKey(name)) && (token != null)) {
-            securityTokens.put(name, token);
+        if (token != null) {
+            securityTokens.putIfAbsent(name, token);
         }
     }
 


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

Reply via email to