mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +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
	
	 Jeremy Kloth
						Jeremy Kloth