From 0702ed0212eb0ad9bef35cd73b208459ddb093bf Mon Sep 17 00:00:00 2001 From: "trop[bot]" <37223003+trop[bot]@users.noreply.github.com> Date: Mon, 16 Dec 2024 09:55:20 +0100 Subject: [PATCH] fix: custom spell-checker stuck in infinite loop (#45019) `ReadUnicodeCharacter` updates index to the last character read, and not after it. We need to manually increment it to move to the next character. It also doesn't validate that the index is valid, so we need to check that index is within bounds. Refs: #44336 Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com> Co-authored-by: Jesper Ek --- shell/renderer/api/electron_api_spell_check_client.cc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/shell/renderer/api/electron_api_spell_check_client.cc b/shell/renderer/api/electron_api_spell_check_client.cc index 2ac2251756b8..1688b6579fec 100644 --- a/shell/renderer/api/electron_api_spell_check_client.cc +++ b/shell/renderer/api/electron_api_spell_check_client.cc @@ -31,7 +31,9 @@ namespace { bool HasWordCharacters(const std::u16string& text, size_t index) { base_icu::UChar32 code; - while (base::ReadUnicodeCharacter(text.c_str(), text.size(), &index, &code)) { + while (index < text.size() && + base::ReadUnicodeCharacter(text.c_str(), text.size(), &index, &code)) { + ++index; UErrorCode error = U_ZERO_ERROR; if (uscript_getScript(code, &error) != USCRIPT_COMMON) return true;