File: bitarray/_bitarray.c
Function: btree_traverse
Error: ob_refcnt of return value is 1 too low
1820 static PyObject *
1821 btree_traverse(PyObject *iter, PyObject *tree)
1822 {
1823     PyObject *subtree, *v;
1824     long vi;
1825 
1826     if ((v = PyIter_Next(iter)) == NULL)  /* stop iterator */
when PyIter_Next() retrieves a value (new ref)
taking False path
1827         return NULL;
1828 
1829     vi = PyObject_IsTrue(v);
when PyObject_IsTrue() returns 1 (true)
1830     Py_DECREF(v);
when taking True path
1831 
1832     subtree = PyList_GetItem(tree, vi);
borrowed reference returned by PyList_GetItem() allocated at:     subtree = PyList_GetItem(tree, vi);
ob_refcnt is now refs: 0 + N where N >= 1
1833 
1834     if (PyList_Check(subtree) && PyList_Size(subtree) == 2)
when considering value == (long int)0 from bitarray/_bitarray.c:1834
taking False path
1835         return btree_traverse(iter, subtree);
1836     else
1837         return subtree;
1838 }
ob_refcnt of return value is 1 too low
was expecting final ob_refcnt to be N + 1 (for some unknown N)
due to object being referenced by: return value
but final ob_refcnt is N + 0
found 17 similar trace(s) to this

File: bitarray/_bitarray.c
Function: btree_traverse
Error: returning (PyObject*)NULL without setting an exception
1820 static PyObject *
1821 btree_traverse(PyObject *iter, PyObject *tree)
1822 {
1823     PyObject *subtree, *v;
1824     long vi;
1825 
1826     if ((v = PyIter_Next(iter)) == NULL)  /* stop iterator */
when PyIter_Next() returns NULL without setting an exception (end of iteration)
taking True path
1827         return NULL;
1828 
1829     vi = PyObject_IsTrue(v);
1830     Py_DECREF(v);
1831 
1832     subtree = PyList_GetItem(tree, vi);
1833 
1834     if (PyList_Check(subtree) && PyList_Size(subtree) == 2)
1835         return btree_traverse(iter, subtree);
1836     else
1837         return subtree;
1838 }
returning (PyObject*)NULL without setting an exception