Crashers of the day: Py_CLEAR must be used when there is a chance that the
function can be called recursively.
This was discussed in issue1020188.

In python codebase, all occurrences of Py_[X]DECREF(xxx->yyy) are suspect,
except when they appear in tp_new or tp_dealloc functions, or when
the member cannot be of a user-defined class.
Note that tp_init is not safe.

I do have a (crashing) example for every changed line.
Is it worth adding them to the test suite?

Example:

class SpecialStr(str):
    def __del__(self):
        s.close()

import cStringIO
s = cStringIO.StringIO(SpecialStr("text"))
s.close() # Segfault
diff --git a/Modules/_struct.c b/Modules/_struct.c
index 6149964..8e5420c 100644
--- a/Modules/_struct.c
+++ b/Modules/_struct.c
@@ -1471,7 +1471,7 @@
 		return -1;
 
 	Py_INCREF(o_format);
-	Py_XDECREF(soself->s_format);
+	Py_CLEAR(soself->s_format);
 	soself->s_format = o_format;
 
 	ret = prepare_s(soself);