aboutsummaryrefslogtreecommitdiff
path: root/launcher/java
diff options
context:
space:
mode:
authorSefa Eyeoglu <contact@scrumplex.net>2022-06-24 17:54:01 +0200
committerSefa Eyeoglu <contact@scrumplex.net>2022-07-19 18:07:58 +0200
commit2d53c7c5b2dfb4e7172d105a54dcdbc723e7cda0 (patch)
tree88445d72353aec4656a40a1948eebb9624915669 /launcher/java
parentc86610b917d2935426c0813bead01b610b913fae (diff)
downloadPrismLauncher-2d53c7c5b2dfb4e7172d105a54dcdbc723e7cda0.tar.gz
PrismLauncher-2d53c7c5b2dfb4e7172d105a54dcdbc723e7cda0.tar.bz2
PrismLauncher-2d53c7c5b2dfb4e7172d105a54dcdbc723e7cda0.zip
refactor: filter values in environment variables
Before this change, you had to specify custom LD_* variables using the prefix GAME_LD_*. Now instead of dropping all LD_* variables by default, we should just filter them and remove the values we *know* are from our start script. Signed-off-by: Sefa Eyeoglu <contact@scrumplex.net>
Diffstat (limited to 'launcher/java')
-rw-r--r--launcher/java/JavaUtils.cpp70
-rw-r--r--launcher/java/JavaUtils.h1
2 files changed, 37 insertions, 34 deletions
diff --git a/launcher/java/JavaUtils.cpp b/launcher/java/JavaUtils.cpp
index 749c9c88..154de784 100644
--- a/launcher/java/JavaUtils.cpp
+++ b/launcher/java/JavaUtils.cpp
@@ -52,25 +52,24 @@ JavaUtils::JavaUtils()
{
}
-#if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD)
-static QString processLD_LIBRARY_PATH(const QString & LD_LIBRARY_PATH)
+QString stripVariableEntries(QString name, QString target, QString remove)
{
- QDir mmcBin(QCoreApplication::applicationDirPath());
- auto items = LD_LIBRARY_PATH.split(':');
- QStringList final;
- for(auto & item: items)
- {
- QDir test(item);
- if(test == mmcBin)
- {
- qDebug() << "Env:LD_LIBRARY_PATH ignoring path" << item;
- continue;
- }
- final.append(item);
+ char delimiter = ':';
+#ifdef Q_OS_WIN32
+ delimiter = ';';
+#endif
+
+ auto targetItems = target.split(delimiter);
+ auto toRemove = remove.split(delimiter);
+
+ for (QString item : toRemove) {
+ bool removed = targetItems.removeOne(item);
+ if (!removed)
+ qWarning() << "Entry" << item
+ << "could not be stripped from variable" << name;
}
- return final.join(':');
+ return targetItems.join(delimiter);
}
-#endif
QProcessEnvironment CleanEnviroment()
{
@@ -89,6 +88,16 @@ QProcessEnvironment CleanEnviroment()
"JAVA_OPTIONS",
"JAVA_TOOL_OPTIONS"
};
+
+ QStringList stripped =
+ {
+#if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD)
+ "LD_LIBRARY_PATH",
+ "LD_PRELOAD",
+#endif
+ "QT_PLUGIN_PATH",
+ "QT_FONTPATH"
+ };
for(auto key: rawenv.keys())
{
auto value = rawenv.value(key);
@@ -98,19 +107,22 @@ QProcessEnvironment CleanEnviroment()
qDebug() << "Env: ignoring" << key << value;
continue;
}
- // filter PolyMC-related things
- if(key.startsWith("QT_"))
+
+ // These are used to strip the original variables
+ // If there is "LD_LIBRARY_PATH" and "LAUNCHER_LD_LIBRARY_PATH", we want to
+ // remove all values in "LAUNCHER_LD_LIBRARY_PATH" from "LD_LIBRARY_PATH"
+ if(key.startsWith("LAUNCHER_"))
{
qDebug() << "Env: ignoring" << key << value;
continue;
}
-#if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD)
- // Do not pass LD_* variables to java. They were intended for PolyMC
- if(key.startsWith("LD_"))
+ if(stripped.contains(key))
{
- qDebug() << "Env: ignoring" << key << value;
- continue;
+ QString newValue = stripVariableEntries(key, value, rawenv.value("LAUNCHER_" + key));
+
+ qDebug() << "Env: stripped" << key << value << "to" << newValue;
}
+#if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD)
// Strip IBus
// IBus is a Linux IME framework. For some reason, it breaks MC?
if (key == "XMODIFIERS" && value.contains(IBUS))
@@ -119,22 +131,12 @@ QProcessEnvironment CleanEnviroment()
value.replace(IBUS, "");
qDebug() << "Env: stripped" << IBUS << "from" << save << ":" << value;
}
- if(key == "GAME_PRELOAD")
- {
- env.insert("LD_PRELOAD", value);
- continue;
- }
- if(key == "GAME_LIBRARY_PATH")
- {
- env.insert("LD_LIBRARY_PATH", processLD_LIBRARY_PATH(value));
- continue;
- }
#endif
// qDebug() << "Env: " << key << value;
env.insert(key, value);
}
#ifdef Q_OS_LINUX
- // HACK: Workaround for QTBUG42500
+ // HACK: Workaround for QTBUG-42500
if(!env.contains("LD_LIBRARY_PATH"))
{
env.insert("LD_LIBRARY_PATH", "");
diff --git a/launcher/java/JavaUtils.h b/launcher/java/JavaUtils.h
index 26d8003b..9b69b516 100644
--- a/launcher/java/JavaUtils.h
+++ b/launcher/java/JavaUtils.h
@@ -24,6 +24,7 @@
#include <windows.h>
#endif
+QString stripVariableEntries(QString name, QString target, QString remove);
QProcessEnvironment CleanEnviroment();
class JavaUtils : public QObject