@@ -380,6 +380,7 @@ PyIter_ToAMQArray(amqp_connection_state_t conn, PyObject *src, amqp_pool_t *pool
380380 PyObject * iterator = PyObject_GetIter (src );
381381 if (iterator == NULL ) return dst ;
382382 PyObject * item = NULL ;
383+ PyObject * item_tmp = NULL ;
383384
384385 /* allocate new amqp array */
385386 dst .num_entries = 0 ;
@@ -410,9 +411,11 @@ PyIter_ToAMQArray(amqp_connection_state_t conn, PyObject *src, amqp_pool_t *pool
410411 is_unicode = PyUnicode_Check (item );
411412 if (is_unicode || PyBytes_Check (item )) {
412413 if (is_unicode ) {
414+ /* PyUnicode_AsASCIIString returns a new ref! */
415+ item_tmp = item ;
413416 if ((item = PyUnicode_AsASCIIString (item )) == NULL )
414417 goto item_error ;
415- PyObjectPool_AddEntry ( pyobj_pool , item );
418+ Py_XDECREF ( item_tmp );
416419 }
417420 AMQArray_SetStringValue (
418421 & dst , PyString_AS_AMQBYTES (item ));
@@ -430,6 +433,7 @@ PyIter_ToAMQArray(amqp_connection_state_t conn, PyObject *src, amqp_pool_t *pool
430433
431434 return dst ;
432435item_error :
436+ Py_XDECREF (item_tmp );
433437 Py_XDECREF (item );
434438error :
435439 Py_XDECREF (iterator );
@@ -828,7 +832,7 @@ PyObjectPool_Maybe_Unicode(PyObject *s, pyobject_pool_t *pyobj_pool)
828832_PYRMQ_INLINE PyObject *
829833PyObjectArray_AddEntry (pyobject_array_t * array , PyObject * obj )
830834{
831- if (array -> num_entries < PYOBJECT_ARRAY_MAX ) {
835+ if (obj && array -> num_entries < PYOBJECT_ARRAY_MAX ) {
832836 array -> entries [array -> num_entries ] = obj ;
833837 array -> num_entries ++ ;
834838 }
@@ -838,14 +842,16 @@ PyObjectArray_AddEntry(pyobject_array_t *array, PyObject *obj)
838842
839843static PyObject * PyObjectPool_AddEntry (pyobject_pool_t * array , PyObject * obj )
840844{
841- if (array -> num_entries == PYOBJECT_POOL_MAX ) {
842- if (!array -> next )
843- array -> next = PyObjectPool_New (array -> pool );
845+ if (obj ) {
846+ if (array -> num_entries == PYOBJECT_POOL_MAX ) {
847+ if (!array -> next )
848+ array -> next = PyObjectPool_New (array -> pool );
844849
845- PyObjectPool_AddEntry (array -> next , obj );
846- } else {
847- array -> entries [array -> num_entries ] = obj ;
848- array -> num_entries ++ ;
850+ PyObjectPool_AddEntry (array -> next , obj );
851+ } else {
852+ array -> entries [array -> num_entries ] = obj ;
853+ array -> num_entries ++ ;
854+ }
849855 }
850856
851857 return obj ;
0 commit comments