aboutsummaryrefslogtreecommitdiff
path: root/jim.c
diff options
context:
space:
mode:
authoroharboe <oharboe>2009-08-16 11:37:03 +0000
committerSteve Bennett <steveb@workware.net.au>2010-10-15 11:01:11 +1000
commitdea8dba726a2f11170efe7958fd5af8de1ae0c59 (patch)
tree3801968de15d607b2d7cb770684136ddbb0a90a0 /jim.c
parentc9020ce22a2f30a4b9edec824c60ce6ccc82e000 (diff)
downloadjimtcl-dea8dba726a2f11170efe7958fd5af8de1ae0c59.zip
jimtcl-dea8dba726a2f11170efe7958fd5af8de1ae0c59.tar.gz
jimtcl-dea8dba726a2f11170efe7958fd5af8de1ae0c59.tar.bz2
Fix crash in subst
If an object is used in subst, then source, a crash will result Signed-off-by: Steve Bennett <steveb@workware.net.au>
Diffstat (limited to 'jim.c')
-rw-r--r--jim.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/jim.c b/jim.c
index 03ed0ec..07cb1d9 100644
--- a/jim.c
+++ b/jim.c
@@ -2976,6 +2976,7 @@ int SetScriptFromAny(Jim_Interp *interp, struct Jim_Obj *objPtr)
script->commands = 0;
script->token = NULL;
script->cmdStruct = NULL;
+ script->substFlags = 0;
script->inUse = 1;
/* Try to get information about filename / line number */
if (objPtr->typePtr == &sourceObjType) {
@@ -3080,12 +3081,15 @@ int SetScriptFromAny(Jim_Interp *interp, struct Jim_Obj *objPtr)
Jim_FreeIntRep(interp, objPtr);
Jim_SetIntRepPtr(objPtr, script);
objPtr->typePtr = &scriptObjType;
+
return JIM_OK;
}
ScriptObj *Jim_GetScript(Jim_Interp *interp, Jim_Obj *objPtr)
{
- if (objPtr->typePtr != &scriptObjType) {
+ struct ScriptObj *script = Jim_GetIntRepPtr(objPtr);
+
+ if (objPtr->typePtr != &scriptObjType || script->substFlags) {
SetScriptFromAny(interp, objPtr);
}
return (ScriptObj*) Jim_GetIntRepPtr(objPtr);
@@ -10998,7 +11002,7 @@ static int Jim_DictCoreCommand(Jim_Interp *interp, int argc,
static int Jim_SubstCoreCommand(Jim_Interp *interp, int argc,
Jim_Obj *const *argv)
{
- int i, flags = 0;
+ int i, flags = JIM_SUBST_FLAG;
Jim_Obj *objPtr;
if (argc < 2) {