Rob Shearman : rpcrt4: Ignore the return value of functions when unmarshalling a pickled procedure .
Alexandre Julliard
julliard at winehq.org
Mon Jul 14 05:56:53 CDT 2008
Module: wine
Branch: master
Commit: 09f343b1355d563f998096fc92cb1db02cd62a70
URL: http://source.winehq.org/git/wine.git/?a=commit;h=09f343b1355d563f998096fc92cb1db02cd62a70
Author: Rob Shearman <robertshearman at gmail.com>
Date: Thu Apr 24 14:30:59 2008 +0100
rpcrt4: Ignore the return value of functions when unmarshalling a pickled procedure.
---
dlls/rpcrt4/ndr_es.c | 6 +++---
dlls/rpcrt4/ndr_stubless.c | 9 +++++----
dlls/rpcrt4/ndr_stubless.h | 3 ++-
3 files changed, 10 insertions(+), 8 deletions(-)
diff --git a/dlls/rpcrt4/ndr_es.c b/dlls/rpcrt4/ndr_es.c
index 4f70dd1..3423d39 100644
--- a/dlls/rpcrt4/ndr_es.c
+++ b/dlls/rpcrt4/ndr_es.c
@@ -398,7 +398,7 @@ void WINAPIV NdrMesProcEncodeDecode(handle_t Handle, const MIDL_STUB_DESC * pStu
client_do_args_old_format(&pEsMsg->StubMsg, pFormat, PROXY_CALCSIZE,
pEsMsg->StubMsg.StackTop, stack_size, (unsigned char *)&RetVal,
- FALSE /* object_proc */);
+ FALSE /* object_proc */, TRUE /* ignore_retval */);
pEsMsg->ByteCount = pEsMsg->StubMsg.BufferLength - mes_proc_header_buffer_size();
es_data_alloc(pEsMsg, pEsMsg->StubMsg.BufferLength);
@@ -407,7 +407,7 @@ void WINAPIV NdrMesProcEncodeDecode(handle_t Handle, const MIDL_STUB_DESC * pStu
client_do_args_old_format(&pEsMsg->StubMsg, pFormat, PROXY_MARSHAL,
pEsMsg->StubMsg.StackTop, stack_size, (unsigned char *)&RetVal,
- FALSE /* object_proc */);
+ FALSE /* object_proc */, TRUE /* ignore_retval */);
es_data_write(pEsMsg, pEsMsg->ByteCount);
break;
@@ -418,7 +418,7 @@ void WINAPIV NdrMesProcEncodeDecode(handle_t Handle, const MIDL_STUB_DESC * pStu
client_do_args_old_format(&pEsMsg->StubMsg, pFormat, PROXY_UNMARSHAL,
pEsMsg->StubMsg.StackTop, stack_size, (unsigned char *)&RetVal,
- FALSE /* object_proc */);
+ FALSE /* object_proc */, TRUE /* ignore_retval */);
break;
default:
RpcRaiseException(RPC_S_INTERNAL_ERROR);
diff --git a/dlls/rpcrt4/ndr_stubless.c b/dlls/rpcrt4/ndr_stubless.c
index 9d28b36..275502a 100644
--- a/dlls/rpcrt4/ndr_stubless.c
+++ b/dlls/rpcrt4/ndr_stubless.c
@@ -441,7 +441,7 @@ static unsigned int type_stack_size(unsigned char fc)
void client_do_args_old_format(PMIDL_STUB_MESSAGE pStubMsg,
PFORMAT_STRING pFormat, int phase, unsigned char *args,
unsigned short stack_size,
- unsigned char *pRetVal, BOOL object_proc)
+ unsigned char *pRetVal, BOOL object_proc, BOOL ignore_retval)
{
/* current format string offset */
int current_offset = 0;
@@ -492,7 +492,8 @@ void client_do_args_old_format(PMIDL_STUB_MESSAGE pStubMsg,
call_marshaller(pStubMsg, pArg, pTypeFormat);
break;
case PROXY_UNMARSHAL:
- if (pParam->param_direction == RPC_FC_RETURN_PARAM_BASETYPE)
+ if (!ignore_retval &&
+ pParam->param_direction == RPC_FC_RETURN_PARAM_BASETYPE)
{
if (pParam->param_direction & RPC_FC_RETURN_PARAM)
call_unmarshaller(pStubMsg, &pRetVal, pTypeFormat, 0);
@@ -723,7 +724,7 @@ LONG_PTR WINAPIV NdrClientCall2(PMIDL_STUB_DESC pStubDesc, PFORMAT_STRING pForma
else
client_do_args_old_format(&stubMsg, pFormat, phase,
stubMsg.StackTop, stack_size, (unsigned char *)&RetVal,
- (pProcHeader->Oi_flags & RPC_FC_PROC_OIF_OBJECT));
+ (pProcHeader->Oi_flags & RPC_FC_PROC_OIF_OBJECT), FALSE);
break;
default:
ERR("shouldn't reach here. phase %d\n", phase);
@@ -801,7 +802,7 @@ LONG_PTR WINAPIV NdrClientCall2(PMIDL_STUB_DESC pStubDesc, PFORMAT_STRING pForma
else
client_do_args_old_format(&stubMsg, pFormat, phase,
stubMsg.StackTop, stack_size, (unsigned char *)&RetVal,
- (pProcHeader->Oi_flags & RPC_FC_PROC_OIF_OBJECT));
+ (pProcHeader->Oi_flags & RPC_FC_PROC_OIF_OBJECT), FALSE);
break;
default:
ERR("shouldn't reach here. phase %d\n", phase);
diff --git a/dlls/rpcrt4/ndr_stubless.h b/dlls/rpcrt4/ndr_stubless.h
index 06b552c..9a6fb44 100644
--- a/dlls/rpcrt4/ndr_stubless.h
+++ b/dlls/rpcrt4/ndr_stubless.h
@@ -238,4 +238,5 @@ typedef struct _NDR_EHD_CONTEXT
void client_do_args_old_format(PMIDL_STUB_MESSAGE pStubMsg,
PFORMAT_STRING pFormat, int phase, unsigned char *args,
- unsigned short stack_size, unsigned char *pRetVal, BOOL object_proc);
+ unsigned short stack_size, unsigned char *pRetVal, BOOL object_proc,
+ BOOL ignore_retval);
More information about the wine-cvs
mailing list