PyTuple_Check and other type check functions didn't check the NULLpointer

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • NotGuru

    PyTuple_Check and other type check functions didn't check the NULLpointer

    I was writing some C extensions for Python and use PyTupleType_Che ck
    extensively. I found that all the PySomeType_Chec k macros directly
    delegate the job to PyObject_TypeCh eck(op, &PyType_Type ). The
    PyObject_TypeCh eck(op, &PyType_Type ) is again a macro and defined as
    ((ob)->ob_type == (tp) || PyType_IsSubtyp e((ob)->ob_type, (tp)))

    in object.h.

    My questions is: is it necessary to check the null pointer in the
    macro or it's a job for the user? Semantically all the type check
    should report a false if a null pointer is encountered. I've already
    had the patch to this issue but I am not sure if I think this problem
    right. I don't know if there are some python core developers around
    but I would like to hear all opinions towards this.

    BTW, if the user didn't check null pointer before call the function, a
    segmentation fault might occur.

  • John Machin

    #2
    Re: PyTuple_Check and other type check functions didn't check theNULL pointer

    On Mar 24, 10:01 am, NotGuru <xu.math...@gma il.comwrote:
    I was writing some C extensions for Python and use PyTupleType_Che ck
    extensively. I found that all the PySomeType_Chec k macros directly
    delegate the job to PyObject_TypeCh eck(op, &PyType_Type ). The
    PyObject_TypeCh eck(op, &PyType_Type ) is again a macro and defined as
    ((ob)->ob_type == (tp) || PyType_IsSubtyp e((ob)->ob_type, (tp)))
    >
    in object.h.
    >
    My questions is: is it necessary to check the null pointer in the
    macro or it's a job for the user? Semantically all the type check
    should report a false if a null pointer is encountered. I've already
    had the patch to this issue but I am not sure if I think this problem
    right. I don't know if there are some python core developers around
    but I would like to hear all opinions towards this.
    >
    BTW, if the user didn't check null pointer before call the function, a
    segmentation fault might occur.
    You should check for null pointer returned by any C-API function that
    is meant to return an object pointer; this indicates that an exception
    has happened; your code should clean up and exit. See section 1.3 of
    the Python/C API Reference Manual.

    Comment

    • Christian Heimes

      #3
      Re: PyTuple_Check and other type check functions didn't check theNULL pointer

      NotGuru schrieb:
      My questions is: is it necessary to check the null pointer in the
      macro or it's a job for the user? Semantically all the type check
      should report a false if a null pointer is encountered. I've already
      had the patch to this issue but I am not sure if I think this problem
      right. I don't know if there are some python core developers around
      but I would like to hear all opinions towards this.

      Unless stated otherwise no Py* or PY* function is NULL safe. You have to
      check for NULL unless the docs *explicitly* say it's safe to call it
      with a NULL argument.

      Christian

      Comment

      Working...