Nikolay Sivov : user32: Make GetWindowLong() fail for some values on 64-bit.

Alexandre Julliard julliard at winehq.org
Fri Aug 23 09:31:23 CDT 2019


Module: wine
Branch: stable
Commit: 0c76e18c369d8becaef96eef77d0ca1cc30b1411
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=0c76e18c369d8becaef96eef77d0ca1cc30b1411

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>
(cherry picked from commit c2f4e2b338906918c77634631ff82f106570e02e)
Signed-off-by: Michael Stefaniuc <mstefani 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 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 );
+    }
 }
 
 




More information about the wine-cvs mailing list