From 084ae3d31d837ad2d11b1e42d01e615d6f9e9bee Mon Sep 17 00:00:00 2001 From: Christopher Ariza Date: Tue, 3 Jun 2025 12:01:25 -0700 Subject: [PATCH] Fix ArrayGO reference handling --- src/array_go.c | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/src/array_go.c b/src/array_go.c index 0f1fb4d7..706dc0b0 100644 --- a/src/array_go.c +++ b/src/array_go.c @@ -41,14 +41,23 @@ update_array_cache(ArrayGOObject *self) if (self->list) { if (self->array) { PyObject *container = PyTuple_Pack(2, self->array, self->list); + PyObject *new_array; if (!container) { return -1; } - Py_SETREF(self->array, PyArray_Concatenate(container, 0)); + new_array = PyArray_Concatenate(container, 0); Py_DECREF(container); + if (!new_array) { + return -1; + } + Py_SETREF(self->array, new_array); } else { - self->array = PyArray_FROM_OT(self->list, NPY_OBJECT); + PyObject *new_array = PyArray_FROM_OT(self->list, NPY_OBJECT); + if (!new_array) { + return -1; + } + self->array = new_array; } PyArray_CLEARFLAGS((PyArrayObject *)self->array, NPY_ARRAY_WRITEABLE); Py_CLEAR(self->list); @@ -158,9 +167,20 @@ PyObject * ArrayGO_copy(ArrayGOObject *self, PyObject *Py_UNUSED(unused)) { ArrayGOObject *copy = PyObject_GC_New(ArrayGOObject, &ArrayGOType); + if (!copy) { + return NULL; + } copy->array = self->array; - copy->list = self->list ? PySequence_List(self->list) : NULL; Py_XINCREF(copy->array); + if (self->list) { + copy->list = PySequence_List(self->list); + if (!copy->list) { + Py_DECREF(copy); + return NULL; + } + } else { + copy->list = NULL; + } return (PyObject *)copy; }