From a9cdfdc98ec4ef4b4e608537acd828d35a936a60 Mon Sep 17 00:00:00 2001 From: Roy Ivy III Date: Mon, 12 Aug 2024 16:36:37 -0500 Subject: [PATCH] fix(runtime/windows): fix calculation of console size (#23873) --- runtime/ops/tty.rs | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/runtime/ops/tty.rs b/runtime/ops/tty.rs index be22bdd2a4..5b49e3a248 100644 --- a/runtime/ops/tty.rs +++ b/runtime/ops/tty.rs @@ -351,10 +351,20 @@ fn console_size_from_fd( { return Err(Error::last_os_error()); } - Ok(ConsoleSize { - cols: bufinfo.dwSize.X as u32, - rows: bufinfo.dwSize.Y as u32, - }) + + // calculate the size of the visible window + // * use over/under-flow protections b/c MSDN docs only imply that srWindow components are all non-negative + // * ref: @@ + let cols = std::cmp::max( + bufinfo.srWindow.Right as i32 - bufinfo.srWindow.Left as i32 + 1, + 0, + ) as u32; + let rows = std::cmp::max( + bufinfo.srWindow.Bottom as i32 - bufinfo.srWindow.Top as i32 + 1, + 0, + ) as u32; + + Ok(ConsoleSize { cols, rows }) } }