Avoid assert in QTextLayout for certain strings
authorEskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@nokia.com>
Tue, 8 May 2012 14:35:20 +0000 (16:35 +0200)
committerQt by Nokia <qt-info@nokia.com>
Wed, 9 May 2012 10:07:58 +0000 (12:07 +0200)
As in other shapers, we need to make sure that the default
attributes of the first character is set before doing the
greek-specific composition (which will set the attributes
for characters > 0). The effect of this would be that
the clusterStart did not default to true in the start of
the string, and we would get an unexpected situation
in addNextCluster() in QTextLayout which would cause an assert.

The example in the task, which combines a greek polytonic
(dasia-oxia: u1FDE) with a regular combining diacritic
(asterisk under: u0359), is not a correct string, but should
not cause an assert.

Task-number: QTBUG-22864
Change-Id: Ieaff3cccbd10abc634e95e9a79dcde4c48504a3c
Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
src/3rdparty/harfbuzz/src/harfbuzz-greek.c

index f3c0ff6..3536858 100644 (file)
@@ -372,6 +372,10 @@ HB_Bool HB_GreekShape(HB_ShaperItem *shaper_item)
     *shapedChars = *uc;
     logClusters[0] = 0;
 
+    attributes[0].mark = false;
+    attributes[0].clusterStart = true;
+    attributes[0].dontPrint = false;
+
     for (i = 1; i < shaper_item->item.length; ++i) {
         hb_uint16 base = shapedChars[slen-1];
         hb_uint16 shaped = 0;