From dc20afb5c6334efe9a979d6ca4e683d35a5c11e1 Mon Sep 17 00:00:00 2001 From: dgp Date: Wed, 29 Jun 2011 21:34:11 +0000 Subject: 3341056 Correct segfault due to flaw in the 2011-06-17 commit. --- ChangeLog | 5 +++++ generic/ttk/ttkTrace.c | 2 +- tests/ttk/ttk.test | 19 ++++++++++++++++++- 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 5ed5095..b042078 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2011-06-29 Don Porter + + * generic/ttk/ttkTrace.c: [Bug 3341056] Correct segfault due to flaw + * tests/ttk/ttk.test: in the 2011-06-17 commit. + 2011-06-23 Don Porter * changes: Updated for 8.5.10 release. diff --git a/generic/ttk/ttkTrace.c b/generic/ttk/ttkTrace.c index f171f3d..8bc8519 100644 --- a/generic/ttk/ttkTrace.c +++ b/generic/ttk/ttkTrace.c @@ -136,7 +136,7 @@ void Ttk_UntraceVariable(Ttk_TraceHandle *h) * with removing is present. */ while ((cd = Tcl_VarTraceInfo(h->interp, Tcl_GetString(h->varnameObj), - 0, VarTraceProc, cd)) != NULL) { + TCL_GLOBAL_ONLY, VarTraceProc, cd)) != NULL) { if (cd == (ClientData) h) { break; } diff --git a/tests/ttk/ttk.test b/tests/ttk/ttk.test index 1eec180..5a982b6 100644 --- a/tests/ttk/ttk.test +++ b/tests/ttk/ttk.test @@ -560,12 +560,29 @@ test ttk-15.1 {Bug 3062331} -setup { } -body { set Y {} ttk::button .b -textvariable Y - trace variable Y u "destroy .b" + trace variable Y u "destroy .b; #" unset Y } -cleanup { destroy .b } -result {} +test ttk-15.2 {Bug 3341056} -setup { + proc foo {} { + destroy .lf + ttk::labelframe .lf + ttk::checkbutton .lf.cb -text xxx + } +} -body { + ttk::button .b -text xxx -command foo + .b invoke + .b invoke + .lf.cb invoke + destroy .b +} -cleanup { + rename foo {} + destroy .lf +} -result {} + ## Test ensemble processing: # # (See also: SF#2021443) -- cgit v0.12