summaryrefslogtreecommitdiffstats
path: root/generic
diff options
context:
space:
mode:
authordgp <dgp@users.sourceforge.net>2011-04-21 13:24:25 (GMT)
committerdgp <dgp@users.sourceforge.net>2011-04-21 13:24:25 (GMT)
commit842312f3957922d5d3255fd5d2a511220f26c748 (patch)
tree0c3fcde0a02a3747b4b81d374da8af259c859890 /generic
parent0931d1b4cbfc3fca3e3bd7e227bd7632853c1384 (diff)
parent3dee0582a464245f4ebfb6cc887e198566d3f035 (diff)
downloadtcl-842312f3957922d5d3255fd5d2a511220f26c748.zip
tcl-842312f3957922d5d3255fd5d2a511220f26c748.tar.gz
tcl-842312f3957922d5d3255fd5d2a511220f26c748.tar.bz2
Make sure SetFooFromAny routines react reasonably when passed a NULL interp.
Diffstat (limited to 'generic')
-rw-r--r--generic/tclCompile.c8
-rw-r--r--generic/tclIO.c3
-rw-r--r--generic/tclIndexObj.c2
-rw-r--r--generic/tclListObj.c14
-rw-r--r--generic/tclNamesp.c7
-rw-r--r--generic/tclObj.c4
-rw-r--r--generic/tclProc.c6
7 files changed, 35 insertions, 9 deletions
diff --git a/generic/tclCompile.c b/generic/tclCompile.c
index f2c4fdc..2d8d58c 100644
--- a/generic/tclCompile.c
+++ b/generic/tclCompile.c
@@ -454,12 +454,13 @@ Tcl_ObjType tclByteCodeType = {
* generate an byte code internal form for the Tcl object "objPtr" by
* 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.
+ * on the compilation results before generating byte 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
@@ -616,6 +617,9 @@ SetByteCodeFromAny(
* compiled. Must not be NULL. */
Tcl_Obj *objPtr) /* The object to make a ByteCode object. */
{
+ if (interp == NULL) {
+ return TCL_ERROR;
+ }
(void) TclSetByteCodeFromAny(interp, objPtr, NULL, (ClientData) NULL);
return TCL_OK;
}
diff --git a/generic/tclIO.c b/generic/tclIO.c
index 2ece2f4..0f01baa 100644
--- a/generic/tclIO.c
+++ b/generic/tclIO.c
@@ -10741,6 +10741,9 @@ SetChannelFromAny(
ChannelState *statePtr;
Interp *interpPtr;
+ if (interp == NULL) {
+ return TCL_ERROR;
+ }
if (objPtr->typePtr == &tclChannelType) {
/*
* The channel is valid until any call to DetachChannel occurs.
diff --git a/generic/tclIndexObj.c b/generic/tclIndexObj.c
index af29363..ce25a12 100644
--- a/generic/tclIndexObj.c
+++ b/generic/tclIndexObj.c
@@ -303,9 +303,11 @@ SetIndexFromAny(
Tcl_Interp *interp, /* Used for error reporting if not NULL. */
register Tcl_Obj *objPtr) /* The object to convert. */
{
+ if (interp) {
Tcl_SetObjResult(interp, Tcl_NewStringObj(
"can't convert value to index except via Tcl_GetIndexFromObj API",
-1));
+ }
return TCL_ERROR;
}
diff --git a/generic/tclListObj.c b/generic/tclListObj.c
index 9544337..751cc13 100644
--- a/generic/tclListObj.c
+++ b/generic/tclListObj.c
@@ -1693,9 +1693,11 @@ SetListFromAny(
Tcl_DictObjSize(NULL, objPtr, &size);
listRepPtr = NewListIntRep(size > 0 ? 2*size : 1, NULL);
if (!listRepPtr) {
- Tcl_SetResult(interp,
- "insufficient memory to allocate list working space",
- TCL_STATIC);
+ if (interp) {
+ Tcl_SetResult(interp,
+ "insufficient memory to allocate list working space",
+ TCL_STATIC);
+ }
return TCL_ERROR;
}
listRepPtr->elemCount = 2 * size;
@@ -1753,8 +1755,10 @@ SetListFromAny(
listRepPtr = NewListIntRep(estCount, NULL);
if (!listRepPtr) {
- Tcl_SetObjResult(interp, Tcl_NewStringObj(
- "Not enough memory to allocate the list internal rep", -1));
+ if (interp) {
+ Tcl_SetObjResult(interp, Tcl_NewStringObj(
+ "Not enough memory to allocate the list internal rep", -1));
+ }
return TCL_ERROR;
}
elemPtrs = &listRepPtr->elements;
diff --git a/generic/tclNamesp.c b/generic/tclNamesp.c
index 16f14e9..aed28db 100644
--- a/generic/tclNamesp.c
+++ b/generic/tclNamesp.c
@@ -4681,8 +4681,13 @@ SetNsNameFromAny(
const char *dummy;
Namespace *nsPtr, *dummy1Ptr, *dummy2Ptr;
register ResolvedNsName *resNamePtr;
- const char *name = TclGetString(objPtr);
+ const char *name;
+ if (interp == NULL) {
+ return TCL_ERROR;
+ }
+
+ name = TclGetString(objPtr);
TclGetNamespaceForQualName(interp, name, NULL, TCL_FIND_ONLY_NS,
&nsPtr, &dummy1Ptr, &dummy2Ptr, &dummy);
diff --git a/generic/tclObj.c b/generic/tclObj.c
index d084692..15c8276 100644
--- a/generic/tclObj.c
+++ b/generic/tclObj.c
@@ -4264,6 +4264,10 @@ SetCmdNameFromAny(
Namespace *currNsPtr;
register ResolvedCmdName *resPtr;
+ if (interp == NULL) {
+ return TCL_ERROR;
+ }
+
/*
* Find the Command structure, if any, that describes the command called
* "name". Build a ResolvedCmdName that holds a cached pointer to this
diff --git a/generic/tclProc.c b/generic/tclProc.c
index b8a5e6d..dd12901 100644
--- a/generic/tclProc.c
+++ b/generic/tclProc.c
@@ -2447,12 +2447,16 @@ SetLambdaFromAny(
int objc, result;
Proc *procPtr;
+ if (interp == NULL) {
+ return TCL_ERROR;
+ }
+
/*
* Convert objPtr to list type first; if it cannot be converted, or if its
* length is not 2, then it cannot be converted to lambdaType.
*/
- result = TclListObjGetElements(interp, objPtr, &objc, &objv);
+ result = TclListObjGetElements(NULL, objPtr, &objc, &objv);
if ((result != TCL_OK) || ((objc != 2) && (objc != 3))) {
TclNewLiteralStringObj(errPtr, "can't interpret \"");
Tcl_AppendObjToObj(errPtr, objPtr);