[
https://issues.apache.org/jira/browse/LUCENE-6920?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Uwe Schindler resolved LUCENE-6920.
-----------------------------------
Resolution: Fixed
Thanks Robert for review & suggestions.
> Simplify callable function checks in Expression module
> ------------------------------------------------------
>
> Key: LUCENE-6920
> URL: https://issues.apache.org/jira/browse/LUCENE-6920
> Project: Lucene - Core
> Issue Type: Improvement
> Components: modules/expressions
> Reporter: Uwe Schindler
> Assignee: Uwe Schindler
> Fix For: Trunk, 5.5
>
> Attachments: LUCENE-6920.patch, LUCENE-6920.patch, LUCENE-6920.patch
>
>
> The expressions module allows to specify custom functions. It does some
> checks to ensure that the compiled Expression works correctly and does not
> produce linkage errors. It also checks parameters and return type to be
> doubles.
> There are two problems with the current approach:
> - the check gets classloaders of the method's declaring class. This fails if
> a security manager forbids access to bootstrap classes (e.g., java.lang.Math)
> - the code only checks if method or declaring class are public, but not if it
> is really reachable. This may not be the case in Java 9 (different module
> without exports,...)
> This issue will use MethodHandles to do the accessibility checks (it uses
> MethodHandles.publicLookup() to resolve the given reflected method). If that
> fails, our compiled code cannot acess it. If module system prevents access,
> this is also checked.
> To fix the issue with classloaders, it uses a trick: It calls Class.forName()
> with the classloader we use to compile our expression. If that does not
> return the same class as the declared method, it also fails compilation. This
> prevents NoClassDefFoundException on executing the expression.
> All tests pass.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]