Any time the program is run, regardless of command options, I get: Traceback (most recent call last): File "/usr/bin/beet", line 5, in <module> from beets.ui import main File "/usr/lib/python3.14/site-packages/beets/ui/__init__.py", line 858, in <module> indent_str, left, right, separator=" -> ", max_width=term_width() ~~~~~~~~~~^^ File "/usr/lib/python3.14/site-packages/beets/ui/__init__.py", line 715, in term_width buf = fcntl.ioctl(0, termios.TIOCGWINSZ, " " * 4) SystemError: buffer overflow Reproducible: Always Steps to Reproduce: 1. Install beets 2. Run `beets` or any sub command Actual Results: Traceback (most recent call last): File "/usr/bin/beet", line 5, in <module> from beets.ui import main File "/usr/lib/python3.14/site-packages/beets/ui/__init__.py", line 858, in <module> indent_str, left, right, separator=" -> ", max_width=term_width() ~~~~~~~~~~^^ File "/usr/lib/python3.14/site-packages/beets/ui/__init__.py", line 715, in term_width buf = fcntl.ioctl(0, termios.TIOCGWINSZ, " " * 4) SystemError: buffer overflow Expected Results: Program outputs help options or does an import
Appears to be caused to the change to python 3.14; since it didn't occur in F42. Researching.
diff -Naur beets-2.5.1/beets/ui/__init__.py beets-2.5.1.patched/beets/ui/__init__.py --- beets-2.5.1/beets/ui/__init__.py 2025-10-14 15:51:25.515184900 -0700 +++ beets-2.5.1.patched/beets/ui/__init__.py 2025-10-31 11:57:03.165497870 -0700 @@ -700,27 +700,31 @@ def term_width(): - """Get the width (columns) of the terminal.""" + """Get the width (columns) of the terminal, robustly.""" fallback = config["ui"]["terminal_width"].get(int) - # The fcntl and termios modules are not available on non-Unix - # platforms, so we fall back to a constant. + # First, try POSIX ioctl with a proper bytes buffer (Python 3.13+ requires it). try: - import fcntl - import termios - except ImportError: - return fallback + import fcntl, termios, struct + # Prepare an 8-byte buffer and unpack all four unsigned shorts + s = struct.pack("HHHH", 0, 0, 0, 0) + res = fcntl.ioctl(0, termios.TIOCGWINSZ, s) + rows, cols, _, _ = struct.unpack("HHHH", res) + if cols: + return int(cols) + except Exception: + # Includes ImportError (non-Unix), ENOTTY, SystemError on 3.13/3.14, etc. + pass + # Next, try shutil (respects $COLUMNS and works on non-TTYs) try: - buf = fcntl.ioctl(0, termios.TIOCGWINSZ, " " * 4) - except OSError: - return fallback - try: - height, width = struct.unpack("hh", buf) - except struct.error: - return fallback - return width + import shutil + return shutil.get_terminal_size((fallback or 80, 24)).columns + except Exception: + pass + # Final fallback to configured/static width + return fallback or 80 def split_into_lines(string, width_tuple): """Splits string into a list of substrings at whitespace.
FEDORA-2025-b66c97cdf6 (beets-2.5.1-2.fc44) has been submitted as an update to Fedora 44. https://bodhi.fedoraproject.org/updates/FEDORA-2025-b66c97cdf6
FEDORA-2025-b589181602 (beets-2.5.1-2.fc43) has been submitted as an update to Fedora 43. https://bodhi.fedoraproject.org/updates/FEDORA-2025-b589181602
FEDORA-2025-b66c97cdf6 (beets-2.5.1-2.fc44) has been pushed to the Fedora 44 stable repository. If problem still persists, please make note of it in this bug report.
FEDORA-2025-b589181602 has been pushed to the Fedora 43 testing repository. Soon you'll be able to install the update with the following command: `sudo dnf upgrade --enablerepo=updates-testing --refresh --advisory=FEDORA-2025-b589181602` You can provide feedback for this update here: https://bodhi.fedoraproject.org/updates/FEDORA-2025-b589181602 See also https://fedoraproject.org/wiki/QA:Updates_Testing for more information on how to test updates.
FEDORA-2025-b589181602 (beets-2.5.1-2.fc43) has been pushed to the Fedora 43 stable repository. If problem still persists, please make note of it in this bug report.