Qt: Warn when LD_LIBRARY_PATH is overridden on Linux

pull/3794/head
Stenzek 2 weeks ago
parent 38751bdf7d
commit 025872c52a
No known key found for this signature in database

@ -148,6 +148,7 @@ static bool ParseCommandLineParametersAndInitializeConfig(QApplication& app,
static void AdjustQtEnvironmentVariables();
static bool IsRunningOnWayland();
static void ApplyWaylandWorkarounds();
static void WarnAboutLDLibraryPath();
static bool ParseDesktopFileExecPath(const std::string& desktop_file_path, std::string* out_exec_path);
static bool CreateDesktopFile(const std::string& app_path, const std::string& desktop_file_path, Error* error);
static void CheckDesktopFile();
@ -412,6 +413,38 @@ void QtHost::ApplyWaylandWorkarounds()
}
}
void QtHost::WarnAboutLDLibraryPath()
{
static constexpr const char* ACK_CONFIG_SECTION = "Main";
static constexpr const char* ACK_CONFIG_KEY = "IgnoreLDLibraryPath";
const char* raw_path = std::getenv("LD_LIBRARY_PATH");
const std::string_view path = raw_path ? StringUtil::StripWhitespace(raw_path) : std::string_view();
if (path.empty())
return;
WARNING_LOG("LD_LIBRARY_PATH is set to '{}'", path);
const bool acknowledged = Core::GetBaseBoolSettingValue(ACK_CONFIG_SECTION, ACK_CONFIG_KEY, false);
if (acknowledged)
return;
const std::unique_ptr<QMessageBox> msgbox(QtUtils::NewMessageBox(
nullptr, QMessageBox::Warning, u"DuckStation"_s,
QCoreApplication::translate(
"QtHost",
"We have detected that LD_LIBRARY_PATH has been set to the following value:\n\n%1\n\nThis will likely prevent "
"DuckStation from working correctly. You should modify your environment to leave LD_LIBRARY_PATH unset.")
.arg(QtUtils::StringViewToQStringView(path)),
QMessageBox::Ok, QMessageBox::NoButton, false));
QCheckBox* const ignore_cb = new QCheckBox(QCoreApplication::translate("QtHost", "Don't show again"), msgbox.get());
msgbox->setCheckBox(ignore_cb);
msgbox->setWindowIcon(GetAppIcon());
msgbox->exec();
if (ignore_cb->isChecked())
Core::SetBaseBoolSettingValue(ACK_CONFIG_SECTION, ACK_CONFIG_KEY, true);
}
bool QtHost::ParseDesktopFileExecPath(const std::string& desktop_file_path, std::string* out_exec_path)
{
std::optional<std::string> contents = FileSystem::ReadFileToString(desktop_file_path.c_str(), nullptr);
@ -3618,6 +3651,11 @@ int main(int argc, char* argv[])
// Set theme before creating any windows.
UpdateApplicationTheme();
#ifdef __linux__
// Overriding LD_LIBRARY_PATH breaks a bunch of shit, since it'll use out-of-date system libraries.
WarnAboutLDLibraryPath();
#endif
// Build warning.
AutoUpdaterDialog::warnAboutUnofficialBuild();

Loading…
Cancel
Save