[
https://issues.jboss.org/browse/WFLY-4457?page=com.atlassian.jira.plugin....
]
Paul Pogonyshev updated WFLY-4457:
----------------------------------
Description:
When a lambda expression is exited with an exception, its variables are left on stack and
cannot be removed from it without hacks. My usecase is a customly defined function that
uses exceptions as means of non-local exit, but the bug triggers even without custom
functions, as demonstrated below.
Test case:
{noformat}
ELProcessor processor = new ELProcessor ();
processor.defineBean ("x", null);
try {
processor.eval ("(x -> x.bug ()) ('bug')");
}
catch (RuntimeException exception) {
// This is expected, there is no method bug() on strings.
}
processor.eval ("x"); // This must evaluate to null, but instead
evaluates to "bug".
{noformat}
Proposed fix will be attached as a short patch against
'javax/el/LambdaExpression.java'.
was:
When a lambda expression is exited with an exception, its variables are left on stack and
cannot be removed from it without hacks. My usecase is a customly defined function that
uses exceptions as means of non-local exit, but the bug triggers even without custom
functions, as demonstrated below.
Test case:
ELProcessor processor = new ELProcessor ();
processor.defineBean ("x", null);
try {
processor.eval ("(x -> x.bug ()) ('bug')");
}
catch (RuntimeException exception) {
// This is expected, there is no method bug() on strings.
}
processor.eval ("x"); // This must evaluate to null, but instead
evaluates to "bug".
Proposed fix will be attached as a short patch against
'javax/el/LambdaExpression.java'.
EL 3 LambdaExpression failing with an exception irreversibly pollutes
variable scope
------------------------------------------------------------------------------------
Key: WFLY-4457
URL:
https://issues.jboss.org/browse/WFLY-4457
Project: WildFly
Issue Type: Bug
Affects Versions: 8.2.0.Final
Reporter: Paul Pogonyshev
Assignee: Jason Greene
Labels: el-expresion, patch
Attachments: lambda-expression-scoping-fix.diff
When a lambda expression is exited with an exception, its variables are left on stack and
cannot be removed from it without hacks. My usecase is a customly defined function that
uses exceptions as means of non-local exit, but the bug triggers even without custom
functions, as demonstrated below.
Test case:
{noformat}
ELProcessor processor = new ELProcessor ();
processor.defineBean ("x", null);
try {
processor.eval ("(x -> x.bug ()) ('bug')");
}
catch (RuntimeException exception) {
// This is expected, there is no method bug() on strings.
}
processor.eval ("x"); // This must evaluate to null, but instead
evaluates to "bug".
{noformat}
Proposed fix will be attached as a short patch against
'javax/el/LambdaExpression.java'.
--
This message was sent by Atlassian JIRA
(v6.3.11#6341)