Added patch to fix DialogBoxParam return value when control creation fails.

This commit is contained in:
Sebastian Lackner
2016-05-14 23:46:34 +02:00
parent dc4a52734f
commit 1acbf46fcf
4 changed files with 131 additions and 0 deletions

View File

@@ -0,0 +1,48 @@
From 2bee693b0105133d7414a6602ce4c0cd155f5cf8 Mon Sep 17 00:00:00 2001
From: Dmitry Timoshkov <dmitry@baikal.ru>
Date: Fri, 13 May 2016 16:13:47 +0800
Subject: user32/tests: Test DialogBoxParam using a dialog template with
invalid control class.
---
dlls/user32/tests/dialog.c | 6 ++++++
dlls/user32/tests/resource.rc | 6 ++++++
2 files changed, 12 insertions(+)
diff --git a/dlls/user32/tests/dialog.c b/dlls/user32/tests/dialog.c
index a6cd1be..470ffdc 100644
--- a/dlls/user32/tests/dialog.c
+++ b/dlls/user32/tests/dialog.c
@@ -1222,6 +1222,12 @@ static void test_DialogBoxParamA(void)
"got %d, expected ERROR_RESOURCE_NAME_NOT_FOUND\n",GetLastError());
SetLastError(0xdeadbeef);
+ ret = DialogBoxParamA(GetModuleHandleA(NULL), "TEST_DIALOG_INVALID_CLASS", 0, DestroyDlgWinProc, 0);
+todo_wine
+ ok(ret == -1, "DialogBoxParamA returned %ld, expected -1\n", ret);
+ ok(GetLastError() == 0, "got %d\n", GetLastError());
+
+ SetLastError(0xdeadbeef);
ret = DefDlgProcA(0, WM_ERASEBKGND, 0, 0);
ok(ret == 0, "DefDlgProcA returned %ld, expected 0\n", ret);
ok(GetLastError() == ERROR_INVALID_WINDOW_HANDLE ||
diff --git a/dlls/user32/tests/resource.rc b/dlls/user32/tests/resource.rc
index f116b85..756e38f 100644
--- a/dlls/user32/tests/resource.rc
+++ b/dlls/user32/tests/resource.rc
@@ -124,6 +124,12 @@ FONT 8, "MS Shell Dlg"
EDITTEXT 200,4,4,50,14
}
+TEST_DIALOG_INVALID_CLASS DIALOG 0, 0, 60, 30
+STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
+{
+ CONTROL "",1,"wine invalid class",WS_CHILD,0,0,40,10
+}
+
IDD_DIALOG DIALOG 0, 0, 186, 95
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Dialog"
--
2.8.0

View File

@@ -0,0 +1,61 @@
From 7f3ff2cf69b045541c2ffa6646b8051d78f7e970 Mon Sep 17 00:00:00 2001
From: Dmitry Timoshkov <dmitry@baikal.ru>
Date: Fri, 13 May 2016 16:19:40 +0800
Subject: user32: DialogBoxParam should return -1 when dialog control creation
fails.
For bugs #40025 and #40609.
---
dlls/user32/dialog.c | 8 ++++++--
dlls/user32/tests/dialog.c | 1 -
2 files changed, 6 insertions(+), 3 deletions(-)
diff --git a/dlls/user32/dialog.c b/dlls/user32/dialog.c
index 9cb4b8d..02b407b 100644
--- a/dlls/user32/dialog.c
+++ b/dlls/user32/dialog.c
@@ -837,11 +837,13 @@ INT_PTR WINAPI DialogBoxParamA( HINSTANCE hInst, LPCSTR name,
HRSRC hrsrc;
LPCDLGTEMPLATEA ptr;
+ if (owner && !IsWindow(owner)) return 0;
+
if (!(hrsrc = FindResourceA( hInst, name, (LPSTR)RT_DIALOG ))) return -1;
if (!(ptr = LoadResource(hInst, hrsrc))) return -1;
hwnd = DIALOG_CreateIndirect( hInst, ptr, owner, dlgProc, param, FALSE, &owner );
if (hwnd) return DIALOG_DoDialogBox( hwnd, owner );
- return 0;
+ return -1;
}
@@ -855,11 +857,13 @@ INT_PTR WINAPI DialogBoxParamW( HINSTANCE hInst, LPCWSTR name,
HRSRC hrsrc;
LPCDLGTEMPLATEW ptr;
+ if (owner && !IsWindow(owner)) return 0;
+
if (!(hrsrc = FindResourceW( hInst, name, (LPWSTR)RT_DIALOG ))) return -1;
if (!(ptr = LoadResource(hInst, hrsrc))) return -1;
hwnd = DIALOG_CreateIndirect( hInst, ptr, owner, dlgProc, param, TRUE, &owner );
if (hwnd) return DIALOG_DoDialogBox( hwnd, owner );
- return 0;
+ return -1;
}
diff --git a/dlls/user32/tests/dialog.c b/dlls/user32/tests/dialog.c
index 470ffdc..60819c3 100644
--- a/dlls/user32/tests/dialog.c
+++ b/dlls/user32/tests/dialog.c
@@ -1223,7 +1223,6 @@ static void test_DialogBoxParamA(void)
SetLastError(0xdeadbeef);
ret = DialogBoxParamA(GetModuleHandleA(NULL), "TEST_DIALOG_INVALID_CLASS", 0, DestroyDlgWinProc, 0);
-todo_wine
ok(ret == -1, "DialogBoxParamA returned %ld, expected -1\n", ret);
ok(GetLastError() == 0, "got %d\n", GetLastError());
--
2.8.0

View File

@@ -0,0 +1 @@
Fixes: [40025] DialogBoxParam should return -1 when dialog control creation fails