From 6edc9517a431c1703041d274721dea92d92016bd Mon Sep 17 00:00:00 2001 From: Gavriel State Date: Tue, 4 Apr 2000 18:54:06 +0000 Subject: [PATCH] OleRegGetUserType did return an unterminated ASCII string instead of an OLESTR (wide characters). --- dlls/ole32/ole2.c | 40 +++++++++++++++++++++++++++++----------- 1 file changed, 29 insertions(+), 11 deletions(-) diff --git a/dlls/ole32/ole2.c b/dlls/ole32/ole2.c index 359de359ea..fbd2cdf223 100644 --- a/dlls/ole32/ole2.c +++ b/dlls/ole32/ole2.c @@ -392,13 +392,14 @@ HRESULT WINAPI OleRegGetUserType( DWORD dwFormOfType, LPOLESTR* pszUserType) { - char xclsid[50]; - char keyName[60]; - DWORD dwKeyType; - DWORD cbData; - HKEY clsidKey; - LONG hres; - + char xclsid[50]; + char keyName[60]; + DWORD dwKeyType; + DWORD cbData; + HKEY clsidKey; + LONG hres; + LPBYTE buffer; + HRESULT retVal; /* * Initialize the out parameter. */ @@ -446,7 +447,7 @@ HRESULT WINAPI OleRegGetUserType( /* * Allocate a buffer for the registry value. */ - *pszUserType = CoTaskMemAlloc(cbData); + *pszUserType = CoTaskMemAlloc(cbData*2); if (*pszUserType==NULL) { @@ -454,24 +455,41 @@ HRESULT WINAPI OleRegGetUserType( return E_OUTOFMEMORY; } + buffer = HeapAlloc(GetProcessHeap(), 0, cbData); + + if (buffer == NULL) + { + RegCloseKey(clsidKey); + CoTaskMemFree(*pszUserType); + *pszUserType=NULL; + return E_OUTOFMEMORY; + } + hres = RegQueryValueExA(clsidKey, "", NULL, &dwKeyType, - (LPBYTE)*pszUserType, + buffer, &cbData); RegCloseKey(clsidKey); + if (hres!=ERROR_SUCCESS) { CoTaskMemFree(*pszUserType); *pszUserType=NULL; - return REGDB_E_READREGDB; + retVal = REGDB_E_READREGDB; } + else + { + lstrcpyAtoW(*pszUserType, buffer); + retVal = S_OK; + } + HeapFree(GetProcessHeap(), 0, buffer); - return S_OK; + return retVal; } /*********************************************************************** -- 2.32.0.93.g670b81a890