complex_new():  This could leak when the argument was neither string nor
number.  This accounts for the 2 refcount leaks per test_complex run
Michael Hudson discovered (I figured only I would have the stomach to
look for leaks in floating-point code <wink>).
diff --git a/Misc/NEWS b/Misc/NEWS
index ee464ca..63827d2 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -12,6 +12,9 @@
 Core and builtins
 -----------------
 
+- complex(obj) could leak a little memory if obj wasn't a string or
+  number.
+
 - zip() with no arguments now returns an empty list instead of raising
   a TypeError exception.
 
diff --git a/Objects/complexobject.c b/Objects/complexobject.c
index 4367ff6..d50a6eb2 100644
--- a/Objects/complexobject.c
+++ b/Objects/complexobject.c
@@ -882,6 +882,9 @@
 	    ((i != NULL) && (nbi == NULL || nbi->nb_float == NULL))) {
 		PyErr_SetString(PyExc_TypeError,
 			   "complex() argument must be a string or a number");
+		if (own_r) {
+			Py_DECREF(r);
+		}
 		return NULL;
 	}
 	if (PyComplex_Check(r)) {