1692 static PyObject *
1693 cpyrit_grouper(PyObject *self, PyObject *args)
1694 {
1695 PyObject *result;
1696 int i, stringsize, groupsize;
1697 char *string;
1698
1699 if (!PyArg_ParseTuple(args, "s#i", &string, &stringsize, &groupsize))
when PyArg_ParseTuple() succeeds
taking False path
1700 return NULL;
1701
1702 if (stringsize % groupsize != 0)
when considering value == (int)0 from cpyrit/_cpyrit_cpu.c:1702
taking False path
1703 {
1704 PyErr_SetString(PyExc_ValueError, "Invalid size of input string.");
1705 return NULL;
1706 }
1707
1708 result = PyTuple_New(stringsize / groupsize);
when PyTuple_New() succeeds
1709 if (!result)
taking False path
1710 {
1711 PyErr_NoMemory();
1712 return NULL;
1713 }
1714 for (i = 0; i < stringsize / groupsize; i++)
when considering value == (int)1 from cpyrit/_cpyrit_cpu.c:1714
taking True path
taking False path
1715 PyTuple_SetItem(result, i, PyString_FromStringAndSize(&string[i * groupsize], groupsize));
when PyString_FromStringAndSize() succeeds
when considering range: -2 <= value <= 0
when PyTuple_SetItem() fails (index out of range)
PyStringObject allocated at: PyTuple_SetItem(result, i, PyString_FromStringAndSize(&string[i * groupsize], groupsize));
ob_refcnt is now refs: 1 + N where N >= 0
1716
1717 return result;
1718 }
ob_refcnt of PyStringObject is 1 too high
was expecting final ob_refcnt to be N + 0 (for some unknown N)
but final ob_refcnt is N + 1