Kaydet (Commit) 604ddf80 authored tarafından Guido van Rossum's avatar Guido van Rossum

Fix for #489669 (Neil Norwitz): memory leak in test_descr (unicode).

This is best reproduced by

  while 1:
      class U(unicode):
          pass
      U(u"xxxxxx")

The unicode_dealloc() code wasn't properly freeing the str and defenc
fields of the Unicode object when freeing a subtype instance.  Fixed
this by a subtle refactoring that actually reduces the amount of code
slightly.
üst a631f580
......@@ -226,11 +226,8 @@ PyUnicodeObject *_PyUnicode_New(int length)
static
void unicode_dealloc(register PyUnicodeObject *unicode)
{
if (!PyUnicode_CheckExact(unicode)) {
unicode->ob_type->tp_free((PyObject *)unicode);
return;
}
if (unicode_freelist_size < MAX_UNICODE_FREELIST_SIZE) {
if (PyUnicode_CheckExact(unicode) &&
unicode_freelist_size < MAX_UNICODE_FREELIST_SIZE) {
/* Keep-Alive optimization */
if (unicode->length >= KEEPALIVE_SIZE_LIMIT) {
PyMem_DEL(unicode->str);
......@@ -249,7 +246,7 @@ void unicode_dealloc(register PyUnicodeObject *unicode)
else {
PyMem_DEL(unicode->str);
Py_XDECREF(unicode->defenc);
PyObject_DEL(unicode);
unicode->ob_type->tp_free((PyObject *)unicode);
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment