diff options
author | hobbs <hobbs> | 2005-02-11 20:34:53 (GMT) |
---|---|---|
committer | hobbs <hobbs> | 2005-02-11 20:34:53 (GMT) |
commit | d4159c07943ed7e784782c9fa621a039632e57f0 (patch) | |
tree | 92488d16cdc683054b57543fc0481601d097cb88 /win/tkWinWm.c | |
parent | a545a81323625e0180c45d7b6d846789bcd988ff (diff) | |
download | tk-d4159c07943ed7e784782c9fa621a039632e57f0.zip tk-d4159c07943ed7e784782c9fa621a039632e57f0.tar.gz tk-d4159c07943ed7e784782c9fa621a039632e57f0.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 8fd60a9..de56e6e 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.54.2.17 2005/01/04 01:28:51 hobbs Exp $ + * RCS: @(#) $Id: tkWinWm.c,v 1.54.2.18 2005/02/11 20:35:09 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 |