Author: akhaldi
Date: Tue Nov 17 10:08:11 2015
New Revision: 69907
URL:
http://svn.reactos.org/svn/reactos?rev=69907&view=rev
Log:
[RPCRT4_WINETEST] Sync with Wine Staging 1.7.55. CORE-10536
Modified:
trunk/rostests/winetests/rpcrt4/cstub.c
trunk/rostests/winetests/rpcrt4/ndr_marshall.c
trunk/rostests/winetests/rpcrt4/rpc.c
trunk/rostests/winetests/rpcrt4/server.c
Modified: trunk/rostests/winetests/rpcrt4/cstub.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/rpcrt4/cstub.c?…
==============================================================================
--- trunk/rostests/winetests/rpcrt4/cstub.c [iso-8859-1] (original)
+++ trunk/rostests/winetests/rpcrt4/cstub.c [iso-8859-1] Tue Nov 17 10:08:11 2015
@@ -397,6 +397,8 @@
{
static void *ole32_start = NULL;
static void *ole32_end = NULL;
+ static void *combase_start = NULL;
+ static void *combase_end = NULL;
if (actual == expected)
return TRUE;
@@ -412,7 +414,21 @@
ole32_end = (void *)((char *) ole32_start +
nt_headers->OptionalHeader.SizeOfImage);
}
- return ole32_start <= actual && actual < ole32_end;
+ if (ole32_start <= actual && actual < ole32_end)
+ return TRUE;
+
+ /* On Win8, actual can be located inside combase.dll */
+ if (combase_start == NULL || combase_end == NULL)
+ {
+ PIMAGE_NT_HEADERS nt_headers;
+ combase_start = (void *) GetModuleHandleA("combase.dll");
+ if (combase_start == NULL)
+ return FALSE;
+ nt_headers = (PIMAGE_NT_HEADERS)((char *) combase_start + ((PIMAGE_DOS_HEADER)
combase_start)->e_lfanew);
+ combase_end = (void *)((char *) combase_start +
nt_headers->OptionalHeader.SizeOfImage);
+ }
+
+ return (combase_start <= actual && actual < combase_end);
}
static const ExtendedProxyFileInfo my_proxy_file_info =
Modified: trunk/rostests/winetests/rpcrt4/ndr_marshall.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/rpcrt4/ndr_mars…
==============================================================================
--- trunk/rostests/winetests/rpcrt4/ndr_marshall.c [iso-8859-1] (original)
+++ trunk/rostests/winetests/rpcrt4/ndr_marshall.c [iso-8859-1] Tue Nov 17 10:08:11 2015
@@ -29,11 +29,12 @@
#include <winbase.h>
#include <winnt.h>
#include <winerror.h>
+#include <ole2.h>
#include "rpc.h"
#include "rpcdce.h"
#include "rpcproxy.h"
-
+#include "midles.h"
static int my_alloc_called;
static int my_free_called;
@@ -964,7 +965,7 @@
s1.c = 0xa5;
s1.l1 = 0xdeadbeef;
s1.l2 = 0xcafebabe;
- s1.ll = ((LONGLONG) 0xbadefeed << 32) | 0x2468ace0;
+ s1.ll = ((ULONGLONG) 0xbadefeed << 32) | 0x2468ace0;
wiredatalen = 24;
memcpy(wiredata, &s1, wiredatalen);
@@ -1319,9 +1320,9 @@
ok(stubMsg.ReuseBuffer == 0 ||
broken(stubMsg.ReuseBuffer == 1), /* win2k */
"stubMsg.ReuseBuffer should have been set to zero instead of %d\n",
stubMsg.ReuseBuffer);
- ok(stubMsg.CorrDespIncrement == 0xcc ||
- stubMsg.CorrDespIncrement == 0,
- "CorrDespIncrement should have been unset instead of 0x%x\n",
stubMsg.CorrDespIncrement);
+ ok(stubMsg.CorrDespIncrement == 0 ||
+ broken(stubMsg.CorrDespIncrement == 0xcc), /* <= Win 2003 */
+ "CorrDespIncrement should have been set to zero instead of 0x%x\n",
stubMsg.CorrDespIncrement);
ok(stubMsg.FullPtrXlatTables == 0, "stubMsg.BufferLength should have been 0
instead of %p\n", stubMsg.FullPtrXlatTables);
}
@@ -1558,6 +1559,11 @@
ok(mem == mem_orig, "mem not alloced\n");
ok(my_alloc_called == 0, "alloc called %d\n", my_alloc_called);
}
+
+ /* Prevent a memory leak when running with Wine.
+ Remove once the todo_wine block above is fixed. */
+ if (mem != mem_orig)
+ HeapFree(GetProcessHeap(), 0, mem_orig);
my_free_called = 0;
StubMsg.Buffer = StubMsg.BufferStart;
@@ -2404,6 +2410,85 @@
"NdrGetUserMarshalInfo should have failed with RPC_S_INVALID_ARG instead of
%d\n", status);
}
+static void test_MesEncodeFixedBufferHandleCreate(void)
+{
+ ULONG encoded_size;
+ RPC_STATUS status;
+ handle_t handle;
+ char *buffer;
+
+ status = MesEncodeFixedBufferHandleCreate(NULL, 0, NULL, NULL);
+ ok(status == RPC_S_INVALID_ARG, "got %d\n", status);
+
+ status = MesEncodeFixedBufferHandleCreate(NULL, 0, NULL, &handle);
+ ok(status == RPC_S_INVALID_ARG, "got %d\n", status);
+
+ status = MesEncodeFixedBufferHandleCreate((char*)0xdeadbeef, 0, NULL, &handle);
+ ok(status == RPC_X_INVALID_BUFFER, "got %d\n", status);
+
+ buffer = (void*)((0xdeadbeef + 7) & ~7);
+ status = MesEncodeFixedBufferHandleCreate(buffer, 0, NULL, &handle);
+ ok(status == RPC_S_INVALID_ARG, "got %d\n", status);
+
+ status = MesEncodeFixedBufferHandleCreate(buffer, 0, &encoded_size,
&handle);
+todo_wine
+ ok(status == RPC_S_INVALID_ARG, "got %d\n", status);
+if (status == RPC_S_OK)
+ MesHandleFree(handle);
+
+ status = MesEncodeFixedBufferHandleCreate(buffer, 32, NULL, &handle);
+ ok(status == RPC_S_INVALID_ARG, "got %d\n", status);
+
+ status = MesEncodeFixedBufferHandleCreate(buffer, 32, &encoded_size,
&handle);
+ ok(status == RPC_S_OK, "got %d\n", status);
+
+ status = MesBufferHandleReset(NULL, MES_DYNAMIC_BUFFER_HANDLE, MES_ENCODE,
+ &buffer, 32, &encoded_size);
+ ok(status == RPC_S_INVALID_ARG, "got %d\n", status);
+
+ /* convert to dynamic buffer handle */
+ status = MesBufferHandleReset(handle, MES_DYNAMIC_BUFFER_HANDLE, MES_ENCODE,
+ &buffer, 32, &encoded_size);
+ ok(status == RPC_S_OK, "got %d\n", status);
+
+ status = MesBufferHandleReset(handle, MES_DYNAMIC_BUFFER_HANDLE, MES_ENCODE,
+ NULL, 32, &encoded_size);
+ ok(status == RPC_S_INVALID_ARG, "got %d\n", status);
+
+ status = MesBufferHandleReset(handle, MES_DYNAMIC_BUFFER_HANDLE, MES_ENCODE,
+ &buffer, 32, NULL);
+ ok(status == RPC_S_INVALID_ARG, "got %d\n", status);
+
+ /* invalid handle type */
+ status = MesBufferHandleReset(handle, MES_DYNAMIC_BUFFER_HANDLE+1, MES_ENCODE,
+ &buffer, 32, &encoded_size);
+ ok(status == RPC_S_INVALID_ARG, "got %d\n", status);
+
+ status = MesHandleFree(handle);
+ ok(status == RPC_S_OK, "got %d\n", status);
+}
+
+static void test_NdrCorrelationInitialize(void)
+{
+ MIDL_STUB_MESSAGE stub_msg;
+ BYTE buf[256];
+
+ memset( &stub_msg, 0, sizeof(stub_msg) );
+ memset( buf, 0, sizeof(buf) );
+
+ NdrCorrelationInitialize( &stub_msg, buf, sizeof(buf), 0 );
+ ok( stub_msg.CorrDespIncrement == 2 ||
+ broken(stub_msg.CorrDespIncrement == 0), /* <= Win 2003 */
+ "got %d\n", stub_msg.CorrDespIncrement );
+
+ memset( &stub_msg, 0, sizeof(stub_msg) );
+ memset( buf, 0, sizeof(buf) );
+
+ stub_msg.CorrDespIncrement = 1;
+ NdrCorrelationInitialize( &stub_msg, buf, sizeof(buf), 0 );
+ ok( stub_msg.CorrDespIncrement == 1, "got %d\n", stub_msg.CorrDespIncrement
);
+}
+
START_TEST( ndr_marshall )
{
determine_pointer_marshalling_style();
@@ -2424,4 +2509,6 @@
test_ndr_buffer();
test_NdrMapCommAndFaultStatus();
test_NdrGetUserMarshalInfo();
-}
+ test_MesEncodeFixedBufferHandleCreate();
+ test_NdrCorrelationInitialize();
+}
Modified: trunk/rostests/winetests/rpcrt4/rpc.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/rpcrt4/rpc.c?re…
==============================================================================
--- trunk/rostests/winetests/rpcrt4/rpc.c [iso-8859-1] (original)
+++ trunk/rostests/winetests/rpcrt4/rpc.c [iso-8859-1] Tue Nov 17 10:08:11 2015
@@ -222,10 +222,8 @@
ok(status == RPC_S_OK, "return wrong\n");
status = RpcMgmtStopServerListening(NULL);
-todo_wine {
ok(status == RPC_S_NOT_LISTENING,
"wrong RpcMgmtStopServerListening error (%u)\n", status);
-}
status = RpcMgmtWaitServerListen();
ok(status == RPC_S_NOT_LISTENING,
@@ -242,9 +240,7 @@
ok(status == RPC_S_OK, "RpcServerRegisterIf failed (%u)\n", status);
status = RpcServerListen(1, 20, TRUE);
-todo_wine {
ok(status == RPC_S_OK, "RpcServerListen failed (%u)\n", status);
-}
status = RpcServerListen(1, 20, TRUE);
todo_wine {
@@ -663,7 +659,7 @@
if (!pI_RpcExceptionFilter)
{
- skip("I_RpcExceptionFilter not exported\n");
+ win_skip("I_RpcExceptionFilter not exported\n");
return;
}
@@ -682,9 +678,9 @@
case STATUS_ACCESS_VIOLATION:
case STATUS_ILLEGAL_INSTRUCTION:
case STATUS_PRIVILEGED_INSTRUCTION:
- case 0xc00000aa /* STATUS_INSTRUCTION_MISALIGNMENT */:
+ case STATUS_INSTRUCTION_MISALIGNMENT:
case STATUS_STACK_OVERFLOW:
- case 0xc0000194 /* STATUS_POSSIBLE_DEADLOCK */:
+ case STATUS_POSSIBLE_DEADLOCK:
ok(retval == EXCEPTION_CONTINUE_SEARCH, "I_RpcExceptionFilter(0x%x)
should have returned %d instead of %d\n",
exception, EXCEPTION_CONTINUE_SEARCH, retval);
break;
@@ -789,13 +785,17 @@
UUID guid1;
BYTE version;
RPC_STATUS (WINAPI *pUuidCreateSequential)(UUID *) = (void
*)GetProcAddress(GetModuleHandleA("rpcrt4.dll"),
"UuidCreateSequential");
+ RPC_STATUS (WINAPI *pI_UuidCreate)(UUID *) =
(void*)GetProcAddress(GetModuleHandleA("rpcrt4.dll"),
"I_UuidCreate");
RPC_STATUS ret;
if (!pUuidCreateSequential)
{
- skip("UuidCreateSequential not exported\n");
+ win_skip("UuidCreateSequential not exported\n");
return;
}
+
+ ok(pI_UuidCreate != pUuidCreateSequential, "got %p, %p\n", pI_UuidCreate,
pUuidCreateSequential);
+
ret = pUuidCreateSequential(&guid1);
ok(!ret || ret == RPC_S_UUID_LOCAL_ONLY,
"expected RPC_S_OK or RPC_S_UUID_LOCAL_ONLY, got %08x\n", ret);
@@ -834,6 +834,14 @@
ok(!memcmp(guid1.Data4, guid2.Data4, sizeof(guid2.Data4)),
"unexpected value in MAC address: %s\n",
wine_dbgstr_guid(&guid2));
+
+ /* I_UuidCreate does exactly the same */
+ pI_UuidCreate(&guid2);
+ version = (guid2.Data3 & 0xf000) >> 12;
+ ok(version == 1, "unexpected version %d\n", version);
+ ok(!memcmp(guid1.Data4, guid2.Data4, sizeof(guid2.Data4)),
+ "unexpected value in MAC address: %s\n",
+ wine_dbgstr_guid(&guid2));
}
}
Modified: trunk/rostests/winetests/rpcrt4/server.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/rpcrt4/server.c…
==============================================================================
--- trunk/rostests/winetests/rpcrt4/server.c [iso-8859-1] (original)
+++ trunk/rostests/winetests/rpcrt4/server.c [iso-8859-1] Tue Nov 17 10:08:11 2015
@@ -1531,6 +1531,26 @@
ok(status == RPC_S_OK, "RpcBindingSetAuthInfoExA failed %d\n", status);
}
+#define test_is_server_listening(a,b) _test_is_server_listening(__LINE__,a,b)
+static void _test_is_server_listening(unsigned line, RPC_BINDING_HANDLE binding,
RPC_STATUS expected_status)
+{
+ RPC_STATUS status;
+ status = RpcMgmtIsServerListening(binding);
+ ok_(__FILE__,line)(status == expected_status, "RpcMgmtIsServerListening returned
%u, expected %u\n",
+ status, expected_status);
+}
+
+#define test_is_server_listening2(a,b,c) _test_is_server_listening2(__LINE__,a,b,c)
+static void _test_is_server_listening2(unsigned line, RPC_BINDING_HANDLE binding,
RPC_STATUS expected_status,
+ RPC_STATUS expected_status2)
+{
+ RPC_STATUS status;
+ status = RpcMgmtIsServerListening(binding);
+ ok_(__FILE__,line)(status == expected_status || status == expected_status2,
+ "RpcMgmtIsServerListening returned %u, expected %u or
%u\n",
+ status, expected_status, expected_status2);
+}
+
static void
client(const char *test)
{
@@ -1552,6 +1572,7 @@
run_tests();
authinfo_test(RPC_PROTSEQ_TCP, 0);
+ test_is_server_listening2(IServer_IfHandle, RPC_S_OK, RPC_S_ACCESS_DENIED);
ok(RPC_S_OK == RpcStringFreeA(&binding), "RpcStringFree\n");
ok(RPC_S_OK == RpcBindingFree(&IServer_IfHandle), "RpcBindingFree\n");
@@ -1563,6 +1584,7 @@
set_auth_info(IServer_IfHandle);
authinfo_test(RPC_PROTSEQ_TCP, 1);
+ test_is_server_listening(IServer_IfHandle, RPC_S_ACCESS_DENIED);
ok(RPC_S_OK == RpcStringFreeA(&binding), "RpcStringFree\n");
ok(RPC_S_OK == RpcBindingFree(&IServer_IfHandle), "RpcBindingFree\n");
@@ -1574,6 +1596,7 @@
run_tests(); /* can cause RPC_X_BAD_STUB_DATA exception */
authinfo_test(RPC_PROTSEQ_LRPC, 0);
+ test_is_server_listening(IServer_IfHandle, RPC_S_OK);
ok(RPC_S_OK == RpcStringFreeA(&binding), "RpcStringFree\n");
ok(RPC_S_OK == RpcBindingFree(&IServer_IfHandle), "RpcBindingFree\n");
@@ -1585,6 +1608,7 @@
set_auth_info(IServer_IfHandle);
authinfo_test(RPC_PROTSEQ_LRPC, 1);
+ test_is_server_listening(IServer_IfHandle, RPC_S_OK);
ok(RPC_S_OK == RpcStringFreeA(&binding), "RpcStringFree\n");
ok(RPC_S_OK == RpcBindingFree(&IServer_IfHandle), "RpcBindingFree\n");
@@ -1594,9 +1618,12 @@
ok(RPC_S_OK == RpcStringBindingComposeA(NULL, np, address_np, pipe, NULL,
&binding), "RpcStringBindingCompose\n");
ok(RPC_S_OK == RpcBindingFromStringBindingA(binding, &IServer_IfHandle),
"RpcBindingFromStringBinding\n");
+ test_is_server_listening(IServer_IfHandle, RPC_S_OK);
run_tests();
authinfo_test(RPC_PROTSEQ_NMP, 0);
+ test_is_server_listening(IServer_IfHandle, RPC_S_OK);
stop();
+ test_is_server_listening(IServer_IfHandle, RPC_S_NOT_LISTENING);
ok(RPC_S_OK == RpcStringFreeA(&binding), "RpcStringFree\n");
ok(RPC_S_OK == RpcBindingFree(&IServer_IfHandle), "RpcBindingFree\n");
@@ -1637,8 +1664,10 @@
else
status = RpcServerRegisterIf(s_IServer_v0_0_s_ifspec, NULL, NULL);
ok(status == RPC_S_OK, "RpcServerRegisterIf failed with status %d\n",
status);
+ test_is_server_listening(NULL, RPC_S_NOT_LISTENING);
status = RpcServerListen(1, 20, TRUE);
ok(status == RPC_S_OK, "RpcServerListen failed with status %d\n", status);
+ test_is_server_listening(NULL, RPC_S_OK);
stop_event = CreateEventW(NULL, FALSE, FALSE, NULL);
ok(stop_event != NULL, "CreateEvent failed with error %d\n",
GetLastError());