Module: wine Branch: refs/heads/master Commit: 88bbbed176807010312c96ee8e5d2ead06a2fc9d URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=88bbbed176807010312c96ee...
Author: Robert Shearman rob@codeweavers.com Date: Wed Aug 9 18:17:00 2006 +0100
rpcrt4: Change call_memory_sizer to preserve the buffer contents and initialise the memory size field to zero before calling the memory sizer function.
---
dlls/rpcrt4/ndr_stubless.c | 13 ++++++++++++- 1 files changed, 12 insertions(+), 1 deletions(-)
diff --git a/dlls/rpcrt4/ndr_stubless.c b/dlls/rpcrt4/ndr_stubless.c index 9206c38..3b1c071 100644 --- a/dlls/rpcrt4/ndr_stubless.c +++ b/dlls/rpcrt4/ndr_stubless.c @@ -94,7 +94,18 @@ static inline void call_freer(PMIDL_STUB static inline unsigned long call_memory_sizer(PMIDL_STUB_MESSAGE pStubMsg, PFORMAT_STRING pFormat) { NDR_MEMORYSIZE m = NdrMemorySizer[pFormat[0] & NDR_TABLE_MASK]; - if (m) return m(pStubMsg, pFormat); + if (m) + { + unsigned char *saved_buffer = pStubMsg->Buffer; + unsigned long ret; + int saved_ignore_embedded_pointers = pStubMsg->IgnoreEmbeddedPointers; + pStubMsg->MemorySize = 0; + pStubMsg->IgnoreEmbeddedPointers = 1; + ret = m(pStubMsg, pFormat); + pStubMsg->IgnoreEmbeddedPointers = saved_ignore_embedded_pointers; + pStubMsg->Buffer = saved_buffer; + return ret; + } else { FIXME("format type 0x%x not implemented\n", pFormat[0]);