[Python-checkins] cpython (3.5): Issue #18287: PyType_Ready() now checks that tp_name is not NULL.

serhiy.storchaka python-checkins at python.org
Fri Oct 7 16:27:07 EDT 2016


https://hg.python.org/cpython/rev/5c459b0f2b75
changeset:   104354:5c459b0f2b75
branch:      3.5
parent:      104350:005704f5634f
user:        Serhiy Storchaka <storchaka at gmail.com>
date:        Fri Oct 07 23:24:35 2016 +0300
summary:
  Issue #18287: PyType_Ready() now checks that tp_name is not NULL.
Original patch by Niklas Koep.

files:
  Doc/c-api/typeobj.rst      |  3 ++-
  Doc/extending/newtypes.rst |  4 +++-
  Misc/ACKS                  |  1 +
  Misc/NEWS                  |  3 +++
  Objects/typeobject.c       |  6 ++++++
  5 files changed, 15 insertions(+), 2 deletions(-)


diff --git a/Doc/c-api/typeobj.rst b/Doc/c-api/typeobj.rst
--- a/Doc/c-api/typeobj.rst
+++ b/Doc/c-api/typeobj.rst
@@ -116,7 +116,8 @@
    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
    (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.
 
diff --git a/Doc/extending/newtypes.rst b/Doc/extending/newtypes.rst
--- a/Doc/extending/newtypes.rst
+++ b/Doc/extending/newtypes.rst
@@ -129,7 +129,9 @@
 
 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
-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 */
 
diff --git a/Misc/ACKS b/Misc/ACKS
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -775,6 +775,7 @@
 Kubilay Kocak
 Greg Kochanski
 Manvisha Kodali
+Niklas Koep
 Damon Kohler
 Marko Kohtala
 Vajrasky Kok
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -10,6 +10,9 @@
 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
   compiling it.
 
diff --git a/Objects/typeobject.c b/Objects/typeobject.c
--- a/Objects/typeobject.c
+++ b/Objects/typeobject.c
@@ -4820,6 +4820,12 @@
     _Py_AddToAllObjects((PyObject *)type, 0);
 #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) */
     base = type->tp_base;
     if (base == NULL && type != &PyBaseObject_Type) {

-- 
Repository URL: https://hg.python.org/cpython


More information about the Python-checkins mailing list