summaryrefslogtreecommitdiffstats
path: root/generic/tclVar.c
diff options
context:
space:
mode:
Diffstat (limited to 'generic/tclVar.c')
-rw-r--r--generic/tclVar.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/generic/tclVar.c b/generic/tclVar.c
index 550d7a6..32ee631 100644
--- a/generic/tclVar.c
+++ b/generic/tclVar.c
@@ -3097,7 +3097,10 @@ ArrayForNRCmd(
* loop) don't vanish.
*/
- varListObj = TclListObjCopy(NULL, objv[1]);
+ varListObj = TclDuplicatePureObj(interp, objv[1], &tclListType.objType);
+ if (!varListObj) {
+ return TCL_ERROR;
+ }
scriptObj = objv[3];
Tcl_IncrRefCount(scriptObj);
@@ -3176,7 +3179,10 @@ ArrayForLoopCallback(
goto arrayfordone;
}
- TclListObjGetElementsM(NULL, varListObj, &varc, &varv);
+ result = TclListObjGetElementsM(NULL, varListObj, &varc, &varv);
+ if (result != TCL_OK) {
+ goto arrayfordone;
+ }
if (Tcl_ObjSetVar2(interp, varv[0], NULL, keyObj,
TCL_LEAVE_ERR_MSG) == NULL) {
result = TCL_ERROR;
@@ -4067,7 +4073,11 @@ ArraySetCmd(
* the loop and return an error.
*/
- copyListObj = TclListObjCopy(NULL, arrayElemObj);
+ copyListObj =
+ TclDuplicatePureObj(interp, arrayElemObj, &tclListType.objType);
+ if (!copyListObj) {
+ return TCL_ERROR;
+ }
for (i=0 ; i<elemLen ; i+=2) {
Var *elemVarPtr = TclLookupArrayElement(interp, arrayNameObj,
elemPtrs[i], TCL_LEAVE_ERR_MSG, "set", 1, 1, varPtr, -1);