GH-113462: Limit the number of versions that a single class can use. (GH-114900)

This commit is contained in:
Mark Shannon 2024-02-05 16:20:54 +00:00 committed by GitHub
parent 87cd20a567
commit 992446dd5b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 22 additions and 1 deletions

View file

@ -908,6 +908,8 @@ type_mro_modified(PyTypeObject *type, PyObject *bases) {
}
}
#define MAX_VERSIONS_PER_CLASS 1000
static int
assign_version_tag(PyInterpreterState *interp, PyTypeObject *type)
{
@ -922,7 +924,10 @@ assign_version_tag(PyInterpreterState *interp, PyTypeObject *type)
if (!_PyType_HasFeature(type, Py_TPFLAGS_READY)) {
return 0;
}
if (type->tp_versions_used >= MAX_VERSIONS_PER_CLASS) {
return 0;
}
type->tp_versions_used++;
if (type->tp_flags & Py_TPFLAGS_IMMUTABLETYPE) {
/* static types */
if (NEXT_GLOBAL_VERSION_TAG > _Py_MAX_GLOBAL_TYPE_VERSION_TAG) {