diff options
author | hobbs <hobbs> | 2005-02-11 20:36:26 (GMT) |
---|---|---|
committer | hobbs <hobbs> | 2005-02-11 20:36:26 (GMT) |
commit | 998d1248fae5cf14659a82c9ddd29afa73f773c1 (patch) | |
tree | 6570a152d09b9f0750b202b79b21cda2f5c3cc20 /win/tkWinWm.c | |
parent | fa2eccae90e9ec0d0373bc4d443753b9a205262f (diff) | |
download | tk-998d1248fae5cf14659a82c9ddd29afa73f773c1.zip tk-998d1248fae5cf14659a82c9ddd29afa73f773c1.tar.gz tk-998d1248fae5cf14659a82c9ddd29afa73f773c1.tar.bz2 |
* win/tkWinWm.c (TkWinGetIcon): fix toplevel retrieval for
determining icon ref (potential crash). [Bug 1105738]
Diffstat (limited to 'win/tkWinWm.c')
-rw-r--r-- | win/tkWinWm.c | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/win/tkWinWm.c b/win/tkWinWm.c index 6551081..df0478b 100644 --- a/win/tkWinWm.c +++ b/win/tkWinWm.c @@ -12,7 +12,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkWinWm.c,v 1.95 2005/01/31 04:08:32 chengyemao Exp $ + * RCS: @(#) $Id: tkWinWm.c,v 1.96 2005/02/11 20:36:28 hobbs Exp $ */ #include "tkWinInt.h" @@ -1130,9 +1130,8 @@ WinSetIcon(interp, titlebaricon, tkw) *---------------------------------------------------------------------- */ HICON -TkWinGetIcon(Tk_Window tkw, DWORD iconsize) +TkWinGetIcon(Tk_Window tkwin, DWORD iconsize) { - TkWindow *winPtr; WmInfo *wmPtr; HICON icon; ThreadSpecificData *tsdPtr = (ThreadSpecificData *) @@ -1145,17 +1144,19 @@ TkWinGetIcon(Tk_Window tkw, DWORD iconsize) return GetIcon(tsdPtr->iconPtr, iconsize); } - if (Tk_WindowId(tkw) == None) { - Tk_MakeWindowExist(tkw); + /* ensure we operate on the toplevel, that has the icon refs */ + while (!Tk_IsTopLevel(tkwin)) { + tkwin = Tk_Parent(tkwin); + if (tkwin == NULL) { + return NULL; + } } - winPtr = (TkWindow *)tkw; - if (!(Tk_IsTopLevel(tkw))) { - winPtr = GetTopLevel(Tk_GetHWND(Tk_WindowId(tkw))); + if (Tk_WindowId(tkwin) == None) { + Tk_MakeWindowExist(tkwin); } - /* We must get the window's wrapper, not the window itself */ - wmPtr = winPtr->wmInfoPtr; + wmPtr = ((TkWindow *) tkwin)->wmInfoPtr; if (wmPtr->iconPtr != NULL) { /* * return window toplevel icon |