This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author methane
Recipients corona10, ivb, methane, ned.deily, pablogsal, remi.lapeyre, serhiy.storchaka, xtreak
Date 2019-10-19.17:24:54
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1571505894.56.0.0952972041751.issue38525@roundup.psfhosted.org>
In-reply-to
Content
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 {
History
Date User Action Args
2019-10-19 17:24:54methanesetrecipients: + methane, ned.deily, ivb, serhiy.storchaka, corona10, pablogsal, remi.lapeyre, xtreak
2019-10-19 17:24:54methanesetmessageid: <1571505894.56.0.0952972041751.issue38525@roundup.psfhosted.org>
2019-10-19 17:24:54methanelinkissue38525 messages
2019-10-19 17:24:54methanecreate