From 59bc2b68de8041adf5eeb5bd18e5921f8a1f9567 Mon Sep 17 00:00:00 2001 From: Costas Argyris <costas.argyris@gmail.com> Date: Sun, 26 Feb 2023 16:34:11 +0000 Subject: [PATCH] libiberty: fix memory leak in pex-win32.c and refactor Fix memory leak of cmdline buffer and refactor to have cleanup code appear once for all exit cases. libiberty/ChangeLog: * pex-win32.c (win32_spawn): Fix memory leak of cmdline buffer and refactor to have cleanup code appear once for all exit cases. Signed-off-by: Jonathan Yong <10walls@gmail.com> --- libiberty/pex-win32.c | 31 ++++++++++--------------------- 1 file changed, 10 insertions(+), 21 deletions(-) diff --git a/libiberty/pex-win32.c b/libiberty/pex-win32.c index 02d3a3e839b0..23c6c190a2ca 100644 --- a/libiberty/pex-win32.c +++ b/libiberty/pex-win32.c @@ -577,14 +577,12 @@ win32_spawn (const char *executable, LPSTARTUPINFO si, LPPROCESS_INFORMATION pi) { - char *full_executable; - char *cmdline; + char *full_executable = NULL; + char *cmdline = NULL; + pid_t pid = (pid_t) -1; char **env_copy; char *env_block = NULL; - full_executable = NULL; - cmdline = NULL; - if (env) { int env_size; @@ -622,13 +620,13 @@ win32_spawn (const char *executable, full_executable = find_executable (executable, search); if (!full_executable) - goto error; + goto exit; cmdline = argv_to_cmdline (argv); if (!cmdline) - goto error; + goto exit; /* Create the child process. */ - if (!CreateProcess (full_executable, cmdline, + if (CreateProcess (full_executable, cmdline, /*lpProcessAttributes=*/NULL, /*lpThreadAttributes=*/NULL, /*bInheritHandles=*/TRUE, @@ -638,26 +636,17 @@ win32_spawn (const char *executable, si, pi)) { - free (env_block); - - free (full_executable); - - return (pid_t) -1; + CloseHandle (pi->hThread); + pid = (pid_t) pi->hProcess; } + exit: /* Clean up. */ - CloseHandle (pi->hThread); - free (full_executable); - free (env_block); - - return (pid_t) pi->hProcess; - - error: free (env_block); free (cmdline); free (full_executable); - return (pid_t) -1; + return pid; } /* Spawn a script. This simulates the Unix script execution mechanism. -- GitLab