[PATCH 2/2] Avoid accessing a window in global window list after it has been freed

Eric Pouech eric.pouech at orange.fr
Sat Jun 12 14:55:05 CDT 2010




A+
---

 programs/winhlp32/macro.c |   12 ++++++++++--
 1 files changed, 10 insertions(+), 2 deletions(-)


diff --git a/programs/winhlp32/macro.c b/programs/winhlp32/macro.c
index f75b63d..ca0fc8c 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)






More information about the wine-patches mailing list