@@ -106,7 +106,12 @@ static PyObject* build_array(PyObject* obj, void *data, unsigned short ftype, un
106106 }
107107
108108 Py_XINCREF (desc );
109- return PyArray_NewFromDescr (& PyArray_Type , desc , ndims , dims , NULL , data , flags , (PyObject * )obj );
109+ PyObject * out_arr = PyArray_NewFromDescr (& PyArray_Type , desc , ndims , dims , NULL , data , flags , (PyObject * )obj );
110+ if (!out_arr ) {
111+ Py_XDECREF (desc );
112+ return NULL ;
113+ }
114+ return out_arr ;
110115#else
111116 PyErr_SetNone (PyExc_NotImplementedError );
112117 return NULL ;
@@ -119,7 +124,7 @@ static int assign_array(DBADDR *paddr, PyObject *arr)
119124 void * rawfield = paddr -> pfield ;
120125 rset * prset ;
121126 PyObject * aval ;
122- PyArrayObject * array = (PyArrayObject * )arr ;
127+ PyArrayObject * array = (PyArrayObject * )arr ;
123128 unsigned elemsize = dbValueSize (paddr -> field_type );
124129 unsigned long maxlen = paddr -> no_elements , insize ;
125130 PyArray_Descr * desc = dbf2np [paddr -> field_type ];
@@ -159,18 +164,23 @@ static int assign_array(DBADDR *paddr, PyObject *arr)
159164 }
160165
161166 Py_XINCREF (desc );
162- if (!(aval = PyArray_FromAny (arr , desc , 1 , 2 , NPY_ARRAY_C_CONTIGUOUS | NPY_ARRAY_ALIGNED | NPY_ARRAY_WRITEABLE , arr )))
167+ if (!(aval = PyArray_FromAny (arr , desc , 1 , 2 , NPY_ARRAY_C_CONTIGUOUS | NPY_ARRAY_ALIGNED | NPY_ARRAY_WRITEABLE , arr ))) {
168+ Py_XDECREF (desc );
163169 return 1 ;
170+ }
164171
165172 if (elemsize != PyArray_ITEMSIZE ((PyArrayObject * )aval )) {
166173 PyErr_Format (PyExc_AssertionError , "item size mismatch %u %u" ,
167174 elemsize , (unsigned )PyArray_ITEMSIZE ((PyArrayObject * )aval ) );
175+ Py_DECREF (aval );
176+ Py_XDECREF (desc );
168177 return 1 ;
169178 }
170179
171180 memcpy (rawfield , PyArray_GETPTR1 ((PyArrayObject * )aval , 0 ), insize * elemsize );
172181
173182 Py_DECREF (aval );
183+ Py_XDECREF (desc );
174184
175185 if (paddr -> special == SPC_DBADDR &&
176186 (prset = dbGetRset (paddr )) &&
0 commit comments