From 3b07c851f84792689f97fc9036a08d40c4d1d3c2 Mon Sep 17 00:00:00 2001 From: Eric Pouech Date: Sat, 12 Jun 2010 21:55:05 +0200 Subject: [PATCH] winhelp: Avoid accessing a window in global window list after it has been freed. --- programs/winhlp32/macro.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/programs/winhlp32/macro.c b/programs/winhlp32/macro.c index f75b63d01c2..ca0fc8c54d2 100644 --- a/programs/winhlp32/macro.c +++ b/programs/winhlp32/macro.c @@ -281,24 +281,32 @@ static void CALLBACK MACRO_CheckItem(LPCSTR str) static void CALLBACK MACRO_CloseSecondarys(void) { WINHELP_WINDOW *win; + WINHELP_WINDOW *next; WINE_TRACE("()\n"); - for (win = Globals.win_list; win; win = win->next) + for (win = Globals.win_list; win; win = next) + { + next = win->next; if (lstrcmpi(win->info->name, "main")) WINHELP_ReleaseWindow(win); + } } static void CALLBACK MACRO_CloseWindow(LPCSTR lpszWindow) { WINHELP_WINDOW *win; + WINHELP_WINDOW *next; WINE_TRACE("(\"%s\")\n", lpszWindow); if (!lpszWindow || !lpszWindow[0]) lpszWindow = "main"; - for (win = Globals.win_list; win; win = win->next) + for (win = Globals.win_list; win; win = next) + { + next = win->next; if (!lstrcmpi(win->info->name, lpszWindow)) WINHELP_ReleaseWindow(win); + } } static void CALLBACK MACRO_Compare(LPCSTR str)