Nikolay Sivov : user32: Make GetWindowLong() fail for some values on 64-bit.
Alexandre Julliard
julliard at winehq.org
Fri Mar 1 16:42:10 CST 2019
Module: wine
Branch: master
Commit: c2f4e2b338906918c77634631ff82f106570e02e
URL: https://source.winehq.org/git/wine.git/?a=commit;h=c2f4e2b338906918c77634631ff82f106570e02e
Author: Nikolay Sivov <nsivov at 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 at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at 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 d9a8e85..639eef4 100644
--- a/dlls/user32/tests/win.c
+++ b/dlls/user32/tests/win.c
@@ -6346,7 +6346,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);
@@ -6427,12 +6426,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);
@@ -6451,7 +6448,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 f5ac867..0bb9fd9 100644
--- a/dlls/user32/win.c
+++ b/dlls/user32/win.c
@@ -2690,7 +2690,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 );
+ }
}
@@ -2699,7 +2711,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 );
+ }
}
More information about the wine-cvs
mailing list