-
-
Notifications
You must be signed in to change notification settings - Fork 33.1k
Closed
Labels
3.12only security fixesonly security fixes3.13bugs and security fixesbugs and security fixes3.14bugs and security fixesbugs and security fixesinterpreter-core(Objects, Python, Grammar, and Parser dirs)(Objects, Python, Grammar, and Parser dirs)type-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error
Description
Bug report
Bug description:
Not all usages of PyIter_Next
in the codebase comply with specified behavior:
Lines 2905 to 2919 in 180d417
/* Return next item. | |
* | |
* If an error occurs, return NULL. PyErr_Occurred() will be true. | |
* If the iteration terminates normally, return NULL and clear the | |
* PyExc_StopIteration exception (if it was set). PyErr_Occurred() | |
* will be false. | |
* Else return the next object. PyErr_Occurred() will be false. | |
*/ | |
PyObject * | |
PyIter_Next(PyObject *iter) | |
{ | |
PyObject *item; | |
(void)iternext(iter, &item); | |
return item; | |
} |
One example would be:
Lines 246 to 268 in 180d417
while ((key = PyIter_Next(iter)) != NULL) { | |
value = PyObject_GetItem(other, key); | |
if (value == NULL) { | |
Py_DECREF(key); | |
Py_DECREF(iter); | |
return -1; | |
} | |
if (framelocalsproxy_setitem(self, key, value) < 0) { | |
Py_DECREF(key); | |
Py_DECREF(value); | |
Py_DECREF(iter); | |
return -1; | |
} | |
Py_DECREF(key); | |
Py_DECREF(value); | |
} | |
Py_DECREF(iter); | |
return 0; | |
} |
CPython versions tested on:
CPython main branch
Operating systems tested on:
No response
Linked PRs
Metadata
Metadata
Assignees
Labels
3.12only security fixesonly security fixes3.13bugs and security fixesbugs and security fixes3.14bugs and security fixesbugs and security fixesinterpreter-core(Objects, Python, Grammar, and Parser dirs)(Objects, Python, Grammar, and Parser dirs)type-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error