This is an automated email from the ASF dual-hosted git repository. markt pushed a commit to branch 8.5.x in repository https://gitbox.apache.org/repos/asf/tomcat.git
The following commit(s) were added to refs/heads/8.5.x by this push: new e8b7ec6 Catch <jsp:useBean> module export issues at compile time if configured to do so e8b7ec6 is described below commit e8b7ec6840f3c3b5a8926012bc8f7a40fdff86d6 Author: Mark Thomas <ma...@apache.org> AuthorDate: Fri Oct 4 00:15:26 2019 +0100 Catch <jsp:useBean> module export issues at compile time if configured to do so --- java/org/apache/el/util/JreCompat.java | 2 +- java/org/apache/jasper/compiler/Generator.java | 19 +++++++++++++------ res/checkstyle/org-import-control.xml | 1 + 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/java/org/apache/el/util/JreCompat.java b/java/org/apache/el/util/JreCompat.java index 7ef8b87..8f226f2 100644 --- a/java/org/apache/el/util/JreCompat.java +++ b/java/org/apache/el/util/JreCompat.java @@ -25,7 +25,7 @@ import java.lang.reflect.AccessibleObject; * This class is duplicated in javax.el * When making changes keep the two in sync. */ -class JreCompat { +public class JreCompat { private static final JreCompat instance; diff --git a/java/org/apache/jasper/compiler/Generator.java b/java/org/apache/jasper/compiler/Generator.java index 1f10305..17bc381 100644 --- a/java/org/apache/jasper/compiler/Generator.java +++ b/java/org/apache/jasper/compiler/Generator.java @@ -21,6 +21,7 @@ import java.beans.BeanInfo; import java.beans.IntrospectionException; import java.beans.Introspector; import java.beans.PropertyDescriptor; +import java.lang.reflect.Constructor; import java.lang.reflect.Method; import java.lang.reflect.Modifier; import java.text.DateFormat; @@ -47,6 +48,7 @@ import javax.servlet.jsp.tagext.TagInfo; import javax.servlet.jsp.tagext.TagVariableInfo; import javax.servlet.jsp.tagext.VariableInfo; +import org.apache.el.util.JreCompat; import org.apache.jasper.Constants; import org.apache.jasper.JasperException; import org.apache.jasper.JspCompilationContext; @@ -1354,14 +1356,19 @@ class Generator { } else { canonicalName = klass; } + // Check that there is a 0 arg constructor + Constructor<?> constructor = bean.getConstructor(new Class[] {}); + // Check the bean is public, not an interface, not abstract + // and (for Java 9+) in an exported module int modifiers = bean.getModifiers(); - if (!Modifier.isPublic(modifiers) - || Modifier.isInterface(modifiers) - || Modifier.isAbstract(modifiers)) { - throw new Exception("Invalid bean class modifier"); + JreCompat jreCompat = JreCompat.getInstance(); + if (!Modifier.isPublic(modifiers) || + Modifier.isInterface(modifiers) || + Modifier.isAbstract(modifiers) || + !jreCompat.canAcccess(null, constructor) ) { + throw new Exception(Localizer.getMessage("jsp.error.invalid.bean", + Integer.valueOf(modifiers))); } - // Check that there is a 0 arg constructor - bean.getConstructor(new Class[] {}); // At compile time, we have determined that the bean class // exists, with a public zero constructor, new() can be // used for bean instantiation. diff --git a/res/checkstyle/org-import-control.xml b/res/checkstyle/org-import-control.xml index 09bf473..3a3dde0 100644 --- a/res/checkstyle/org-import-control.xml +++ b/res/checkstyle/org-import-control.xml @@ -98,6 +98,7 @@ <subpackage name="jasper"> <allow pkg="javax.el"/> <allow pkg="javax.servlet"/> + <allow pkg="org.apache.el"/> <allow pkg="org.apache.jasper"/> <allow pkg="org.apache.juli"/> <allow pkg="org.apache.tomcat" exact-match="true"/> --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org