summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Lib/test/test_deque.py6
-rw-r--r--Misc/NEWS3
-rw-r--r--Modules/collectionsmodule.c5
3 files changed, 11 insertions, 3 deletions
diff --git a/Lib/test/test_deque.py b/Lib/test/test_deque.py
index a562922993..35e1536532 100644
--- a/Lib/test/test_deque.py
+++ b/Lib/test/test_deque.py
@@ -396,6 +396,12 @@ class TestVariousIteratorArgs(unittest.TestCase):
d.pop()
self.assertRaises(RuntimeError, it.next)
+ def test_runtime_error_on_empty_deque(self):
+ d = deque()
+ it = iter(d)
+ d.append(10)
+ self.assertRaises(RuntimeError, it.next)
+
class Deque(deque):
pass
diff --git a/Misc/NEWS b/Misc/NEWS
index 76ed61e835..4df89dade9 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -129,6 +129,9 @@ Extension Modules
- Added support for linking the bsddb module against BerkeleyDB 4.5.x.
+- Modifying an empty deque during iteration now raises RuntimeError
+ instead of StopIteration.
+
Library
-------
diff --git a/Modules/collectionsmodule.c b/Modules/collectionsmodule.c
index c1bd732b32..a0570cde37 100644
--- a/Modules/collectionsmodule.c
+++ b/Modules/collectionsmodule.c
@@ -911,15 +911,14 @@ dequeiter_next(dequeiterobject *it)
{
PyObject *item;
- if (it->counter == 0)
- return NULL;
-
if (it->deque->state != it->state) {
it->counter = 0;
PyErr_SetString(PyExc_RuntimeError,
"deque mutated during iteration");
return NULL;
}
+ if (it->counter == 0)
+ return NULL;
assert (!(it->b == it->deque->rightblock &&
it->index > it->deque->rightindex));