[
https://issues.apache.org/jira/browse/JEXL-97?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Jeff Ichnowski updated JEXL-97:
-------------------------------
Attachment: proposed.patch
Attaching a proposal for a patch to fix this issue. The change will make the
parser slightly more permissive in what it allows for the left-hand side of an
assignment expression. If this is not acceptable, we could also add a check
during or after the parse, to make sure assignment expressions are correct.
> JEXL parses long expressions with lots of parenthesis slowly
> ------------------------------------------------------------
>
> Key: JEXL-97
> URL: https://issues.apache.org/jira/browse/JEXL-97
> Project: Commons JEXL
> Issue Type: Bug
> Affects Versions: 2.0, 1.1, 1.0
> Environment: Java
> Reporter: Jeff Ichnowski
> Priority: Minor
> Attachments: proposed.patch
>
>
> JEXL's parser uses an unbounded JavaCC LOOKAHEAD to distinguish assignment
> expressions from other expressions. The result is certain expressions take
> exponential time to parse. The example snippet below demonstrates the
> problem. On my machine parsing the expression below takes ~120 seconds.
> Changing the parser to remove the LOOKAHEAD can get this to parse in
> milliseconds. The lookahead appears to be in all versions of the parser
> source.
> import org.apache.commons.jexl.Expression;
> import org.apache.commons.jexl.ExpressionFactory;
> public class SlowParse {
> public static void main(String[] args) throws Exception {
> String input =
>
> "(((((((((((((((((((((((((z+y)/x)*w)-v)*u)/t)-s)*r)/q)+p)-o)*n)-m)+l)*k)+j)/i)+h)*g)+f)/e)+d)-c)/b)+a)";
> // Make sure everything is loaded...
> Expression expr = ExpressionFactory.createExpression(input);
> long start = System.nanoTime();
> expr = ExpressionFactory.createExpression(input);
> long end = System.nanoTime();
> System.out.printf("Parse took %.1f seconds\n", (end-start)/1e+9);
> }
> }
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.