_PyTuple_Resize: take into account the empty tuple. There can be only one.
Instead of raising a SystemError, just create a new tuple of the desired
size.

This fixes (at least) SF bug #420343.
diff --git a/Objects/tupleobject.c b/Objects/tupleobject.c
index 6cd74eb..16e0b12 100644
--- a/Objects/tupleobject.c
+++ b/Objects/tupleobject.c
@@ -500,8 +500,8 @@
 	int sizediff;
 
 	v = (PyTupleObject *) *pv;
-	if (v == NULL || !PyTuple_Check(v) || v->ob_refcnt != 1 ||
-             last_is_sticky) {
+	if (v == NULL || !PyTuple_Check(v) || last_is_sticky ||
+	    (v->ob_size != 0 && v->ob_refcnt != 1)) {
 		*pv = 0;
 		Py_XDECREF(v);
 		PyErr_BadInternalCall();
@@ -511,6 +511,15 @@
 	if (sizediff == 0)
 		return 0;
 
+	if (v->ob_size == 0) {
+		/* Empty tuples are often shared, so we should never 
+		   resize them in-place even if we do own the only
+		   (current) reference */
+		Py_DECREF(v);
+		*pv = PyTuple_New(newsize);
+		return 0;
+	}
+
 	/* XXX UNREF/NEWREF interface should be more symmetrical */
 #ifdef Py_REF_DEBUG
 	--_Py_RefTotal;