Huw Davies : ole32/tests: Remove assumptions about the size of marshalled data.

Alexandre Julliard julliard at winehq.org
Tue May 19 09:23:10 CDT 2009


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

Author: Huw Davies <huw at codeweavers.com>
Date:   Tue May 19 10:41:55 2009 +0100

ole32/tests: Remove assumptions about the size of marshalled data.

---

 dlls/ole32/tests/usrmarshal.c |   41 +++++++++++++++++------------------------
 1 files changed, 17 insertions(+), 24 deletions(-)

diff --git a/dlls/ole32/tests/usrmarshal.c b/dlls/ole32/tests/usrmarshal.c
index 2f934d8..da1fb25 100644
--- a/dlls/ole32/tests/usrmarshal.c
+++ b/dlls/ole32/tests/usrmarshal.c
@@ -550,13 +550,9 @@ static void marshal_WdtpInterfacePointer(DWORD umcb_ctx, DWORD ctx)
     unsigned char *wireip;
     HGLOBAL h = GlobalAlloc(GMEM_MOVEABLE, 0);
     IStream *stm;
-    void *ptr;
+    void *marshal_data;
     LARGE_INTEGER pos;
-    DWORD h_size, marshal_size, expected_size;
-
-    /* The marshalled data depends on the LOWORD of the ctx */
-
-    expected_size = (LOWORD(ctx) == MSHCTX_INPROC) ? 0x4c : 0xb4;
+    DWORD marshal_size;
 
     /* shows that the WdtpInterfacePointer functions don't marshal anything for
      * NULL pointers, so code using these functions must handle that case
@@ -571,36 +567,33 @@ static void marshal_WdtpInterfacePointer(DWORD umcb_ctx, DWORD ctx)
     wireip = buffer;
     HeapFree(GetProcessHeap(), 0, buffer);
 
+    /* Now for a non-NULL pointer. The marshalled data are two size DWORDS and then
+       the result of CoMarshalInterface called with the LOWORD of the ctx */
+
     unk = &Test_Unknown;
+
+    CreateStreamOnHGlobal(h, TRUE, &stm);
+    CoMarshalInterface(stm, &IID_IUnknown, unk, LOWORD(ctx), NULL, MSHLFLAGS_NORMAL);
+    marshal_size = GlobalSize(h);
+    marshal_data = GlobalLock(h);
+
     init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, NULL, 0, umcb_ctx);
     size = WdtpInterfacePointer_UserSize(&umcb.Flags, ctx, 0, unk, &IID_IUnknown);
-    todo_wine
-    ok(size >= expected_size, "size should be >= %x bytes, not %x\n", expected_size, size);
-    trace("WdtpInterfacePointer_UserSize returned %d\n", size);
+    ok(size >= marshal_size + 2 * sizeof(DWORD), "marshal size %x got %x\n", marshal_size, size);
+    trace("WdtpInterfacePointer_UserSize returned %x\n", size);
     buffer = HeapAlloc(GetProcessHeap(), 0, size);
     init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, buffer, size, umcb_ctx);
     buffer_end = WdtpInterfacePointer_UserMarshal(&umcb.Flags, ctx, buffer, unk, &IID_IUnknown);
     wireip = buffer;
 
-    /* Wine's standard marshalling appears to be a DWORD short */
-    todo_wine
-    ok(buffer_end == buffer + expected_size, "buffer_end %p buffer %p (diff %x)\n", buffer_end, buffer, buffer_end - buffer);
+    ok(buffer_end == buffer + marshal_size + 2 * sizeof(DWORD), "buffer_end %p buffer %p (diff %x)\n", buffer_end, buffer, buffer_end - buffer);
 
-    marshal_size = buffer_end - buffer - 2 * sizeof(DWORD);
-    ok(*(DWORD *)wireip == marshal_size, "wireip + 0x0 should be 0x44 instead of 0x%08x\n", *(DWORD *)wireip);
+    ok(*(DWORD *)wireip == marshal_size, "wireip + 0x0 should be %x instead of %x\n", marshal_size, *(DWORD *)wireip);
     wireip += sizeof(DWORD);
-    ok(*(DWORD *)wireip == marshal_size, "wireip + 0x4 should be 0x44 instead of 0x%08x\n", *(DWORD *)wireip);
+    ok(*(DWORD *)wireip == marshal_size, "wireip + 0x4 should be %x instead of %x\n", marshal_size, *(DWORD *)wireip);
     wireip += sizeof(DWORD);
 
-    /* The remaining 0x44/0xac bytes are the result of CoMarshalInterface */
-
-    CreateStreamOnHGlobal(h, TRUE, &stm);
-    CoMarshalInterface(stm, &IID_IUnknown, unk, LOWORD(ctx), NULL, MSHLFLAGS_NORMAL);
-    h_size = GlobalSize(h);
-    ok(h_size == marshal_size, "size %x\n", h_size);
-
-    ptr = GlobalLock(h);
-    ok(!memcmp(ptr, wireip, h_size), "buffer mismatch\n");
+    ok(!memcmp(marshal_data, wireip, marshal_size), "buffer mismatch\n");
     GlobalUnlock(h);
     pos.QuadPart = 0;
     IStream_Seek(stm, pos, STREAM_SEEK_SET, NULL);




More information about the wine-cvs mailing list