From: Chris Coleman Date: Fri, 21 Aug 2009 09:52:09 +0000 (+0200) Subject: pyalsa: fix integer overflow in alsaseq.c X-Git-Tag: v1.0.21~1 X-Git-Url: https://git.alsa-project.org/?a=commitdiff_plain;h=694ac3e27b421e75e28059a31694bdc756e47e7d;p=alsa-python.git pyalsa: fix integer overflow in alsaseq.c * Original patch description: I've been using the alsaseq python module and I found a bug. Sometimes the SEQ_* constants have extremely large and incorrect values. For example, 25769803811 instead of 35. The lower 32-bits are always correct. Obviously, I'm running a 64-bit operating system. The problem is that the `value` member of the `ConstantObject` structure is an `unsigned int` whereas it should be a `long`. I've attached a patch. It's against the latest released version, 1.0.20. * Revised patch description: I just noticed that `PyString_FromFormat` in Python 2.6 doesn't handle `%lx` in format strings, so my patch breaks `repr(Constant)`. In addition to that, it was not necessary to change the signedness of `value`. With those two things in mind, the patch perhaps ought to look like this (see attached). Signed-off-by: Chris Coleman Signed-off-by: Takashi Iwai --- diff --git a/pyalsa/alsaseq.c b/pyalsa/alsaseq.c index 5b6cd77..de131a4 100644 --- a/pyalsa/alsaseq.c +++ b/pyalsa/alsaseq.c @@ -439,7 +439,7 @@ typedef struct { ; /* value of constant */ - unsigned int value; + unsigned long int value; /* name of constant */ const char *name; /* type of constant */ @@ -470,7 +470,7 @@ static PyObject * Constant_repr(ConstantObject *self) { return PyString_FromFormat("%s(0x%x)", self->name, - self->value); + (unsigned int)self->value); } /** alsaseq.Constant tp_str */