Permalink
Browse files

src: add handle check to spawn_sync

This commit verifies that the child process handle is of the
correct type before trying to close it in
CloseHandlesAndDeleteLoop(). This catches the case where input
validation failed, and the child process was never actually
spawned.

Fixes: #8096
Fixes: #8539
Refs: #9722
PR-URL: #8312
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
  • Loading branch information...
cjihrig committed Aug 28, 2016
1 parent c65d55f commit b374ee8c3dfcefe7b22060c1a2073ee07e4e1b8c
Showing with 6 additions and 1 deletion.
  1. +6 −1 src/spawn_sync.cc
View
@@ -501,7 +501,12 @@ void SyncProcessRunner::CloseHandlesAndDeleteLoop() {
// Close the process handle when ExitCallback was not called.
uv_handle_t* uv_process_handle =
reinterpret_cast<uv_handle_t*>(&uv_process_);
if (!uv_is_closing(uv_process_handle))
// Close the process handle if it is still open. The handle type also
// needs to be checked because TryInitializeAndRunLoop() won't spawn a
// process if input validation fails.
if (uv_process_handle->type == UV_PROCESS &&
!uv_is_closing(uv_process_handle))
uv_close(uv_process_handle, nullptr);
// Give closing watchers a chance to finish closing and get their close

0 comments on commit b374ee8

Please sign in to comment.