[Python-Dev] Coverity Scan (original) (raw)

Antoine Pitrou solipsis at pitrou.net
Fri Jul 26 16:48:03 CEST 2013


Le Fri, 26 Jul 2013 16:29:59 +0200, Christian Heimes <christian at python.org> a écrit :

Coverity is able to detect some cases of refcount leaks. I don't know if the software is able to keep track of all reference counts. But it understands missing PyDECREF() in error branches.

For example: PyObject *n = PyLongFromLong(0); PyObject *u = PyUnicodeFromString("example"); if (u == NULL) { return NULL; /* Coverity detects that 'n' leaks memory */ }

But 'n' doesn't leak memory since PyLong_FromLong(0) is statically allocated ;-)

More generally, in similar cases (e.g. replace "0" with a non-small integer), you don't need any knowledge of reference counts to infer that there is a memory leak. When the code discards the only existing pointer to a heap-allocated memory area, there's a leak.

What we call "refcount leaks" is generally when an area is still pointer-accessible, but failure to decrement the reference count appropriately means it will never be released.

Regards

Antoine.



More information about the Python-Dev mailing list