Arvīds,

On 9/11/13 11:07 AM, Arvīds Grabovskis wrote:
> 2013/9/11 Konstantin Kolinko <knst.koli...@gmail.com
> <mailto:knst.koli...@gmail.com>>
> 
>     2013/9/11 Arvīds Grabovskis <arvids.grabovs...@gmail.com
>     <mailto:arvids.grabovs...@gmail.com>>:
>     > Hi,
>     >
>     > If JSP includes a line "<c:if
>     test="${nonExisting}">Hello,world!</c:if>"
>     > where "nonExisting" is attribute that does not exist, then
>     > NullPointerException will be thrown. The cause is at
>     >
>     
> http://svn.apache.org/repos/asf/tomcat/trunk/java/org/apache/jasper/compiler/JspUtil.java
>     > at
>     > line #421 which generates something like:
>     > ((java.lang.Boolean)
>     >
>     
> org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate("${nonExisting}",
>     > java.lang.Boolean.class,
>     (javax.servlet.jsp.PageContext)_jspx_page_context,
>     > null, false)).booleanValue()
>     >
>     > The result of proprietaryEvaluate() is null (because of EL 3.0 changes
>     > regarding coercing), hence calling booleanValue() will throw NPE. The
>     > latest changes in EL specification does require guarding against
>     such null
>     > pointer access (otherwise it will break lots of existing
>     applications). I
>     > really hope that this is not intended behavior.
>     >
>     > Double checked the existence of error with Tomcat v8.0.0-RC1 (the same
>     > problem affects the Glassfish v4, but they have a forked version
>     of JSPC
>     >
> 
>     1. Why does it try to convert to "boolean" and not to "Boolean"?
> 
>     2. Yes, a null cannot be converted to primitive boolean value, so an
>     NPE is the correct behaviour here. So the generated code is correct.
> 
>     So the question is why EL expression "${nonExisting}" or "${null}" was
>     not evaluated to Boolean.FALSE.
> 
>     What version of JSTL are you using?
>     Are you sure that you are using EL-aware versions of the tags
>     (JSTL 1.1+) instead of older JSTL 1.0 ones?
> 
>     What are the steps to reproduce the issue on a clear installation?
>     What is your version of Tomcat?
>     What is you stacktrace?
> 
> 
>     Best regards,
>     Konstantin Kolinko
> 
>     ---------------------------------------------------------------------
>     To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
>     <mailto:dev-unsubscr...@tomcat.apache.org>
>     For additional commands, e-mail: dev-h...@tomcat.apache.org
>     <mailto:dev-h...@tomcat.apache.org>
> 
> 
> Konstantin,
> 
> 1. Manual unboxing does solve potential NPE problems in other parts
> (where auto-unboxing would throw NPE)... so this is not the real
> problem... imho.
> 
> 2. As far as I understand, this is direct result of incompatibility
> between EL 3.0
> (http://download.oracle.com/otndocs/jcp/el-3_0-fr-eval-spec/index.html)
> and 2.2 as stated in EL spec this is intended behavior of EL. Here's the
> citation (Section A.4):
> "The default coercion for nulls to non-primitive types (except String)
> returns 
> nulls. For instance, a null coerced to Boolean now returns a null, while a 
> null coerced to boolean returns false."
> 
> Environment:
> * JSTL 1.2+
> * Tomcat version 8.0.0-RC1 (as previously stated)
> * JDK 1.7.0_21
> 
> I also added a demo application (I hope that mail client won't block it)
> - just drop it in fresh Tomcat v8 and you'll get the error.

The mailing list blocks it. I would recommend filing a bug in bugzilla,
posting your original explanation, the stack trace below, and attaching
your demo application.

-chris

> here's the stack trace:
> java.lang.NullPointerException
> org.apache.jsp.index_jsp._jspx_meth_c_005fif_005f0(index_jsp.java:109)
> org.apache.jsp.index_jsp._jspService(index_jsp.java:81)
> org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
> javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
> org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
> org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:403)
> org.apache.jasper.servlet.JspServlet.service(JspServlet.java:347)
> javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
> org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:91)
> 
> -- Arvīds
> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
> For additional commands, e-mail: dev-h...@tomcat.apache.org
> 

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to