Module: wine Branch: master Commit: 0f6dcbbb2c550b78730246cd18ecffaee9253377 URL: https://gitlab.winehq.org/wine/wine/-/commit/0f6dcbbb2c550b78730246cd18ecffa...
Author: Alex Henrie alexhenrie24@gmail.com Date: Sun Dec 11 21:40:17 2022 -0700
shell32: Handle memory allocation failure in parse_dde_command (cppcheck).
---
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 10bdb11501f..24294d69fe2 100644 --- a/dlls/shell32/dde.c +++ b/dlls/shell32/dde.c @@ -347,7 +347,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 = NULL, **argv = NULL, **new_argv, *p; int argc = 0, i; DWORD ret = DDE_FACK;
@@ -357,7 +357,7 @@ static DWORD parse_dde_command(HSZ hszTopic, WCHAR *command) while (*command == '[') { argc = 0; - argv = malloc(sizeof(*argv)); + argv = NULL;
command++; while (*command == ' ') command++; @@ -385,9 +385,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++;