user32: Add exception handler to GetWindowText.
Signed-off-by: Dmitry Timoshkov <dmitry@baikal.ru> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
4b9010d538
commit
ecd1c66476
|
@ -7923,18 +7923,37 @@ static void test_gettext(void)
|
||||||
if (0)
|
if (0)
|
||||||
{
|
{
|
||||||
r = SendMessageA( hwnd, WM_GETTEXT, 0x10, 0x1000);
|
r = SendMessageA( hwnd, WM_GETTEXT, 0x10, 0x1000);
|
||||||
ok( r == 0, "settext should return zero\n");
|
ok( r == 0, "WM_GETTEXT should return zero (%ld)\n", r );
|
||||||
|
|
||||||
r = SendMessageA( hwnd, WM_GETTEXT, 0x10000, 0);
|
r = SendMessageA( hwnd, WM_GETTEXT, 0x10000, 0);
|
||||||
ok( r == 0, "settext should return zero (%ld)\n", r);
|
ok( r == 0, "WM_GETTEXT should return zero (%ld)\n", r );
|
||||||
|
|
||||||
r = SendMessageA( hwnd, WM_GETTEXT, 0xff000000, 0x1000);
|
r = SendMessageA( hwnd, WM_GETTEXT, 0xff000000, 0x1000);
|
||||||
ok( r == 0, "settext should return zero (%ld)\n", r);
|
ok( r == 0, "WM_GETTEXT should return zero (%ld)\n", r );
|
||||||
|
|
||||||
r = SendMessageA( hwnd, WM_GETTEXT, 0x1000, 0xff000000);
|
r = SendMessageA( hwnd, WM_GETTEXT, 0x1000, 0xff000000);
|
||||||
ok( r == 0, "settext should return zero (%ld)\n", r);
|
ok( r == 0, "WM_GETTEXT should return zero (%ld)\n", r );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* GetWindowText doesn't crash */
|
||||||
|
r = GetWindowTextA( hwnd, (LPSTR)0x10, 0x1000 );
|
||||||
|
ok( r == 0, "GetWindowText should return zero (%ld)\n", r );
|
||||||
|
r = GetWindowTextA( hwnd, (LPSTR)0x10000, 0 );
|
||||||
|
ok( r == 0, "GetWindowText should return zero (%ld)\n", r );
|
||||||
|
r = GetWindowTextA( hwnd, (LPSTR)0xff000000, 0x1000 );
|
||||||
|
ok( r == 0, "GetWindowText should return zero (%ld)\n", r );
|
||||||
|
r = GetWindowTextA( hwnd, (LPSTR)0x1000, 0xff000000 );
|
||||||
|
ok( r == 0, "GetWindowText should return zero (%ld)\n", r );
|
||||||
|
|
||||||
|
r = GetWindowTextW( hwnd, (LPWSTR)0x10, 0x1000 );
|
||||||
|
ok( r == 0, "GetWindowText should return zero (%ld)\n", r );
|
||||||
|
r = GetWindowTextW( hwnd, (LPWSTR)0x10000, 0 );
|
||||||
|
ok( r == 0, "GetWindowText should return zero (%ld)\n", r );
|
||||||
|
r = GetWindowTextW( hwnd, (LPWSTR)0xff000000, 0x1000 );
|
||||||
|
ok( r == 0, "GetWindowText should return zero (%ld)\n", r );
|
||||||
|
r = GetWindowTextW( hwnd, (LPWSTR)0x1000, 0xff000000);
|
||||||
|
ok( r == 0, "GetWindowText should return zero (%ld)\n", r );
|
||||||
|
|
||||||
DestroyWindow(hwnd);
|
DestroyWindow(hwnd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -31,6 +31,7 @@
|
||||||
#include "win.h"
|
#include "win.h"
|
||||||
#include "controls.h"
|
#include "controls.h"
|
||||||
#include "winerror.h"
|
#include "winerror.h"
|
||||||
|
#include "wine/exception.h"
|
||||||
#include "wine/debug.h"
|
#include "wine/debug.h"
|
||||||
|
|
||||||
WINE_DEFAULT_DEBUG_CHANNEL(win);
|
WINE_DEFAULT_DEBUG_CHANNEL(win);
|
||||||
|
@ -2999,22 +3000,35 @@ LONG WINAPI DECLSPEC_HOTPATCH SetWindowLongW(
|
||||||
INT WINAPI GetWindowTextA( HWND hwnd, LPSTR lpString, INT nMaxCount )
|
INT WINAPI GetWindowTextA( HWND hwnd, LPSTR lpString, INT nMaxCount )
|
||||||
{
|
{
|
||||||
WCHAR *buffer;
|
WCHAR *buffer;
|
||||||
|
int ret = 0;
|
||||||
|
|
||||||
if (!lpString || nMaxCount <= 0) return 0;
|
if (!lpString || nMaxCount <= 0) return 0;
|
||||||
|
|
||||||
if (WIN_IsCurrentProcess( hwnd ))
|
__TRY
|
||||||
{
|
{
|
||||||
lpString[0] = 0;
|
lpString[0] = 0;
|
||||||
return (INT)SendMessageA( hwnd, WM_GETTEXT, nMaxCount, (LPARAM)lpString );
|
|
||||||
}
|
|
||||||
|
|
||||||
/* when window belongs to other process, don't send a message */
|
if (WIN_IsCurrentProcess( hwnd ))
|
||||||
if (!(buffer = HeapAlloc( GetProcessHeap(), 0, nMaxCount * sizeof(WCHAR) ))) return 0;
|
{
|
||||||
get_server_window_text( hwnd, buffer, nMaxCount );
|
ret = (INT)SendMessageA( hwnd, WM_GETTEXT, nMaxCount, (LPARAM)lpString );
|
||||||
if (!WideCharToMultiByte( CP_ACP, 0, buffer, -1, lpString, nMaxCount, NULL, NULL ))
|
}
|
||||||
lpString[nMaxCount-1] = 0;
|
else if ((buffer = HeapAlloc( GetProcessHeap(), 0, nMaxCount * sizeof(WCHAR) )))
|
||||||
HeapFree( GetProcessHeap(), 0, buffer );
|
{
|
||||||
return strlen(lpString);
|
/* when window belongs to other process, don't send a message */
|
||||||
|
get_server_window_text( hwnd, buffer, nMaxCount );
|
||||||
|
if (!WideCharToMultiByte( CP_ACP, 0, buffer, -1, lpString, nMaxCount, NULL, NULL ))
|
||||||
|
lpString[nMaxCount-1] = 0;
|
||||||
|
HeapFree( GetProcessHeap(), 0, buffer );
|
||||||
|
ret = strlen(lpString);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
__EXCEPT_PAGE_FAULT
|
||||||
|
{
|
||||||
|
ret = 0;
|
||||||
|
}
|
||||||
|
__ENDTRY
|
||||||
|
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -3047,17 +3061,32 @@ INT WINAPI InternalGetWindowText(HWND hwnd,LPWSTR lpString,INT nMaxCount )
|
||||||
*/
|
*/
|
||||||
INT WINAPI GetWindowTextW( HWND hwnd, LPWSTR lpString, INT nMaxCount )
|
INT WINAPI GetWindowTextW( HWND hwnd, LPWSTR lpString, INT nMaxCount )
|
||||||
{
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
if (!lpString || nMaxCount <= 0) return 0;
|
if (!lpString || nMaxCount <= 0) return 0;
|
||||||
|
|
||||||
if (WIN_IsCurrentProcess( hwnd ))
|
__TRY
|
||||||
{
|
{
|
||||||
lpString[0] = 0;
|
lpString[0] = 0;
|
||||||
return (INT)SendMessageW( hwnd, WM_GETTEXT, nMaxCount, (LPARAM)lpString );
|
|
||||||
}
|
|
||||||
|
|
||||||
/* when window belongs to other process, don't send a message */
|
if (WIN_IsCurrentProcess( hwnd ))
|
||||||
get_server_window_text( hwnd, lpString, nMaxCount );
|
{
|
||||||
return lstrlenW(lpString);
|
ret = (INT)SendMessageW( hwnd, WM_GETTEXT, nMaxCount, (LPARAM)lpString );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* when window belongs to other process, don't send a message */
|
||||||
|
get_server_window_text( hwnd, lpString, nMaxCount );
|
||||||
|
ret = lstrlenW(lpString);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
__EXCEPT_PAGE_FAULT
|
||||||
|
{
|
||||||
|
ret = 0;
|
||||||
|
}
|
||||||
|
__ENDTRY
|
||||||
|
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue