Skip to content

Commit c5d3ea8

Browse files
bpo-38555: Fix an undefined behavior. (GH-16883)
(cherry picked from commit 2e3d873) Co-authored-by: Serhiy Storchaka <[email protected]>
1 parent e113b5c commit c5d3ea8

File tree

1 file changed

+7
-8
lines changed

1 file changed

+7
-8
lines changed

Objects/dictobject.c

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3840,22 +3840,21 @@ dictreviter_iternext(dictiterobject *di)
38403840
PyDictKeysObject *k = d->ma_keys;
38413841
PyObject *key, *value, *result;
38423842

3843+
if (i < 0) {
3844+
goto fail;
3845+
}
38433846
if (d->ma_values) {
3844-
if (i < 0) {
3845-
goto fail;
3846-
}
38473847
key = DK_ENTRIES(k)[i].me_key;
38483848
value = d->ma_values[i];
38493849
assert (value != NULL);
38503850
}
38513851
else {
38523852
PyDictKeyEntry *entry_ptr = &DK_ENTRIES(k)[i];
3853-
while (i >= 0 && entry_ptr->me_value == NULL) {
3853+
while (entry_ptr->me_value == NULL) {
3854+
if (--i < 0) {
3855+
goto fail;
3856+
}
38543857
entry_ptr--;
3855-
i--;
3856-
}
3857-
if (i < 0) {
3858-
goto fail;
38593858
}
38603859
key = entry_ptr->me_key;
38613860
value = entry_ptr->me_value;

0 commit comments

Comments
 (0)