Upstreamify profiles (#2390)

* Extended MCOptionUtils to support list values

* Mitigation for the Apache Log4j RCE in 1.8.x-1.18

Related issue: #2378

* Update JREUtils.java

Co-authored-by: SerpentSpirale <mathiasboulay@free.fr>
Co-authored-by: Duy Tran Khanh <40482367+khanhduytran0@users.noreply.github.com>
This commit is contained in:
ArtDev
2021-12-13 22:49:22 +03:00
committed by GitHub
parent ad8d115b82
commit 9fc4d5dc82
2 changed files with 28 additions and 1 deletions

View File

@@ -361,6 +361,8 @@ public class JREUtils {
"-Dext.net.resolvPath=" +new File(Tools.DIR_DATA,"resolv.conf").getAbsolutePath(),
"-Dlog4j2.formatMsgNoLookups=true", //Log4j RCE mitigation
"-Dnet.minecraft.clientmodname=" + Tools.APP_NAME,
"-Dfml.earlyprogresswindow=false" //Forge 1.14+ workaround
};
@@ -538,7 +540,6 @@ public class JREUtils {
public static native void setupExitTrap(Context context);
// Obtain AWT screen pixels to render on Android SurfaceView
public static native int[] renderAWTScreenFrame(/* Object canvas, int width, int height */);
static {
System.loadLibrary("pojavexec");
System.loadLibrary("pojavexec_awt");

View File

@@ -16,7 +16,9 @@ import java.io.FileReader;
import java.io.IOException;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
public class MCOptionUtils
{
@@ -56,9 +58,28 @@ public class MCOptionUtils
parameterMap.put(key,value);
}
/** Set an array of String, instead of a simple value. Not supported on all options */
public static void set(String key, List<String> values){
parameterMap.put(key, values.toString());
}
public static String get(String key){
return parameterMap.get(key);
}
/** @return A list of values from an array stored as a string */
public static List<String> getAsList(String key){
String value = get(key);
// Fallback if the value doesn't exist
if (value == null) return new ArrayList<>();
// Remove the edges
value = value.replace("[", "").replace("]", "");
if (value.isEmpty()) return new ArrayList<>();
return Arrays.asList(value.split(","));
}
public static void save() {
StringBuilder result = new StringBuilder();
@@ -89,6 +110,8 @@ public class MCOptionUtils
return guiScale;
}
/** Add a file observer to reload options on file change
* Listeners get notified of the change */
private static void setupFileObserver(){
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q){
fileObserver = new FileObserver(new File(Tools.DIR_GAME_NEW + "/options.txt"), FileObserver.MODIFY) {
@@ -111,6 +134,7 @@ public class MCOptionUtils
fileObserver.startWatching();
}
/** Notify the option listeners */
public static void notifyListeners(){
for(WeakReference<MCOptionListener> weakReference : optionListeners){
MCOptionListener optionListener = weakReference.get();
@@ -120,10 +144,12 @@ public class MCOptionUtils
}
}
/** Add an option listener, notice how we don't have a reference to it */
public static void addMCOptionListener(MCOptionListener listener){
optionListeners.add(new WeakReference<>(listener));
}
/** Remove a listener from existence, or at least, its reference here */
public static void removeMCOptionListener(MCOptionListener listener){
for(WeakReference<MCOptionListener> weakReference : optionListeners){
MCOptionListener optionListener = weakReference.get();