diff options
author | oharboe <oharboe> | 2009-08-16 11:37:03 +0000 |
---|---|---|
committer | Steve Bennett <steveb@workware.net.au> | 2010-10-15 11:01:11 +1000 |
commit | dea8dba726a2f11170efe7958fd5af8de1ae0c59 (patch) | |
tree | 3801968de15d607b2d7cb770684136ddbb0a90a0 | |
parent | c9020ce22a2f30a4b9edec824c60ce6ccc82e000 (diff) | |
download | jimtcl-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>
-rw-r--r-- | jim.c | 8 | ||||
-rw-r--r-- | jim.h | 3 |
2 files changed, 8 insertions, 3 deletions
@@ -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) { @@ -3,7 +3,7 @@ * Copyright 2005 Salvatore Sanfilippo <antirez@invece.org> * Copyright 2005 Clemens Hintze <c.hintze@gmx.net> * Copyright 2005 patthoyts - Pat Thoyts <patthoyts@users.sf.net> - * Copyright 2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com + * Copyright 2008 oharboe - �yvind Harboe - oyvind.harboe@zylin.com * Copyright 2008 Andrew Lunn <andrew@lunn.ch> * Copyright 2008 Duane Ellis <openocd@duaneellis.com> * Copyright 2008 Uwe Klein <uklein@klein-messgeraete.de> @@ -156,6 +156,7 @@ extern "C" { #define JIM_SUBST_NOVAR 1 /* don't perform variables substitutions */ #define JIM_SUBST_NOCMD 2 /* don't perform command substitutions */ #define JIM_SUBST_NOESC 4 /* don't perform escapes substitutions */ +#define JIM_SUBST_FLAG 128 /* flag to indicate that this is a real substition object */ /* Unused arguments generate annoying warnings... */ #define JIM_NOTUSED(V) ((void) V) |