Don't allow comctl32 controls to access their infoPtr before it has
been allocated or after it has been freed.
diff --git a/dlls/comctl32/datetime.c b/dlls/comctl32/datetime.c
index 687af87..747d990 100644
--- a/dlls/comctl32/datetime.c
+++ b/dlls/comctl32/datetime.c
@@ -1164,6 +1164,7 @@
TRACE("\n");
COMCTL32_Free (infoPtr);
+ SetWindowLongA( hwnd, 0, 0 );
return 0;
}
@@ -1171,6 +1172,9 @@
static LRESULT WINAPI
DATETIME_WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
+ if (!DATETIME_GetInfoPtr(hwnd) && (uMsg != WM_CREATE))
+ return DefWindowProcA( hwnd, uMsg, wParam, lParam );
+
switch (uMsg)
{
diff --git a/dlls/comctl32/flatsb.c b/dlls/comctl32/flatsb.c
index 2d00fe5..0996c0a 100644
--- a/dlls/comctl32/flatsb.c
+++ b/dlls/comctl32/flatsb.c
@@ -195,6 +195,9 @@
static LRESULT WINAPI
FlatSB_WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
+ if (!FlatSB_GetInfoPtr(hwnd) && (uMsg != WM_CREATE))
+ return DefWindowProcA( hwnd, uMsg, wParam, lParam );
+
switch (uMsg)
{
case WM_CREATE:
diff --git a/dlls/comctl32/nativefont.c b/dlls/comctl32/nativefont.c
index 2521582..74332a1 100644
--- a/dlls/comctl32/nativefont.c
+++ b/dlls/comctl32/nativefont.c
@@ -55,6 +55,7 @@
/* free comboex info data */
COMCTL32_Free (infoPtr);
+ SetWindowLongA( hwnd, 0, 0 );
return 0;
}
@@ -64,6 +65,9 @@
static LRESULT WINAPI
NATIVEFONT_WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
+ if (!NATIVEFONT_GetInfoPtr(hwnd) && (uMsg != WM_CREATE))
+ return DefWindowProcA( hwnd, uMsg, wParam, lParam );
+
switch (uMsg)
{
diff --git a/dlls/comctl32/pager.c b/dlls/comctl32/pager.c
index a3f4c2f..38b69d1 100644
--- a/dlls/comctl32/pager.c
+++ b/dlls/comctl32/pager.c
@@ -1099,7 +1099,7 @@
PAGER_INFO *infoPtr = PAGER_GetInfoPtr (hwnd);
if (!infoPtr && (uMsg != WM_CREATE))
- return DefWindowProcA (hwnd, uMsg, wParam, lParam);
+ return DefWindowProcA (hwnd, uMsg, wParam, lParam);
switch (uMsg)
{
diff --git a/dlls/comctl32/toolbar.c b/dlls/comctl32/toolbar.c
index 4480f47..bde7d44 100644
--- a/dlls/comctl32/toolbar.c
+++ b/dlls/comctl32/toolbar.c
@@ -4266,20 +4266,8 @@
static LRESULT WINAPI
ToolbarWindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
-
- switch (uMsg)
- {
- case WM_DESTROY:
- return TOOLBAR_Destroy (hwnd, wParam, lParam);
-
- case WM_NCCREATE:
- return TOOLBAR_NCCreate (hwnd, wParam, lParam);
- }
-
- if (!TOOLBAR_GetInfoPtr (hwnd))
- {
- return DefWindowProcA (hwnd, uMsg, wParam, lParam);
- }
+ if (!TOOLBAR_GetInfoPtr(hwnd) && (uMsg != WM_NCCREATE))
+ return DefWindowProcA( hwnd, uMsg, wParam, lParam );
switch (uMsg)
{
@@ -4541,6 +4529,9 @@
case WM_CREATE:
return TOOLBAR_Create (hwnd, wParam, lParam);
+ case WM_DESTROY:
+ return TOOLBAR_Destroy (hwnd, wParam, lParam);
+
case WM_ERASEBKGND:
return TOOLBAR_EraseBackground (hwnd, wParam, lParam);
@@ -4574,6 +4565,9 @@
case WM_NCCALCSIZE:
return TOOLBAR_NCCalcSize (hwnd, wParam, lParam);
+ case WM_NCCREATE:
+ return TOOLBAR_NCCreate (hwnd, wParam, lParam);
+
case WM_NCPAINT:
return TOOLBAR_NCPaint (hwnd, wParam, lParam);