Author: tkreuzer Date: Wed Mar 2 13:23:13 2011 New Revision: 50956
URL: http://svn.reactos.org/svn/reactos?rev=50956&view=rev Log: [USER32] Patch by Thomas Faber: When the Edit receives WM_KILLFOCUS, it will notify its parent (the ListView) of losing focus, which in turn will send WM_CLOSE to destroy the edit control. This will cause the edit to receive WM_DESTROY and free the EDITSTATE. When control returns to the WM_KILLFOCUS handler, this would call EDIT_UnlockBuffer on the now invalid EDITSTATE. Fix this by checking the validity of the EDITSTATE before calling EDIT_UnlockBuffer. Fixes explorer crash, when cancelling file renaming. See issue #5895 for more details.
Modified: trunk/reactos/dll/win32/user32/controls/edit.c
Modified: trunk/reactos/dll/win32/user32/controls/edit.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/user32/controls/e... ============================================================================== --- trunk/reactos/dll/win32/user32/controls/edit.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/user32/controls/edit.c [iso-8859-1] Wed Mar 2 13:23:13 2011 @@ -4721,7 +4721,7 @@
case WM_NCDESTROY: result = EDIT_WM_NCDestroy(es); - es = NULL; +// es = NULL; reactos #ifdef __REACTOS__ NtUserSetWindowFNID(hwnd, FNID_DESTROY); #endif @@ -5009,7 +5009,9 @@ break; }
- if (IsWindow(hwnd) && es) EDIT_UnlockBuffer(es, FALSE); + /* reactos: check GetWindowLong in case es has been destroyed during processing */ + if (IsWindow(hwnd) && es && GetWindowLongPtrW(hwnd, 0)) + EDIT_UnlockBuffer(es, FALSE);
TRACE("hwnd=%p msg=%x (%s) -- 0x%08lx\n", hwnd, msg, SPY_GetMsgName(msg, hwnd), result);