From 9be20afeb56f788319bea687ba16098fe2a915af Mon Sep 17 00:00:00 2001 From: Igor Zinkovsky Date: Thu, 1 Mar 2012 14:12:19 -0800 Subject: [PATCH] update libuv to 6bbccf1fe0 --- deps/uv/src/win/error.c | 1 + deps/uv/src/win/pipe.c | 6 ++++++ deps/uv/test/test-list.h | 2 ++ deps/uv/test/test-pipe-connect-error.c | 27 ++++++++++++++++++++++++++ 4 files changed, 36 insertions(+) diff --git a/deps/uv/src/win/error.c b/deps/uv/src/win/error.c index 1922f2039b..851d272816 100644 --- a/deps/uv/src/win/error.c +++ b/deps/uv/src/win/error.c @@ -115,6 +115,7 @@ uv_err_code uv_translate_sys_error(int sys_errno) { case ERROR_SEM_TIMEOUT: return UV_ETIMEDOUT; case WSAETIMEDOUT: return UV_ETIMEDOUT; case WSAHOST_NOT_FOUND: return UV_ENOENT; + case WSAENOTSOCK: return UV_ENOTSOCK; default: return UV_UNKNOWN; } } diff --git a/deps/uv/src/win/pipe.c b/deps/uv/src/win/pipe.c index ae769c1d1e..54d90e0739 100644 --- a/deps/uv/src/win/pipe.c +++ b/deps/uv/src/win/pipe.c @@ -560,6 +560,12 @@ void uv_pipe_connect(uv_connect_t* req, uv_pipe_t* handle, assert(handle->handle != INVALID_HANDLE_VALUE); + /* Ensure that what we just opened is actually a pipe */ + if (!GetNamedPipeInfo(handle->handle, NULL, NULL, NULL, NULL)) { + errno = WSAENOTSOCK; + goto error; + } + if (uv_set_pipe_handle(loop, (uv_pipe_t*)req->handle, handle->handle)) { errno = GetLastError(); goto error; diff --git a/deps/uv/test/test-list.h b/deps/uv/test/test-list.h index 99932da5dc..2997b179d2 100644 --- a/deps/uv/test/test-list.h +++ b/deps/uv/test/test-list.h @@ -58,6 +58,7 @@ TEST_DECLARE (pipe_bind_error_addrnotavail) TEST_DECLARE (pipe_bind_error_inval) TEST_DECLARE (pipe_listen_without_bind) TEST_DECLARE (pipe_connect_bad_name) +TEST_DECLARE (pipe_connect_to_file) TEST_DECLARE (connection_fail) TEST_DECLARE (connection_fail_doesnt_auto_close) TEST_DECLARE (shutdown_eof) @@ -159,6 +160,7 @@ TASK_LIST_START TEST_OUTPUT_ENTRY (platform_output) TEST_ENTRY (pipe_connect_bad_name) + TEST_ENTRY (pipe_connect_to_file) TEST_ENTRY (tty) TEST_ENTRY (stdio_over_pipes) diff --git a/deps/uv/test/test-pipe-connect-error.c b/deps/uv/test/test-pipe-connect-error.c index 2faa446148..97734caacf 100644 --- a/deps/uv/test/test-pipe-connect-error.c +++ b/deps/uv/test/test-pipe-connect-error.c @@ -50,6 +50,14 @@ static void connect_cb(uv_connect_t* connect_req, int status) { } +static void connect_cb_file(uv_connect_t* connect_req, int status) { + ASSERT(status == -1); + ASSERT(uv_last_error(uv_default_loop()).code == UV_ENOTSOCK); + uv_close((uv_handle_t*)connect_req->handle, close_cb); + connect_cb_called++; +} + + TEST_IMPL(pipe_connect_bad_name) { uv_pipe_t client; uv_connect_t req; @@ -66,3 +74,22 @@ TEST_IMPL(pipe_connect_bad_name) { return 0; } + + +TEST_IMPL(pipe_connect_to_file) { + const char* path = "test/fixtures/empty_file"; + uv_pipe_t client; + uv_connect_t req; + int r; + + r = uv_pipe_init(uv_default_loop(), &client, 0); + ASSERT(r == 0); + uv_pipe_connect(&req, &client, path, connect_cb_file); + + uv_run(uv_default_loop()); + + ASSERT(close_cb_called == 1); + ASSERT(connect_cb_called == 1); + + return 0; +} \ No newline at end of file