]> git.alsa-project.org Git - alsa-python.git/commitdiff
pyalsa: fix integer overflow in alsaseq.c
authorChris Coleman <chris.coleman83 at gmail.com>
Fri, 21 Aug 2009 09:52:09 +0000 (11:52 +0200)
committerTakashi Iwai <tiwai@suse.de>
Fri, 21 Aug 2009 09:52:09 +0000 (11:52 +0200)
* 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 <chris.coleman83 at gmail.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
pyalsa/alsaseq.c

index 5b6cd77f81f565b1e3b7e7fa30cab74d03e83f7b..de131a49feaca06baba58544ef63761f1692037c 100644 (file)
@@ -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 */