diff Objects/intobject.c @ 19925:df409844b659 legacy-trunk

A fix for SF bug #461546 (bug in long_mul). Both int and long multiplication are changed to be more careful in their assumptions about when one of the arguments is a sequence: the assumption that at least one of the arguments must be an int (or long, respectively) is still held, but the assumption that these don't smell like sequences is no longer true: a subtype of int or long may well have a sequence-repeat thingie!
author Guido van Rossum <guido@python.org>
date Sat, 15 Sep 2001 03:14:32 +0000
parents cc146ee52897
children da00188d5270
line wrap: on
line diff
--- a/Objects/intobject.c	Sat Sep 15 02:35:15 2001 +0000
+++ b/Objects/intobject.c	Sat Sep 15 03:14:32 2001 +0000
@@ -344,14 +344,16 @@
 	long a, b, ah, bh, x, y;
 	int s = 1;
 
-	if (v->ob_type->tp_as_sequence &&
-			v->ob_type->tp_as_sequence->sq_repeat) {
+	if (!PyInt_Check(v) &&
+	    v->ob_type->tp_as_sequence &&
+	    v->ob_type->tp_as_sequence->sq_repeat) {
 		/* sequence * int */
 		a = PyInt_AsLong(w);
 		return (*v->ob_type->tp_as_sequence->sq_repeat)(v, a);
 	}
-	else if (w->ob_type->tp_as_sequence &&
-			w->ob_type->tp_as_sequence->sq_repeat) {
+	if (!PyInt_Check(w) &&
+	    w->ob_type->tp_as_sequence &&
+	    w->ob_type->tp_as_sequence->sq_repeat) {
 		/* int * sequence */
 		a = PyInt_AsLong(v);
 		return (*w->ob_type->tp_as_sequence->sq_repeat)(w, a);