mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-24 04:13:28 +01:00
Ensure that the exit callback is called if CreateProcessA() fails on Windows.
This patch fixes an issue where the exit handler is not called for the given process_t in case CreateProcessA() fails. This could, for example, happen if the user tries to execute a binary that does not exist. See: https://bugs.torproject.org/31810
This commit is contained in:
parent
85b4a5c276
commit
7a64f6ea04
@ -234,6 +234,24 @@ process_win32_exec(process_t *process)
|
|||||||
CloseHandle(stdin_pipe_read);
|
CloseHandle(stdin_pipe_read);
|
||||||
CloseHandle(stdin_pipe_write);
|
CloseHandle(stdin_pipe_write);
|
||||||
|
|
||||||
|
/* In the Unix backend, we do not get an error in the Tor process when a
|
||||||
|
* child process fails to spawn its target executable since we need to
|
||||||
|
* first do the fork() call in the Tor process and then the child process
|
||||||
|
* is responsible for doing the call to execve().
|
||||||
|
*
|
||||||
|
* This means that the user of the process_exec() API must check for
|
||||||
|
* whether it returns PROCESS_STATUS_ERROR, which will rarely happen on
|
||||||
|
* Unix, but will happen for error cases on Windows where it does not
|
||||||
|
* happen on Unix. For example: when the target executable does not exist
|
||||||
|
* on the file system.
|
||||||
|
*
|
||||||
|
* To have somewhat feature compatibility between the Unix and the Windows
|
||||||
|
* backend, we here notify the process_t owner that the process have exited
|
||||||
|
* (even though it never managed to run) to ensure that the exit callback
|
||||||
|
* is executed.
|
||||||
|
*/
|
||||||
|
process_notify_event_exit(process, 0);
|
||||||
|
|
||||||
return PROCESS_STATUS_ERROR;
|
return PROCESS_STATUS_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user