oleaut32/tests: Test VARIANT_UserUnmarshal allocation sizes.

This commit is contained in:
Rémi Bernon 2023-02-24 11:46:33 +01:00 committed by Alexandre Julliard
parent b66f9af106
commit 3e82dc30e2

View file

@ -898,7 +898,9 @@ static void test_marshal_VARIANT(void)
RPC_MESSAGE rpcMsg = { 0 };
USER_MARSHAL_CB umcb = { 0 };
unsigned char *buffer, *next;
IMalloc *allocator;
void *oldbuffer;
SIZE_T size;
ULONG ul;
short s;
double d;
@ -916,6 +918,10 @@ static void test_marshal_VARIANT(void)
VARTYPE vt, vt2;
IUnknown *unk;
hr = CoGetMalloc(MEMCTX_TASK, &allocator);
ok(hr == S_OK, "got hr %#lx\n", hr);
ok(!!allocator, "got allocator %p\n", allocator);
stubMsg.RpcMsg = &rpcMsg;
umcb.Flags = MAKELONG(MSHCTX_DIFFERENTMACHINE, NDR_LOCAL_DATA_REPRESENTATION);
@ -1098,7 +1104,8 @@ static void test_marshal_VARIANT(void)
ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next, buffer + stubMsg.BufferLength);
ok(V_VT(&v) == V_VT(&v2), "got vt %d expect %d\n", V_VT(&v), V_VT(&v2));
ok(*V_UI4REF(&v) == *V_UI4REF(&v2), "got ui4 ref %lx expect ui4 ref %lx\n", *V_UI4REF(&v), *V_UI4REF(&v2));
size = IMalloc_GetSize(allocator, V_BYREF(&v2));
ok(size == sizeof(V_UI4(&v2)), "got size %#Ix\n", size);
VARIANT_UserFree(&umcb.Flags, &v2);
HeapFree(GetProcessHeap(), 0, oldbuffer);
@ -1212,7 +1219,8 @@ static void test_marshal_VARIANT(void)
ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next, buffer + stubMsg.BufferLength);
ok(V_VT(&v) == V_VT(&v2), "got vt %d expect %d\n", V_VT(&v), V_VT(&v2));
ok(*V_R8REF(&v) == *V_R8REF(&v2), "got r8 ref %f expect %f\n", *V_R8REF(&v), *V_R8REF(&v2));
size = IMalloc_GetSize(allocator, V_BYREF(&v2));
ok(size == sizeof(V_R8(&v2)), "got size %#Ix\n", size);
VARIANT_UserFree(&umcb.Flags, &v2);
HeapFree(GetProcessHeap(), 0, oldbuffer);
@ -1307,7 +1315,8 @@ static void test_marshal_VARIANT(void)
ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next, buffer + stubMsg.BufferLength);
ok(V_VT(&v) == V_VT(&v2), "got vt %d expect %d\n", V_VT(&v), V_VT(&v2));
ok(!memcmp(V_DECIMALREF(&v), V_DECIMALREF(&v2), sizeof(DECIMAL)), "decimals differ\n");
size = IMalloc_GetSize(allocator, V_BYREF(&v2));
ok(size == sizeof(V_DECIMAL(&v2)), "got size %#Ix\n", size);
VARIANT_UserFree(&umcb.Flags, &v2);
HeapFree(GetProcessHeap(), 0, oldbuffer);
@ -1418,7 +1427,8 @@ static void test_marshal_VARIANT(void)
ok(V_VT(&v) == V_VT(&v2), "got vt %d expect %d\n", V_VT(&v), V_VT(&v2));
ok(SysStringByteLen(*V_BSTRREF(&v)) == SysStringByteLen(*V_BSTRREF(&v2)), "bstr string lens differ\n");
ok(!memcmp(*V_BSTRREF(&v), *V_BSTRREF(&v2), SysStringByteLen(*V_BSTRREF(&v))), "bstrs differ\n");
size = IMalloc_GetSize(allocator, V_BYREF(&v2));
ok(size == sizeof(V_BSTR(&v2)), "got size %#Ix\n", size);
SysFreeString(b2);
HeapFree(GetProcessHeap(), 0, oldbuffer);
SysFreeString(b);
@ -1503,6 +1513,9 @@ static void test_marshal_VARIANT(void)
SafeArrayGetVartype(*V_ARRAYREF(&v), &vt);
SafeArrayGetVartype(*V_ARRAYREF(&v2), &vt2);
ok(vt == vt2, "array vts differ %x %x\n", vt, vt2);
size = IMalloc_GetSize(allocator, V_BYREF(&v2));
todo_wine_if(sizeof(void *) == 8)
ok(size == sizeof(V_ARRAY(&v2)), "got size %#Ix\n", size);
VARIANT_UserFree(&umcb.Flags, &v2);
HeapFree(GetProcessHeap(), 0, oldbuffer);
@ -1594,6 +1607,8 @@ static void test_marshal_VARIANT(void)
ok(V_VT(V_VARIANTREF(&v)) == V_VT(V_VARIANTREF(&v3)), "vts differ %x %x\n",
V_VT(V_VARIANTREF(&v)), V_VT(V_VARIANTREF(&v3)));
ok(V_R8(V_VARIANTREF(&v)) == V_R8(V_VARIANTREF(&v3)), "r8s differ\n");
size = IMalloc_GetSize(allocator, V_BYREF(&v3));
ok(size == sizeof(*V_VARIANTREF(&v3)), "got size %#Ix\n", size);
VARIANT_UserFree(&umcb.Flags, &v3);
HeapFree(GetProcessHeap(), 0, oldbuffer);
@ -1704,6 +1719,8 @@ static void test_marshal_VARIANT(void)
ok(heap_unknown->refs == 2, "got refcount %ld\n", heap_unknown->refs);
ok(V_VT(&v) == V_VT(&v3), "got vt %d expect %d\n", V_VT(&v), V_VT(&v3));
ok(*V_UNKNOWNREF(&v) == *V_UNKNOWNREF(&v3), "got %p expect %p\n", *V_UNKNOWNREF(&v), *V_UNKNOWNREF(&v3));
size = IMalloc_GetSize(allocator, V_BYREF(&v3));
ok(size == sizeof(V_BSTR(&v3)), "got size %#Ix\n", size);
VARIANT_UserFree(&umcb.Flags, &v3);
ok(heap_unknown->refs == 1, "%ld refcounts of IUnknown leaked\n", heap_unknown->refs - 1);
IUnknown_Release(&heap_unknown->IUnknown_iface);
@ -1732,8 +1749,12 @@ static void test_marshal_VARIANT(void)
ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next, buffer + stubMsg.BufferLength);
ok(V_VT(&v) == V_VT(&v2), "got vt %d expect %d\n", V_VT(&v2), V_VT(&v));
ok(!*V_UNKNOWNREF(&v2), "got %p expect NULL\n", *V_UNKNOWNREF(&v2));
size = IMalloc_GetSize(allocator, V_BYREF(&v2));
ok(size == sizeof(V_BSTR(&v2)), "got size %#Ix\n", size);
VARIANT_UserFree(&umcb.Flags, &v2);
HeapFree(GetProcessHeap(), 0, oldbuffer);
IMalloc_Release(allocator);
}