Ref: https://github.com/cyrus-and/gdb-dashboard/pull/342 From b47be5e0563dec7d8d71bd5477d7c27bb1fda0c1 Mon Sep 17 00:00:00 2001 From: Valentin Tunev Date: Wed, 5 Nov 2025 21:59:17 +0200 Subject: [PATCH] Fix buffer overflow in get_term_size() Use an 8-byte buffer, unpack the first 4 bytes for rows/cols, and include SystemError in the except clause to cover additional terminal errors. --- .gdbinit | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.gdbinit b/.gdbinit index 3af237b..654f27d 100644 --- a/.gdbinit +++ b/.gdbinit @@ -612,11 +612,11 @@ class Dashboard(gdb.Command): else: import termios import fcntl - # first 2 shorts (4 byte) of struct winsize - raw = fcntl.ioctl(fd, termios.TIOCGWINSZ, ' ' * 4) - height, width = struct.unpack('hh', raw) + # struct winsize is 8 bytes, but we only need the first 2 shorts (rows, cols) + raw = fcntl.ioctl(fd, termios.TIOCGWINSZ, b'\0' * 8) + height, width = struct.unpack('hh', raw[:4]) return int(width), int(height) - except (ImportError, OSError): + except (ImportError, OSError, SystemError): # this happens when no curses library is found on windows or when # the terminal is not properly configured return 80, 24 # hardcoded fallback value