From 3dee0582a464245f4ebfb6cc887e198566d3f035 Mon Sep 17 00:00:00 2001 From: dgp Date: Thu, 21 Apr 2011 12:58:31 +0000 Subject: Make sure SetFooFromAny routines react reasonably when passed a NULL interp. --- ChangeLog | 7 +++++++ generic/tclCompile.c | 7 +++++-- generic/tclIndexObj.c | 2 ++ generic/tclNamesp.c | 4 ++++ generic/tclObj.c | 4 ++++ 5 files changed, 22 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 4572003..c88efd1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2011-04-21 Don Porter + + * generic/tclCompile.c: Make sure SetFooFromAny routines react + * generic/tclIndexObj.c: reasonably when passed a NULL interp. + * generic/tclNamesp.c: + * generic/tclObj.c: + 2011-04-21 Jan Nijtmans * generic/tcl.h: fix for [Bug 3288345]: Wrong Tcl_StatBuf diff --git a/generic/tclCompile.c b/generic/tclCompile.c index 660a1f2..0b1a3ff 100644 --- a/generic/tclCompile.c +++ b/generic/tclCompile.c @@ -333,12 +333,12 @@ Tcl_ObjType tclByteCodeType = { * compiling its string representation. This function also takes * a hook procedure that will be invoked to perform any needed post * processing on the compilation results before generating byte - * codes. + * codes. interp is compilation context and may not be NULL. * * Results: * The return value is a standard Tcl object result. If an error occurs * during compilation, an error message is left in the interpreter's - * result unless "interp" is NULL. + * result. * * Side effects: * Frees the old internal representation. If no error occurs, then the @@ -515,6 +515,9 @@ SetByteCodeFromAny(interp, objPtr) * being compiled. Must not be NULL. */ Tcl_Obj *objPtr; /* The object to make a ByteCode object. */ { + if (interp == NULL) { + return TCL_ERROR; + } return TclSetByteCodeFromAny(interp, objPtr, (CompileHookProc *) NULL, (ClientData) NULL); } diff --git a/generic/tclIndexObj.c b/generic/tclIndexObj.c index 9d8679c..79fc262 100644 --- a/generic/tclIndexObj.c +++ b/generic/tclIndexObj.c @@ -308,9 +308,11 @@ SetIndexFromAny(interp, objPtr) Tcl_Interp *interp; /* Used for error reporting if not NULL. */ register Tcl_Obj *objPtr; /* The object to convert. */ { + if (interp) { Tcl_AppendToObj(Tcl_GetObjResult(interp), "can't convert value to index except via Tcl_GetIndexFromObj API", -1); + } return TCL_ERROR; } diff --git a/generic/tclNamesp.c b/generic/tclNamesp.c index 4130c66..77352a1 100644 --- a/generic/tclNamesp.c +++ b/generic/tclNamesp.c @@ -3913,6 +3913,10 @@ SetNsNameFromAny(interp, objPtr) Namespace *nsPtr, *dummy1Ptr, *dummy2Ptr; register ResolvedNsName *resNamePtr; + if (interp == NULL) { + return TCL_ERROR; + } + /* * Get the string representation. Make it up-to-date if necessary. */ diff --git a/generic/tclObj.c b/generic/tclObj.c index 43f0d2e..7b9bb61 100644 --- a/generic/tclObj.c +++ b/generic/tclObj.c @@ -3597,6 +3597,10 @@ SetCmdNameFromAny(interp, objPtr) Namespace *currNsPtr; register ResolvedCmdName *resPtr; + if (interp == NULL) { + return TCL_ERROR; + } + /* * Get "objPtr"s string representation. Make it up-to-date if necessary. */ -- cgit v0.12