ChangeSet ID: 21518 CVSROOT: /opt/cvs-commit Module name: wine Changes by: julliard@winehq.org 2005/11/29 05:04:49
Modified files: dlls/rpcrt4 : ndr_ole.c
Log message: Robert Shearman rob@codeweavers.com Raise exceptions on failures. Replace references of pStubMsg->BufferEnd with RpcMsg->Buffer + pStubMsg->BufferLength. Fix buffer calculation when no interface data is marshaled to the stream.
Patch: http://cvs.winehq.org/patch.py?id=21518
Old revision New revision Changes Path 1.16 1.17 +9 -3 wine/dlls/rpcrt4/ndr_ole.c
Index: wine/dlls/rpcrt4/ndr_ole.c diff -u -p wine/dlls/rpcrt4/ndr_ole.c:1.16 wine/dlls/rpcrt4/ndr_ole.c:1.17 --- wine/dlls/rpcrt4/ndr_ole.c:1.16 29 Nov 2005 11: 4:49 -0000 +++ wine/dlls/rpcrt4/ndr_ole.c 29 Nov 2005 11: 4:49 -0000 @@ -254,13 +254,17 @@ unsigned char * WINAPI NdrInterfacePoint TRACE("(%p,%p,%p)\n", pStubMsg, pMemory, pFormat); pStubMsg->MaxCount = 0; if (!LoadCOM()) return NULL; - if (pStubMsg->Buffer + sizeof(DWORD) < pStubMsg->BufferEnd) { + if (pStubMsg->Buffer + sizeof(DWORD) < (unsigned char *)pStubMsg->RpcMsg->Buffer + pStubMsg->BufferLength) { stream = RpcStream_Create(pStubMsg, TRUE); if (stream) { hr = COM_MarshalInterface(stream, riid, (LPUNKNOWN)pMemory, pStubMsg->dwDestContext, pStubMsg->pvDestContext, MSHLFLAGS_NORMAL); IStream_Release(stream); + if (FAILED(hr)) { + IUnknown_Release((LPUNKNOWN)pMemory); + RpcRaiseException(hr); + } } } return NULL; @@ -280,11 +284,13 @@ unsigned char * WINAPI NdrInterfacePoint TRACE("(%p,%p,%p,%d)\n", pStubMsg, ppMemory, pFormat, fMustAlloc); if (!LoadCOM()) return NULL; *(LPVOID*)ppMemory = NULL; - if (pStubMsg->Buffer + sizeof(DWORD) < pStubMsg->BufferEnd) { + if (pStubMsg->Buffer + sizeof(DWORD) < (unsigned char *)pStubMsg->RpcMsg->Buffer + pStubMsg->BufferLength) { stream = RpcStream_Create(pStubMsg, FALSE); if (stream) { hr = COM_UnmarshalInterface(stream, &IID_NULL, (LPVOID*)ppMemory); IStream_Release(stream); + if (FAILED(hr)) + RpcRaiseException(hr); } } return NULL; @@ -307,7 +313,7 @@ void WINAPI NdrInterfacePointerBufferSiz pStubMsg->dwDestContext, pStubMsg->pvDestContext, MSHLFLAGS_NORMAL); TRACE("size=%ld\n", size); - if (size) pStubMsg->BufferLength += sizeof(DWORD) + size; + pStubMsg->BufferLength += sizeof(DWORD) + size; }
/***********************************************************************