From e9f8471a280d99db6825ef5057f1f67f5af5fe38 Mon Sep 17 00:00:00 2001 From: Bananymous Date: Mon, 2 Jun 2025 10:46:15 +0300 Subject: [PATCH] BAN: Return UTF::invalid from byte_length instead of 0 --- BAN/include/BAN/UTF8.h | 2 +- userspace/libraries/LibC/stdlib.cpp | 9 ++++++--- userspace/libraries/LibFont/PSF.cpp | 2 +- userspace/programs/Terminal/Terminal.cpp | 2 +- 4 files changed, 9 insertions(+), 6 deletions(-) diff --git a/BAN/include/BAN/UTF8.h b/BAN/include/BAN/UTF8.h index 5718f12b13..1976172b05 100644 --- a/BAN/include/BAN/UTF8.h +++ b/BAN/include/BAN/UTF8.h @@ -18,7 +18,7 @@ namespace BAN::UTF8 return 3; if ((first_byte & 0xF8) == 0xF0) return 4; - return 0; + return UTF8::invalid; } template requires (sizeof(T) == 1) diff --git a/userspace/libraries/LibC/stdlib.cpp b/userspace/libraries/LibC/stdlib.cpp index 42056228d7..41317673b1 100644 --- a/userspace/libraries/LibC/stdlib.cpp +++ b/userspace/libraries/LibC/stdlib.cpp @@ -560,9 +560,12 @@ int mblen(const char* s, size_t n) case LOCALE_POSIX: return 1; case LOCALE_UTF8: - if (const auto bytes = BAN::UTF8::byte_length(*s); n >= bytes) - return bytes; - return -1; + const auto bytes = BAN::UTF8::byte_length(*s); + if (bytes == BAN::UTF8::invalid) + return -1; + if (n < bytes) + return -1; + return bytes; } ASSERT_NOT_REACHED(); } diff --git a/userspace/libraries/LibFont/PSF.cpp b/userspace/libraries/LibFont/PSF.cpp index 9bab58b0bf..242b587944 100644 --- a/userspace/libraries/LibFont/PSF.cpp +++ b/userspace/libraries/LibFont/PSF.cpp @@ -176,7 +176,7 @@ namespace LibFont uint32_t len = BAN::UTF8::byte_length(bytes[0]); - if (len == 0) + if (len == BAN::UTF8::invalid) { invalid_utf = true; byte_index = 0; diff --git a/userspace/programs/Terminal/Terminal.cpp b/userspace/programs/Terminal/Terminal.cpp index 6ab8480885..315183227b 100644 --- a/userspace/programs/Terminal/Terminal.cpp +++ b/userspace/programs/Terminal/Terminal.cpp @@ -748,7 +748,7 @@ Rectangle Terminal::putchar(uint8_t ch) m_utf8_bytes[m_utf8_index++] = ch; const size_t utf8_len = BAN::UTF8::byte_length(m_utf8_bytes[0]); - if (utf8_len == 0) + if (utf8_len == BAN::UTF8::invalid) { dwarnln("invalid utf8 leading byte 0x{2H}", ch); m_utf8_index = 0;