Fully initialize allocated memory.
authorJ Robert Ray <jrray@imageworks.com>
Thu, 7 Feb 2013 18:03:48 +0000 (10:03 -0800)
committerJ Robert Ray <jrray@imageworks.com>
Thu, 7 Feb 2013 18:10:31 +0000 (10:10 -0800)
commitf1b2b636e89a083c836ac6f27ea3790c9ab05790
treeab05c33e21bf80326a22dca4399d369e63e482f6
parentf9c385e08401ed96b5b0afb8411480037dc772b9
Fully initialize allocated memory.

__pyx_CyFunctionObject.defaults must be fully zeroed or a segfault or
memory corruption may occur if the object is visited by the garbage
collector before defaults is later populated. Uninitialized memory is
cast to PyObject* with undefined results:

  static int __Pyx_CyFunction_traverse(__pyx_CyFunctionObject *m, visitproc visit, void *arg)
  {
      ...
      if (m->defaults) {
          PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m);
          int i;
          for (i = 0; i < m->defaults_pyobjects; i++)
              Py_VISIT(pydefaults[i]);
                       ^^^^^^^^^^^^^
Cython/Utility/CythonFunction.c