From c9460f40ff148c46d7f52e7b5d7d7d16f32d64e1 Mon Sep 17 00:00:00 2001 From: dgp Date: Wed, 6 Oct 2004 16:08:57 +0000 Subject: * generic/tclBasic.c: * generic/tclBinary.c: * generic/tclCmdAH.c: * generic/tclCmdIL.c: * generic/tclCmdMZ.c: * generic/tclCompExpr.c: * generic/tclDictObj.c: * generic/tclEncoding.c: * generic/tclExecute.c: * generic/tclFCmd.c: * generic/tclHistory.c: * generic/tclIndexObj.c: * generic/tclInterp.c: * generic/tclIO.c: * generic/tclIOCmd.c: * generic/tclNamesp.c: * generic/tclObj.c: * generic/tclPkg.c: * generic/tclResult.c: * generic/tclScan.c: * generic/tclTimer.c: * generic/tclTrace.c: * generic/tclUtil.c: * generic/tclVar.c: * unix/tclUnixFCmd.c: * unix/tclUnixPipe.c: It is a poor practice to directly set or append to the value of the objResult of an interp, because that value might be shared, and in that circumstance a Tcl_Panic() will be the result. Searched for example of this practice and replaced with safer alternatives, often using the Tcl_AppendResult() routine that dkf just rehabilitated. --- ChangeLog | 2 ++ unix/tclUnixFCmd.c | 11 ++++------- unix/tclUnixPipe.c | 7 ++++--- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/ChangeLog b/ChangeLog index 4ad351b..1b25644 100644 --- a/ChangeLog +++ b/ChangeLog @@ -34,6 +34,8 @@ * generic/tclTrace.c: * generic/tclUtil.c: * generic/tclVar.c: + * unix/tclUnixFCmd.c: + * unix/tclUnixPipe.c: It is a poor practice to directly set or append to the value of the objResult of an interp, because that value might be shared, and in that circumstance a Tcl_Panic() will be the diff --git a/unix/tclUnixFCmd.c b/unix/tclUnixFCmd.c index d6282d1..f0a69b7 100644 --- a/unix/tclUnixFCmd.c +++ b/unix/tclUnixFCmd.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: tclUnixFCmd.c,v 1.38 2004/09/03 10:59:43 dkf Exp $ + * RCS: @(#) $Id: tclUnixFCmd.c,v 1.39 2004/10/06 16:08:57 dgp Exp $ * * Portions of this code were derived from NetBSD source code which has * the following copyright notice: @@ -1483,8 +1483,7 @@ SetPermissionsAttribute(interp, objIndex, fileName, attributePtr) if (GetModeFromPermString(NULL, modeStringPtr, &newMode) != TCL_OK) { if (interp != NULL) { - Tcl_AppendStringsToObj(Tcl_GetObjResult(interp), - "unknown permission string format \"", + Tcl_AppendResult(interp, "unknown permission string format \"", modeStringPtr, "\"", (char *) NULL); } return TCL_ERROR; @@ -1495,8 +1494,7 @@ SetPermissionsAttribute(interp, objIndex, fileName, attributePtr) result = chmod(native, newMode); /* INTL: Native. */ if (result != 0) { if (interp != NULL) { - Tcl_AppendStringsToObj(Tcl_GetObjResult(interp), - "could not set permissions for file \"", + Tcl_AppendResult(interp, "could not set permissions for file \"", Tcl_GetString(fileName), "\": ", Tcl_PosixError(interp), (char *) NULL); } @@ -1974,8 +1972,7 @@ SetReadOnlyAttribute(interp, objIndex, fileName, attributePtr) result = chflags(native, statBuf.st_flags); /* INTL: Native. */ if (result != 0) { if (interp != NULL) { - Tcl_AppendStringsToObj(Tcl_GetObjResult(interp), - "could not set flags for file \"", + Tcl_AppendResult(interp, "could not set flags for file \"", Tcl_GetString(fileName), "\": ", Tcl_PosixError(interp), (char *) NULL); } diff --git a/unix/tclUnixPipe.c b/unix/tclUnixPipe.c index 77d1f8b..ee8bacc 100644 --- a/unix/tclUnixPipe.c +++ b/unix/tclUnixPipe.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: tclUnixPipe.c,v 1.25 2004/06/08 19:18:39 dgp Exp $ + * RCS: @(#) $Id: tclUnixPipe.c,v 1.26 2004/10/06 16:08:57 dgp Exp $ */ #include "tclInt.h" @@ -1225,7 +1225,7 @@ Tcl_PidObjCmd(dummy, interp, objc, objv) return TCL_ERROR; } if (objc == 1) { - Tcl_SetLongObj(Tcl_GetObjResult(interp), (long) getpid()); + Tcl_SetObjResult(interp, Tcl_NewLongObj((long) getpid())); } else { chan = Tcl_GetChannel(interp, Tcl_GetString(objv[1]), NULL); if (chan == (Tcl_Channel) NULL) { @@ -1236,11 +1236,12 @@ Tcl_PidObjCmd(dummy, interp, objc, objv) return TCL_OK; } pipePtr = (PipeState *) Tcl_GetChannelInstanceData(chan); - resultPtr = Tcl_GetObjResult(interp); + resultPtr = Tcl_NewObj(); for (i = 0; i < pipePtr->numPids; i++) { longObjPtr = Tcl_NewLongObj((long) TclpGetPid(pipePtr->pidPtr[i])); Tcl_ListObjAppendElement(NULL, resultPtr, longObjPtr); } + Tcl_SetObjResult(interp, resultPtr); } return TCL_OK; } -- cgit v0.12