From 58cb8ad3864ad86b210a76a59cd8fe360ee99884 Mon Sep 17 00:00:00 2001 From: dkf Date: Mon, 15 Dec 2008 23:26:58 +0000 Subject: Fix [Bug 2431847] --- ChangeLog | 87 +++++++++++++++++++++++++++------------------------- generic/tclExecute.c | 7 +++-- tests/dict.test | 8 ++++- 3 files changed, 57 insertions(+), 45 deletions(-) diff --git a/ChangeLog b/ChangeLog index 14708bc..c2af525 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,23 +1,27 @@ +2008-12-15 Donal K. Fellows + + * generic/tclExecute.c (TEBC:INST_DICT_GET): Make sure that the result + is empty when generating an error message. [Bug 2431847] + 2008-12-12 Jan Nijtmans - * library/clock.tcl (ProcessPosixTimeZone): Fix time change - in Eastern Europe (not 3:00 but 4:00 local time) [Bug 2207436] + * library/clock.tcl (ProcessPosixTimeZone): Fix time change in Eastern + Europe (not 3:00 but 4:00 local time) [Bug 2207436] 2008-12-11 Andreas Kupries * generic/tclIO.c (SetChannelFromAny and related): Modified the * tests/io.test: internal representation of the tclChannelType to - contain not only the ChannelState pointer, but also a reference to - the interpreter it was made in. Invalidate and recompute the - internal representation when it is used in a different interpreter - (Like cmdName intrep's). Added testcase. [Bug 2407783]. + contain not only the ChannelState pointer, but also a reference to the + interpreter it was made in. Invalidate and recompute the internal + representation when it is used in a different interpreter (like + cmdName intrep's). Added testcase. [Bug 2407783] 2008-12-11 Jan Nijtmans - * library/clock.tcl (ProcessPosixTimeZone): Fallback to - European time zone DST rules, when the timezone is - between 0 and -12 [Bug 2207436]. - * tests/clock.test (clock-52.[23]): Test cases for [Bug 2207436] + * library/clock.tcl (ProcessPosixTimeZone): Fallback to European time + zone DST rules, when the timezone is between 0 and -12. [Bug 2207436] + * tests/clock.test (clock-52.[23]): Test cases. 2008-12-10 Kevin B. Kenny @@ -27,20 +31,19 @@ * generic/tclPathObj.c (Tcl_FSGetNormalizedPath): Added another flag value TCLPATH_NEEDNORM to mark those intreps which need more - complete normalization attention for correct results. [Bug 2385549] + complete normalization attention for correct results. [Bug 2385549] 2008-12-03 Don Porter - * generic/tclFileName.c (DoGlob): One of the - Tcl_FSMatchInDirectory() calls did not have its return code checked. - This caused error messages returned by some Tcl_Filesystem drivers - to be swallowed. + * generic/tclFileName.c (DoGlob): One of the Tcl_FSMatchInDirectory + calls did not have its return code checked. This caused error messages + returned by some Tcl_Filesystem drivers to be swallowed. 2008-12-02 Andreas Kupries * generic/tclIO.c (TclFinalizeIOSubsystem): Replaced Alexandre - Ferrieux's first patch for [Bug 2270477] with a gentler version, - also supplied by him. + Ferrieux's first patch for [Bug 2270477] with a gentler version, also + supplied by him. 2008-12-01 Don Porter @@ -48,18 +51,18 @@ 2008-11-30 Kevin B. Kenny - * library/clock.tcl (format, ParseClockScanFormat): Added a - [string map] to get rid of namespace delimiters before caching a - scan or format procedure [Bug 2362156]. - * tests/clock.test (clock-64.[12]): Added test cases for the bug - that was tickled by a namespace delimiter inside a format string. + * library/clock.tcl (format, ParseClockScanFormat): Added a [string + map] to get rid of namespace delimiters before caching a scan or + format procedure. [Bug 2362156] + * tests/clock.test (clock-64.[12]): Added test cases for the bug that + was tickled by a namespace delimiter inside a format string. 2008-11-25 Andreas Kupries * generic/tclIO.c (TclFinalizeIOSubsystem): Applied Alexandre - Ferrieux's patch for [Bug 2270477] to prevent infinite looping - during finalization of channels not bound to interpreters. + Ferrieux's patch for [Bug 2270477] to prevent infinite looping during + finalization of channels not bound to interpreters. 2008-08-23 Andreas Kupries @@ -92,15 +95,15 @@ 2008-11-04 Jeff Hobbs - * generic/tclPort.h: remove the ../win/ header dir as the build - system already has it, and it confuses builds when used with - private headers installed. + * generic/tclPort.h: remove the ../win/ header dir as the build system + already has it, and it confuses builds when used with private headers + installed. 2008-10-24 Pat Thoyts * library/http/http.tcl: Backported a fix for reading HTTP-like - protocols that used to work and were broken with http 2.7. Now - http 2.7.2 + protocols that used to work and were broken with http 2.7. Now http + 2.7.2 2008-10-23 Don Porter @@ -118,14 +121,14 @@ 2008-10-19 Don Porter * generic/tclProc.c: Reset -level and -code values to defaults - after they are used. [Bug 2152286]. + after they are used. [Bug 2152286] 2008-10-16 Don Porter * library/init.tcl: Revised [unknown] so that it carefully - preserves the state of the ::errorInfo and ::errorCode variables - at the start of auto-loading and restores that state before the - autoloaded command is evaluated. [Bug 2140628] + preserves the state of the ::errorInfo and ::errorCode variables at + the start of auto-loading and restores that state before the + autoloaded command is evaluated. [Bug 2140628] 2008-10-10 Don Porter @@ -147,7 +150,7 @@ * generic/tclTrace.c: Corrected handling of errors returned by variable traces so that the errorInfo value contains the original - error message. [Bug 2151707] + error message. [Bug 2151707] * generic/tclVar.c: Revised implementation of TclObjVarErrMsg so that error message construction does not disturb an existing @@ -155,9 +158,10 @@ 2008-10-06 Jan Nijtmans - * tclWinTest.c: Fix compiler warning when compiling this file with mingw gcc: - tclWinTest.c:706: warning: dereferencing type-punned pointer will break - strict-aliasing rules + * tclWinTest.c: Fix compiler warning when compiling this file with + mingw gcc: + tclWinTest.c:706: warning: dereferencing type-punned pointer will + break strict-aliasing rules * generic/tclLoad.c: Make sure that any library which doesn't have an unloadproc is only really unloaded when no library code is executed yet. [Bug 2059262] @@ -169,11 +173,10 @@ 2008-10-05 Kevin B, Kenny - * libtommath/bn_mp_sqrt.c (bn_mp_sqrt): Handle the case where - * tests/expr.test (expr-47.13): a number's square root - is between n< diff --git a/generic/tclExecute.c b/generic/tclExecute.c index 985a867..2800376 100644 --- a/generic/tclExecute.c +++ b/generic/tclExecute.c @@ -13,7 +13,7 @@ * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclExecute.c,v 1.369.2.4 2008/08/04 04:48:14 dgp Exp $ + * RCS: @(#) $Id: tclExecute.c,v 1.369.2.5 2008/12/15 23:26:59 dkf Exp $ */ #include "tclInt.h" @@ -6678,7 +6678,10 @@ TclExecuteByteCode( "%u => ERROR reading leaf dictionary key \"%s\": ", opnd, O2S(dictPtr)), Tcl_GetObjResult(interp)); } else { - /*Tcl_ResetResult(interp);*/ + Tcl_Obj *tmpObj; + + TclNewObj(tmpObj); + Tcl_SetObjResult(interp, tmpObj); Tcl_AppendResult(interp, "key \"", TclGetString(OBJ_AT_TOS), "\" not known in dictionary", NULL); TRACE_WITH_OBJ(("%u => ERROR ", opnd), Tcl_GetObjResult(interp)); diff --git a/tests/dict.test b/tests/dict.test index cc861b4..5b08996 100644 --- a/tests/dict.test +++ b/tests/dict.test @@ -9,7 +9,7 @@ # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # -# RCS: @(#) $Id: dict.test,v 1.24.2.1 2008/05/07 10:39:40 dkf Exp $ +# RCS: @(#) $Id: dict.test,v 1.24.2.2 2008/12/15 23:26:59 dkf Exp $ if {[lsearch [namespace children] ::tcltest] == -1} { package require tcltest 2 @@ -113,6 +113,12 @@ test dict-3.13 {dict get command} { test dict-3.14 {dict get command} { list [catch {dict get {a b c d} a c} msg] $msg } {1 {missing value to go with key}} +test dict-3.15 {compiled dict get error cleanliness - Bug 2431847} -body { + apply {{} { + dict set a(z) b c + dict get $a(z) d + }} +} -returnCodes error -result {key "d" not known in dictionary} test dict-4.1 {dict replace command} { getOrder [dict replace {a b c d}] a c -- cgit v0.12