diff options
author | hobbs <hobbs> | 2001-03-30 21:52:28 (GMT) |
---|---|---|
committer | hobbs <hobbs> | 2001-03-30 21:52:28 (GMT) |
commit | 9f2dfbf322e9a4ecc4f8ac4ecf77f4af08244179 (patch) | |
tree | 51c6a0f6b0a27cde4d65eade418c8b3954a8e6e7 /generic/tkBind.c | |
parent | 5fdf015039ce0bfd83572a4a43b4fa80fdf33435 (diff) | |
download | tk-9f2dfbf322e9a4ecc4f8ac4ecf77f4af08244179.zip tk-9f2dfbf322e9a4ecc4f8ac4ecf77f4af08244179.tar.gz tk-9f2dfbf322e9a4ecc4f8ac4ecf77f4af08244179.tar.bz2 |
* tests/bind.test (bind-22.18):
* generic/tkBind.c (NameToWindow): handled the error case where a
valid-looking but invalid identifier could be passed in certain
event generate options causing a crash. [Bug #411307]
Diffstat (limited to 'generic/tkBind.c')
-rw-r--r-- | generic/tkBind.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/generic/tkBind.c b/generic/tkBind.c index 71e5db1..d06d246 100644 --- a/generic/tkBind.c +++ b/generic/tkBind.c @@ -11,7 +11,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkBind.c,v 1.14 2000/11/22 01:49:37 ericm Exp $ + * RCS: @(#) $Id: tkBind.c,v 1.15 2001/03/30 21:52:28 hobbs Exp $ */ #include "tkPort.h" @@ -3716,7 +3716,7 @@ NameToWindow(interp, mainWin, objPtr, tkwinPtr) char *name; Tk_Window tkwin; int id; - + name = Tcl_GetStringFromObj(objPtr, NULL); if (name[0] == '.') { tkwin = Tk_NameToWindow(interp, name, mainWin); @@ -3725,12 +3725,18 @@ NameToWindow(interp, mainWin, objPtr, tkwinPtr) } *tkwinPtr = tkwin; } else { - if (TkpScanWindowId(NULL, name, &id) != TCL_OK) { + /* + * Check for the winPtr being valid, even if it looks ok to + * TkpScanWindowId. [Bug #411307] + */ + + if ((TkpScanWindowId(NULL, name, &id) != TCL_OK) || + ((*tkwinPtr = Tk_IdToWindow(Tk_Display(mainWin), (Window) id)) + == NULL)) { Tcl_AppendResult(interp, "bad window name/identifier \"", name, "\"", (char *) NULL); return TCL_ERROR; } - *tkwinPtr = Tk_IdToWindow(Tk_Display(mainWin), (Window) id); } return TCL_OK; } |