Module: wine Branch: stable Commit: 0c76e18c369d8becaef96eef77d0ca1cc30b1411 URL: https://source.winehq.org/git/wine.git/?a=commit;h=0c76e18c369d8becaef96eef7... Author: Nikolay Sivov <nsivov(a)codeweavers.com> Date: Fri Mar 1 00:53:43 2019 +0300 user32: Make GetWindowLong() fail for some values on 64-bit. Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> (cherry picked from commit c2f4e2b338906918c77634631ff82f106570e02e) Signed-off-by: Michael Stefaniuc <mstefani(a)winehq.org> --- dlls/user32/tests/win.c | 4 ---- dlls/user32/win.c | 28 ++++++++++++++++++++++++++-- 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/dlls/user32/tests/win.c b/dlls/user32/tests/win.c index 617fbe3..40427eb 100644 --- a/dlls/user32/tests/win.c +++ b/dlls/user32/tests/win.c @@ -6301,7 +6301,6 @@ static void test_set_window_long_size(void) /* GWLP_WNDPROC */ SetLastError(0xdeadbeef); wnd_proc = (WNDPROC)(LONG_PTR)GetWindowLongA(hwnd, GWLP_WNDPROC); -todo_wine ok(!wnd_proc && GetLastError() == ERROR_INVALID_INDEX, "Unexpected window proc.\n"); wnd_proc = (WNDPROC)GetWindowLongPtrA(hwnd, GWLP_WNDPROC); @@ -6382,12 +6381,10 @@ todo_wine SetLastError(0xdeadbeef); ret = GetWindowLongA(hwnd, GWLP_HINSTANCE); -todo_wine ok(!ret && GetLastError() == ERROR_INVALID_INDEX, "Unexpected instance %#x.\n", ret); SetLastError(0xdeadbeef); ret = GetWindowLongW(hwnd, GWLP_HINSTANCE); -todo_wine ok(!ret && GetLastError() == ERROR_INVALID_INDEX, "Unexpected instance %#x.\n", ret); SetLastError(0xdeadbeef); @@ -6406,7 +6403,6 @@ todo_wine /* GWLP_HWNDPARENT */ SetLastError(0xdeadbeef); ret = GetWindowLongA(hwnd, GWLP_HWNDPARENT); -todo_wine ok(!ret && GetLastError() == ERROR_INVALID_INDEX, "Unexpected parent window %#x.\n", ret); SetLastError(0xdeadbeef); diff --git a/dlls/user32/win.c b/dlls/user32/win.c index d08b180..eb01242 100644 --- a/dlls/user32/win.c +++ b/dlls/user32/win.c @@ -2693,7 +2693,19 @@ WORD WINAPI GetWindowWord( HWND hwnd, INT offset ) */ LONG WINAPI GetWindowLongA( HWND hwnd, INT offset ) { - return WIN_GetWindowLong( hwnd, offset, sizeof(LONG), FALSE ); + switch (offset) + { +#ifdef _WIN64 + case GWLP_WNDPROC: + case GWLP_HINSTANCE: + case GWLP_HWNDPARENT: + WARN( "Invalid offset %d\n", offset ); + SetLastError( ERROR_INVALID_INDEX ); + return 0; +#endif + default: + return WIN_GetWindowLong( hwnd, offset, sizeof(LONG), FALSE ); + } } @@ -2702,7 +2714,19 @@ LONG WINAPI GetWindowLongA( HWND hwnd, INT offset ) */ LONG WINAPI GetWindowLongW( HWND hwnd, INT offset ) { - return WIN_GetWindowLong( hwnd, offset, sizeof(LONG), TRUE ); + switch (offset) + { +#ifdef _WIN64 + case GWLP_WNDPROC: + case GWLP_HINSTANCE: + case GWLP_HWNDPARENT: + WARN( "Invalid offset %d\n", offset ); + SetLastError( ERROR_INVALID_INDEX ); + return 0; +#endif + default: + return WIN_GetWindowLong( hwnd, offset, sizeof(LONG), TRUE ); + } }