Only call sq_repeat if the object does not have a nb_multiply slot.  One
example of where this changes behavior is when a new-style instance
defines '__mul__' and '__rmul__' and is multiplied by an int.  Before the
change the '__rmul__' method is never called, even if the int is the
left operand.
diff --git a/Objects/intobject.c b/Objects/intobject.c
index 0202980..4f43b11 100644
--- a/Objects/intobject.c
+++ b/Objects/intobject.c
@@ -341,6 +341,12 @@
 product that must have overflowed.
 */
 
+/* Return true if the sq_repeat method should be used */
+#define USE_SQ_REPEAT(o) (!PyInt_Check(o) && \
+			  o->ob_type->tp_as_sequence && \
+			  o->ob_type->tp_as_sequence->sq_repeat && \
+			  (!o->ob_type->tp_as_number || \
+			   !o->ob_type->tp_as_number->nb_multiply))
 static PyObject *
 int_mul(PyObject *v, PyObject *w)
 {
@@ -349,16 +355,12 @@
 	double doubled_longprod;	/* (double)longprod */
 	double doubleprod;		/* (double)a * (double)b */
 
-	if (!PyInt_Check(v) &&
-	    v->ob_type->tp_as_sequence &&
-	    v->ob_type->tp_as_sequence->sq_repeat) {
+	if (USE_SQ_REPEAT(v)) {
 		/* sequence * int */
 		a = PyInt_AsLong(w);
 		return (*v->ob_type->tp_as_sequence->sq_repeat)(v, a);
 	}
-	if (!PyInt_Check(w) &&
-	    w->ob_type->tp_as_sequence &&
-	    w->ob_type->tp_as_sequence->sq_repeat) {
+	if (USE_SQ_REPEAT(w)) {
 		/* int * sequence */
 		a = PyInt_AsLong(v);
 		return (*w->ob_type->tp_as_sequence->sq_repeat)(w, a);