Module: wine Branch: master Commit: e72ed1c42123b0b1b6dc6a0eaae7e80215199927 URL: http://source.winehq.org/git/wine.git/?a=commit;h=e72ed1c42123b0b1b6dc6a0eaa...
Author: Nikolay Sivov bunglehead@gmail.com Date: Tue Oct 20 21:56:44 2009 +0400
user32/edit: Properly clean up on failure inside WM_NCCREATE handler.
---
dlls/user32/edit.c | 14 +++++++++++--- 1 files changed, 11 insertions(+), 3 deletions(-)
diff --git a/dlls/user32/edit.c b/dlls/user32/edit.c index 437862b..38622cc 100644 --- a/dlls/user32/edit.c +++ b/dlls/user32/edit.c @@ -4599,16 +4599,16 @@ static LRESULT EDIT_WM_NCCreate(HWND hwnd, LPCREATESTRUCTW lpcs, BOOL unicode)
alloc_size = ROUND_TO_GROW((es->buffer_size + 1) * sizeof(WCHAR)); if(!(es->hloc32W = LocalAlloc(LMEM_MOVEABLE | LMEM_ZEROINIT, alloc_size))) - return FALSE; + goto cleanup; es->buffer_size = LocalSize(es->hloc32W)/sizeof(WCHAR) - 1;
if (!(es->undo_text = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, (es->buffer_size + 1) * sizeof(WCHAR)))) - return FALSE; + goto cleanup; es->undo_buffer_size = es->buffer_size;
if (es->style & ES_MULTILINE) if (!(es->first_line_def = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(LINEDEF)))) - return FALSE; + goto cleanup; es->line_count = 1;
/* @@ -4628,6 +4628,14 @@ static LRESULT EDIT_WM_NCCreate(HWND hwnd, LPCREATESTRUCTW lpcs, BOOL unicode) SetWindowLongW(hwnd, GWL_STYLE, es->style & ~WS_BORDER);
return TRUE; + +cleanup: + SetWindowLongPtrW(es->hwndSelf, 0, 0); + HeapFree(GetProcessHeap(), 0, es->first_line_def); + HeapFree(GetProcessHeap(), 0, es->undo_text); + if (es->hloc32W) LocalFree(es->hloc32W); + HeapFree(GetProcessHeap(), 0, es); + return FALSE; }