Issue #20437: Fixed 43 potential bugs when deleting objects references.
diff --git a/Modules/cdmodule.c b/Modules/cdmodule.c
index 8dfb769..9ee9b0b 100644
--- a/Modules/cdmodule.c
+++ b/Modules/cdmodule.c
@@ -535,10 +535,8 @@
/* no sense in keeping the callbacks, so remove them */
for (i = 0; i < NCALLBACKS; i++) {
- Py_XDECREF(self->ob_cdcallbacks[i].ob_cdcallback);
- self->ob_cdcallbacks[i].ob_cdcallback = NULL;
- Py_XDECREF(self->ob_cdcallbacks[i].ob_cdcallbackarg);
- self->ob_cdcallbacks[i].ob_cdcallbackarg = NULL;
+ Py_CLEAR(self->ob_cdcallbacks[i].ob_cdcallback);
+ Py_CLEAR(self->ob_cdcallbacks[i].ob_cdcallbackarg);
}
Py_INCREF(Py_None);
@@ -588,11 +586,9 @@
CDremovecallback(self->ob_cdparser, (CDDATATYPES) type);
- Py_XDECREF(self->ob_cdcallbacks[type].ob_cdcallback);
- self->ob_cdcallbacks[type].ob_cdcallback = NULL;
+ Py_CLEAR(self->ob_cdcallbacks[type].ob_cdcallback);
- Py_XDECREF(self->ob_cdcallbacks[type].ob_cdcallbackarg);
- self->ob_cdcallbacks[type].ob_cdcallbackarg = NULL;
+ Py_CLEAR(self->ob_cdcallbacks[type].ob_cdcallbackarg);
Py_INCREF(Py_None);
return Py_None;
@@ -668,10 +664,8 @@
int i;
for (i = 0; i < NCALLBACKS; i++) {
- Py_XDECREF(self->ob_cdcallbacks[i].ob_cdcallback);
- self->ob_cdcallbacks[i].ob_cdcallback = NULL;
- Py_XDECREF(self->ob_cdcallbacks[i].ob_cdcallbackarg);
- self->ob_cdcallbacks[i].ob_cdcallbackarg = NULL;
+ Py_CLEAR(self->ob_cdcallbacks[i].ob_cdcallback);
+ Py_CLEAR(self->ob_cdcallbacks[i].ob_cdcallbackarg);
}
CDdeleteparser(self->ob_cdparser);
PyObject_Del(self);