From efad54f1c6c2c93db118c6ed376b37fa03d4d486 Mon Sep 17 00:00:00 2001 From: Duncan Frost Date: Sun, 18 Jan 2015 20:56:08 +0000 Subject: [PATCH] Fix arg_parse accessing invalid memory due to mistake in setup code. Reintroduced free memory of command line parameters --- src/cmdline.c | 4 ---- src/platform/windows.c | 8 +++++--- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/src/cmdline.c b/src/cmdline.c index 3964c2f2be..d101e4ca25 100644 --- a/src/cmdline.c +++ b/src/cmdline.c @@ -50,10 +50,6 @@ static const char *const usage[] = { */ int cmdline_run(const char **argv, int argc) { - // For argparse's sake, add virtual first argument process path - argc++; - argv--; - // int version = 0, verbose = 0, width = 0, height = 0; diff --git a/src/platform/windows.c b/src/platform/windows.c index dc6763e776..a40c6e8bb4 100644 --- a/src/platform/windows.c +++ b/src/platform/windows.c @@ -70,7 +70,7 @@ __declspec(dllexport) int StartOpenRCT(HINSTANCE hInstance, HINSTANCE hPrevInsta // Get command line arguments in standard form argv = CommandLineToArgvA(lpCmdLine, &argc); runGame = cmdline_run(argv, argc); - //LocalFree(argv); + GlobalFree(argv); if (runGame) openrct2_launch(); @@ -243,11 +243,13 @@ PCHAR *CommandLineToArgvA(PCHAR CmdLine, int *_argc) i = ((len + 2) / 2)*sizeof(PVOID) + sizeof(PVOID); argv = (PCHAR*)GlobalAlloc(GMEM_FIXED, - i + (len + 2)*sizeof(CHAR)); + i + (len + 2)*sizeof(CHAR) + 1); _argv = (PCHAR)(((PUCHAR)argv) + i); - argc = 0; + // Add in virtual 1st command line argument, process path, for arg_parse's sake. + argv[0] = 0; + argc = 1; argv[argc] = _argv; in_QM = FALSE; in_TEXT = FALSE;