diff options
| author | Miss Skeleton (bot) <31488909+miss-islington@users.noreply.github.com> | 2019-10-23 05:07:23 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-10-23 05:07:23 -0700 |
| commit | c5d3ea89ee5244714f221dcfcd3be96de2f1da8d (patch) | |
| tree | 57346b93ff53c29047d2ee4ab59b21ce2f6a3561 /Objects | |
| parent | e113b5c3e7c837bd7113c21d00fe242f8ed581da (diff) | |
| download | cpython-git-c5d3ea89ee5244714f221dcfcd3be96de2f1da8d.tar.gz | |
bpo-38555: Fix an undefined behavior. (GH-16883)
(cherry picked from commit 2e3d873d3bd0ef4708c4fa06b6cd6972574cb9af)
Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
Diffstat (limited to 'Objects')
| -rw-r--r-- | Objects/dictobject.c | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/Objects/dictobject.c b/Objects/dictobject.c index a0208be924..76f4fefe09 100644 --- a/Objects/dictobject.c +++ b/Objects/dictobject.c @@ -3840,22 +3840,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; |
