Module: wine Branch: master Commit: f687728c43011900f25007fe9d90139634afaa51 URL: http://source.winehq.org/git/wine.git/?a=commit;h=f687728c43011900f25007fe9d...
Author: Henri Verbeet hverbeet@codeweavers.com Date: Thu Sep 22 21:40:06 2011 +0200
rpcrt4: Properly size complex reference pointers.
---
dlls/rpcrt4/ndr_stubless.c | 11 +++++++++-- 1 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/dlls/rpcrt4/ndr_stubless.c b/dlls/rpcrt4/ndr_stubless.c index b68ff32..5eb699e 100644 --- a/dlls/rpcrt4/ndr_stubless.c +++ b/dlls/rpcrt4/ndr_stubless.c @@ -149,6 +149,15 @@ static DWORD calc_arg_size(MIDL_STUB_MESSAGE *pStubMsg, PFORMAT_STRING pFormat) DWORD size; switch(*pFormat) { + case RPC_FC_RP: + if (pFormat[1] & RPC_FC_P_SIMPLEPOINTER) + { + FIXME("Simple reference pointer (type %#x).\n", pFormat[2]); + size = sizeof(void *); + break; + } + size = calc_arg_size(pStubMsg, &pFormat[2] + *(WORD *)&pFormat[2]); + break; case RPC_FC_STRUCT: case RPC_FC_PSTRUCT: size = *(const WORD*)(pFormat + 2); @@ -202,8 +211,6 @@ static DWORD calc_arg_size(MIDL_STUB_MESSAGE *pStubMsg, PFORMAT_STRING pFormat) break; default: FIXME("Unhandled type %02x\n", *pFormat); - /* fallthrough */ - case RPC_FC_RP: size = sizeof(void *); break; }