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(alloca(sizeof(char*) * argc)); for (int n = 0; n < argc; n++) { size_t len = std::wcstombs(nullptr, wargv[n], 0); - argv[n] = reinterpret_cast(alloca(sizeof(char) * (len + 1))); - std::wcstombs(argv[n], wargv[n], len + 1); + + if (len != -1) { + argv[n] = reinterpret_cast(alloca(sizeof(char) * (len + 1))); + std::wcstombs(argv[n], wargv[n], len + 1); + } else { + // Prevent cxxopts from indexing out of bounds. + argc--; + } } LocalFree(wargv);