diff --git a/Lib/test/test_deque.py b/Lib/test/test_deque.py --- a/Lib/test/test_deque.py +++ b/Lib/test/test_deque.py @@ -304,6 +304,11 @@ s.insert(i, 'Z') self.assertEqual(list(d), s) + def test_insert_bug_26194(self): + d = deque(range(10), maxlen=10) + with self.assertRaises(IndexError): + d.insert(0, None) + def test_imul(self): for n in (-10, -1, 0, 1, 2, 10, 1000): d = deque() diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -1089,6 +1089,11 @@ if (!PyArg_ParseTuple(args, "nO:insert", &index, &value)) return NULL; + if (deque->maxlen == Py_SIZE(deque)) { + PyErr_SetString(PyExc_IndexError, + "cannot insert new value, deque is already at its maximum length"); + return NULL; + } if (index >= n) return deque_append(deque, value); if (index <= -n || index == 0)