| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent e321a94 commit 441e1fa
1 file changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -27,11 +27,34 @@ public abstract class JSR223ScriptExecutor<T, M extends Map<String, Object>, L e | |||
| 27 | 27 | ||
| 28 | 28 | @Override | |
| 29 | 29 | public ScriptExecutor<T, M, L> init() { | |
| 30 | - ScriptEngineManager scriptEngineManager = new ScriptEngineManager(); | ||
| 31 | - scriptEngine = scriptEngineManager.getEngineByName(scriptEngineName()); | ||
| 30 | + scriptEngine = createScriptEngine(); | ||
| 32 | 31 | return this; | |
| 33 | 32 | } | |
| 34 | 33 | ||
| 34 | + protected ScriptEngine createScriptEngine() { | ||
| 35 | + String name = scriptEngineName(); | ||
| 36 | + if ("nashorn".equalsIgnoreCase(name) || "javascript".equalsIgnoreCase(name) | ||
| 37 | + || "js".equalsIgnoreCase(name) || "ecmascript".equalsIgnoreCase(name)) { | ||
| 38 | + try { | ||
| 39 | + Class<?> factoryClass = Class.forName("jdk.nashorn.api.scripting.NashornScriptEngineFactory"); | ||
| 40 | + Class<?> filterClass = Class.forName("jdk.nashorn.api.scripting.ClassFilter"); | ||
| 41 | + Object filter = java.lang.reflect.Proxy.newProxyInstance( | ||
| 42 | + filterClass.getClassLoader(), | ||
| 43 | + new Class<?>[]{filterClass}, | ||
| 44 | + (proxy, method, methodArgs) -> isClassExposureAllowed((String) methodArgs[0])); | ||
| 45 | + Object factory = factoryClass.getDeclaredConstructor().newInstance(); | ||
| 46 | + return (ScriptEngine) factoryClass.getMethod("getScriptEngine", filterClass).invoke(factory, filter); | ||
| 47 | + } catch (Throwable e) { | ||
| 48 | + Log.e(TAG, "create sandboxed Nashorn engine failed, falling back: " + e); | ||
| 49 | + } | ||
| 50 | + } | ||
| 51 | + return new ScriptEngineManager().getEngineByName(name); | ||
| 52 | + } | ||
| 53 | + | ||
| 54 | + protected boolean isClassExposureAllowed(String className) { | ||
| 55 | + return false; | ||
| 56 | + } | ||
| 57 | + | ||
| 35 | 58 | protected abstract String scriptEngineName(); | |
| 36 | 59 | ||
| 37 | 60 | protected abstract Object extendParameter(AbstractFunctionParser<T, M, L> parser, Map<String, Object> currentObject, String methodName, Object[] args); | |
| Back | FazBrowse Home | New Git URL |
0 commit comments