From: Alex Henrie alexhenrie24@gmail.com
--- dlls/shell32/dde.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/dlls/shell32/dde.c b/dlls/shell32/dde.c index 96b5a243f93..c96ed855576 100644 --- a/dlls/shell32/dde.c +++ b/dlls/shell32/dde.c @@ -337,7 +337,7 @@ static DWORD PROGMAN_OnExecute(WCHAR *command, int argc, WCHAR **argv) static DWORD parse_dde_command(HSZ hszTopic, WCHAR *command) { WCHAR *original = command; - WCHAR *opcode = NULL, **argv = NULL, *p; + WCHAR *opcode, **argv, **new_argv, *p; int argc = 0, i; DWORD ret = DDE_FACK;
@@ -347,7 +347,7 @@ static DWORD parse_dde_command(HSZ hszTopic, WCHAR *command) while (*command == '[') { argc = 0; - argv = malloc(sizeof(*argv)); + argv = NULL;
command++; while (*command == ' ') command++; @@ -375,9 +375,11 @@ static DWORD parse_dde_command(HSZ hszTopic, WCHAR *command) while (p[-1] == ' ') p--; }
+ new_argv = realloc(argv, (argc + 1) * sizeof(*argv)); + if (!new_argv) goto error; + argv = new_argv; + argv[argc] = strndupW(command, p - command); argc++; - argv = realloc(argv, argc * sizeof(*argv)); - argv[argc-1] = strndupW(command, p - command);
command = p; if (*command == '"') command++;