oleaut32: BSTRs should have 8 byte alignment on 64 bits.
authorHuw Davies <huw@codeweavers.com>
Thu, 21 Jan 2016 10:29:50 +0000 (10:29 +0000)
committerAlexandre Julliard <julliard@winehq.org>
Thu, 21 Jan 2016 16:26:16 +0000 (01:26 +0900)
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Jacek Caban <jacek@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
dlls/oleaut32/oleaut.c
dlls/oleaut32/tests/vartype.c

index 8a22c2e141c0f41b55de71b46d28fd75f430e168..07db9fff1fd3317c87855b104ab00930e51f8150 100644 (file)
@@ -84,6 +84,9 @@ static CRITICAL_SECTION_DEBUG cs_bstr_cache_dbg =
 static CRITICAL_SECTION cs_bstr_cache = { &cs_bstr_cache_dbg, -1, 0, 0, 0, 0 };
 
 typedef struct {
+#ifdef _WIN64
+    DWORD pad;
+#endif
     DWORD size;
     union {
         char ptr[1];
index d905d3768f949aff1df66fbe003bd380a6e2f40b..f7df9c58ea487fc35b5c1a0c3eae105b0a2ccd85 100644 (file)
@@ -5398,9 +5398,12 @@ static void test_SysAllocString(void)
   if (str)
   {
     LPINTERNAL_BSTR bstr = Get(str);
+    DWORD_PTR p = (DWORD_PTR)str;
+    int align = sizeof(void *);
 
     ok (bstr->dwLen == 8, "Expected 8, got %d\n", bstr->dwLen);
     ok (!lstrcmpW(bstr->szString, szTest), "String different\n");
+    ok ((p & ~(align-1)) == p, "Not aligned to %d\n", align);
     SysFreeString(str);
   }
 }