diff options
author | Costas Argyris <costas.argyris@gmail.com> | 2023-02-26 16:34:11 +0000 |
---|---|---|
committer | Jonathan Yong <10walls@gmail.com> | 2023-03-03 10:45:43 +0000 |
commit | 59bc2b68de8041adf5eeb5bd18e5921f8a1f9567 (patch) | |
tree | b6eebf6d0b7ffd96b5a759bb3b4752506606c476 /libiberty | |
parent | dbeccab7a1f5dcc1876c854f17816047ba1ef137 (diff) | |
download | gcc-59bc2b68de8041adf5eeb5bd18e5921f8a1f9567.zip gcc-59bc2b68de8041adf5eeb5bd18e5921f8a1f9567.tar.gz gcc-59bc2b68de8041adf5eeb5bd18e5921f8a1f9567.tar.bz2 |
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>
Diffstat (limited to 'libiberty')
-rw-r--r-- | libiberty/pex-win32.c | 31 |
1 files changed, 10 insertions, 21 deletions
diff --git a/libiberty/pex-win32.c b/libiberty/pex-win32.c index 02d3a3e..23c6c19 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. |