Fix some hackish usages of WideCharToMultiByte (dstlen -1).=0A= They would cause an ERROR_INVALID_PARAMETER under Windows.=0A=

Colin Finck mail at colinfinck.de
Tue Jul 29 14:35:25 CDT 2008


=0A=
---=0A=
 dlls/advapi32/cred.c     |    9 +++++----=0A=
 dlls/comdlg32/fontdlg.c  |    2 +-=0A=
 dlls/wininet/urlcache.c  |    2 +-=0A=
 programs/winecfg/theme.c |    4 ++--=0A=
 4 files changed, 9 insertions(+), 8 deletions(-)=0A=
=0A=
diff --git a/dlls/advapi32/cred.c b/dlls/advapi32/cred.c=0A=
index 50a27c0..d40204b 100644=0A=
--- a/dlls/advapi32/cred.c=0A=
+++ b/dlls/advapi32/cred.c=0A=
@@ -947,7 +947,8 @@ static void =
convert_PCREDENTIALW_to_PCREDENTIALA(const CREDENTIALW *CredentialW,=0A=
     if (CredentialW->TargetName)=0A=
     {=0A=
         CredentialA->TargetName =3D buffer;=0A=
-        string_len =3D WideCharToMultiByte(CP_ACP, 0, =
CredentialW->TargetName, -1, CredentialA->TargetName, -1, NULL, NULL);=0A=
+        /* Buffer is guaranteed to be large enough */=0A=
+        string_len =3D WideCharToMultiByte(CP_ACP, 0, =
CredentialW->TargetName, -1, CredentialA->TargetName, 0x7FFFFFFF, NULL, =
NULL);=0A=
         buffer +=3D string_len;=0A=
         *len +=3D string_len;=0A=
     }=0A=
@@ -956,7 +957,7 @@ static void =
convert_PCREDENTIALW_to_PCREDENTIALA(const CREDENTIALW *CredentialW,=0A=
     if (CredentialW->Comment)=0A=
     {=0A=
         CredentialA->Comment =3D buffer;=0A=
-        string_len =3D WideCharToMultiByte(CP_ACP, 0, =
CredentialW->Comment, -1, CredentialA->Comment, -1, NULL, NULL);=0A=
+        string_len =3D WideCharToMultiByte(CP_ACP, 0, =
CredentialW->Comment, -1, CredentialA->Comment, 0x7FFFFFFF, NULL, NULL);=0A=
         buffer +=3D string_len;=0A=
         *len +=3D string_len;=0A=
     }=0A=
@@ -980,7 +981,7 @@ static void =
convert_PCREDENTIALW_to_PCREDENTIALA(const CREDENTIALW *CredentialW,=0A=
     if (CredentialW->TargetAlias)=0A=
     {=0A=
         CredentialA->TargetAlias =3D buffer;=0A=
-        string_len =3D WideCharToMultiByte(CP_ACP, 0, =
CredentialW->TargetAlias, -1, CredentialA->TargetAlias, -1, NULL, NULL);=0A=
+        string_len =3D WideCharToMultiByte(CP_ACP, 0, =
CredentialW->TargetAlias, -1, CredentialA->TargetAlias, 0x7FFFFFFF, =
NULL, NULL);=0A=
         buffer +=3D string_len;=0A=
         *len +=3D string_len;=0A=
     }=0A=
@@ -989,7 +990,7 @@ static void =
convert_PCREDENTIALW_to_PCREDENTIALA(const CREDENTIALW *CredentialW,=0A=
     if (CredentialW->UserName)=0A=
     {=0A=
         CredentialA->UserName =3D buffer;=0A=
-        string_len =3D WideCharToMultiByte(CP_ACP, 0, =
CredentialW->UserName, -1, CredentialA->UserName, -1, NULL, NULL);=0A=
+        string_len =3D WideCharToMultiByte(CP_ACP, 0, =
CredentialW->UserName, -1, CredentialA->UserName, 0x7FFFFFFF, NULL, =
NULL);=0A=
         buffer +=3D string_len;=0A=
         *len +=3D string_len;=0A=
     }=0A=
diff --git a/dlls/comdlg32/fontdlg.c b/dlls/comdlg32/fontdlg.c=0A=
index 2532f2f..9174ce0 100644=0A=
--- a/dlls/comdlg32/fontdlg.c=0A=
+++ b/dlls/comdlg32/fontdlg.c=0A=
@@ -1072,7 +1072,7 @@ static LRESULT CFn_WMDestroy(HWND hwnd, WPARAM =
wParam, LPARAM lParam, LPCHOOSEFO=0A=
                         LF_FACESIZE, lpcfa->lpLogFont->lfFaceName, =
LF_FACESIZE, 0, 0);=0A=
 =0A=
     if((lpcfw->Flags & CF_USESTYLE) && lpcfw->lpszStyle) {=0A=
-        len =3D WideCharToMultiByte(CP_ACP, 0, lpcfw->lpszStyle, -1, =
NULL, -1, 0, 0);=0A=
+        len =3D WideCharToMultiByte(CP_ACP, 0, lpcfw->lpszStyle, -1, =
NULL, 0, 0, 0);=0A=
         WideCharToMultiByte(CP_ACP, 0, lpcfw->lpszStyle, -1, =
lpcfa->lpszStyle, len, 0, 0);=0A=
         HeapFree(GetProcessHeap(), 0, lpcfw->lpszStyle);=0A=
     }=0A=
diff --git a/dlls/wininet/urlcache.c b/dlls/wininet/urlcache.c=0A=
index 6e76893..75bcf34 100644=0A=
--- a/dlls/wininet/urlcache.c=0A=
+++ b/dlls/wininet/urlcache.c=0A=
@@ -2339,7 +2339,7 @@ static BOOL WINAPI CommitUrlCacheEntryInternal(=0A=
         /* skip container path prefix */=0A=
         lpszLocalFileName +=3D lstrlenW(pContainer->path);=0A=
 =0A=
-        WideCharToMultiByte(CP_ACP, 0, lpszLocalFileName, -1, achFile, =
-1, NULL, NULL);=0A=
+        WideCharToMultiByte(CP_ACP, 0, lpszLocalFileName, -1, achFile, =
MAX_PATH, NULL, NULL);=0A=
 	pchLocalFileName =3D achFile;=0A=
 =0A=
         for (cDirectory =3D 0; cDirectory < pHeader->DirectoryCount; =
cDirectory++)=0A=
diff --git a/programs/winecfg/theme.c b/programs/winecfg/theme.c=0A=
index abd016d..cdab531 100644=0A=
--- a/programs/winecfg/theme.c=0A=
+++ b/programs/winecfg/theme.c=0A=
@@ -554,7 +554,7 @@ static void set_color_from_theme(WCHAR *keyName, =
COLORREF color)=0A=
 =0A=
     keyNameSize =3D WideCharToMultiByte(CP_ACP, 0, keyName, -1, =
keyNameA, 0, NULL, NULL);=0A=
     keyNameA =3D HeapAlloc(GetProcessHeap(), 0, keyNameSize);=0A=
-    WideCharToMultiByte(CP_ACP, 0, keyName, -1, keyNameA, -1, NULL, =
NULL);=0A=
+    WideCharToMultiByte(CP_ACP, 0, keyName, -1, keyNameA, keyNameSize, =
NULL, NULL);=0A=
 =0A=
     for (i=3D0; i<sizeof(metrics)/sizeof(metrics[0]); i++)=0A=
     {=0A=
@@ -593,7 +593,7 @@ static void do_parse_theme(WCHAR *file)=0A=
         keyNameValueSize =3D WideCharToMultiByte(CP_ACP, 0, =
keyNameValue, -1,=0A=
                                                keyNameValueA, 0, NULL, =
NULL);=0A=
         keyNameValueA =3D HeapAlloc(GetProcessHeap(), 0, =
keyNameValueSize);=0A=
-        WideCharToMultiByte(CP_ACP, 0, keyNameValue, -1, keyNameValueA, =
-1, NULL, NULL);=0A=
+        WideCharToMultiByte(CP_ACP, 0, keyNameValue, -1, keyNameValueA, =
keyNameValueSize, NULL, NULL);=0A=
 =0A=
         WINE_TRACE("parsing key: %s with value: %s\n",=0A=
                    wine_dbgstr_w(keyNamePtr), =
wine_dbgstr_w(keyNameValue));=0A=
-- =0A=
1.5.6.1.1071.g76fb=0A=
=0A=

------=_NextPart_000_0036_01C8F30A.73EA0C00--




More information about the wine-patches mailing list