diff options
| author | NIIBE Yutaka <[email protected]> | 2026-02-04 07:22:11 +0100 |
|---|---|---|
| committer | NIIBE Yutaka <[email protected]> | 2026-02-04 07:22:11 +0100 |
| commit | 97c0106a9a771fe015ceb5585b3c10a78663e1fd (patch) | |
| tree | 27bbd498ab35572aa5f8fc6d74137fb562b13e5d /src | |
| parent | spawn:w32: Fix preparing the environment block. (diff) | |
| download | libgpg-error-97c0106a9a771fe015ceb5585b3c10a78663e1fd.tar.gz libgpg-error-97c0106a9a771fe015ceb5585b3c10a78663e1fd.zip | |
spawn:w32: Fix with GPGRT_PROCESS_*_KEEP flags.
* src/spawn-w32.c (_gpgrt_process_spawn): Don't close
the handle when GPGRT_PROCESS_*_KEEP is specified.
--
GnuPG-bug-id: 8052
Signed-off-by: NIIBE Yutaka <[email protected]>
Diffstat (limited to 'src')
| -rw-r--r-- | src/spawn-w32.c | 27 |
1 files changed, 18 insertions, 9 deletions
diff --git a/src/spawn-w32.c b/src/spawn-w32.c index ad5793c..c85be91 100644 --- a/src/spawn-w32.c +++ b/src/spawn-w32.c @@ -743,19 +743,22 @@ _gpgrt_process_spawn (const char *pgmname, const char *argv[], if (si.lpAttributeList == NULL) { if (hd_in[0] != INVALID_HANDLE_VALUE - && hd_in[0] != act->hd[0]) + && hd_in[0] != act->hd[0] + && !(flags & GPGRT_PROCESS_STDIN_KEEP)) CloseHandle (hd_in[0]); if ((flags & GPGRT_PROCESS_STDIN_PIPE)) CloseHandle (hd_in[1]); if ((flags & GPGRT_PROCESS_STDOUT_PIPE)) CloseHandle (hd_out[0]); if (hd_out[1] != INVALID_HANDLE_VALUE - && hd_out[1] != act->hd[1]) + && hd_out[1] != act->hd[1] + && !(flags & GPGRT_PROCESS_STDOUT_KEEP)) CloseHandle (hd_out[1]); if ((flags & GPGRT_PROCESS_STDERR_PIPE)) CloseHandle (hd_err[0]); if (hd_err[1] != INVALID_HANDLE_VALUE - && hd_err[1] != act->hd[2]) + && hd_err[1] != act->hd[2] + && !(flags & GPGRT_PROCESS_STDERR_KEEP)) CloseHandle (hd_err[1]); xfree (process); xfree (cmdline); @@ -858,17 +861,20 @@ _gpgrt_process_spawn (const char *pgmname, const char *argv[], else _gpgrt_log_info ("CreateProcess failed: ec=%d\n", (int)GetLastError ()); - if (hd_in[0] != INVALID_HANDLE_VALUE && hd_in[0] != act->hd[0]) + if (hd_in[0] != INVALID_HANDLE_VALUE && hd_in[0] != act->hd[0] + && !(flags & GPGRT_PROCESS_STDIN_KEEP)) CloseHandle (hd_in[0]); if ((flags & GPGRT_PROCESS_STDIN_PIPE)) CloseHandle (hd_in[1]); if ((flags & GPGRT_PROCESS_STDOUT_PIPE)) CloseHandle (hd_out[0]); - if (hd_out[1] != INVALID_HANDLE_VALUE && hd_out[1] != act->hd[1]) + if (hd_out[1] != INVALID_HANDLE_VALUE && hd_out[1] != act->hd[1] + && !(flags & GPGRT_PROCESS_STDOUT_KEEP)) CloseHandle (hd_out[1]); if ((flags & GPGRT_PROCESS_STDERR_PIPE)) CloseHandle (hd_err[0]); - if (hd_err[1] != INVALID_HANDLE_VALUE && hd_err[1] != act->hd[2]) + if (hd_err[1] != INVALID_HANDLE_VALUE && hd_err[1] != act->hd[2] + && !(flags & GPGRT_PROCESS_STDERR_KEEP)) CloseHandle (hd_err[1]); _gpgrt_free_wchar (wpgmname); _gpgrt_free_wchar (wcmdline); @@ -881,11 +887,14 @@ _gpgrt_process_spawn (const char *pgmname, const char *argv[], _gpgrt_free_wchar (wcmdline); xfree (cmdline); - if (hd_in[0] != INVALID_HANDLE_VALUE && hd_in[0] != act->hd[0]) + if (hd_in[0] != INVALID_HANDLE_VALUE && hd_in[0] != act->hd[0] + && !(flags & GPGRT_PROCESS_STDIN_KEEP)) CloseHandle (hd_in[0]); - if (hd_out[1] != INVALID_HANDLE_VALUE && hd_out[1] != act->hd[1]) + if (hd_out[1] != INVALID_HANDLE_VALUE && hd_out[1] != act->hd[1] + && !(flags & GPGRT_PROCESS_STDOUT_KEEP)) CloseHandle (hd_out[1]); - if (hd_err[1] != INVALID_HANDLE_VALUE && hd_err[1] != act->hd[2]) + if (hd_err[1] != INVALID_HANDLE_VALUE && hd_err[1] != act->hd[2] + && !(flags & GPGRT_PROCESS_STDERR_KEEP)) CloseHandle (hd_err[1]); /* log_debug ("CreateProcess ready: hProcess=%p hThread=%p" */ |
