From 8de19aff3c1b2aca74ca45e73de23705903bcfd9 Mon Sep 17 00:00:00 2001 From: Bananymous Date: Thu, 5 Jun 2025 02:38:07 +0300 Subject: [PATCH] Kernel/Terminal: Fix 24 bit ANSI SGR color parsing --- kernel/kernel/Terminal/VirtualTTY.cpp | 12 ++++++------ userspace/programs/Terminal/Terminal.cpp | 12 ++++++------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/kernel/kernel/Terminal/VirtualTTY.cpp b/kernel/kernel/Terminal/VirtualTTY.cpp index 6b2a577e..37799297 100644 --- a/kernel/kernel/Terminal/VirtualTTY.cpp +++ b/kernel/kernel/Terminal/VirtualTTY.cpp @@ -171,12 +171,12 @@ namespace Kernel BAN::Optional VirtualTTY::get_24bit_color() { ASSERT(m_ansi_state.nums[1] == 2); - if (m_ansi_state.nums[2] < 1) return {}; - if (m_ansi_state.nums[3] < 1) return {}; - if (m_ansi_state.nums[4] < 1) return {}; - const uint8_t r = BAN::Math::min(m_ansi_state.nums[2], 256) - 1; - const uint8_t g = BAN::Math::min(m_ansi_state.nums[3], 256) - 1; - const uint8_t b = BAN::Math::min(m_ansi_state.nums[4], 256) - 1; + if (m_ansi_state.nums[2] < 0) return {}; + if (m_ansi_state.nums[3] < 0) return {}; + if (m_ansi_state.nums[4] < 0) return {}; + const uint8_t r = BAN::Math::min(m_ansi_state.nums[2], 255); + const uint8_t g = BAN::Math::min(m_ansi_state.nums[3], 255); + const uint8_t b = BAN::Math::min(m_ansi_state.nums[4], 255); return TerminalDriver::Color(r, g, b); } diff --git a/userspace/programs/Terminal/Terminal.cpp b/userspace/programs/Terminal/Terminal.cpp index 31518322..51c17954 100644 --- a/userspace/programs/Terminal/Terminal.cpp +++ b/userspace/programs/Terminal/Terminal.cpp @@ -403,12 +403,12 @@ BAN::Optional Terminal::get_8bit_color() BAN::Optional Terminal::get_24bit_color() { ASSERT(m_csi_info.fields[1] == 2); - if (m_csi_info.fields[2] < 1) return {}; - if (m_csi_info.fields[3] < 1) return {}; - if (m_csi_info.fields[4] < 1) return {}; - const uint8_t r = BAN::Math::min(m_csi_info.fields[2], 256) - 1; - const uint8_t g = BAN::Math::min(m_csi_info.fields[3], 256) - 1; - const uint8_t b = BAN::Math::min(m_csi_info.fields[4], 256) - 1; + if (m_csi_info.fields[2] < 0) return {}; + if (m_csi_info.fields[3] < 0) return {}; + if (m_csi_info.fields[4] < 0) return {}; + const uint8_t r = BAN::Math::min(m_csi_info.fields[2], 255); + const uint8_t g = BAN::Math::min(m_csi_info.fields[3], 255); + const uint8_t b = BAN::Math::min(m_csi_info.fields[4], 255); return b | (g << 8) | (r << 16) | (0xCC << 24); }