From: Raymond Hettinger Date: Mon, 8 Jan 2007 18:09:20 +0000 (+0000) Subject: Fix zero-length corner case for iterating over a mutating deque. X-Git-Tag: v2.6a1~2307 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=51c2f6cd180df4acd4eec6317b46ef38a2bebe16;p=python Fix zero-length corner case for iterating over a mutating deque. --- 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/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));