From dea8dba726a2f11170efe7958fd5af8de1ae0c59 Mon Sep 17 00:00:00 2001 From: oharboe Date: Sun, 16 Aug 2009 11:37:03 +0000 Subject: Fix crash in subst If an object is used in subst, then source, a crash will result Signed-off-by: Steve Bennett --- jim.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'jim.c') 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) { -- cgit v1.1