From a63d094dc01049e128c6a7657a1c33946c1d840b Mon Sep 17 00:00:00 2001 From: Andrew Eikum Date: Thu, 28 Mar 2019 11:10:45 -0500 Subject: [PATCH] steam_helper: Parse quote characters consistently with CommandLineToArgvW --- steam_helper/steam.cpp | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/steam_helper/steam.cpp b/steam_helper/steam.cpp index 4d5e5217..2ff2b44d 100644 --- a/steam_helper/steam.cpp +++ b/steam_helper/steam.cpp @@ -116,6 +116,26 @@ static void setup_steam_registry(void) SteamAPI_Shutdown(); } +static WCHAR *find_quote(WCHAR *str) +{ + WCHAR *end = strchrW(str, '"'), *ch; + int odd; + while (end) + { + odd = 0; + ch = end - 1; + while (ch >= str && *ch == '\\') + { + odd = !odd; + --ch; + } + if (!odd) + return end; + end = strchrW(end + 1, '"'); + } + return NULL; +} + static HANDLE run_process(void) { WCHAR *cmdline = GetCommandLineW(); @@ -125,7 +145,7 @@ static HANDLE run_process(void) /* skip argv[0] */ if (*cmdline == '"') { - cmdline = strchrW(cmdline + 1, '"'); + cmdline = find_quote(cmdline + 1); if (cmdline) cmdline++; } else @@ -156,7 +176,7 @@ static HANDLE run_process(void) if (cmdline[0] == '"') { start = cmdline + 1; - end = strchrW(start, '"'); + end = find_quote(start); if (!end) { WINE_ERR("Unmatched quote? %s\n", wine_dbgstr_w(cmdline));