]> granicus.if.org Git - python/commitdiff
bpo-38555: Fix an undefined behavior. (GH-16883)
authorSerhiy Storchaka <storchaka@gmail.com>
Wed, 23 Oct 2019 11:48:08 +0000 (14:48 +0300)
committerGitHub <noreply@github.com>
Wed, 23 Oct 2019 11:48:08 +0000 (14:48 +0300)
Objects/dictobject.c

index 5ac7bb102b211b876aadb94bfb02dc976c7eb996..d909f220a984b1b36456cbc9eae08e5788286676 100644 (file)
@@ -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;