bpo-43636: Validate the version tag in _PyType_Lookup (GH-25032)

This commit is contained in:
Pablo Galindo 2021-03-27 03:51:46 +00:00 committed by GitHub
parent 027b669927
commit 11b85abbae
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 3 additions and 1 deletions

View File

@ -424,7 +424,7 @@ assign_version_tag(struct type_cache *cache, PyTypeObject *type)
if (type->tp_version_tag == 0) { if (type->tp_version_tag == 0) {
// Wrap-around or just starting Python - clear the whole cache // Wrap-around or just starting Python - clear the whole cache
type_cache_clear(cache, 1); type_cache_clear(cache, 1);
return 1; return 0;
} }
bases = type->tp_bases; bases = type->tp_bases;
@ -3361,6 +3361,7 @@ _PyType_Lookup(PyTypeObject *type, PyObject *name)
#if MCACHE_STATS #if MCACHE_STATS
cache->hits++; cache->hits++;
#endif #endif
assert(_PyType_HasFeature(type, Py_TPFLAGS_VALID_VERSION_TAG));
return entry->value; return entry->value;
} }
@ -3398,6 +3399,7 @@ _PyType_Lookup(PyTypeObject *type, PyObject *name)
cache->misses++; cache->misses++;
} }
#endif #endif
assert(_PyType_HasFeature(type, Py_TPFLAGS_VALID_VERSION_TAG));
Py_SETREF(entry->name, Py_NewRef(name)); Py_SETREF(entry->name, Py_NewRef(name));
} }
return res; return res;