From a227bf74d2fc5013fed3d3de025086c586bc950c Mon Sep 17 00:00:00 2001 From: Steve Bennett Date: Wed, 31 Jan 2024 08:09:00 +1000 Subject: xtrace: fix core dump if tracing Jim_EvalObjVector() Where a NULL script is pushed on the stack Fixes #290 Signed-off-by: Steve Bennett --- jim.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/jim.c b/jim.c index c8dc5ce..396c662 100644 --- a/jim.c +++ b/jim.c @@ -10714,13 +10714,18 @@ static int JimTraceCallback(Jim_Interp *interp, const char *type, int argc, Jim_ Jim_Obj *nargv[7]; Jim_Obj *traceCmdObj = interp->traceCmdObj; Jim_Obj *resultObj = Jim_GetResult(interp); + ScriptObj *script = NULL; + /* Where were we called from? */ - ScriptObj *script = JimGetScript(interp, interp->evalFrame->scriptObj); + /* This may be NULL for Jim_EvalObjVector() */ + if (interp->evalFrame->scriptObj) { + script = JimGetScript(interp, interp->evalFrame->scriptObj); + } nargv[0] = traceCmdObj; nargv[1] = Jim_NewStringObj(interp, type, -1); - nargv[2] = script->fileNameObj; - nargv[3] = Jim_NewIntObj(interp, script->linenr); + nargv[2] = script ? script->fileNameObj : interp->emptyObj; + nargv[3] = Jim_NewIntObj(interp, script ? script->linenr : 1); nargv[4] = resultObj; nargv[5] = argv[0]; nargv[6] = Jim_NewListObj(interp, argv + 1, argc - 1); @@ -10921,6 +10926,7 @@ int Jim_EvalObjVector(Jim_Interp *interp, int objc, Jim_Obj *const *objv) for (i = 0; i < objc; i++) Jim_IncrRefCount(objv[i]); + /* Note that we have no source for this command so push NULL as the scriptObj */ JimPushEvalFrame(interp, &frame, NULL); retcode = JimInvokeCommand(interp, objc, objv); -- cgit v1.1