From 841ef6ebb93cc50cc4a8afe483dfca33f4253cce Mon Sep 17 00:00:00 2001 From: James Abbatiello Date: Mon, 12 Feb 2001 03:42:23 +0000 Subject: [PATCH] Don't allow comctl32 controls to access their infoPtr before it has been allocated or after it has been freed. --- dlls/comctl32/datetime.c | 4 ++++ dlls/comctl32/flatsb.c | 3 +++ dlls/comctl32/nativefont.c | 4 ++++ dlls/comctl32/pager.c | 2 +- dlls/comctl32/toolbar.c | 22 ++++++++-------------- 5 files changed, 20 insertions(+), 15 deletions(-) diff --git a/dlls/comctl32/datetime.c b/dlls/comctl32/datetime.c index 687af87054b..747d990dc63 100644 --- a/dlls/comctl32/datetime.c +++ b/dlls/comctl32/datetime.c @@ -1164,6 +1164,7 @@ DATETIME_Destroy (HWND hwnd, WPARAM wParam, LPARAM lParam) TRACE("\n"); COMCTL32_Free (infoPtr); + SetWindowLongA( hwnd, 0, 0 ); return 0; } @@ -1171,6 +1172,9 @@ DATETIME_Destroy (HWND hwnd, WPARAM wParam, LPARAM lParam) 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 2d00fe59cbc..0996c0ad7a4 100644 --- a/dlls/comctl32/flatsb.c +++ b/dlls/comctl32/flatsb.c @@ -195,6 +195,9 @@ FlatSB_Destroy (HWND hwnd, WPARAM wParam, LPARAM lParam) 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 2521582ecd0..74332a18903 100644 --- a/dlls/comctl32/nativefont.c +++ b/dlls/comctl32/nativefont.c @@ -55,6 +55,7 @@ NATIVEFONT_Destroy (HWND hwnd, WPARAM wParam, LPARAM lParam) /* free comboex info data */ COMCTL32_Free (infoPtr); + SetWindowLongA( hwnd, 0, 0 ); return 0; } @@ -64,6 +65,9 @@ NATIVEFONT_Destroy (HWND hwnd, WPARAM wParam, LPARAM lParam) 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 a3f4c2fbb81..38b69d10d6d 100644 --- a/dlls/comctl32/pager.c +++ b/dlls/comctl32/pager.c @@ -1099,7 +1099,7 @@ PAGER_WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) 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 4480f47631a..bde7d44a662 100644 --- a/dlls/comctl32/toolbar.c +++ b/dlls/comctl32/toolbar.c @@ -4266,20 +4266,8 @@ TOOLBAR_StyleChanged (HWND hwnd, INT nType, LPSTYLESTRUCT lpStyle) 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 @@ ToolbarWindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) 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 @@ ToolbarWindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) 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); -- 2.11.4.GIT