Skip to content

Commit 2e3d873

Browse files
bpo-38555: Fix an undefined behavior. (GH-16883)
1 parent d34ac30 commit 2e3d873

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
@@ -3830,22 +3830,21 @@ dictreviter_iternext(dictiterobject *di)
38303830
PyDictKeysObject *k = d->ma_keys;
38313831
PyObject *key, *value, *result;
38323832

3833+
if (i < 0) {
3834+
goto fail;
3835+
}
38333836
if (d->ma_values) {
3834-
if (i < 0) {
3835-
goto fail;
3836-
}
38373837
key = DK_ENTRIES(k)[i].me_key;
38383838
value = d->ma_values[i];
38393839
assert (value != NULL);
38403840
}
38413841
else {
38423842
PyDictKeyEntry *entry_ptr = &DK_ENTRIES(k)[i];
3843-
while (i >= 0 && entry_ptr->me_value == NULL) {
3843+
while (entry_ptr->me_value == NULL) {
3844+
if (--i < 0) {
3845+
goto fail;
3846+
}
38443847
entry_ptr--;
3845-
i--;
3846-
}
3847-
if (i < 0) {
3848-
goto fail;
38493848
}
38503849
key = entry_ptr->me_key;
38513850
value = entry_ptr->me_value;

0 commit comments

Comments
 (0)