From 2e3d873d3bd0ef4708c4fa06b6cd6972574cb9af Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Wed, 23 Oct 2019 14:48:08 +0300 Subject: bpo-38555: Fix an undefined behavior. (GH-16883) --- Objects/dictobject.c | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/Objects/dictobject.c b/Objects/dictobject.c index 5ac7bb1..d909f22 100644 --- a/Objects/dictobject.c +++ b/Objects/dictobject.c @@ -3830,22 +3830,21 @@ dictreviter_iternext(dictiterobject *di) PyDictKeysObject *k = d->ma_keys; PyObject *key, *value, *result; + if (i < 0) { + goto fail; + } if (d->ma_values) { - if (i < 0) { - goto fail; - } key = DK_ENTRIES(k)[i].me_key; value = d->ma_values[i]; assert (value != NULL); } else { PyDictKeyEntry *entry_ptr = &DK_ENTRIES(k)[i]; - while (i >= 0 && entry_ptr->me_value == NULL) { + while (entry_ptr->me_value == NULL) { + if (--i < 0) { + goto fail; + } entry_ptr--; - i--; - } - if (i < 0) { - goto fail; } key = entry_ptr->me_key; value = entry_ptr->me_value; -- cgit v0.12