Paul TBBle Hampson : winefile: Don't use child after it has been freed.
Alexandre Julliard
julliard at winehq.org
Tue Feb 3 09:13:27 CST 2009
Module: wine
Branch: master
Commit: c09f1357bccbdf25ab7b46d508c27fad5801bac4
URL: http://source.winehq.org/git/wine.git/?a=commit;h=c09f1357bccbdf25ab7b46d508c27fad5801bac4
Author: Paul TBBle Hampson <Paul.Hampson at Pobox.com>
Date: Tue Feb 3 09:39:32 2009 +1100
winefile: Don't use child after it has been freed.
If winefile is unable to create a window, it frees the child pointer.
However, it then proceeds to use the child pointer.
---
programs/winefile/winefile.c | 17 ++++++++++++-----
1 files changed, 12 insertions(+), 5 deletions(-)
diff --git a/programs/winefile/winefile.c b/programs/winefile/winefile.c
index aefe7bd..0193c7b 100644
--- a/programs/winefile/winefile.c
+++ b/programs/winefile/winefile.c
@@ -4706,7 +4706,7 @@ static void InitInstance(HINSTANCE hinstance)
}
-static void show_frame(HWND hwndParent, int cmdshow, LPCTSTR path)
+static BOOL show_frame(HWND hwndParent, int cmdshow, LPCTSTR path)
{
static const TCHAR sMDICLIENT[] = {'M','D','I','C','L','I','E','N','T','\0'};
@@ -4718,7 +4718,7 @@ static void show_frame(HWND hwndParent, int cmdshow, LPCTSTR path)
CLIENTCREATESTRUCT ccs;
if (Globals.hMainWnd)
- return;
+ return TRUE;
opts = load_registry_settings();
hMenuFrame = LoadMenu(Globals.hInstance, MAKEINTRESOURCE(IDM_WINEFILE));
@@ -4796,8 +4796,10 @@ static void show_frame(HWND hwndParent, int cmdshow, LPCTSTR path)
child->pos.rcNormalPosition.right = 320;
child->pos.rcNormalPosition.bottom = 280;
- if (!create_child_window(child))
+ if (!create_child_window(child)) {
HeapFree(GetProcessHeap(), 0, child);
+ return FALSE;
+ }
SetWindowPlacement(child->hwnd, &child->pos);
@@ -4807,7 +4809,7 @@ static void show_frame(HWND hwndParent, int cmdshow, LPCTSTR path)
UpdateWindow(Globals.hMainWnd);
- if (path && path[0])
+ if (child->hwnd && path && path[0])
{
int index,count;
TCHAR drv[_MAX_DRIVE+1], dir[_MAX_DIR], name[_MAX_FNAME], ext[_MAX_EXT];
@@ -4835,6 +4837,7 @@ static void show_frame(HWND hwndParent, int cmdshow, LPCTSTR path)
}
}
}
+ return TRUE;
}
static void ExitInstance(void)
@@ -4888,7 +4891,11 @@ static int winefile_main(HINSTANCE hinstance, int cmdshow, LPCTSTR path)
InitInstance(hinstance);
- show_frame(0, cmdshow, path);
+ if( !show_frame(0, cmdshow, path) )
+ {
+ ExitInstance();
+ return 1;
+ }
while(GetMessage(&msg, 0, 0, 0)) {
if (Globals.hmdiclient && TranslateMDISysAccel(Globals.hmdiclient, &msg))
More information about the wine-cvs
mailing list