Browse Source

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: https://github.com/nodejs/node/issues/8096
Fixes: https://github.com/nodejs/node/issues/8539
Refs: https://github.com/nodejs/node/issues/9722
PR-URL: https://github.com/nodejs/node/pull/8312
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
v6
cjihrig 8 years ago
parent
commit
b374ee8c3d
  1. 7
      src/spawn_sync.cc

7
src/spawn_sync.cc

@ -501,7 +501,12 @@ void SyncProcessRunner::CloseHandlesAndDeleteLoop() {
// Close the process handle when ExitCallback was not called. // Close the process handle when ExitCallback was not called.
uv_handle_t* uv_process_handle = uv_handle_t* uv_process_handle =
reinterpret_cast<uv_handle_t*>(&uv_process_); 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); uv_close(uv_process_handle, nullptr);
// Give closing watchers a chance to finish closing and get their close // Give closing watchers a chance to finish closing and get their close

Loading…
Cancel
Save