mirror of https://github.com/python/cpython
Issue #18287: PyType_Ready() now checks that tp_name is not NULL.
Original patch by Niklas Koep.
This commit is contained in:
parent
8793b21525
commit
de0574bdab
|
@ -116,7 +116,8 @@ type objects) *must* have the :attr:`ob_size` field.
|
||||||
If no dot is present, the entire :c:member:`~PyTypeObject.tp_name` field is made accessible as the
|
If no dot is present, the entire :c:member:`~PyTypeObject.tp_name` field is made accessible as the
|
||||||
:attr:`~definition.__name__` attribute, and the :attr:`__module__` attribute is undefined
|
:attr:`~definition.__name__` attribute, and the :attr:`__module__` attribute is undefined
|
||||||
(unless explicitly set in the dictionary, as explained above). This means your
|
(unless explicitly set in the dictionary, as explained above). This means your
|
||||||
type will be impossible to pickle.
|
type will be impossible to pickle. Additionally, it will not be listed in
|
||||||
|
module documentations created with pydoc.
|
||||||
|
|
||||||
This field is not inherited by subtypes.
|
This field is not inherited by subtypes.
|
||||||
|
|
||||||
|
|
|
@ -129,7 +129,9 @@ our objects and in some error messages, for example::
|
||||||
|
|
||||||
Note that the name is a dotted name that includes both the module name and the
|
Note that the name is a dotted name that includes both the module name and the
|
||||||
name of the type within the module. The module in this case is :mod:`noddy` and
|
name of the type within the module. The module in this case is :mod:`noddy` and
|
||||||
the type is :class:`Noddy`, so we set the type name to :class:`noddy.Noddy`. ::
|
the type is :class:`Noddy`, so we set the type name to :class:`noddy.Noddy`.
|
||||||
|
One side effect of using an undotted name is that the pydoc documentation tool
|
||||||
|
will not list the new type in the module documentation. ::
|
||||||
|
|
||||||
sizeof(noddy_NoddyObject), /* tp_basicsize */
|
sizeof(noddy_NoddyObject), /* tp_basicsize */
|
||||||
|
|
||||||
|
|
|
@ -775,6 +775,7 @@ Jeff Knupp
|
||||||
Kubilay Kocak
|
Kubilay Kocak
|
||||||
Greg Kochanski
|
Greg Kochanski
|
||||||
Manvisha Kodali
|
Manvisha Kodali
|
||||||
|
Niklas Koep
|
||||||
Damon Kohler
|
Damon Kohler
|
||||||
Marko Kohtala
|
Marko Kohtala
|
||||||
Vajrasky Kok
|
Vajrasky Kok
|
||||||
|
|
|
@ -10,6 +10,9 @@ Release date: TBA
|
||||||
Core and Builtins
|
Core and Builtins
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
|
- Issue #18287: PyType_Ready() now checks that tp_name is not NULL.
|
||||||
|
Original patch by Niklas Koep.
|
||||||
|
|
||||||
- Issue #24098: Fixed possible crash when AST is changed in process of
|
- Issue #24098: Fixed possible crash when AST is changed in process of
|
||||||
compiling it.
|
compiling it.
|
||||||
|
|
||||||
|
|
|
@ -4820,6 +4820,12 @@ PyType_Ready(PyTypeObject *type)
|
||||||
_Py_AddToAllObjects((PyObject *)type, 0);
|
_Py_AddToAllObjects((PyObject *)type, 0);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if (type->tp_name == NULL) {
|
||||||
|
PyErr_Format(PyExc_SystemError,
|
||||||
|
"Type does not define the tp_name field.");
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
|
||||||
/* Initialize tp_base (defaults to BaseObject unless that's us) */
|
/* Initialize tp_base (defaults to BaseObject unless that's us) */
|
||||||
base = type->tp_base;
|
base = type->tp_base;
|
||||||
if (base == NULL && type != &PyBaseObject_Type) {
|
if (base == NULL && type != &PyBaseObject_Type) {
|
||||||
|
|
Loading…
Reference in New Issue