From e2e71502b19114f91b9f622745c52b07ff8708a6 Mon Sep 17 00:00:00 2001 From: Jesper Ek Date: Fri, 13 Dec 2024 17:47:29 +0100 Subject: [PATCH] fix: custom spell-checker stuck in infinite loop (#45001) `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 --- 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 b97f1771ff72..95e05ecccb52 100644 --- a/shell/renderer/api/electron_api_spell_check_client.cc +++ b/shell/renderer/api/electron_api_spell_check_client.cc @@ -32,7 +32,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;