python/nondist/sandbox/collections dequemodule.c, 1.5, 1.6 test_deque.py, 1.3, 1.4

Update of /cvsroot/python/python/nondist/sandbox/collections In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv29890 Modified Files: dequemodule.c test_deque.py Log Message: Protect the iterator from changes in the underlying data. Index: dequemodule.c =================================================================== RCS file: /cvsroot/python/python/nondist/sandbox/collections/dequemodule.c,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** dequemodule.c 27 Jan 2004 14:41:30 -0000 1.5 --- dequemodule.c 27 Jan 2004 15:04:24 -0000 1.6 *************** *** 441,444 **** --- 441,445 ---- block *b; dequeobject *deque; + int len; } dequeiterobject; *************** *** 457,460 **** --- 458,462 ---- Py_INCREF(deque); it->deque = deque; + it->len = deque->len; return (PyObject *)it; } *************** *** 474,477 **** --- 476,486 ---- return NULL; + if (it->len != it->deque->len) { + it->len = -1; /* Make this state sticky */ + PyErr_SetString(PyExc_RuntimeError, + "deque changed size during iteration"); + return NULL; + } + item = it->b->data[it->index]; it->index++; Index: test_deque.py =================================================================== RCS file: /cvsroot/python/python/nondist/sandbox/collections/test_deque.py,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** test_deque.py 27 Jan 2004 14:41:30 -0000 1.3 --- test_deque.py 27 Jan 2004 15:04:24 -0000 1.4 *************** *** 257,260 **** --- 257,266 ---- self.assertRaises(ZeroDivisionError, deque, E(s)) + def test_iter_with_altered_data(self): + d = deque('abcdefg') + it = iter(d) + d.pop() + self.assertRaises(RuntimeError, it.next) + class Deque(deque): pass
participants (1)
-
rhettingerï¼ projects.sourceforge.net