diff --git a/Lib/test/test_itertools.py b/Lib/test/test_itertools.py
index 3c7dd49..bde7ab6 100644
--- a/Lib/test/test_itertools.py
+++ b/Lib/test/test_itertools.py
@@ -139,7 +139,7 @@
 
     @test_support.bigaddrspacetest
     def test_combinations_overflow(self):
-        with self.assertRaises(OverflowError):
+        with self.assertRaises((OverflowError, MemoryError)):
             combinations("AA", 2**29)
 
     @test_support.impl_detail("tuple reuse is specific to CPython")
@@ -215,7 +215,7 @@
 
     @test_support.bigaddrspacetest
     def test_combinations_with_replacement_overflow(self):
-        with self.assertRaises(OverflowError):
+        with self.assertRaises((OverflowError, MemoryError)):
             combinations_with_replacement("AA", 2**30)
 
     @test_support.impl_detail("tuple reuse is specific to CPython")
@@ -286,10 +286,8 @@
 
     @test_support.bigaddrspacetest
     def test_permutations_overflow(self):
-        with self.assertRaises(OverflowError):
+        with self.assertRaises((OverflowError, MemoryError)):
             permutations("A", 2**30)
-        with self.assertRaises(OverflowError):
-            permutations("A", 2, 2**30)
 
     @test_support.impl_detail("tuple reuse is specific to CPython")
     def test_permutations_tuple_reuse(self):
@@ -711,8 +709,8 @@
 
     @test_support.bigaddrspacetest
     def test_product_overflow(self):
-        with self.assertRaises(OverflowError):
-            product(["a"]*(2**16), repeat=2**16)
+        with self.assertRaises((OverflowError, MemoryError)):
+            product(*(['ab']*2**5), repeat=2**25)
 
     @test_support.impl_detail("tuple reuse is specific to CPython")
     def test_product_tuple_reuse(self):
diff --git a/Modules/itertoolsmodule.c b/Modules/itertoolsmodule.c
index b63975c..e5b2b74 100644
--- a/Modules/itertoolsmodule.c
+++ b/Modules/itertoolsmodule.c
@@ -1847,15 +1847,14 @@
         nargs = 0;
     } else {
         nargs = PyTuple_GET_SIZE(args);
-        if (repeat > PY_SSIZE_T_MAX/sizeof(Py_ssize_t) ||
-            nargs > PY_SSIZE_T_MAX/(repeat * sizeof(Py_ssize_t))) {
+        if ((size_t)nargs > PY_SSIZE_T_MAX/sizeof(Py_ssize_t)/repeat) {
             PyErr_SetString(PyExc_OverflowError, "repeat argument too large");
             return NULL;
         }
     }
     npools = nargs * repeat;
 
-    indices = PyMem_Malloc(npools * sizeof(Py_ssize_t));
+    indices = PyMem_New(Py_ssize_t, npools);
     if (indices == NULL) {
         PyErr_NoMemory();
         goto error;
@@ -2102,11 +2101,7 @@
         goto error;
     }
 
-    if (r > PY_SSIZE_T_MAX/sizeof(Py_ssize_t)) {
-        PyErr_SetString(PyExc_OverflowError, "r is too big");
-        goto error;
-    }
-    indices = PyMem_Malloc(r * sizeof(Py_ssize_t));
+    indices = PyMem_New(Py_ssize_t, r);
     if (indices == NULL) {
         PyErr_NoMemory();
         goto error;
@@ -2355,11 +2350,7 @@
         goto error;
     }
 
-    if (r > PY_SSIZE_T_MAX/sizeof(Py_ssize_t)) {
-        PyErr_SetString(PyExc_OverflowError, "r is too big");
-        goto error;
-    }
-    indices = PyMem_Malloc(r * sizeof(Py_ssize_t));
+    indices = PyMem_New(Py_ssize_t, r);
     if (indices == NULL) {
         PyErr_NoMemory();
         goto error;
@@ -2612,13 +2603,8 @@
         goto error;
     }
 
-    if (n > PY_SSIZE_T_MAX/sizeof(Py_ssize_t) ||
-        r > PY_SSIZE_T_MAX/sizeof(Py_ssize_t)) {
-        PyErr_SetString(PyExc_OverflowError, "parameters too large");
-        goto error;
-    }
-    indices = PyMem_Malloc(n * sizeof(Py_ssize_t));
-    cycles = PyMem_Malloc(r * sizeof(Py_ssize_t));
+    indices = PyMem_New(Py_ssize_t, n);
+    cycles = PyMem_New(Py_ssize_t, r);
     if (indices == NULL || cycles == NULL) {
         PyErr_NoMemory();
         goto error;
