summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/corelib/tools/qchar.cpp9
-rw-r--r--tests/auto/corelib/tools/qchar/tst_qchar.cpp14
2 files changed, 18 insertions, 5 deletions
diff --git a/src/corelib/tools/qchar.cpp b/src/corelib/tools/qchar.cpp
index 8545276dac..9ab7155c2d 100644
--- a/src/corelib/tools/qchar.cpp
+++ b/src/corelib/tools/qchar.cpp
@@ -1739,10 +1739,10 @@ static void composeHelper(QString *str, QChar::UnicodeVersion version, int from)
if (from < 0 || s.length() - from < 2)
return;
- int starter = 0; // starter position
uint stcode = 0; // starter code point
- int next = -1;
- int lastCombining = 0;
+ int starter = -1; // starter position
+ int next = -1; // to prevent i == next
+ int lastCombining = 255; // to prevent combining > lastCombining
int pos = from;
while (pos < s.length()) {
@@ -1766,8 +1766,7 @@ static void composeHelper(QString *str, QChar::UnicodeVersion version, int from)
}
int combining = p->combiningClass;
- if (i == next || combining > lastCombining) {
- Q_ASSERT(starter >= from);
+ if ((i == next || combining > lastCombining) && starter >= from) {
// allowed to form ligature with S
uint ligature = ligatureHelper(stcode, uc);
if (ligature) {
diff --git a/tests/auto/corelib/tools/qchar/tst_qchar.cpp b/tests/auto/corelib/tools/qchar/tst_qchar.cpp
index c89d553112..2ec85882b8 100644
--- a/tests/auto/corelib/tools/qchar/tst_qchar.cpp
+++ b/tests/auto/corelib/tools/qchar/tst_qchar.cpp
@@ -909,6 +909,20 @@ void tst_QChar::normalization_manual()
QVERIFY(composed.normalized(QString::NormalizationForm_KD) == decomposed);
QVERIFY(composed.normalized(QString::NormalizationForm_KC) == decomposed);
}
+ {
+ QString composed;
+ composed += QChar(0x0061);
+ composed += QChar(0x00f2);
+ QString decomposed;
+ decomposed += QChar(0x0061);
+ decomposed += QChar(0x006f);
+ decomposed += QChar(0x0300);
+
+ QVERIFY(decomposed.normalized(QString::NormalizationForm_D) == decomposed);
+ QVERIFY(decomposed.normalized(QString::NormalizationForm_C) == composed);
+ QVERIFY(decomposed.normalized(QString::NormalizationForm_KD) == decomposed);
+ QVERIFY(decomposed.normalized(QString::NormalizationForm_KC) == composed);
+ }
{ // hangul
QString composed;
composed += QChar(0xc154);