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 | |
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]
-rw-r--r-- | generic/tkBind.c | 14 | ||||
-rw-r--r-- | tests/bind.test | 24 |
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 - - - - - - - - - - - - - |