mirror of
https://github.com/python/cpython.git
synced 2025-08-24 18:55:00 +00:00
bpo-47084: Clear Unicode cached representations on finalization (GH-32032)
This commit is contained in:
parent
7d810b6a4e
commit
88872a29f1
5 changed files with 78 additions and 18 deletions
|
@ -16057,6 +16057,35 @@ _PyUnicode_FiniTypes(PyInterpreterState *interp)
|
|||
}
|
||||
|
||||
|
||||
static void unicode_static_dealloc(PyObject *op)
|
||||
{
|
||||
PyASCIIObject* ascii = (PyASCIIObject*)op;
|
||||
|
||||
assert(ascii->state.compact);
|
||||
|
||||
if (ascii->state.ascii) {
|
||||
if (ascii->wstr) {
|
||||
PyObject_Free(ascii->wstr);
|
||||
ascii->wstr = NULL;
|
||||
}
|
||||
}
|
||||
else {
|
||||
PyCompactUnicodeObject* compact = (PyCompactUnicodeObject*)op;
|
||||
void* data = (void*)(compact + 1);
|
||||
if (ascii->wstr && ascii->wstr != data) {
|
||||
PyObject_Free(ascii->wstr);
|
||||
ascii->wstr = NULL;
|
||||
compact->wstr_length = 0;
|
||||
}
|
||||
if (compact->utf8) {
|
||||
PyObject_Free(compact->utf8);
|
||||
compact->utf8 = NULL;
|
||||
compact->utf8_length = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
_PyUnicode_Fini(PyInterpreterState *interp)
|
||||
{
|
||||
|
@ -16070,6 +16099,21 @@ _PyUnicode_Fini(PyInterpreterState *interp)
|
|||
_PyUnicode_FiniEncodings(&state->fs_codec);
|
||||
|
||||
unicode_clear_identifiers(state);
|
||||
|
||||
// Clear the single character singletons
|
||||
for (int i = 0; i < 128; i++) {
|
||||
unicode_static_dealloc((PyObject*)&_Py_SINGLETON(strings).ascii[i]);
|
||||
}
|
||||
for (int i = 0; i < 128; i++) {
|
||||
unicode_static_dealloc((PyObject*)&_Py_SINGLETON(strings).latin1[i]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
_PyStaticUnicode_Dealloc(PyObject *op)
|
||||
{
|
||||
unicode_static_dealloc(op);
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue