#11249: in PyType_FromSpec, copy tp_doc slot since it usually will point to a static string literal which should not be deallocated together with the type.

This commit is contained in:
Georg Brandl 2011-02-19 21:47:02 +00:00
parent e0e824d2ed
commit 032400b2d8
2 changed files with 13 additions and 0 deletions

View File

@ -10,6 +10,8 @@ What's New in Python 3.2?
Core and Builtins
-----------------
- Issue #11249: Fix potential crashes when using the limited API.
Library
-------

View File

@ -2347,6 +2347,17 @@ PyObject* PyType_FromSpec(PyType_Spec *spec)
goto fail;
}
*(void**)(res_start + slotoffsets[slot->slot]) = slot->pfunc;
/* need to make a copy of the docstring slot, which usually
points to a static string literal */
if (slot->slot == Py_tp_doc) {
ssize_t len = strlen(slot->pfunc)+1;
char *tp_doc = PyObject_MALLOC(len);
if (tp_doc == NULL)
goto fail;
memcpy(tp_doc, slot->pfunc, len);
res->ht_type.tp_doc = tp_doc;
}
}
return (PyObject*)res;