File: _mysql.c
Function: _mysql_ResultObject_fetch_row
Error: memory leak: ob_refcnt of '*r.68' is 1 too high
1536 static PyObject *
1537 _mysql_ResultObject_fetch_row(
1538 	_mysql_ResultObject *self,
1539 	PyObject *args,
1540 	PyObject *kwargs)
1541 {
1542 	typedef PyObject *_PYFUNC(_mysql_ResultObject *, MYSQL_ROW);
1543 	static char *kwlist[] = { "maxrows", "how", NULL };
1544 	static _PYFUNC *row_converters[] =
1545 	{
1546 		_mysql_row_to_tuple,
1547 		_mysql_row_to_dict,
1548 		_mysql_row_to_dict_old
1549 	};
1550 	_PYFUNC *convert_row;
1551 	unsigned int maxrows=1, how=0, skiprows=0, rowsadded;
1552 	PyObject *r=NULL;
1553 
1554 	if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|ii:fetch_row", kwlist,
when PyArg_ParseTupleAndKeywords() succeeds
taking False path
1555 					 &maxrows, &how))
1556 		return NULL;
1557 	check_result_connection(self);
when treating unknown struct PyObject * from _mysql.c:1557 as non-NULL
when considering range: -0x80000000 <= value <= -1
taking False path
1558 	if (how < 0 || how >= sizeof(row_converters)) {
when considering range: -0x80000000 <= value <= 23
taking False path
1559 		PyErr_SetString(PyExc_ValueError, "how out of range");
1560 		return NULL;
1561 	}
1562 	convert_row = row_converters[how];
1563 	if (maxrows) {
when considering range: -0x80000000 <= value <= -1
taking True path
1564 		if (!(r = PyTuple_New(maxrows))) goto error;
when PyTuple_New() succeeds
taking False path
'*r.68' was allocated at: 		if (!(r = PyTuple_New(maxrows))) goto error;
ob_refcnt is now refs: 1 owned
1565 		rowsadded = _mysql__fetch_row(self, &r, skiprows, maxrows, 
1566 				convert_row);
1567 		if (rowsadded == -1) goto error;
taking False path
1568 	} else {
1569 		if (self->use) {
1570 			maxrows = 1000;
1571 			if (!(r = PyTuple_New(maxrows))) goto error;
1572 			while (1) {
1573 				rowsadded = _mysql__fetch_row(self, &r, skiprows,
1574 						maxrows, convert_row);
1575 				if (rowsadded == -1) goto error;
1576 				skiprows += rowsadded;
1577 				if (rowsadded < maxrows) break;
1578 				if (MyTuple_Resize(&r, skiprows+maxrows, 0) == -1)
1579 					goto error;
1580 			}
1581 		} else {
1582 			/* XXX if overflow, maxrows<0? */
1583 			maxrows = (int) mysql_num_rows(self->result);
1584 			if (!(r = PyTuple_New(maxrows))) goto error;
1585 			rowsadded = _mysql__fetch_row(self, &r, 0,
1586 					maxrows, convert_row);
1587 			if (rowsadded == -1) goto error;
1588 		}
1589 	}
1590 	return r;
1591   error:
1592 	Py_XDECREF(r);
1593 	return NULL;
1594 }

File: _mysql.c
Function: _mysql_ResultObject_fetch_row
Error: memory leak: ob_refcnt of '*r.72' is 1 too high
1536 static PyObject *
1537 _mysql_ResultObject_fetch_row(
1538 	_mysql_ResultObject *self,
1539 	PyObject *args,
1540 	PyObject *kwargs)
1541 {
1542 	typedef PyObject *_PYFUNC(_mysql_ResultObject *, MYSQL_ROW);
1543 	static char *kwlist[] = { "maxrows", "how", NULL };
1544 	static _PYFUNC *row_converters[] =
1545 	{
1546 		_mysql_row_to_tuple,
1547 		_mysql_row_to_dict,
1548 		_mysql_row_to_dict_old
1549 	};
1550 	_PYFUNC *convert_row;
1551 	unsigned int maxrows=1, how=0, skiprows=0, rowsadded;
1552 	PyObject *r=NULL;
1553 
1554 	if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|ii:fetch_row", kwlist,
when PyArg_ParseTupleAndKeywords() succeeds
taking False path
1555 					 &maxrows, &how))
1556 		return NULL;
1557 	check_result_connection(self);
when treating unknown struct PyObject * from _mysql.c:1557 as non-NULL
when considering range: -0x80000000 <= value <= -1
taking False path
1558 	if (how < 0 || how >= sizeof(row_converters)) {
when considering range: -0x80000000 <= value <= 23
taking False path
1559 		PyErr_SetString(PyExc_ValueError, "how out of range");
1560 		return NULL;
1561 	}
1562 	convert_row = row_converters[how];
1563 	if (maxrows) {
when considering value == (int)0 from _mysql.c:1554
taking False path
1564 		if (!(r = PyTuple_New(maxrows))) goto error;
1565 		rowsadded = _mysql__fetch_row(self, &r, skiprows, maxrows, 
1566 				convert_row);
1567 		if (rowsadded == -1) goto error;
1568 	} else {
1569 		if (self->use) {
when considering range: -0x80000000 <= value <= -1
taking True path
1570 			maxrows = 1000;
1571 			if (!(r = PyTuple_New(maxrows))) goto error;
when PyTuple_New() succeeds
taking False path
'*r.72' was allocated at: 			if (!(r = PyTuple_New(maxrows))) goto error;
ob_refcnt is now refs: 1 owned
1572 			while (1) {
1573 				rowsadded = _mysql__fetch_row(self, &r, skiprows,
1574 						maxrows, convert_row);
1575 				if (rowsadded == -1) goto error;
taking False path
1576 				skiprows += rowsadded;
1577 				if (rowsadded < maxrows) break;
when considering range: -0x80000000 <= value <= 999
taking True path
1578 				if (MyTuple_Resize(&r, skiprows+maxrows, 0) == -1)
1579 					goto error;
1580 			}
1581 		} else {
1582 			/* XXX if overflow, maxrows<0? */
1583 			maxrows = (int) mysql_num_rows(self->result);
1584 			if (!(r = PyTuple_New(maxrows))) goto error;
1585 			rowsadded = _mysql__fetch_row(self, &r, 0,
1586 					maxrows, convert_row);
1587 			if (rowsadded == -1) goto error;
1588 		}
1589 	}
1590 	return r;
1591   error:
1592 	Py_XDECREF(r);
1593 	return NULL;
1594 }

File: _mysql.c
Function: _mysql_ResultObject_fetch_row
Error: returning (PyObject*)NULL without setting an exception
1536 static PyObject *
1537 _mysql_ResultObject_fetch_row(
1538 	_mysql_ResultObject *self,
1539 	PyObject *args,
1540 	PyObject *kwargs)
1541 {
1542 	typedef PyObject *_PYFUNC(_mysql_ResultObject *, MYSQL_ROW);
1543 	static char *kwlist[] = { "maxrows", "how", NULL };
1544 	static _PYFUNC *row_converters[] =
1545 	{
1546 		_mysql_row_to_tuple,
1547 		_mysql_row_to_dict,
1548 		_mysql_row_to_dict_old
1549 	};
1550 	_PYFUNC *convert_row;
1551 	unsigned int maxrows=1, how=0, skiprows=0, rowsadded;
1552 	PyObject *r=NULL;
1553 
1554 	if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|ii:fetch_row", kwlist,
when PyArg_ParseTupleAndKeywords() succeeds
taking False path
1555 					 &maxrows, &how))
1556 		return NULL;
1557 	check_result_connection(self);
when treating unknown struct PyObject * from _mysql.c:1557 as non-NULL
when considering range: -0x80000000 <= value <= -1
taking False path
1558 	if (how < 0 || how >= sizeof(row_converters)) {
when considering range: -0x80000000 <= value <= 23
taking False path
1559 		PyErr_SetString(PyExc_ValueError, "how out of range");
1560 		return NULL;
1561 	}
1562 	convert_row = row_converters[how];
1563 	if (maxrows) {
when considering value == (int)0 from _mysql.c:1554
taking False path
1564 		if (!(r = PyTuple_New(maxrows))) goto error;
1565 		rowsadded = _mysql__fetch_row(self, &r, skiprows, maxrows, 
1566 				convert_row);
1567 		if (rowsadded == -1) goto error;
1568 	} else {
1569 		if (self->use) {
when considering range: -0x80000000 <= value <= -1
taking True path
1570 			maxrows = 1000;
1571 			if (!(r = PyTuple_New(maxrows))) goto error;
when PyTuple_New() succeeds
taking False path
1572 			while (1) {
1573 				rowsadded = _mysql__fetch_row(self, &r, skiprows,
1574 						maxrows, convert_row);
1575 				if (rowsadded == -1) goto error;
taking False path
1576 				skiprows += rowsadded;
1577 				if (rowsadded < maxrows) break;
when considering range: 1000 <= value <= 0x7fffffff
taking False path
1578 				if (MyTuple_Resize(&r, skiprows+maxrows, 0) == -1)
when considering value == (int)-1 from _mysql.c:1578
taking True path
1579 					goto error;
1580 			}
1581 		} else {
1582 			/* XXX if overflow, maxrows<0? */
1583 			maxrows = (int) mysql_num_rows(self->result);
1584 			if (!(r = PyTuple_New(maxrows))) goto error;
1585 			rowsadded = _mysql__fetch_row(self, &r, 0,
1586 					maxrows, convert_row);
1587 			if (rowsadded == -1) goto error;
1588 		}
1589 	}
1590 	return r;
1591   error:
1592 	Py_XDECREF(r);
when treating unknown struct PyObject * * from _mysql.c:1578 as non-NULL
taking False path
when considering range: -0x8000000000000000 <= value <= -1
taking True path
1593 	return NULL;
1594 }

File: _mysql.c
Function: _mysql_ResultObject_fetch_row
Error: memory leak: ob_refcnt of '*r.74' is 1 too high
1536 static PyObject *
1537 _mysql_ResultObject_fetch_row(
1538 	_mysql_ResultObject *self,
1539 	PyObject *args,
1540 	PyObject *kwargs)
1541 {
1542 	typedef PyObject *_PYFUNC(_mysql_ResultObject *, MYSQL_ROW);
1543 	static char *kwlist[] = { "maxrows", "how", NULL };
1544 	static _PYFUNC *row_converters[] =
1545 	{
1546 		_mysql_row_to_tuple,
1547 		_mysql_row_to_dict,
1548 		_mysql_row_to_dict_old
1549 	};
1550 	_PYFUNC *convert_row;
1551 	unsigned int maxrows=1, how=0, skiprows=0, rowsadded;
1552 	PyObject *r=NULL;
1553 
1554 	if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|ii:fetch_row", kwlist,
when PyArg_ParseTupleAndKeywords() succeeds
taking False path
1555 					 &maxrows, &how))
1556 		return NULL;
1557 	check_result_connection(self);
when treating unknown struct PyObject * from _mysql.c:1557 as non-NULL
when considering range: -0x80000000 <= value <= -1
taking False path
1558 	if (how < 0 || how >= sizeof(row_converters)) {
when considering range: -0x80000000 <= value <= 23
taking False path
1559 		PyErr_SetString(PyExc_ValueError, "how out of range");
1560 		return NULL;
1561 	}
1562 	convert_row = row_converters[how];
1563 	if (maxrows) {
when considering value == (int)0 from _mysql.c:1554
taking False path
1564 		if (!(r = PyTuple_New(maxrows))) goto error;
1565 		rowsadded = _mysql__fetch_row(self, &r, skiprows, maxrows, 
1566 				convert_row);
1567 		if (rowsadded == -1) goto error;
1568 	} else {
1569 		if (self->use) {
when considering value == (int)0 from _mysql.c:1569
taking False path
1570 			maxrows = 1000;
1571 			if (!(r = PyTuple_New(maxrows))) goto error;
1572 			while (1) {
1573 				rowsadded = _mysql__fetch_row(self, &r, skiprows,
1574 						maxrows, convert_row);
1575 				if (rowsadded == -1) goto error;
1576 				skiprows += rowsadded;
1577 				if (rowsadded < maxrows) break;
1578 				if (MyTuple_Resize(&r, skiprows+maxrows, 0) == -1)
1579 					goto error;
1580 			}
1581 		} else {
1582 			/* XXX if overflow, maxrows<0? */
1583 			maxrows = (int) mysql_num_rows(self->result);
1584 			if (!(r = PyTuple_New(maxrows))) goto error;
when PyTuple_New() succeeds
taking False path
'*r.74' was allocated at: 			if (!(r = PyTuple_New(maxrows))) goto error;
ob_refcnt is now refs: 1 owned
1585 			rowsadded = _mysql__fetch_row(self, &r, 0,
1586 					maxrows, convert_row);
1587 			if (rowsadded == -1) goto error;
taking False path
1588 		}
1589 	}
1590 	return r;
1591   error:
1592 	Py_XDECREF(r);
1593 	return NULL;
1594 }