Fix logic error in Python/_warnings.c and add a test to verify
diff --git a/Python/_warnings.c b/Python/_warnings.c
index 0e48675..e75d4fd 100644
--- a/Python/_warnings.c
+++ b/Python/_warnings.c
@@ -400,6 +400,8 @@
                     PyErr_SetString(PyExc_TypeError,
                                     "warnings.showwarning() must be set to a "
                                     "function or method");
+                    Py_DECREF(show_fxn);
+                    goto cleanup;
                 }
 
                 defaults = PyFunction_GetDefaults(check_fxn);