[Python-modules-team] Bug#938965: Alsaseq constants are wrong

Ben Bell bjb-debian-bugs at deus.net
Fri Jan 8 10:13:40 GMT 2021


FYI I'm still affected by this issue on up-to-date buster. I have been
using the following workaround in my code to recast the constants as ints
but I think we probably want to look at backporting whatever fix is in
later (bullseye?) releases:

  # Ugly workaround for #938965. Brute force conversion of constants to
  # ints from their representations:
  for k, v in alsaseq.__dict__.items():
      if k.startswith("SEQ_"):
          try:
              alsaseq.__dict__[k] = int(repr(v).split("(")[1][:-1], 16)
          except:
              pass


On Fri, Jan 08, 2021 at 09:58:12AM +0000, Ben Bell wrote:
> Package: python-pyalsa
> Version: 1.1.6-1+b1
> Severity: important
> 
> pyalsa version 1.1.6 appears to have introduced a bug when setting
> sysex data in events. Rather than the string of bytes provided, it
> instead produces an equal length string but containing the last byte
> over and over:
> 
> With 1.0.26:
>   Data set as [240, 126, 127, 6, 1, 247]
>   Data retrieved as {'ext': [240, 126, 127, 6, 1, 247]}
> 
> With 1.1.6:
>   Data set as [240, 126, 127, 6, 1, 247]
>   Data retrieved as {'ext': [247, 247, 247, 247, 247, 247]}
> 
> Reproducer:
>   #!/usr/bin/python
>   #
>   
>   from __future__ import print_function
>   import pyalsa.alsaseq as alsaseq
>   
>   seq = alsaseq.Sequencer()
>   ne = alsaseq.SeqEvent(alsaseq.SEQ_EVENT_SYSEX)
>   
>   data = [0xf0, 0x7e, 0x7f, 0x06, 0x01, 0xf7]
>   
>   ne.set_data({"ext": data})
>   print("Data set as", data)
>   print("Data retrieved as", ne.get_data())
> 
> This bug is in python-1.1.6-1+b1, which is the latest python2
> version. There appears to be another bug (#938965) affecting buster
> which stops me testing with python3:
> 
>   bjb at rowlf [96] python3 test-alsa-sysex-event.py     
>   Traceback (most recent call last):
>     File "test-alsa-sysex-event.py", line 8, in <module>
>       ne = alsaseq.SeqEvent(alsaseq.SEQ_EVENT_SYSEX)
>   OverflowError: Python int too large to convert to C long
> 
> ...but if I hack around that it's reproducible in python3 too:
>    bjb at rowlf [99] python3 test-alsa-sysex-event.py
>    Data set as [240, 126, 127, 6, 1, 247]
>    Data retrieved as {'ext': [247, 247, 247, 247, 247, 247]}
> 
> At the least we might need a newer version (from bullseye -- untested by
> me) backported to buster.
> 
> bjb
> 
> 
> -- System Information:
> Debian Release: 10.6
>   APT prefers stable
>   APT policy: (500, 'stable')
> Architecture: amd64 (x86_64)
> Foreign Architectures: i386
> 
> Kernel: Linux 5.10.0-rc5-rt10-rt (SMP w/4 CPU cores; PREEMPT)
> Kernel taint flags: TAINT_UNSIGNED_MODULE
> Locale: LANG=en_GB.UTF-8, LC_CTYPE=en_GB.UTF-8 (charmap=UTF-8), LANGUAGE=en_GB:en (charmap=UTF-8)
> Shell: /bin/sh linked to /bin/dash
> Init: systemd (via /run/systemd/system)
> LSM: AppArmor: enabled
> 
> Versions of packages python-pyalsa depends on:
> ii  libasound2  1.1.8-1
> ii  libc6       2.28-10
> ii  python      2.7.16-1
> 
> python-pyalsa recommends no packages.
> 
> python-pyalsa suggests no packages.
> 
> -- no debconf information



More information about the Python-modules-team mailing list