Add checks for size overflow on list*n, list+list, tuple+tuple.

Will backport.
diff --git a/Objects/listobject.c b/Objects/listobject.c
index 64de38b..2cb08d3 100644
--- a/Objects/listobject.c
+++ b/Objects/listobject.c
@@ -391,6 +391,8 @@
 	}
 #define b ((PyListObject *)bb)
 	size = a->ob_size + b->ob_size;
+	if (size < 0)
+		return PyErr_NoMemory();
 	np = (PyListObject *) PyList_New(size);
 	if (np == NULL) {
 		return NULL;
@@ -419,6 +421,8 @@
 	if (n < 0)
 		n = 0;
 	size = a->ob_size * n;
+	if (size/a->ob_size != n)
+		return PyErr_NoMemory();
 	np = (PyListObject *) PyList_New(size);
 	if (np == NULL)
 		return NULL;
diff --git a/Objects/tupleobject.c b/Objects/tupleobject.c
index 6c2162a..3a8f072 100644
--- a/Objects/tupleobject.c
+++ b/Objects/tupleobject.c
@@ -330,6 +330,8 @@
 	}
 #define b ((PyTupleObject *)bb)
 	size = a->ob_size + b->ob_size;
+	if (size < 0)
+		return PyErr_NoMemory();
 	np = (PyTupleObject *) PyTuple_New(size);
 	if (np == NULL) {
 		return NULL;