Add Java sandbox switch, for Quilt installer

#3113 #3187

The security manager malfunctions, causing access denial of certain operations. While this isn't actually a solution, it should at least allow Quilt installer to proceed.
java.util.concurrent.CompletionException: java.security.AccessControlException: access denied ("java.net.SocketPermission" "meta.fabricmc.net:443" "connect,resolve")
This commit is contained in:
khanhduytran0 2023-01-20 17:19:30 +07:00
parent 314c87c7b6
commit ee1c304a32
4 changed files with 18 additions and 7 deletions

View File

@ -271,14 +271,16 @@ public class JavaGUILauncherActivity extends BaseActivity implements View.OnTouc
javaArgList.add(modFile.getAbsolutePath());
}
Logger.getInstance().appendToLog("Info: Java arguments: " + Arrays.toString(javaArgList.toArray(new String[0])));
// Run java on sandbox, non-overrideable.
Collections.reverse(javaArgList);
javaArgList.add("-Xbootclasspath/a:" + Tools.DIR_DATA + "/security/pro-grade.jar");
javaArgList.add("-Djava.security.manager=net.sourceforge.prograde.sm.ProGradeJSM");
javaArgList.add("-Djava.security.policy=" + Tools.DIR_DATA + "/security/java_sandbox.policy");
Collections.reverse(javaArgList);
if (LauncherPreferences.PREF_JAVA_SANDBOX) {
Collections.reverse(javaArgList);
javaArgList.add("-Xbootclasspath/a:" + Tools.DIR_DATA + "/security/pro-grade.jar");
javaArgList.add("-Djava.security.manager=net.sourceforge.prograde.sm.ProGradeJSM");
javaArgList.add("-Djava.security.policy=" + Tools.DIR_DATA + "/security/java_sandbox.policy");
Collections.reverse(javaArgList);
}
Logger.getInstance().appendToLog("Info: Java arguments: " + Arrays.toString(javaArgList.toArray(new String[0])));
return JREUtils.launchJavaVM(this, javaArgList);
} catch (Throwable th) {

View File

@ -49,6 +49,7 @@ public class LauncherPreferences {
public static boolean PREF_VIRTUAL_MOUSE_START = false;
public static boolean PREF_ARC_CAPES = false;
public static boolean PREF_USE_ALTERNATE_SURFACE = true;
public static boolean PREF_JAVA_SANDBOX = true;
public static int PREF_SCALE_FACTOR = 100;
@ -82,6 +83,7 @@ public class LauncherPreferences {
PREF_VIRTUAL_MOUSE_START = DEFAULT_PREF.getBoolean("mouse_start", false);
PREF_ARC_CAPES = DEFAULT_PREF.getBoolean("arc_capes",false);
PREF_USE_ALTERNATE_SURFACE = DEFAULT_PREF.getBoolean("alternate_surface", false);
PREF_JAVA_SANDBOX = DEFAULT_PREF.getBoolean("java_sandbox", true);
PREF_SCALE_FACTOR = DEFAULT_PREF.getInt("resolutionRatio", 100);
/*

View File

@ -110,6 +110,8 @@
<string name="mcl_setting_veroption_snapshot">Snapshot</string>
<string name="mcl_setting_veroption_oldalpha">Old-alpha</string>
<string name="mcl_setting_veroption_oldbeta">Old-beta</string>
<string name="mcl_setting_java_sandbox">Sandbox .jar installer</string>
<string name="mcl_setting_java_sandbox_subtitle">Control the availability sandbox security manager when launching .jar installer.</string>
<string name="mcl_version_clone">Clone</string>
<!-- Global strings -->

View File

@ -5,6 +5,11 @@
<net.kdt.pojavlaunch.prefs.BackButtonPreference/>
<PreferenceCategory android:title="Miscellaneous settings">
<SwitchPreference
android:defaultValue="true"
android:key="java_sandbox"
android:summary="@string/mcl_setting_java_sandbox_subtitle"
android:title="@string/mcl_setting_java_sandbox" />
<SwitchPreference
android:defaultValue="true"
android:icon="@drawable/ic_setting_hash_verification"