diff options
author | Raymond Hettinger <python@rcn.com> | 2007-01-08 18:05:53 (GMT) |
---|---|---|
committer | Raymond Hettinger <python@rcn.com> | 2007-01-08 18:05:53 (GMT) |
commit | 5b44cbe6d8f9c07f6ec0da1134dc3b49ee81a4e3 (patch) | |
tree | 4efa4e2a2a22f3dd84ff1ea07411d7363ac15fe0 | |
parent | f96725af8bf2a394b85104be13583ff091c6a634 (diff) | |
download | cpython-5b44cbe6d8f9c07f6ec0da1134dc3b49ee81a4e3.zip cpython-5b44cbe6d8f9c07f6ec0da1134dc3b49ee81a4e3.tar.gz cpython-5b44cbe6d8f9c07f6ec0da1134dc3b49ee81a4e3.tar.bz2 |
Fix zero-length corner case for iterating over a mutating deque.
-rw-r--r-- | Lib/test/test_deque.py | 6 | ||||
-rw-r--r-- | Misc/NEWS | 3 | ||||
-rw-r--r-- | Modules/collectionsmodule.c | 5 |
3 files changed, 11 insertions, 3 deletions
diff --git a/Lib/test/test_deque.py b/Lib/test/test_deque.py index a562922..35e1536 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 @@ -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 c1bd732..a0570cd 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)); |