Index: ../generic/tclListObj.c ================================================================== --- ../generic/tclListObj.c +++ ../generic/tclListObj.c @@ -853,12 +853,15 @@ */ count = numElems - first; } if (objc > LIST_MAX - (numElems - count)) { - Tcl_SetObjResult(interp, Tcl_ObjPrintf( - "max length of a Tcl list (%d elements) exceeded", LIST_MAX)); + if (interp != NULL) { + Tcl_SetObjResult(interp, Tcl_ObjPrintf( + "max length of a Tcl list (%d elements) exceeded", + LIST_MAX)); + } return TCL_ERROR; } isShared = (listRepPtr->refCount > 1); numRequired = numElems - count + objc; /* Known <= LIST_MAX */ Index: ../generic/tclListObj.c ================================================================== --- ../generic/tclListObj.c +++ ../generic/tclListObj.c @@ -844,15 +844,12 @@ if (first >= numElems) { first = numElems; /* So we'll insert after last element. */ } if (count < 0) { count = 0; - } else if (numElems < first+count || first+count < 0) { - /* - * The 'first+count < 0' condition here guards agains integer - * overflow in determining 'first+count' - */ + } else if (first > INT_MAX - count /* Handle integer overflow */ + || numElems < first+count) { count = numElems - first; } if (objc > LIST_MAX - (numElems - count)) { if (interp != NULL) {