From 4a96ede4a93fe75a322f20b2b761871e0aa7abd7 Mon Sep 17 00:00:00 2001 From: dkf Date: Tue, 13 Jan 2004 09:45:29 +0000 Subject: Fix shared object panics. [Bug 875395] --- ChangeLog | 8 ++++++++ generic/tclIndexObj.c | 9 ++++++--- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 76af10e..e6d0be0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2004-01-13 Donal K. Fellows + + * generic/tclIndexObj.c (Tcl_GetIndexFromObjStruct, Tcl_WrongNumArgs): + Create fresh objects instead of using the one currently in the + interpreter, which isn't guaranteed to be fresh and unshared. The + cost for the core will be minimal because of the object cache, and + this fixes [Bug 875395]. + 2004-01-09 Vince Darley * generic/tclIOUtil.c: fix to infinite loop in diff --git a/generic/tclIndexObj.c b/generic/tclIndexObj.c index 5891aeb..60d4931 100644 --- a/generic/tclIndexObj.c +++ b/generic/tclIndexObj.c @@ -10,7 +10,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclIndexObj.c,v 1.16 2002/02/28 05:11:25 dgp Exp $ + * RCS: @(#) $Id: tclIndexObj.c,v 1.16.2.1 2004/01/13 09:45:30 dkf Exp $ */ #include "tclInt.h" @@ -271,7 +271,9 @@ Tcl_GetIndexFromObjStruct(interp, objPtr, tablePtr, offset, msg, flags, * Produce a fancy error message. */ int count; - resultPtr = Tcl_GetObjResult(interp); + + TclNewObj(resultPtr); + Tcl_SetObjResult(interp, resultPtr); Tcl_AppendStringsToObj(resultPtr, (numAbbrev > 1) ? "ambiguous " : "bad ", msg, " \"", key, "\": must be ", STRING_AT(tablePtr,offset,0), (char*)NULL); @@ -450,7 +452,8 @@ Tcl_WrongNumArgs(interp, objc, objv, message) int i; register IndexRep *indexRep; - objPtr = Tcl_GetObjResult(interp); + TclNewObj(objPtr); + Tcl_SetObjResult(interp, objPtr); Tcl_AppendToObj(objPtr, "wrong # args: should be \"", -1); for (i = 0; i < objc; i++) { /* -- cgit v0.12