From de9c82d1d2ab80344a0e9f32ecbbbe61dbf89d84 Mon Sep 17 00:00:00 2001 From: QmelZ <59574967+QmelZ@users.noreply.github.com> Date: Mon, 14 Jun 2021 02:22:33 +0300 Subject: [PATCH] Freedom for javascript mods (#5421) * remove blacklist and class shutter * no context factory --- android/src/mindustry/android/AndroidRhinoContext.java | 7 ------- core/src/mindustry/core/Platform.java | 9 --------- core/src/mindustry/mod/ContentParser.java | 4 ++-- core/src/mindustry/mod/Scripts.java | 10 ---------- 4 files changed, 2 insertions(+), 28 deletions(-) diff --git a/android/src/mindustry/android/AndroidRhinoContext.java b/android/src/mindustry/android/AndroidRhinoContext.java index 1b845d61cf..ab28532941 100644 --- a/android/src/mindustry/android/AndroidRhinoContext.java +++ b/android/src/mindustry/android/AndroidRhinoContext.java @@ -62,13 +62,6 @@ public class AndroidRhinoContext{ initApplicationClassLoader(createClassLoader(AndroidContextFactory.class.getClassLoader())); } - @Override - protected Context makeContext(){ - Context ctx = super.makeContext(); - ctx.setClassShutter(Scripts::allowClass); - return ctx; - } - /** * Create a ClassLoader which is able to deal with bytecode * @param parent the parent of the create classloader diff --git a/core/src/mindustry/core/Platform.java b/core/src/mindustry/core/Platform.java index a595668aa8..bbceee8a64 100644 --- a/core/src/mindustry/core/Platform.java +++ b/core/src/mindustry/core/Platform.java @@ -79,15 +79,6 @@ public interface Platform{ } default Context getScriptContext(){ - ContextFactory.getGlobalSetter().setContextFactoryGlobal(new ContextFactory(){ - @Override - protected Context makeContext(){ - Context ctx = super.makeContext(); - ctx.setClassShutter(Scripts::allowClass); - return ctx; - } - }); - Context c = Context.enter(); c.setOptimizationLevel(9); return c; diff --git a/core/src/mindustry/mod/ContentParser.java b/core/src/mindustry/mod/ContentParser.java index 6862b1a540..9c8c7f3b3a 100644 --- a/core/src/mindustry/mod/ContentParser.java +++ b/core/src/mindustry/mod/ContentParser.java @@ -752,8 +752,8 @@ public class ContentParser{ var out = ClassMap.classes.get(!base.isEmpty() && Character.isLowerCase(base.charAt(0)) ? Strings.capitalize(base) : base); if(out != null) return (Class)out; - //try to resolve it as a raw class name if it's allowed - if(base.indexOf('.') != -1 && Scripts.allowClass(base)){ + //try to resolve it as a raw class name + if(base.indexOf('.') != -1){ try{ return (Class)Class.forName(base); }catch(Exception ignored){ diff --git a/core/src/mindustry/mod/Scripts.java b/core/src/mindustry/mod/Scripts.java index 4f70c0c814..1aa69b9ab7 100644 --- a/core/src/mindustry/mod/Scripts.java +++ b/core/src/mindustry/mod/Scripts.java @@ -22,22 +22,12 @@ import java.util.*; import java.util.regex.*; public class Scripts implements Disposable{ - private static final Seq blacklist = Seq.with(".net.", "java.net", "files", "reflect", "javax", "rhino", "file", "channels", "jdk", - "runtime", "util.os", "rmi", "security", "org.", "sun.", "beans", "sql", "http", "exec", "compiler", "process", "system", - ".awt", "socket", "classloader", "oracle", "invoke", "java.util.function", "java.util.stream", "org.", "mod.classmap"); - private static final Seq whitelist = Seq.with("mindustry.net", "netserver", "netclient", "com.sun.proxy.$proxy", "jdk.proxy", "mindustry.gen.", - "mindustry.logic.", "mindustry.async.", "saveio", "systemcursor", "filetreeinitevent", "asyncexecutor"); - private final Context context; private final Scriptable scope; private boolean errored; LoadedMod currentMod = null; - public static boolean allowClass(String type){ - return !blacklist.contains(t -> type.toLowerCase(Locale.ROOT).contains(t)) || whitelist.contains(t -> type.toLowerCase(Locale.ROOT).contains(t)); - } - public Scripts(){ Time.mark();