summaryrefslogtreecommitdiffstats
path: root/generic/tkBind.c
diff options
context:
space:
mode:
authorhobbs <hobbs>2001-03-30 21:52:28 (GMT)
committerhobbs <hobbs>2001-03-30 21:52:28 (GMT)
commit9f2dfbf322e9a4ecc4f8ac4ecf77f4af08244179 (patch)
tree51c6a0f6b0a27cde4d65eade418c8b3954a8e6e7 /generic/tkBind.c
parent5fdf015039ce0bfd83572a4a43b4fa80fdf33435 (diff)
downloadtk-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.c14
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;
}