Rob Shearman : rpcrt4: Unmarshal NULL OLE interfaces properly by handling the case of a 0 stream size .

Alexandre Julliard julliard at wine.codeweavers.com
Thu Mar 15 08:19:17 CDT 2007


Module: wine
Branch: master
Commit: 8620d15d3960921a8f316e0653ef0d11ceb55e89
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=8620d15d3960921a8f316e0653ef0d11ceb55e89

Author: Rob Shearman <rob at codeweavers.com>
Date:   Wed Mar 14 15:46:16 2007 +0000

rpcrt4: Unmarshal NULL OLE interfaces properly by handling the case of a 0 stream size.

---

 dlls/rpcrt4/ndr_ole.c |   10 ++++++----
 1 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/dlls/rpcrt4/ndr_ole.c b/dlls/rpcrt4/ndr_ole.c
index 6c32121..b65e18b 100644
--- a/dlls/rpcrt4/ndr_ole.c
+++ b/dlls/rpcrt4/ndr_ole.c
@@ -288,12 +288,14 @@ unsigned char * WINAPI NdrInterfacePointerUnmarshall(PMIDL_STUB_MESSAGE pStubMsg
   *(LPVOID*)ppMemory = NULL;
   if (pStubMsg->Buffer + sizeof(DWORD) < (unsigned char *)pStubMsg->RpcMsg->Buffer + pStubMsg->BufferLength) {
     stream = RpcStream_Create(pStubMsg, FALSE);
-    if (stream) {
+    if (!stream) RpcRaiseException(E_OUTOFMEMORY);
+    if (*((RpcStreamImpl *)stream)->size != 0)
       hr = COM_UnmarshalInterface(stream, &IID_NULL, (LPVOID*)ppMemory);
-      IStream_Release(stream);
-      if (FAILED(hr))
+    else
+      hr = S_OK;
+    IStream_Release(stream);
+    if (FAILED(hr))
         RpcRaiseException(hr);
-    }
   }
   return NULL;
 }




More information about the wine-cvs mailing list