[PATCH v3 03/13] widl: all VARDESC fields of TKIND_UNION should have oInst=0.

Kevin Puetz PuetzKevinA at JohnDeere.com
Fri Aug 7 15:36:32 CDT 2020


Also fix uninitialized value in this field for TKIND_DISPATCH.

Signed-off-by: Kevin Puetz <PuetzKevinA at JohnDeere.com>
---
TKIND_UNION previously wrote var_datawidth like TKIND_STRUCT does.
But a union's datawidth is the max of the fields, not the sum-so-far,
so this described each field as starting just past the end of the union,

TKIND_DISPATCH was just writing the 0x55555555 from xmalloc
The field seems to be unused for VAR_DISPATCH,
but was 0 in other (non-widl) typelib files I checked,
which seems like a reasonable "reserved" value.
---
 tools/widl/write_msft.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/tools/widl/write_msft.c b/tools/widl/write_msft.c
index 7cfe9e146c..23d1dd8652 100644
--- a/tools/widl/write_msft.c
+++ b/tools/widl/write_msft.c
@@ -1746,11 +1746,12 @@ static HRESULT add_var_desc(msft_typeinfo_t *typeinfo, UINT index, var_t* var)
         typeinfo->datawidth += var_datawidth;
         break;
     case TKIND_UNION:
-        typedata[4] = typeinfo->datawidth;
+        typedata[4] = 0;
         typeinfo->datawidth = max(typeinfo->datawidth, var_datawidth);
         break;
     case TKIND_DISPATCH:
         var_kind = 3; /* VAR_DISPATCH */
+        typedata[4] = 0;
         typeinfo->datawidth = pointer_size;
         break;
     default:



More information about the wine-devel mailing list