@@ -340,6 +340,8 @@ Reader_read(Reader *self, PyObject *args, PyObject *kwds)
340340
341341 /* create empty list */
342342 list = PyList_New (0 );
343+ if (list == NULL )
344+ return PyErr_NoMemory ();
343345
344346 while (TMR_hasMoreTags (& self -> reader ) == TMR_SUCCESS )
345347 {
@@ -350,7 +352,16 @@ Reader_read(Reader *self, PyObject *args, PyObject *kwds)
350352 uint8_t dataBuf4 [MAX_DATA_AREA ];
351353
352354 tag = PyObject_New (TagReadData , & TagReadDataType );
355+ if (tag == NULL )
356+ {
357+ Py_XDECREF (list );
358+ return PyErr_NoMemory ();
359+ }
353360 TMR_TRD_init (& tag -> data );
361+ tag -> epcMemData = NULL ;
362+ tag -> tidMemData = NULL ;
363+ tag -> userMemData = NULL ;
364+ tag -> reservedMemData = NULL ;
354365
355366 TMR_TRD_MEMBANK_init_data (& tag -> data .epcMemData , MAX_DATA_AREA , dataBuf1 );
356367 TMR_TRD_MEMBANK_init_data (& tag -> data .tidMemData , MAX_DATA_AREA , dataBuf2 );
@@ -360,6 +371,8 @@ Reader_read(Reader *self, PyObject *args, PyObject *kwds)
360371 if ((ret = TMR_getNextTag (& self -> reader , & tag -> data )) != TMR_SUCCESS )
361372 {
362373 PyErr_SetString (PyExc_RuntimeError , TMR_strerr (& self -> reader , ret ));
374+ Py_XDECREF (tag );
375+ Py_XDECREF (list );
363376 return NULL ;
364377 }
365378
@@ -435,6 +448,10 @@ invoke_read_callback(TMR_Reader *reader, const TMR_TagReadData *pdata, void *coo
435448 tag = PyObject_New (TagReadData , & TagReadDataType );
436449 /* make a hard-copy */
437450 memcpy (& tag -> data , pdata , sizeof (TMR_TagReadData ));
451+ tag -> epcMemData = NULL ;
452+ tag -> tidMemData = NULL ;
453+ tag -> userMemData = NULL ;
454+ tag -> reservedMemData = NULL ;
438455
439456 arglist = Py_BuildValue ("(O)" , tag );
440457 result = PyObject_CallObject (self -> readCallback , arglist );
@@ -645,6 +662,8 @@ Reader_get_supported_regions(Reader* self)
645662
646663 /* create empty list */
647664 list = PyList_New (0 );
665+ if (list == NULL )
666+ return PyErr_NoMemory ();
648667
649668 for (i = 0 ; i < regions .len ; i ++ )
650669 {
@@ -713,6 +732,9 @@ get_uint8List(TMR_Reader *reader, int param, size_t max)
713732 }
714733
715734 result = PyList_New (values .len );
735+ if (result == NULL )
736+ return PyErr_NoMemory ();
737+
716738 for (i = 0 ; i < values .len ; i ++ )
717739 PyList_SetItem (result , i , PyLong_FromUnsignedLong (values .list [i ]));
718740
@@ -740,6 +762,9 @@ get_uint32List(TMR_Reader *reader, int param, size_t max)
740762 }
741763
742764 result = PyList_New (values .len );
765+ if (result == NULL )
766+ return PyErr_NoMemory ();
767+
743768 for (i = 0 ; i < values .len ; i ++ )
744769 PyList_SetItem (result , i , PyLong_FromUnsignedLong (values .list [i ]));
745770
0 commit comments