summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--generic/tkBind.c14
-rw-r--r--tests/bind.test24
2 files changed, 17 insertions, 21 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;
}
diff --git a/tests/bind.test b/tests/bind.test
index 06d3078..ad84ed5 100644
--- a/tests/bind.test
+++ b/tests/bind.test
@@ -7,7 +7,7 @@
# Copyright (c) 1998-1999 by Scriptics Corporation.
# All rights reserved.
#
-# RCS: @(#) $Id: bind.test,v 1.8 2000/08/03 20:36:17 ericm Exp $
+# RCS: @(#) $Id: bind.test,v 1.9 2001/03/30 21:52:28 hobbs Exp $
if {[lsearch [namespace children] ::tcltest] == -1} {
source [file join [pwd] [file dirname [info script]] defs.tcl]
@@ -1945,7 +1945,7 @@ test bind-22.2 {HandleEventGenerate} {
} {1 {bad window name/identifier "zzz"}}
test bind-22.3 {HandleEventGenerate} {
list [catch {event gen 47 <Control-v>} msg] $msg
-} {1 {window id "47" doesn't exist in this application}}
+} {1 {bad window name/identifier "47"}}
test bind-22.4 {HandleEventGenerate} {
setup
bind .b.f <Button> {set x "%s %b"}
@@ -2046,7 +2046,11 @@ test bind-22.16 {HandleEventGenerate} {
test bind-22.17 {HandleEventGenerate} {
list [catch {event gen . <Button> -when xyz} msg] $msg
} {1 {bad -when value "xyz": must be now, head, mark, or tail}}
-set i 18
+test bind-22.18 {HandleEventGenerate} {
+ # Bug 411307
+ list [catch {event gen . <a> -root 98765} msg] $msg
+} {1 {bad window name/identifier "98765"}}
+set i 19
foreach check {
{<Configure> %a {-above .xyz} {{1 {bad window path name ".xyz"}}}}
{<Configure> %a {-above .b} {[winfo id .b]}}
@@ -2673,22 +2677,8 @@ test bind-31.2 {MouseWheel events} {
set x
} {240 10 30}
-
destroy .b
# cleanup
::tcltest::cleanupTests
return
-
-
-
-
-
-
-
-
-
-
-
-
-