AVIFIL32: fix string conversion bugs

Mike McCormack mike at codeweavers.com
Sat Jul 3 11:37:11 CDT 2004


ChangeLog:
* fix string conversion bugs
-------------- next part --------------
Index: dlls/avifil32/api.c
===================================================================
RCS file: /home/wine/wine/dlls/avifil32/api.c,v
retrieving revision 1.25
diff -u -r1.25 api.c
--- dlls/avifil32/api.c	6 Jan 2004 20:42:48 -0000	1.25
+++ dlls/avifil32/api.c	3 Jul 2004 17:33:32 -0000
@@ -206,16 +206,15 @@
     return AVIERR_BADPARAM;
 
   /* convert ASCII string to Unicode and call unicode function */
-  len = lstrlenA(szFile);
+  len = MultiByteToWideChar(CP_ACP, 0, szFile, -1, NULL, 0);
   if (len <= 0)
     return AVIERR_BADPARAM;
 
-  wszFile = (LPWSTR)LocalAlloc(LPTR, (len + 1) * sizeof(WCHAR));
+  wszFile = (LPWSTR)LocalAlloc(LPTR, len * sizeof(WCHAR));
   if (wszFile == NULL)
     return AVIERR_MEMORY;
 
-  MultiByteToWideChar(CP_ACP, 0, szFile, -1, wszFile, len + 1);
-  wszFile[len + 1] = 0;
+  MultiByteToWideChar(CP_ACP, 0, szFile, -1, wszFile, len);
 
   hr = AVIFileOpenW(ppfile, wszFile, uMode, lpHandler);
 
@@ -1563,16 +1562,15 @@
     return AVIERR_BADPARAM;
 
   /* convert ASCII string to Unicode and call Unicode function */
-  len = lstrlenA(szFile);
+  len = MultiByteToWideChar(CP_ACP, 0, szFile, -1, NULL, 0);
   if (len <= 0)
     return AVIERR_BADPARAM;
 
-  wszFile = (LPWSTR)LocalAlloc(LPTR, (len + 1) * sizeof(WCHAR));
+  wszFile = LocalAlloc(LPTR, len * sizeof(WCHAR));
   if (wszFile == NULL)
     return AVIERR_MEMORY;
 
-  MultiByteToWideChar(CP_ACP, 0, szFile, -1, wszFile, len + 1);
-  wszFile[len + 1] = 0;
+  MultiByteToWideChar(CP_ACP, 0, szFile, -1, wszFile, len);
 
   hr = AVISaveVW(wszFile, pclsidHandler, lpfnCallback,
 		 nStream, ppavi, plpOptions);
Index: dlls/avifil32/avifile.c
===================================================================
RCS file: /home/wine/wine/dlls/avifil32/avifile.c,v
retrieving revision 1.41
diff -u -r1.41 avifile.c
--- dlls/avifil32/avifile.c	26 Nov 2003 22:04:29 -0000	1.41
+++ dlls/avifil32/avifile.c	3 Jul 2004 17:33:32 -0000
@@ -47,6 +47,7 @@
 #include "avifile_private.h"
 #include "extrachunk.h"
 
+#include "wine/unicode.h"
 #include "wine/debug.h"
 
 WINE_DEFAULT_DEBUG_CHANNEL(avifile);
@@ -640,7 +641,11 @@
 			       MMIO_ALLOCBUF | dwMode);
   if (This->paf->hmmio == NULL) {
     /* mmioOpenW not in native DLLs of Win9x -- try mmioOpenA */
-    LPSTR szFileName = LocalAlloc(LPTR, len * sizeof(CHAR));
+    LPSTR szFileName;
+
+    len = WideCharToMultiByte(CP_ACP, 0, This->paf->szFileName, -1,
+                               NULL, 0, NULL, NULL);
+    szFileName = LocalAlloc(LPTR, len * sizeof(CHAR));
     if (szFileName == NULL)
       return AVIERR_MEMORY;
 
@@ -698,13 +703,13 @@
   assert(This->paf != NULL);
 
   if (This->paf->szFileName != NULL) {
-    int len = lstrlenW(This->paf->szFileName);
+    int len = lstrlenW(This->paf->szFileName) + 1;
 
     *ppszFileName = (LPOLESTR)GlobalAllocPtr(GHND, len * sizeof(WCHAR));
     if (*ppszFileName == NULL)
       return AVIERR_MEMORY;
 
-    memcpy(*ppszFileName, This->paf->szFileName, len * sizeof(WCHAR));
+    strcpyW(*ppszFileName, This->paf->szFileName);
   }
 
   return AVIERR_OK;
Index: dlls/avifil32/wavfile.c
===================================================================
RCS file: /home/wine/wine/dlls/avifil32/wavfile.c,v
retrieving revision 1.9
diff -u -r1.9 wavfile.c
--- dlls/avifil32/wavfile.c	26 Nov 2003 22:04:29 -0000	1.9
+++ dlls/avifil32/wavfile.c	3 Jul 2004 17:33:32 -0000
@@ -34,6 +34,7 @@
 #include "avifile_private.h"
 #include "extrachunk.h"
 
+#include "wine/unicode.h"
 #include "wine/debug.h"
 
 WINE_DEFAULT_DEBUG_CHANNEL(avifile);
@@ -583,7 +584,7 @@
   This->uMode = dwMode;
 
   len = lstrlenW(pszFileName) + 1;
-  This->szFileName = (LPWSTR)LocalAlloc(LPTR, len * sizeof(WCHAR));
+  This->szFileName = LocalAlloc(LPTR, len * sizeof(WCHAR));
   if (This->szFileName == NULL)
     return AVIERR_MEMORY;
   lstrcpyW(This->szFileName, pszFileName);
@@ -592,7 +593,10 @@
   This->hmmio = mmioOpenW(This->szFileName, NULL, MMIO_ALLOCBUF | dwMode);
   if (This->hmmio == NULL) {
     /* mmioOpenW not in native DLLs of Win9x -- try mmioOpenA */
-    LPSTR szFileName = LocalAlloc(LPTR, len * sizeof(CHAR));
+    LPSTR szFileName;
+    len = WideCharToMultiByte(CP_ACP, 0, This->szFileName, -1,
+                              NULL, 0, NULL, NULL);
+    szFileName = LocalAlloc(LPTR, len * sizeof(CHAR));
     if (szFileName == NULL)
       return AVIERR_MEMORY;
 
@@ -659,13 +663,13 @@
   assert(This->paf != NULL);
 
   if (This->paf->szFileName != NULL) {
-    int len = lstrlenW(This->paf->szFileName);
+    int len = lstrlenW(This->paf->szFileName) + 1;
 
-    *ppszFileName = (LPOLESTR)GlobalAllocPtr(GHND, len * sizeof(WCHAR));
+    *ppszFileName = GlobalAllocPtr(GHND, len * sizeof(WCHAR));
     if (*ppszFileName == NULL)
       return AVIERR_MEMORY;
 
-    memcpy(*ppszFileName, This->paf->szFileName, len * sizeof(WCHAR));
+    strcpyW(*ppszFileName, This->paf->szFileName);
   }
 
   return AVIERR_OK;


More information about the wine-patches mailing list