bpo-38525: Fix a segmentation fault when using reverse iterators of empty dict (GH-16846)


The reverse iterator for empty dictionaries was not handling correctly shared-key dictionaries.
(cherry picked from commit 24dc2f8c56697f9ee51a4887cf0814b6600c1815)

Co-authored-by: Dong-hee Na <donghee.na92@gmail.com>
diff --git a/Objects/dictobject.c b/Objects/dictobject.c
index 5dad1b6..a0208be 100644
--- a/Objects/dictobject.c
+++ b/Objects/dictobject.c
@@ -3462,10 +3462,15 @@
     di->di_dict = dict;
     di->di_used = dict->ma_used;
     di->len = dict->ma_used;
-    if ((itertype == &PyDictRevIterKey_Type ||
+    if (itertype == &PyDictRevIterKey_Type ||
          itertype == &PyDictRevIterItem_Type ||
-         itertype == &PyDictRevIterValue_Type) && dict->ma_used) {
+         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 {
         di->di_pos = 0;