From 96bc254c3b6c0f4291a46cd1ffb9ea22e71c59b0 Mon Sep 17 00:00:00 2001 From: Edward Welbourne Date: Mon, 7 Jun 2021 12:10:01 +0200 Subject: Hangul composition: use < base + count checks, not <= checks Before Unicode 4.1.0 there was an error in the example code for Hangul normalization that used <= on the ends of some ranges of values, where they should have used < tests. This was faithfully copied but the need for correction has only lately come to light. Thanks to Ma Lin for pointing this out and providing the fix and test-cases. Fixes: QTBUG-71894 Change-Id: I5c7fec1f9fac1f7a25b2d5e9c3109a90a7ff49e1 Reviewed-by: Thiago Macieira (cherry picked from commit 182afbe335a8bd494a86defc5d32da3ae8ec7920) Reviewed-by: Qt Cherry-pick Bot --- src/corelib/text/qchar.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/corelib/text/qchar.cpp b/src/corelib/text/qchar.cpp index 7aff25fb4a..cbe3b61055 100644 --- a/src/corelib/text/qchar.cpp +++ b/src/corelib/text/qchar.cpp @@ -1886,7 +1886,7 @@ inline bool operator<(const UCS2SurrogatePair &ligature, uint u1) static uint inline ligatureHelper(uint u1, uint u2) { - if (u1 >= Hangul_LBase && u1 <= Hangul_SBase + Hangul_SCount) { + if (u1 >= Hangul_LBase && u1 < Hangul_SBase + Hangul_SCount) { // compute Hangul syllable composition as per UAX #15 // hangul L-V pair const uint LIndex = u1 - Hangul_LBase; @@ -1899,7 +1899,7 @@ static uint inline ligatureHelper(uint u1, uint u2) const uint SIndex = u1 - Hangul_SBase; if (SIndex < Hangul_SCount && (SIndex % Hangul_TCount) == 0) { const uint TIndex = u2 - Hangul_TBase; - if (TIndex <= Hangul_TCount) + if (TIndex < Hangul_TCount && TIndex) return u1 + TIndex; } } -- cgit v1.2.3