fix: use O_RDONLY (0) for /dev/tty open, guard invalid fd

This commit is contained in:
2026-05-14 14:10:58 -04:00
parent a227a52c48
commit 41e2b867be
2 changed files with 5 additions and 7 deletions

View File

@@ -173,11 +173,10 @@ as a fallback when a keyword is not in *named-colors*.")
(values (sb-alien:deref winsize 1) ;; cols (values (sb-alien:deref winsize 1) ;; cols
(sb-alien:deref winsize 0))) ;; rows (sb-alien:deref winsize 0))) ;; rows
(sb-alien:free-alien winsize)))) (sb-alien:free-alien winsize))))
;; Direct ioctl on /dev/tty — opens the real controlling terminal, ;; Direct ioctl on /dev/tty — opens the real controlling terminal.
;; bypassing any fd weirdness from SBCL's subprocess or stream setup.
(ignore-errors (ignore-errors
(let ((tty-fd (sb-unix:unix-open "/dev/tty" 2 0))) ; O_RDWR = 2 (let ((tty-fd (sb-unix:unix-open "/dev/tty" 0 0))) ; O_RDONLY
(when tty-fd (when (and tty-fd (numberp tty-fd) (> tty-fd 0))
(unwind-protect (unwind-protect
(let* ((winsize (sb-alien:make-alien sb-alien:unsigned-short 4))) (let* ((winsize (sb-alien:make-alien sb-alien:unsigned-short 4)))
(sb-unix:unix-ioctl tty-fd 21523 (sb-alien:alien-sap winsize)) (sb-unix:unix-ioctl tty-fd 21523 (sb-alien:alien-sap winsize))

View File

@@ -34,10 +34,9 @@
(values (sb-alien:deref winsize 1) (values (sb-alien:deref winsize 1)
(sb-alien:deref winsize 0))) (sb-alien:deref winsize 0)))
(sb-alien:free-alien winsize)))) (sb-alien:free-alien winsize))))
;; Direct ioctl on /dev/tty — opens the real controlling terminal.
(ignore-errors (ignore-errors
(let ((tty-fd (sb-unix:unix-open "/dev/tty" 2 0))) ; O_RDWR = 2 (let ((tty-fd (sb-unix:unix-open "/dev/tty" 0 0))) ; O_RDONLY
(when tty-fd (when (and tty-fd (numberp tty-fd) (> tty-fd 0))
(unwind-protect (unwind-protect
(let* ((winsize (sb-alien:make-alien sb-alien:unsigned-short 4))) (let* ((winsize (sb-alien:make-alien sb-alien:unsigned-short 4)))
(sb-unix:unix-ioctl tty-fd 21523 (sb-alien:alien-sap winsize)) (sb-unix:unix-ioctl tty-fd 21523 (sb-alien:alien-sap winsize))