Inada Naoki <songofaca...@gmail.com> added the comment:
When dict is empty, di_pos of reverse iterator must be -1, not 0. Additionally, di_pos must be initialized from ma_used when dict is key sharing dict. diff --git a/Objects/dictobject.c b/Objects/dictobject.c index 64876e0519..6c4b41700b 100644 --- a/Objects/dictobject.c +++ b/Objects/dictobject.c @@ -3452,10 +3452,15 @@ dictiter_new(PyDictObject *dict, PyTypeObject *itertype) di->di_dict = dict; di->di_used = dict->ma_used; di->len = dict->ma_used; - if ((itertype == &PyDictRevIterKey_Type || - itertype == &PyDictRevIterItem_Type || - itertype == &PyDictRevIterValue_Type) && dict->ma_used) { + if (itertype == &PyDictRevIterKey_Type || + itertype == &PyDictRevIterItem_Type || + itertype == &PyDictRevIterValue_Type) { + if (dict->ma_values) { + di->di_pos = dict->ma_used - 1; + } + else { di->di_pos = dict->ma_keys->dk_nentries - 1; + } } else { ---------- _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue38525> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com