SHLWAPI: fix memory allocation problems

Mike McCormack mike at codeweavers.com
Wed Jun 30 16:56:51 CDT 2004


ChangeLog:
* fix memory allocation problems
-------------- next part --------------
Index: dlls/shlwapi/assoc.c
===================================================================
RCS file: /home/wine/wine/dlls/shlwapi/assoc.c,v
retrieving revision 1.9
diff -u -r1.9 assoc.c
--- dlls/shlwapi/assoc.c	2 Mar 2004 20:55:57 -0000	1.9
+++ dlls/shlwapi/assoc.c	30 Jun 2004 22:54:49 -0000
@@ -75,7 +75,7 @@
 {
   IQueryAssociationsImpl* iface;
 
-  iface =(IQueryAssociationsImpl*)HeapAlloc(GetProcessHeap(),0,sizeof(IQueryAssociationsImpl));
+  iface = HeapAlloc(GetProcessHeap(),0,sizeof(IQueryAssociationsImpl));
   iface->lpVtbl = &IQueryAssociations_vtbl;
   iface->ref = 1;
   iface->hkeySource = NULL;
@@ -95,7 +95,7 @@
 {
   if (lpszParam)
   {
-    DWORD dwStrLen = lstrlenA(lpszParam);
+    DWORD dwStrLen = MultiByteToWideChar(CP_ACP, 0, lpszParam, -1, NULL, 0);
 
     if (dwStrLen < dwLen)
     {
@@ -104,12 +104,12 @@
     else
     {
       /* Create a new buffer big enough for the string */
-      *lpszOut = (LPWSTR)HeapAlloc(GetProcessHeap(), 0,
-                                   (dwStrLen + 1) * sizeof(WCHAR));
+      *lpszOut = HeapAlloc(GetProcessHeap(), 0,
+                                   dwStrLen * sizeof(WCHAR));
       if (!*lpszOut)
         return FALSE;
     }
-    MultiByteToWideChar(0, 0, lpszParam, -1, *lpszOut, -1);
+    MultiByteToWideChar(CP_ACP, 0, lpszParam, -1, *lpszOut, dwStrLen);
   }
   else
     *lpszOut = NULL;
@@ -298,7 +298,7 @@
     DWORD dwLenOut = *pcchOut;
 
     if (dwLenOut >= MAX_PATH)
-      lpszReturnW = (LPWSTR)HeapAlloc(GetProcessHeap(), 0,
+      lpszReturnW = HeapAlloc(GetProcessHeap(), 0,
                                       (dwLenOut + 1) * sizeof(WCHAR));
 
     if (!lpszReturnW)
@@ -389,7 +389,7 @@
   {
     DWORD dwLenOut = *pcchOut;
     if (dwLenOut >= MAX_PATH)
-      lpszReturnW = (LPWSTR)HeapAlloc(GetProcessHeap(), 0,
+      lpszReturnW = HeapAlloc(GetProcessHeap(), 0,
                                       (dwLenOut + 1) * sizeof(WCHAR));
 
     if (lpszReturnW)
Index: dlls/shlwapi/reg.c
===================================================================
RCS file: /home/wine/wine/dlls/shlwapi/reg.c,v
retrieving revision 1.49
diff -u -r1.49 reg.c
--- dlls/shlwapi/reg.c	4 May 2004 04:13:06 -0000	1.49
+++ dlls/shlwapi/reg.c	30 Jun 2004 22:54:49 -0000
@@ -1204,8 +1204,8 @@
     }
     else
     {
-      nBytesToAlloc = lstrlenA(pvData) * sizeof (CHAR);
-      szData = (LPSTR) LocalAlloc(GMEM_ZEROINIT, nBytesToAlloc + 1);
+      nBytesToAlloc = (lstrlenA(pvData)+1) * sizeof (CHAR);
+      szData = (LPSTR) LocalAlloc(GMEM_ZEROINIT, nBytesToAlloc );
       lstrcpyA(szData, pvData);
       dwExpDataLen = ExpandEnvironmentStringsA(szData, pvData, *pcbData / sizeof(CHAR));
       if (dwExpDataLen > *pcbData) dwRet = ERROR_MORE_DATA;
@@ -1265,8 +1265,8 @@
     }
     else
     {
-      nBytesToAlloc = lstrlenW(pvData) * sizeof(WCHAR);
-      szData = (LPWSTR) LocalAlloc(GMEM_ZEROINIT, nBytesToAlloc + 1);
+      nBytesToAlloc = (lstrlenW(pvData) + 1) * sizeof(WCHAR);
+      szData = (LPWSTR) LocalAlloc(GMEM_ZEROINIT, nBytesToAlloc );
       lstrcpyW(szData, pvData);
       dwExpDataLen = ExpandEnvironmentStringsW(szData, pvData, *pcbData/sizeof(WCHAR) );
       if (dwExpDataLen > *pcbData) dwRet = ERROR_MORE_DATA;
Index: dlls/shlwapi/url.c
===================================================================
RCS file: /home/wine/wine/dlls/shlwapi/url.c,v
retrieving revision 1.34
diff -u -r1.34 url.c
--- dlls/shlwapi/url.c	19 May 2004 03:22:55 -0000	1.34
+++ dlls/shlwapi/url.c	30 Jun 2004 22:54:49 -0000
@@ -369,8 +369,8 @@
 
     /* see if known scheme and return indicator number */
     len = WideCharToMultiByte(0, 0, y->ap1, y->sizep1, 0, 0, 0, 0);
-    cmpstr = (LPSTR)HeapAlloc(GetProcessHeap(), 0, len+1);
-    WideCharToMultiByte(0, 0, y->ap1, y->sizep1, cmpstr, len+1, 0, 0);
+    cmpstr = (LPSTR)HeapAlloc(GetProcessHeap(), 0, len);
+    WideCharToMultiByte(0, 0, y->ap1, y->sizep1, cmpstr, len, 0, 0);
     y->fcncde = URL_SCHEME_UNKNOWN;
     inet_pro = shlwapi_schemes;
     while (inet_pro->scheme_name) {
@@ -422,7 +422,7 @@
     if(!pszUrl || !pszCanonicalized || !pcchCanonicalized)
 	return E_INVALIDARG;
 
-    base = (LPWSTR) HeapAlloc(GetProcessHeap(), 0,
+    base = HeapAlloc(GetProcessHeap(), 0,
 			      (2*INTERNET_MAX_URL_LENGTH) * sizeof(WCHAR));
     canonical = base + INTERNET_MAX_URL_LENGTH;
 
@@ -1482,7 +1482,7 @@
     TRACE("(in %s, out size %ld, flags %08lx) using W version\n",
 	  debugstr_a(pszIn), *pcchOut, dwFlags);
 
-    in = (LPWSTR) HeapAlloc(GetProcessHeap(), 0,
+    in = HeapAlloc(GetProcessHeap(), 0,
 			      (2*INTERNET_MAX_URL_LENGTH) * sizeof(WCHAR));
     out = in + INTERNET_MAX_URL_LENGTH;
 
@@ -1968,7 +1968,7 @@
     LPWSTR in, out;
     DWORD ret, len, len2;
 
-    in = (LPWSTR) HeapAlloc(GetProcessHeap(), 0,
+    in = HeapAlloc(GetProcessHeap(), 0,
 			      (2*INTERNET_MAX_URL_LENGTH) * sizeof(WCHAR));
     out = in + INTERNET_MAX_URL_LENGTH;
 


More information about the wine-patches mailing list