[1/2] user32: WM_GETTEXT message converters have to 0-terminate
output buffer if there is enough space even if there is no
text to convert
Dmitry Timoshkov
dmitry at codeweavers.com
Thu Mar 22 06:08:21 CDT 2007
Hello,
my next richedit control patch depends on this fix.
Changelog:
user32: WM_GETTEXT message converters have to 0-terminate output buffer
if there is enough space even if there is no text to convert.
---
dlls/user32/winproc.c | 15 ++++++++++-----
1 files changed, 10 insertions(+), 5 deletions(-)
diff --git a/dlls/user32/winproc.c b/dlls/user32/winproc.c
index 1d093a9..5a00e51 100644
--- a/dlls/user32/winproc.c
+++ b/dlls/user32/winproc.c
@@ -856,9 +856,11 @@ LRESULT WINPROC_CallProcAtoW( winproc_callback_t callback, HWND hwnd, UINT msg,
if (!(ptr = get_buffer( buffer, sizeof(buffer), len ))) break;
ret = callback( hwnd, msg, wParam, (LPARAM)ptr, result, arg );
- if (*result && wParam)
+ if (wParam)
{
- RtlUnicodeToMultiByteN( str, wParam - 1, &len, ptr, strlenW(ptr) * sizeof(WCHAR) );
+ len = 0;
+ if (*result)
+ RtlUnicodeToMultiByteN( str, wParam - 1, &len, ptr, strlenW(ptr) * sizeof(WCHAR) );
str[len] = 0;
*result = len;
}
@@ -1091,10 +1093,13 @@ static LRESULT WINPROC_CallProcWtoA( winproc_callback_t callback, HWND hwnd, UIN
if (!(ptr = get_buffer( buffer, sizeof(buffer), len ))) break;
ret = callback( hwnd, msg, wParam, (LPARAM)ptr, result, arg );
- if (*result && len)
+ if (len)
{
- RtlMultiByteToUnicodeN( (LPWSTR)lParam, wParam*sizeof(WCHAR), &len, ptr, strlen(ptr)+1 );
- *result = len/sizeof(WCHAR) - 1; /* do not count terminating null */
+ if (*result)
+ {
+ RtlMultiByteToUnicodeN( (LPWSTR)lParam, wParam*sizeof(WCHAR), &len, ptr, strlen(ptr)+1 );
+ *result = len/sizeof(WCHAR) - 1; /* do not count terminating null */
+ }
((LPWSTR)lParam)[*result] = 0;
}
free_buffer( buffer, ptr );
--
1.5.0.5
More information about the wine-patches
mailing list