Module: wine Branch: master Commit: 3e82dc30e2244b7ad4942bd368964988d5700ced URL: https://gitlab.winehq.org/wine/wine/-/commit/3e82dc30e2244b7ad4942bd36896498...
Author: Rémi Bernon rbernon@codeweavers.com Date: Fri Feb 24 11:46:33 2023 +0100
oleaut32/tests: Test VARIANT_UserUnmarshal allocation sizes.
---
dlls/oleaut32/tests/usrmarshal.c | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-)
diff --git a/dlls/oleaut32/tests/usrmarshal.c b/dlls/oleaut32/tests/usrmarshal.c index c4f4381b47f..d4ffdbde82f 100644 --- a/dlls/oleaut32/tests/usrmarshal.c +++ b/dlls/oleaut32/tests/usrmarshal.c @@ -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); }