From c0ba29bb80de74b1de480c87f991097058efbfe6 Mon Sep 17 00:00:00 2001 From: Enrico Scholz Date: Wed, 12 Nov 2025 12:48:47 +0100 Subject: [PATCH] bitbake: knotty: fix TIOCGWINSZ call for Python 3.14 and later Python 3.14 enforces stricter type and size checking for fcntl.ioctl() buffer arguments. The previous code passed a short 4-byte string ('1234') to TIOCGWINSZ, which worked by accident in older Python versions but causes a SystemError ("buffer overflow") in 3.14. TIOCGWINSZ expects an 8-byte (4x 16-bit) buffer corresponding to (rows, cols, xpix, ypix). Use an 8-byte bytes literal instead and unpack the first two values. Tested with Python 3.11, 3.13, and 3.14. (Bitbake rev: 9127359eb116827a1e0debe69f84e57717436847) Signed-off-by: Enrico Scholz Signed-off-by: Richard Purdie (cherry picked from commit 415e9e329cf8cc0c2caa01cba80c21cfac9e2414) Signed-off-by: Yoann Congal Signed-off-by: Paul Barker Signed-off-by: Richard Purdie --- bitbake/lib/bb/ui/knotty.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bitbake/lib/bb/ui/knotty.py b/bitbake/lib/bb/ui/knotty.py index 3784c93ad8..41a943adf8 100644 --- a/bitbake/lib/bb/ui/knotty.py +++ b/bitbake/lib/bb/ui/knotty.py @@ -131,7 +131,7 @@ class TerminalFilter(object): def getTerminalColumns(self): def ioctl_GWINSZ(fd): try: - cr = struct.unpack('hh', fcntl.ioctl(fd, self.termios.TIOCGWINSZ, '1234')) + cr = struct.unpack('hhhh', fcntl.ioctl(fd, self.termios.TIOCGWINSZ, b'12345678'))[0:2] except: return None return cr