Aric Stewart : rpcrt4: Handle NULL pclsid in NdrDllRegisterProxy and NdrDllUnregisterProxy.
Module: wine Branch: master Commit: 06085817687ddff4264c9d5853c6f633fda679d2 URL: http://source.winehq.org/git/wine.git/?a=commit;h=06085817687ddff4264c9d5853... Author: Aric Stewart <aric(a)codeweavers.com> Date: Wed Apr 7 11:53:05 2010 -0500 rpcrt4: Handle NULL pclsid in NdrDllRegisterProxy and NdrDllUnregisterProxy. --- dlls/rpcrt4/cpsf.c | 16 ++++++++++++++-- 1 files changed, 14 insertions(+), 2 deletions(-) diff --git a/dlls/rpcrt4/cpsf.c b/dlls/rpcrt4/cpsf.c index ac1eccf..6b12c01 100644 --- a/dlls/rpcrt4/cpsf.c +++ b/dlls/rpcrt4/cpsf.c @@ -240,7 +240,12 @@ HRESULT WINAPI NdrDllRegisterProxy(HMODULE hDll, DWORD len; TRACE("(%p,%p,%s)\n", hDll, pProxyFileList, debugstr_guid(pclsid)); - format_clsid( clsid, pclsid ); + if (pclsid) + format_clsid( clsid, pclsid ); + else if ((*pProxyFileList)->TableSize > 0) + format_clsid( clsid,(*pProxyFileList)->pStubVtblList[0]->header.piid); + else + return E_NOINTERFACE; /* register interfaces to point to clsid */ while (*pProxyFileList) { @@ -297,8 +302,15 @@ HRESULT WINAPI NdrDllUnregisterProxy(HMODULE hDll, static const WCHAR clsidW[] = {'C','L','S','I','D','\\',0}; static const WCHAR interfaceW[] = {'I','n','t','e','r','f','a','c','e','\\',0}; WCHAR keyname[50]; + WCHAR clsid[39]; TRACE("(%p,%p,%s)\n", hDll, pProxyFileList, debugstr_guid(pclsid)); + if (pclsid) + format_clsid( clsid, pclsid ); + else if ((*pProxyFileList)->TableSize > 0) + format_clsid( clsid,(*pProxyFileList)->pStubVtblList[0]->header.piid); + else + return E_NOINTERFACE; /* unregister interfaces */ while (*pProxyFileList) { @@ -318,7 +330,7 @@ HRESULT WINAPI NdrDllUnregisterProxy(HMODULE hDll, /* unregister clsid */ strcpyW( keyname, clsidW ); - format_clsid( keyname + strlenW(keyname), pclsid ); + strcatW( keyname, clsid ); RegDeleteTreeW(HKEY_CLASSES_ROOT, keyname); return S_OK;
participants (1)
-
Alexandre Julliard