- Prepend java as argv[0]

- Fix override mechanism
This commit is contained in:
artDev 2022-02-04 17:18:42 +03:00
parent fb7a4b2407
commit 97dace30c5
2 changed files with 18 additions and 13 deletions

View File

@ -317,6 +317,7 @@ public class JREUtils {
initJavaRuntime(); initJavaRuntime();
setupExitTrap(activity.getApplication()); setupExitTrap(activity.getApplication());
chdir(Tools.DIR_GAME_NEW); chdir(Tools.DIR_GAME_NEW);
userArgs.add(0,"java"); //argv[0] is the program name according to C standard.
final int exitCode = VMLauncher.launchJVM(userArgs.toArray(new String[0])); final int exitCode = VMLauncher.launchJVM(userArgs.toArray(new String[0]));
Logger.getInstance().appendToLog("Java Exit code: " + exitCode); Logger.getInstance().appendToLog("Java Exit code: " + exitCode);
@ -340,6 +341,8 @@ public class JREUtils {
*/ */
public static List<String> getJavaArgs(Context ctx) { public static List<String> getJavaArgs(Context ctx) {
List<String> userArguments = parseJavaArguments(LauncherPreferences.PREF_CUSTOM_JAVA_ARGS); List<String> userArguments = parseJavaArguments(LauncherPreferences.PREF_CUSTOM_JAVA_ARGS);
String resolvFile;
resolvFile = new File(Tools.DIR_DATA,"resolv.conf").getAbsolutePath();
String[] overridableArguments = new String[]{ String[] overridableArguments = new String[]{
"-Djava.home=" + Tools.DIR_HOME_JRE, "-Djava.home=" + Tools.DIR_HOME_JRE,
"-Djava.io.tmpdir=" + ctx.getCacheDir().getAbsolutePath(), "-Djava.io.tmpdir=" + ctx.getCacheDir().getAbsolutePath(),
@ -358,29 +361,30 @@ public class JREUtils {
"-Dglfwstub.windowWidth=" + CallbackBridge.windowWidth, "-Dglfwstub.windowWidth=" + CallbackBridge.windowWidth,
"-Dglfwstub.windowHeight=" + CallbackBridge.windowHeight, "-Dglfwstub.windowHeight=" + CallbackBridge.windowHeight,
"-Dglfwstub.initEgl=false", "-Dglfwstub.initEgl=false",
"-Dext.net.resolvPath=" +resolvFile,
"-Dext.net.resolvPath=" +new File(Tools.DIR_DATA,"resolv.conf").getAbsolutePath(),
"-Dlog4j2.formatMsgNoLookups=true", //Log4j RCE mitigation "-Dlog4j2.formatMsgNoLookups=true", //Log4j RCE mitigation
"-Dnet.minecraft.clientmodname=" + Tools.APP_NAME, "-Dnet.minecraft.clientmodname=" + Tools.APP_NAME,
"-Dfml.earlyprogresswindow=false" //Forge 1.14+ workaround "-Dfml.earlyprogresswindow=false" //Forge 1.14+ workaround
}; };
List<String> additionalArguments = new ArrayList<>();
for(String arg : overridableArguments) {
for (String userArgument : userArguments) { String strippedArg = arg.substring(0,arg.indexOf('='));
for(int i=0; i < overridableArguments.length; ++i){ boolean add = true;
String overridableArgument = overridableArguments[i]; for(String uarg : userArguments) {
//Only java properties are considered overridable for now if(uarg.startsWith(strippedArg)) {
if(userArgument.startsWith("-D") && userArgument.startsWith(overridableArgument.substring(0, overridableArgument.indexOf("=")))){ add = false;
overridableArguments[i] = ""; //Remove the argument since it is overridden
break; break;
} }
} }
if(add)
additionalArguments.add(arg);
else
Log.i("ArgProcessor","Arg skipped: "+arg);
} }
//Add all the arguments //Add all the arguments
userArguments.addAll(Arrays.asList(overridableArguments)); userArguments.addAll(additionalArguments);
return userArguments; return userArguments;
} }

View File

@ -291,5 +291,6 @@
<string name="vbo_hack_description">Help with compatibility on some old versions</string> <string name="vbo_hack_description">Help with compatibility on some old versions</string>
<string name="gles_version_hack_title">Force openGL 1</string> <string name="gles_version_hack_title">Force openGL 1</string>
<string name="gles_version_hack_description">Help with compatibility on some old versions</string> <string name="gles_version_hack_description">Help with compatibility on some old versions</string>
<string name="arc_capes_title">Arc Capes</string>
<string name="arc_capes_desc">Enables capes from Arc. For more information please visit https://arccapes.com</string>
</resources> </resources>