File xenia_PR2212.patch of Package xenia-canary
From 0957b8725f7e93699e4ee1695b384104fdbb503a Mon Sep 17 00:00:00 2001
From: Adrian <78108584+AdrianCassar@users.noreply.github.com>
Date: Sat, 8 Jul 2023 18:21:40 +0100
Subject: [PATCH] [BASE] Prevent crashing if special characters are in the
launch path
A path containing characters which cannot be converted to a multibyte string would fail and cause cxxopts to assign the cvar target to argument 0
---
src/xenia/base/main_win.cc | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/src/xenia/base/main_win.cc b/src/xenia/base/main_win.cc
index b6eaa4a7b4..ec20300131 100644
--- a/src/xenia/base/main_win.cc
+++ b/src/xenia/base/main_win.cc
@@ -96,8 +96,14 @@ bool ParseWin32LaunchArguments(
char** argv = reinterpret_cast<char**>(alloca(sizeof(char*) * argc));
for (int n = 0; n < argc; n++) {
size_t len = std::wcstombs(nullptr, wargv[n], 0);
- argv[n] = reinterpret_cast<char*>(alloca(sizeof(char) * (len + 1)));
- std::wcstombs(argv[n], wargv[n], len + 1);
+
+ if (len != -1) {
+ argv[n] = reinterpret_cast<char*>(alloca(sizeof(char) * (len + 1)));
+ std::wcstombs(argv[n], wargv[n], len + 1);
+ } else {
+ // Prevent cxxopts from indexing out of bounds.
+ argc--;
+ }
}
LocalFree(wargv);