diff --git a/numpy/core/src/multiarray/flagsobject.c b/numpy/core/src/multiarray/flagsobject.c index 322f85d34523..063a44385931 100644 --- a/numpy/core/src/multiarray/flagsobject.c +++ b/numpy/core/src/multiarray/flagsobject.c @@ -900,6 +900,15 @@ arrayflags_new_impl(HPyContext *ctx, HPy self, const HPy *args, HPy_ssize_t narg return HPyArray_NewFlagsObject(ctx, self, arg); } +HPyDef_SLOT(arrayflags_traverse, HPy_tp_traverse) +static int +arrayflags_traverse_impl(void *self, HPyFunc_visitproc visit, void *arg) +{ + PyArrayFlagsObject *flags = (PyArrayFlagsObject *)self; + HPy_VISIT(&flags->arr); + return 0; +} + /* static PyType_Slot arrayflags_slots[] = { //{Py_tp_str, arrayflags_print}, @@ -929,6 +938,7 @@ static HPyDef *arrayflags_defines[] = { &arrayflags_carray, &arrayflags_farray, &arrayflags_num, + &arrayflags_traverse, NULL }; diff --git a/numpy/core/src/multiarray/scalarapi.c b/numpy/core/src/multiarray/scalarapi.c index 64a6673c396f..3ff8b664f083 100644 --- a/numpy/core/src/multiarray/scalarapi.c +++ b/numpy/core/src/multiarray/scalarapi.c @@ -559,6 +559,12 @@ HPyArray_FromScalar(HPyContext *ctx, HPy h_scalar, /*PyArray_Descr*/ HPy h_outco } else { char *memptr = hpy_scalar_value(ctx, h_scalar, typecode); + if (memptr == NULL) + { + HPy_Close(ctx, h_r); + HPy_Close(ctx, h_typecode); + return HPy_NULL; + } memcpy(PyArray_DATA(r), memptr, typecode->elsize); if (PyDataType_FLAGCHK(typecode, NPY_ITEM_HASOBJECT)) {