Fix for

[ 784825 ] fix obscure crash in descriptor handling

Should be applied to release23-maint and in all likelyhood
release22-maint, too.

Certainly doesn't apply to release21-maint.
diff --git a/Objects/object.c b/Objects/object.c
index 93057c0..8c4bd0e 100644
--- a/Objects/object.c
+++ b/Objects/object.c
@@ -1412,12 +1412,15 @@
 		}
 	}
 
+	Py_XINCREF(descr);
+
 	f = NULL;
 	if (descr != NULL &&
 	    PyType_HasFeature(descr->ob_type, Py_TPFLAGS_HAVE_CLASS)) {
 		f = descr->ob_type->tp_descr_get;
 		if (f != NULL && PyDescr_IsData(descr)) {
 			res = f(descr, obj, (PyObject *)obj->ob_type);
+			Py_DECREF(descr);
 			goto done;
 		}
 	}
@@ -1445,6 +1448,7 @@
 			res = PyDict_GetItem(dict, name);
 			if (res != NULL) {
 				Py_INCREF(res);
+				Py_XDECREF(descr);
 				goto done;
 			}
 		}
@@ -1452,12 +1456,13 @@
 
 	if (f != NULL) {
 		res = f(descr, obj, (PyObject *)obj->ob_type);
+		Py_DECREF(descr);
 		goto done;
 	}
 
 	if (descr != NULL) {
-		Py_INCREF(descr);
 		res = descr;
+		/* descr was already increfed above */
 		goto done;
 	}