Created
March 1, 2012 20:13
-
-
Save igorzi/1952828 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
From 6bbccf1fe0e000fd73e945368466cd27291483e3 Mon Sep 17 00:00:00 2001 | |
From: Igor Zinkovsky <[email protected]> | |
Date: Thu, 1 Mar 2012 12:11:12 -0800 | |
Subject: [PATCH] windows: return UV_ENOTSOCK when doing uv_pipe_connect to a | |
file | |
--- | |
src/win/error.c | 1 + | |
src/win/pipe.c | 6 ++++++ | |
test/test-list.h | 2 ++ | |
test/test-pipe-connect-error.c | 27 +++++++++++++++++++++++++++ | |
4 files changed, 36 insertions(+), 0 deletions(-) | |
diff --git a/src/win/error.c b/src/win/error.c | |
index 1922f20..851d272 100644 | |
--- a/src/win/error.c | |
+++ b/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/src/win/pipe.c b/src/win/pipe.c | |
index ae769c1..54d90e0 100644 | |
--- a/src/win/pipe.c | |
+++ b/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/test/test-list.h b/test/test-list.h | |
index 99932da..2997b17 100644 | |
--- a/test/test-list.h | |
+++ b/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/test/test-pipe-connect-error.c b/test/test-pipe-connect-error.c | |
index 2faa446..97734ca 100644 | |
--- a/test/test-pipe-connect-error.c | |
+++ b/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 | |
-- | |
1.7.9.msysgit.0 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment