From ac13ad6a32e5c130de91fc2038de9b1c265b3fe9 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Sat, 21 Mar 2015 01:53:16 -0700 Subject: For safety, wait to decref deleted values until the deque state has been restored. --- Modules/_collectionsmodule.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index 7d7f0cf..28aacc3 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -864,9 +864,9 @@ deque_remove(dequeobject *deque, PyObject *value) if (cmp > 0) { PyObject *tgt = deque_popleft(deque, NULL); assert (tgt != NULL); - Py_DECREF(tgt); if (_deque_rotate(deque, i) == -1) return NULL; + Py_DECREF(tgt); Py_RETURN_NONE; } else if (cmp < 0) { @@ -956,16 +956,16 @@ static int deque_del_item(dequeobject *deque, Py_ssize_t i) { PyObject *item; + int rv; assert (i >= 0 && i < Py_SIZE(deque)); if (_deque_rotate(deque, -i) == -1) return -1; - item = deque_popleft(deque, NULL); + rv = _deque_rotate(deque, i); assert (item != NULL); Py_DECREF(item); - - return _deque_rotate(deque, i); + return rv; } static int -- cgit v0.12