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.

svn path=/trunk/; revision=50956
This commit is contained in:
Timo Kreuzer 2011-03-02 13:23:13 +00:00
parent e12dbcd77d
commit 3d476667b6

View file

@ -4721,7 +4721,7 @@ LRESULT WINAPI EditWndProc_common( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lP
case WM_NCDESTROY:
result = EDIT_WM_NCDestroy(es);
es = NULL;
// es = NULL; reactos
#ifdef __REACTOS__
NtUserSetWindowFNID(hwnd, FNID_DESTROY);
#endif
@ -5009,7 +5009,9 @@ LRESULT WINAPI EditWndProc_common( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lP
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);