On 04/01/2010 15:01, Konstantin Kolinko wrote:
> Will you change the parsing, or it will affect validation only? I was
> not looking in the sources, so I have some difficulty to grasp what
> you are mentioning above.

The current parsing is going to have to change to handle the addition of
method invocation to the unifed EL.

> 1. There are certain differences in escaping rules between JSP pages,
> JSP documents and EL expressions.
> 
> In the EL expressions themselves there are differences in escaping
> between Literal-expressions (EL.1.2.2) (the chapter numbers are from
> "Expression Language 2.2" spec) and Eval-expressions (EL.1.2.1).
> 
> The escaping rules in EL.1.3 apply to the string literals in
> Eval-expressions, but not to Literal expressions.
> 
> Specifically, the following test in TestELEvaluation.java is wrong:
> 
>   assertEquals("\\", evaluateExpression("\\\\"));
> 
> It should be
>   assertEquals("\\\\", evaluateExpression("\\\\"));
>   assertEquals("\\", evaluateExpression("${'\\\\'}"));
> 
> See also
> https://jsp-spec-public.dev.java.net/issues/show_bug.cgi?id=165
> and
> JSP.10.1.11 Request-Time Attribute Expressions

I agree with your analysis. I wasn't planning on addressing any of this
at this stage.

> 2. I am hesitant to try fixing the EL parser right now (at least until
> we release the next 6.0.x), because I suspect that it leverages
> certain Jasper behavior.

+1. Past experience is that the EL implementation is very fragile.

> 3. Testing compliance with the escaping rules should involve JSP pages
> and Jasper.

+1. In Tomcat 7 it is much easier to write test cases that use an
embedded Tomcat instance for things like this. I have some test JSPs
kicking around - I'll try and add them to the Tomcat 7 code base.

> TCK helps here, but there are cases that it does not catch. I do not
> have TCK access, but I see from bug reports that were fixed thus far.

That is easy to arrange if you would like TCK access.

> Also the behavior triggered by
> org.apache.jasper.compiler.Parser.STRICT_QUOTE_ESCAPING property is
> not tested by TCK.

Yep. More test cases required...

> 4.
>> parsing. I've refactored this part and am currently looking to see if I
>> can refactor the function validation code to use the EL parser. My
> 
> Currently when generating Java code Jasper evaluates the composite
> expressions in the following way:
> a) It parses an expression and splits it into Eval and Literal
> expressions, according to JSP escaping rules.
> b) Literal expressions are processed as is, and only Eval expressions
> are passed to the EL interpreter.
> c) The result is concatenated, and has to be coerced to the expected type.
> 
> This becomes a bit complicated.

It gets worse as Jasper then parses the Eval expression as well as
passing it to the EL code.

> There could be another implementation: re-escape the Literal
> expression (e.g. replacing '\' with ${'\\'}), recombine the
> expressions and pass it to the EL interpreter.

That is probably worth considering once the other changes are in place
to see if it simplifies things at all.

> Also, in the Java code generated from
> /examples/jsp/jsp2/el/composite.jsp (of TC7)
> I see some example, where composite EL expression is evaluated as is.
> I suspect that it will exhibit the quoting bugs, but I have not payed
> it much attention yet:
> 
>> org.apache.jasper.runtime.JspRuntimeLibrary.handleSetPropertyExpression(
>> _jspx_page_context.findAttribute("values"), "long", "000${1}${7}",
>> _jspx_page_context, null);
> 
> The above is generated from
> <jsp:setProperty name="values" property="long" value="000${1}${7}"/>
> 
> 
> We also have https://issues.apache.org/bugzilla/show_bug.cgi?id=48112

Yep. Need to look at that too.

Mark



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to