[PATCH 1/2] rpcrt4: Add support for TKIND_INTERFACE, TKIND_DISPATCH, TKIND_COCLASS to write_type_tfs.

Zebediah Figura z.figura12 at gmail.com
Wed Mar 18 23:18:59 CDT 2020


Hello Dmitry,

On 3/18/20 9:46 PM, Dmitry Timoshkov wrote:
> Signed-off-by: Dmitry Timoshkov <dmitry at baikal.ru>
> ---
>   dlls/rpcrt4/ndr_typelib.c | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/dlls/rpcrt4/ndr_typelib.c b/dlls/rpcrt4/ndr_typelib.c
> index c90c60c7b8..c2eb660cc1 100644
> --- a/dlls/rpcrt4/ndr_typelib.c
> +++ b/dlls/rpcrt4/ndr_typelib.c
> @@ -811,7 +811,7 @@ static size_t write_type_tfs(ITypeInfo *typeinfo, unsigned char *str,
>           case TKIND_INTERFACE:
>           case TKIND_DISPATCH:
>           case TKIND_COCLASS:
> -            assert(0);
> +            off = write_pointer_tfs(refinfo, str, len, &attr->tdescAlias, toplevel, onstack);
>               break;
>           case TKIND_ALIAS:
>               off = write_type_tfs(refinfo, str, len, &attr->tdescAlias, toplevel, onstack);
> 

I did some deeper testing, and I don't think this is correct.

tdescAlias is only set for TKIND_DISPATCH, and it points to VT_DISPATCH 
(presumably because any dispatchable interface doubles as IDispatch 
itself). For TKIND_INTERFACE and TKIND_COCLASS it's clear, and that will 
result in write_pointer_tfs trying to write VT_EMPTY.

Instead, I think we just want to duplicate the contents of 
write_pointer_tfs here, i.e. write "desc" as if it were a pointer. Does 
the attached patch work for you?
-------------- next part --------------
A non-text attachment was scrubbed...
Name: tmarshal_alt.diff
Type: text/x-patch
Size: 7561 bytes
Desc: not available
URL: <http://www.winehq.org/pipermail/wine-devel/attachments/20200318/3c000e8d/attachment-0001.bin>


More information about the wine-devel mailing list