Skip to content

Commit

Permalink
pipe: add back error handling to connect / bind
Browse files Browse the repository at this point in the history
This was incorrectly dropped by libuv#4030, where previously connecting to ""
might fail eventually, now instead it would return EINVAL and then fail
to initialize the struct or call the callback.
  • Loading branch information
vtjnash committed Nov 7, 2023
1 parent aa4f864 commit b7800d5
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 11 deletions.
19 changes: 17 additions & 2 deletions src/unix/pipe.c
Original file line number Diff line number Diff line change
Expand Up @@ -210,7 +210,22 @@ void uv_pipe_connect(uv_connect_t* req,
uv_pipe_t* handle,
const char* name,
uv_connect_cb cb) {
uv_pipe_connect2(req, handle, name, strlen(name), 0, cb);
int err;

err = uv_pipe_connect2(req, handle, name, strlen(name), 0, cb);

if (err) {
handle->delayed_error = err;
handle->connect_req = req;

uv__req_init(handle->loop, req, UV_CONNECT);
req->handle = (uv_stream_t*) handle;
req->cb = cb;
uv__queue_init(&req->queue);

/* Force callback to run on next tick in case of error. */
uv__io_feed(handle->loop, &handle->io_watcher);
}
}


Expand Down Expand Up @@ -295,7 +310,7 @@ int uv_pipe_connect2(uv_connect_t* req,
handle->connect_req = req;

uv__req_init(handle->loop, req, UV_CONNECT);
req->handle = (uv_stream_t*)handle;
req->handle = (uv_stream_t*) handle;
req->cb = cb;
uv__queue_init(&req->queue);

Expand Down
31 changes: 22 additions & 9 deletions src/win/pipe.c
Original file line number Diff line number Diff line change
Expand Up @@ -834,7 +834,19 @@ void uv_pipe_connect(uv_connect_t* req,
uv_pipe_t* handle,
const char* name,
uv_connect_cb cb) {
uv_pipe_connect2(req, handle, name, strlen(name), 0, cb);
uv_loop_t* loop;
int err;

err = uv_pipe_connect2(req, handle, name, strlen(name), 0, cb);

if (err) {
loop = handle->loop;
/* Make this req pending reporting an error. */
SET_REQ_ERROR(req, err);
uv__insert_pending_req(loop, (uv_req_t*) req);
handle->reqs_pending++;
REGISTER_HANDLE_REQ(loop, handle, req);
}
}


Expand All @@ -844,12 +856,20 @@ int uv_pipe_connect2(uv_connect_t* req,
size_t namelen,
unsigned int flags,
uv_connect_cb cb) {
uv_loop_t* loop = handle->loop;
uv_loop_t* loop;
int err;
size_t nameSize;
HANDLE pipeHandle = INVALID_HANDLE_VALUE;
DWORD duplex_flags;

loop = handle->loop;
UV_REQ_INIT(req, UV_CONNECT);
req->handle = (uv_stream_t*) handle;
req->cb = cb;
req->u.connect.pipeHandle = INVALID_HANDLE_VALUE;
req->u.connect.duplex_flags = 0;
req->u.connect.name = NULL;

if (flags & ~UV_PIPE_NO_TRUNCATE) {
return UV_EINVAL;
}
Expand All @@ -872,13 +892,6 @@ int uv_pipe_connect2(uv_connect_t* req,
}
}

UV_REQ_INIT(req, UV_CONNECT);
req->handle = (uv_stream_t*) handle;
req->cb = cb;
req->u.connect.pipeHandle = INVALID_HANDLE_VALUE;
req->u.connect.duplex_flags = 0;
req->u.connect.name = NULL;

if (handle->flags & UV_HANDLE_PIPESERVER) {
err = ERROR_INVALID_PARAMETER;
goto error;
Expand Down

0 comments on commit b7800d5

Please sign in to comment.