diff options
author | Federico Di Gregorio <fog@initd.org> | 2005-05-15 10:29:59 +0000 |
---|---|---|
committer | Federico Di Gregorio <fog@initd.org> | 2005-05-15 10:29:59 +0000 |
commit | e1e0b34343dff015a948e2728b8356ade685c43e (patch) | |
tree | 70c593ada4882d5d39d14b113312d6e55ad8059c | |
parent | 35c42310ec14722ddf5c888cff33e5ff3b958da1 (diff) | |
download | psycopg2-e1e0b34343dff015a948e2728b8356ade685c43e.tar.gz |
Fixed wrong refcnt on None.
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | psycopg/microprotocols.c | 2 |
2 files changed, 7 insertions, 0 deletions
@@ -1,3 +1,8 @@ +2005-05-15 Federico Di Gregorio <fog@debian.org> + + * psycopg/microprotocols.c (microprotocols_adapt): fixed memory + leak on None as suggested by gh (bug #16.) + 2005-05-10 Federico Di Gregorio <fog@debian.org> * lib/extras.py (DictRow): we now save a reference to the index diff --git a/psycopg/microprotocols.c b/psycopg/microprotocols.c index 6f75f25..4f97279 100644 --- a/psycopg/microprotocols.c +++ b/psycopg/microprotocols.c @@ -93,6 +93,7 @@ microprotocols_adapt(PyObject *obj, PyObject *proto, PyObject *alt) if (PyObject_HasAttrString(proto, "__adapt__")) { PyObject *adapted = PyObject_CallMethod(proto, "__adapt__", "O", obj); if (adapted && adapted != Py_None) return adapted; + Py_XDECREF(adapted); if (PyErr_Occurred() && !PyErr_ExceptionMatches(PyExc_TypeError)) return NULL; } @@ -101,6 +102,7 @@ microprotocols_adapt(PyObject *obj, PyObject *proto, PyObject *alt) if (PyObject_HasAttrString(obj, "__conform__")) { PyObject *adapted = PyObject_CallMethod(obj, "__conform__","O", proto); if (adapted && adapted != Py_None) return adapted; + Py_XDECREF(adapted); if (PyErr_Occurred() && !PyErr_ExceptionMatches(PyExc_TypeError)) return NULL; } |