diff options
| author | Dong-hee Na <donghee.na92@gmail.com> | 2019-10-20 05:01:08 +0900 |
|---|---|---|
| committer | Pablo Galindo <Pablogsal@gmail.com> | 2019-10-19 21:01:08 +0100 |
| commit | 24dc2f8c56697f9ee51a4887cf0814b6600c1815 (patch) | |
| tree | f5f820dcf20dca38f75b20ddb2ece7a2eace8e4d /Objects | |
| parent | 88eeda6311a8e3bf57136da5f73c70bc91ad79f3 (diff) | |
| download | cpython-git-24dc2f8c56697f9ee51a4887cf0814b6600c1815.tar.gz | |
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.
Diffstat (limited to 'Objects')
| -rw-r--r-- | Objects/dictobject.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/Objects/dictobject.c b/Objects/dictobject.c index 64876e0519..5ac7bb102b 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 || + 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; |
