From c368df486565a83f7f0268a260306b0825e9a0bd Mon Sep 17 00:00:00 2001 From: Bernhard Loos Date: Wed, 12 Oct 2011 14:50:40 +0200 Subject: [PATCH] server: PIPE_TYPE_BYTE | PIPE_READMODE_MESSAGE is invalid for named pipes. --- dlls/kernel32/tests/pipe.c | 13 +++++++++++++ server/named_pipe.c | 3 ++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/dlls/kernel32/tests/pipe.c b/dlls/kernel32/tests/pipe.c index ab85ad53684..3484c62c791 100644 --- a/dlls/kernel32/tests/pipe.c +++ b/dlls/kernel32/tests/pipe.c @@ -71,6 +71,19 @@ static void test_CreateNamedPipe(int pipemode) ok(hnp == INVALID_HANDLE_VALUE && GetLastError() == ERROR_INVALID_NAME, "CreateNamedPipe should fail if name doesn't start with \\\\.\\pipe\n"); + if (pipemode == PIPE_TYPE_BYTE) + { + /* Bad parameter checks */ + hnp = CreateNamedPipe(PIPENAME, PIPE_ACCESS_DUPLEX, PIPE_TYPE_BYTE | PIPE_READMODE_MESSAGE, + /* nMaxInstances */ 1, + /* nOutBufSize */ 1024, + /* nInBufSize */ 1024, + /* nDefaultWait */ NMPWAIT_USE_DEFAULT_WAIT, + /* lpSecurityAttrib */ NULL); + ok(hnp == INVALID_HANDLE_VALUE && GetLastError() == ERROR_INVALID_PARAMETER, + "CreateNamedPipe should fail with PIPE_TYPE_BYTE | PIPE_READMODE_MESSAGE\n"); + } + hnp = CreateNamedPipe(NULL, PIPE_ACCESS_DUPLEX, pipemode | PIPE_WAIT, 1, 1024, 1024, NMPWAIT_USE_DEFAULT_WAIT, NULL); diff --git a/server/named_pipe.c b/server/named_pipe.c index d720b1727d4..590adcab76b 100644 --- a/server/named_pipe.c +++ b/server/named_pipe.c @@ -950,7 +950,8 @@ DECL_HANDLER(create_named_pipe) struct unicode_str name; struct directory *root = NULL; - if (!req->sharing || (req->sharing & ~(FILE_SHARE_READ | FILE_SHARE_WRITE))) + if (!req->sharing || (req->sharing & ~(FILE_SHARE_READ | FILE_SHARE_WRITE)) || + (!(req->flags & NAMED_PIPE_MESSAGE_STREAM_WRITE) && (req->flags & NAMED_PIPE_MESSAGE_STREAM_READ))) { set_error( STATUS_INVALID_PARAMETER ); return;