Bernhard Loos : server: PIPE_TYPE_BYTE | PIPE_READMODE_MESSAGE is invalid for named pipes.

Alexandre Julliard julliard at winehq.org
Thu Oct 13 14:10:09 CDT 2011


Module: wine
Branch: master
Commit: c368df486565a83f7f0268a260306b0825e9a0bd
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=c368df486565a83f7f0268a260306b0825e9a0bd

Author: Bernhard Loos <bernhardloos at googlemail.com>
Date:   Wed Oct 12 14:50:40 2011 +0200

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 deletions(-)

diff --git a/dlls/kernel32/tests/pipe.c b/dlls/kernel32/tests/pipe.c
index ab85ad5..3484c62 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 d720b17..590adca 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;




More information about the wine-cvs mailing list