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) {

