summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--psycopg/microprotocols.c2
2 files changed, 7 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 1c42331..ea9be31 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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;
}