<pre style='margin:0'>
Michael Dickens (michaelld) pushed a commit to branch master
in repository macports-ports.

</pre>
<p><a href="https://github.com/macports/macports-ports/commit/e47a4481547c5a28200699acb5d5bb0fdc766b78">https://github.com/macports/macports-ports/commit/e47a4481547c5a28200699acb5d5bb0fdc766b78</a></p>
<pre style="white-space: pre; background: #F8F8F8">The following commit(s) were added to refs/heads/master by this push:
<span style='display:block; white-space:pre;color:#404040;'>     new e47a448  qt4-mac: patches for various fixes.
</span>e47a448 is described below

<span style='display:block; white-space:pre;color:#808000;'>commit e47a4481547c5a28200699acb5d5bb0fdc766b78
</span>Author: Michael Dickens <michaelld@macports.org>
AuthorDate: Sun May 14 20:50:54 2017 -0400

<span style='display:block; white-space:pre;color:#404040;'>    qt4-mac: patches for various fixes.
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    1) rename current patch to both fix typo as well as for its actual purpose: to handle frameworks in Makefile creation;
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    2) add in patch to fix the "-arch ARCH -arch -Xarch" issue from ticket https://trac.macports.org/ticket/54151 and others from years gone by.
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    3) add in patch for commit 0a2f2382 on July 10, 2015 at 7:22:32 AM EDT that was not included in 4.8.7 release, which offers better handling of invalid font tables.
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    rev-bump for all to be in effect.
</span>---
 aqua/qt4-mac/Portfile                              |  18 +-
 .../patch-better-invalid-fonttable-handling.diff   | 650 +++++++++++++++++++++
 ...make_generators_unix_unixmake.cpp.fix_arch.diff |  87 +++
 ...ke_generators_unix_unixmake.cpp.framework.diff} |   4 +-
 4 files changed, 754 insertions(+), 5 deletions(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/aqua/qt4-mac/Portfile b/aqua/qt4-mac/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index 285a570..afd319d 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/aqua/qt4-mac/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/aqua/qt4-mac/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -11,7 +11,7 @@ PortGroup           compiler_blacklist_versions 1.0
</span> 
 name                qt4-mac
 version             4.8.7
<span style='display:block; white-space:pre;background:#ffe0e0;'>-revision            4
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+revision            5
</span> set branch          [join [lrange [split ${version} .] 0 1] .]
 
 categories          aqua
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -154,13 +154,19 @@ patchfiles-append   \
</span> 
 patchfiles-append   patch-qmake_project.cpp.diff
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-# (13) In QMake: (a) enable correct "-framework foo,bar" parsing as
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# (13a) In QMake: (a) enable correct "-framework foo,bar" parsing as
</span> # specified by Apple's LD; (b) disable "/Library/Frameworks" as a
 # default search path; use "PREFIX/Library/Frameworks" and replace
 # PREFIX in post-patch.  Also set "PREFIX/lib" as a default library
 # search path.
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-patchfiles-append   patch-qmake_generators_unix_unixmakke.cpp.diff
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+patchfiles-append   patch-qmake_generators_unix_unixmake.cpp.framework.diff
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# (13b) In QMake: fix issue for when LFLAGS and env LDFLAGS contain
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# multiple "-arch FOO" duplicate flags, which would result in output
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# such as "-arch x86_64 -arch -Xarch_x86_64 ...".
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+patchfiles-append   patch-qmake_generators_unix_unixmake.cpp.fix_arch.diff
</span> 
 # (14) Allow easy replacement of MACOSX_DEPLOYMENT_TARGET: build for
 # just the user's current OS.
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -275,6 +281,12 @@ platform darwin {
</span>     }
 }
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+# (28) Better invalid fonttable handling
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Qt commit 0a2f2382 on July 10, 2015 at 7:22:32 AM EDT.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# not included in 4.8.7 release.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+patchfiles-append patch-better-invalid-fonttable-handling.diff
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> # error out if trying to build on a new OSX version (> 10.12).
 
 platform darwin {
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/aqua/qt4-mac/files/patch-better-invalid-fonttable-handling.diff b/aqua/qt4-mac/files/patch-better-invalid-fonttable-handling.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 0000000..1990f36
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/aqua/qt4-mac/files/patch-better-invalid-fonttable-handling.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,650 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/gui/text/qfontengine.cpp.orig
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/gui/text/qfontengine.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -69,6 +69,16 @@ static inline bool qtransform_equals_no_translate(const QTransform &a, const QTr
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++template<typename T>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++static inline bool qSafeFromBigEndian(const uchar *source, const uchar *end, T *output)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (source + sizeof(T) > end)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        return false;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    *output = qFromBigEndian<T>(source);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    return true;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // Harfbuzz helper functions
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static HB_Bool hb_stringToGlyphs(HB_Font font, const HB_UChar16 *string, hb_uint32 length, HB_Glyph *glyphs, hb_uint32 *numGlyphs, HB_Bool rightToLeft)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -808,26 +818,38 @@ void QFontEngine::loadKerningPairs(QFixed scalingFactor)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         return;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     const uchar *table = reinterpret_cast<const uchar *>(tab.constData());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    const uchar *end = table + tab.size();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    quint16 version;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (!qSafeFromBigEndian(table, end, &version))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        return;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    unsigned short version = qFromBigEndian<quint16>(table);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if (version != 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ //        qDebug("wrong version");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    unsigned short numTables = qFromBigEndian<quint16>(table + 2);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    quint16 numTables;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (!qSafeFromBigEndian(table + 2, end, &numTables))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        return;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         int offset = 4;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         for(int i = 0; i < numTables; ++i) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            if (offset + 6 > tab.size()) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-//                qDebug("offset out of bounds");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                goto end;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             const uchar *header = table + offset;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            ushort version = qFromBigEndian<quint16>(header);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            ushort length = qFromBigEndian<quint16>(header+2);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            ushort coverage = qFromBigEndian<quint16>(header+4);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            quint16 version;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            if (!qSafeFromBigEndian(header, end, &version))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                goto end;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            quint16 length;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            if (!qSafeFromBigEndian(header + 2, end, &length))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                goto end;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            quint16 coverage;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            if (!qSafeFromBigEndian(header + 4, end, &coverage))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                goto end;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ //            qDebug("subtable: version=%d, coverage=%x",version, coverage);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             if(version == 0 && coverage == 0x0001) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 if (offset + length > tab.size()) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -836,7 +858,10 @@ void QFontEngine::loadKerningPairs(QFixed scalingFactor)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 const uchar *data = table + offset + 6;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                ushort nPairs = qFromBigEndian<quint16>(data);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                quint16 nPairs;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                if (!qSafeFromBigEndian(data, end, &nPairs))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                    goto end;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 if(nPairs * 6 + 8 > length - 6) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ //                    qDebug("corrupt table!");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                     // corrupt table
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -846,8 +871,21 @@ void QFontEngine::loadKerningPairs(QFixed scalingFactor)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 int off = 8;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 for(int i = 0; i < nPairs; ++i) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                     QFontEngine::KernPair p;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                    p.left_right = (((uint)qFromBigEndian<quint16>(data+off)) << 16) + qFromBigEndian<quint16>(data+off+2);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                    p.adjust = QFixed(((int)(short)qFromBigEndian<quint16>(data+off+4))) / scalingFactor;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                    quint16 tmp;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                    if (!qSafeFromBigEndian(data + off, end, &tmp))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                        goto end;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                    p.left_right = uint(tmp) << 16;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                    if (!qSafeFromBigEndian(data + off + 2, end, &tmp))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                        goto end;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                    p.left_right |= tmp;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                    if (!qSafeFromBigEndian(data + off + 4, end, &tmp))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                        goto end;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                    p.adjust = QFixed(int(short(tmp))) / scalingFactor;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                     kerning_pairs.append(p);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                     off += 6;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -872,26 +910,31 @@ int QFontEngine::glyphCount() const
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     QByteArray maxpTable = getSfntTable(MAKE_TAG('m', 'a', 'x', 'p'));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if (maxpTable.size() < 6)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    return qFromBigEndian<quint16>(reinterpret_cast<const uchar *>(maxpTable.constData() + 4));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    const uchar *source = reinterpret_cast<const uchar *>(maxpTable.constData() + 4);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    const uchar *end = source + maxpTable.size();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    quint16 count = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    qSafeFromBigEndian(source, end, &count);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    return count;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ const uchar *QFontEngine::getCMap(const uchar *table, uint tableSize, bool *isSymbolFont, int *cmapSize)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     const uchar *header = table;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    if (tableSize < 4)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     const uchar *endPtr = table + tableSize;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     // version check
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    if (qFromBigEndian<quint16>(header) != 0)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    quint16 version;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (!qSafeFromBigEndian(header, endPtr, &version) || version != 0)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    unsigned short numTables = qFromBigEndian<quint16>(header + 2);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    const uchar *maps = table + 4;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    if (maps + 8 * numTables > endPtr)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    quint16 numTables;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (!qSafeFromBigEndian(header + 2, endPtr, &numTables))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    const uchar *maps = table + 4;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     enum {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         Invalid,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         AppleRoman,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -906,8 +949,14 @@ const uchar *QFontEngine::getCMap(const uchar *table, uint tableSize, bool *isSy
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     int tableToUse = -1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     int score = Invalid;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     for (int n = 0; n < numTables; ++n) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        const quint16 platformId = qFromBigEndian<quint16>(maps + 8 * n);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        const quint16 platformSpecificId = qFromBigEndian<quint16>(maps + 8 * n + 2);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        quint16 platformId;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        if (!qSafeFromBigEndian(maps + 8 * n, endPtr, &platformId))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        quint16 platformSpecificId;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        if (!qSafeFromBigEndian(maps + 8 * n + 2, endPtr, &platformSpecificId))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         switch (platformId) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         case 0: // Unicode
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             if (score < Unicode &&
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -961,20 +1010,30 @@ const uchar *QFontEngine::getCMap(const uchar *table, uint tableSize, bool *isSy
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ resolveTable:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     *isSymbolFont = (symbolTable > -1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    unsigned int unicode_table = qFromBigEndian<quint32>(maps + 8*tableToUse + 4);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    quint32 unicode_table;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (!qSafeFromBigEndian(maps + 8 * tableToUse + 4, endPtr, &unicode_table))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    if (!unicode_table || unicode_table + 8 > tableSize)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (!unicode_table)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     // get the header of the unicode table
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     header = table + unicode_table;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    unsigned short format = qFromBigEndian<quint16>(header);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    unsigned int length;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    if(format < 8)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        length = qFromBigEndian<quint16>(header + 2);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        length = qFromBigEndian<quint32>(header + 4);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    quint16 format;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (!qSafeFromBigEndian(header, endPtr, &format))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    quint32 length;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (format < 8) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        quint16 tmp;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        if (!qSafeFromBigEndian(header + 2, endPtr, &tmp))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        length = tmp;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        if (!qSafeFromBigEndian(header + 4, endPtr, &length))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if (table + unicode_table + length > endPtr)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -989,7 +1048,7 @@ resolveTable:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         // Check that none of the latin1 range are in the unicode table
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         bool unicodeTableHasLatin1 = false;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         for (int uc=0x00; uc<0x100; ++uc) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            if (getTrueTypeGlyphIndex(selectedTable, uc) != 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            if (getTrueTypeGlyphIndex(selectedTable, length, uc) != 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 unicodeTableHasLatin1 = true;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -999,7 +1058,7 @@ resolveTable:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         bool unicodeTableHasSymbols = false;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         if (!unicodeTableHasLatin1) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             for (int uc=0xf000; uc<0xf100; ++uc) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                if (getTrueTypeGlyphIndex(selectedTable, uc) != 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                if (getTrueTypeGlyphIndex(selectedTable, length, uc) != 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                     unicodeTableHasSymbols = true;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                     break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1017,12 +1076,17 @@ resolveTable:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     return table + unicode_table;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-quint32 QFontEngine::getTrueTypeGlyphIndex(const uchar *cmap, uint unicode)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++quint32 QFontEngine::getTrueTypeGlyphIndex(const uchar *cmap, int cmapSize, uint unicode)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    unsigned short format = qFromBigEndian<quint16>(cmap);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    const uchar *end = cmap + cmapSize;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    quint16 format;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (!qSafeFromBigEndian(cmap, end, &format))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if (format == 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        if (unicode < 256)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            return (int) *(cmap+6+unicode);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        const uchar *ptr = cmap + 6 + unicode;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        if (unicode < 256 && ptr < end)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            return quint32(*ptr);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     } else if (format == 4) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         /* some fonts come with invalid cmap tables, where the last segment
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            specified end = start = rangeoffset = 0xffff, delta = 0x0001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1031,25 +1095,49 @@ quint32 QFontEngine::getTrueTypeGlyphIndex(const uchar *cmap, uint unicode)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         if(unicode >= 0xffff)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        quint16 segCountX2 = qFromBigEndian<quint16>(cmap + 6);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        quint16 segCountX2;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        if (!qSafeFromBigEndian(cmap + 6, end, &segCountX2))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         const unsigned char *ends = cmap + 14;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         int i = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        for (; i < segCountX2/2 && qFromBigEndian<quint16>(ends + 2*i) < unicode; i++) {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        for (; i < segCountX2/2; ++i) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            quint16 codePoint;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            if (!qSafeFromBigEndian(ends + 2 * i, end, &codePoint))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            if (codePoint >= unicode)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         const unsigned char *idx = ends + segCountX2 + 2 + 2*i;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        quint16 startIndex = qFromBigEndian<quint16>(idx);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        quint16 startIndex;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        if (!qSafeFromBigEndian(idx, end, &startIndex))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         if (startIndex > unicode)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         idx += segCountX2;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        qint16 idDelta = (qint16)qFromBigEndian<quint16>(idx);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        quint16 tmp;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        if (!qSafeFromBigEndian(idx, end, &tmp))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        qint16 idDelta = qint16(tmp);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         idx += segCountX2;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        quint16 idRangeoffset_t = (quint16)qFromBigEndian<quint16>(idx);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        quint16 idRangeoffset_t;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        if (!qSafeFromBigEndian(idx, end, &idRangeoffset_t))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         quint16 glyphIndex;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         if (idRangeoffset_t) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            quint16 id = qFromBigEndian<quint16>(idRangeoffset_t + 2*(unicode - startIndex) + idx);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            quint16 id;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            if (!qSafeFromBigEndian(idRangeoffset_t + 2 * (unicode - startIndex) + idx, end, &id))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             if (id)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 glyphIndex = (idDelta + id) % 0x10000;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1059,13 +1147,19 @@ quint32 QFontEngine::getTrueTypeGlyphIndex(const uchar *cmap, uint unicode)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         return glyphIndex;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     } else if (format == 6) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        quint16 tableSize = qFromBigEndian<quint16>(cmap + 2);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        quint16 tableSize;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        if (!qSafeFromBigEndian(cmap + 2, end, &tableSize))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        quint16 firstCode6 = qFromBigEndian<quint16>(cmap + 6);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        quint16 firstCode6;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        if (!qSafeFromBigEndian(cmap + 6, end, &firstCode6))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         if (unicode < firstCode6)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        quint16 entryCount6 = qFromBigEndian<quint16>(cmap + 8);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        quint16 entryCount6;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        if (!qSafeFromBigEndian(cmap + 8, end, &entryCount6))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         if (entryCount6 * 2 + 10 > tableSize)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1074,9 +1168,14 @@ quint32 QFontEngine::getTrueTypeGlyphIndex(const uchar *cmap, uint unicode)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         quint16 entryIndex6 = unicode - firstCode6;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        return qFromBigEndian<quint16>(cmap + 10 + (entryIndex6 * 2));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        quint16 index = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        qSafeFromBigEndian(cmap + 10 + (entryIndex6 * 2), end, &index);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        return index;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     } else if (format == 12) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        quint32 nGroups = qFromBigEndian<quint32>(cmap + 12);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        quint32 nGroups;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        if (!qSafeFromBigEndian(cmap + 12, end, &nGroups))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         cmap += 16; // move to start of groups
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1084,13 +1183,24 @@ quint32 QFontEngine::getTrueTypeGlyphIndex(const uchar *cmap, uint unicode)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         while (left <= right) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             int middle = left + ( ( right - left ) >> 1 );
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            quint32 startCharCode = qFromBigEndian<quint32>(cmap + 12*middle);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            quint32 startCharCode;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            if (!qSafeFromBigEndian(cmap + 12 * middle, end, &startCharCode))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             if(unicode < startCharCode)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 right = middle - 1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                quint32 endCharCode = qFromBigEndian<quint32>(cmap + 12*middle + 4);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                if(unicode <= endCharCode)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                    return qFromBigEndian<quint32>(cmap + 12*middle + 8) + unicode - startCharCode;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                quint32 endCharCode;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                if (!qSafeFromBigEndian(cmap + 12 * middle + 4, end, &endCharCode))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                    return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                if (unicode <= endCharCode) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                    quint32 index;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                    if (!qSafeFromBigEndian(cmap + 12 * middle + 8, end, &index))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                        return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                    return index + unicode - startCharCode;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 left = middle + 1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/gui/text/qfontengine_mac.mm.orig
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/gui/text/qfontengine_mac.mm
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -625,7 +625,7 @@ bool QFontEngineMacMulti::canRender(const QChar *string, int len)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ QFontEngineMac::QFontEngineMac(ATSUStyle baseStyle, ATSUFontID fontID, const QFontDef &def, QFontEngineMacMulti *multiEngine)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    : fontID(fontID), multiEngine(multiEngine), cmap(0), symbolCMap(false)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    : fontID(fontID), multiEngine(multiEngine), cmap(0), symbolCMap(false), cmapSize(0)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     fontDef = def;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     ATSUCreateAndCopyStyle(baseStyle, &style);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -747,22 +747,21 @@ bool QFontEngineMac::stringToCMap(const QChar *str, int len, QGlyphLayout *glyph
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if (!cmap) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         cmapTable = getSfntTable(MAKE_TAG('c', 'm', 'a', 'p'));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        int size = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        cmap = getCMap(reinterpret_cast<const uchar *>(cmapTable.constData()), cmapTable.size(), &symbolCMap, &size);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        cmap = getCMap(reinterpret_cast<const uchar *>(cmapTable.constData()), cmapTable.size(), &symbolCMap, &cmapSize);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         if (!cmap)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             return false;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if (symbolCMap) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         for (int i = 0; i < len; ++i) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             unsigned int uc = getChar(str, i, len);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            glyphs->glyphs[i] = getTrueTypeGlyphIndex(cmap, uc);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            glyphs->glyphs[i] = getTrueTypeGlyphIndex(cmap, cmapSize, uc);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             if(!glyphs->glyphs[i] && uc < 0x100)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                glyphs->glyphs[i] = getTrueTypeGlyphIndex(cmap, uc + 0xf000);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                glyphs->glyphs[i] = getTrueTypeGlyphIndex(cmap, cmapSize, uc + 0xf000);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         for (int i = 0; i < len; ++i) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             unsigned int uc = getChar(str, i, len);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            glyphs->glyphs[i] = getTrueTypeGlyphIndex(cmap, uc);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            glyphs->glyphs[i] = getTrueTypeGlyphIndex(cmap, cmapSize, uc);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/gui/text/qfontengine_mac_p.h.orig
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/gui/text/qfontengine_mac_p.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -108,6 +108,7 @@ private:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     qreal m_maxCharWidth;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     QFixed m_xHeight;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     QFixed m_averageCharWidth;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    mutable int cmapSize;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ class QFontEngineMacMulti : public QFontEngineMulti
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/gui/text/qfontengine_p.h.orig
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/gui/text/qfontengine_p.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -247,7 +247,7 @@ public:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     QFontEngineGlyphCache *glyphCache(void *key, QFontEngineGlyphCache::Type type, const QTransform &transform) const;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     static const uchar *getCMap(const uchar *table, uint tableSize, bool *isSymbolFont, int *cmapSize);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    static quint32 getTrueTypeGlyphIndex(const uchar *cmap, uint unicode);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    static quint32 getTrueTypeGlyphIndex(const uchar *cmap, int cmapSize, uint unicode);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     static QByteArray convertToPostscriptFontFamilyName(const QByteArray &fontFamily);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/gui/text/qfontengine_qpa.cpp.orig
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/gui/text/qfontengine_qpa.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -358,9 +358,9 @@ bool QFontEngineQPA::stringToCMap(const QChar *str, int len, QGlyphLayout *glyph
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             unsigned int uc = getChar(str, i, len);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             if (mirrored)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 uc = QChar::mirroredChar(uc);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            glyphs->glyphs[glyph_pos] = getTrueTypeGlyphIndex(cmap, uc);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            glyphs->glyphs[glyph_pos] = getTrueTypeGlyphIndex(cmap, cmapSize, uc);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             if(!glyphs->glyphs[glyph_pos] && uc < 0x100)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                glyphs->glyphs[glyph_pos] = getTrueTypeGlyphIndex(cmap, uc + 0xf000);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                glyphs->glyphs[glyph_pos] = getTrueTypeGlyphIndex(cmap, cmapSize, uc + 0xf000);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             ++glyph_pos;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -368,7 +368,7 @@ bool QFontEngineQPA::stringToCMap(const QChar *str, int len, QGlyphLayout *glyph
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             unsigned int uc = getChar(str, i, len);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             if (mirrored)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 uc = QChar::mirroredChar(uc);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            glyphs->glyphs[glyph_pos] = getTrueTypeGlyphIndex(cmap, uc);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            glyphs->glyphs[glyph_pos] = getTrueTypeGlyphIndex(cmap, cmapSize, uc);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #if 0 && defined(DEBUG_FONTENGINE)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             QChar c(uc);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             if (!findGlyph(glyphs[glyph_pos].glyph) && !seenGlyphs.contains(c))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -511,16 +511,16 @@ bool QFontEngineQPA::canRender(const QChar *string, int len)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if (symbol) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         for (int i = 0; i < len; ++i) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             unsigned int uc = getChar(string, i, len);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            glyph_t g = getTrueTypeGlyphIndex(cmap, uc);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            glyph_t g = getTrueTypeGlyphIndex(cmap, cmapSize, uc);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             if(!g && uc < 0x100)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                g = getTrueTypeGlyphIndex(cmap, uc + 0xf000);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                g = getTrueTypeGlyphIndex(cmap, cmapSize, uc + 0xf000);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             if (!g)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 return false;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         for (int i = 0; i < len; ++i) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             unsigned int uc = getChar(string, i, len);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            if (!getTrueTypeGlyphIndex(cmap, uc))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            if (!getTrueTypeGlyphIndex(cmap, cmapSize, uc))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 return false;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/gui/text/qfontengine_qpf.cpp.orig
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/gui/text/qfontengine_qpf.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -577,9 +577,9 @@ bool QFontEngineQPF::stringToCMap(const QChar *str, int len, QGlyphLayout *glyph
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if (symbol) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         for (int i = 0; i < len; ++i) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             unsigned int uc = getChar(str, i, len);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            glyphs->glyphs[glyph_pos] = getTrueTypeGlyphIndex(cmap, uc);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            glyphs->glyphs[glyph_pos] = getTrueTypeGlyphIndex(cmap, cmapSize, uc);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             if(!glyphs->glyphs[glyph_pos] && uc < 0x100)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                glyphs->glyphs[glyph_pos] = getTrueTypeGlyphIndex(cmap, uc + 0xf000);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                glyphs->glyphs[glyph_pos] = getTrueTypeGlyphIndex(cmap, cmapSize, uc + 0xf000);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             ++glyph_pos;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -587,7 +587,7 @@ bool QFontEngineQPF::stringToCMap(const QChar *str, int len, QGlyphLayout *glyph
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             unsigned int uc = getChar(str, i, len);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             if (mirrored)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 uc = QChar::mirroredChar(uc);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            glyphs->glyphs[glyph_pos] = getTrueTypeGlyphIndex(cmap, uc);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            glyphs->glyphs[glyph_pos] = getTrueTypeGlyphIndex(cmap, cmapSize, uc);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #if 0 && defined(DEBUG_FONTENGINE)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             QChar c(uc);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             if (!findGlyph(glyphs[glyph_pos].glyph) && !seenGlyphs.contains(c))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -786,16 +786,16 @@ bool QFontEngineQPF::canRender(const QChar *string, int len)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if (symbol) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         for (int i = 0; i < len; ++i) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             unsigned int uc = getChar(string, i, len);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            glyph_t g = getTrueTypeGlyphIndex(cmap, uc);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            glyph_t g = getTrueTypeGlyphIndex(cmap, cmapSize, uc);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             if(!g && uc < 0x100)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                g = getTrueTypeGlyphIndex(cmap, uc + 0xf000);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                g = getTrueTypeGlyphIndex(cmap, cmapSize, uc + 0xf000);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             if (!g)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 return false;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         for (int i = 0; i < len; ++i) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             unsigned int uc = getChar(string, i, len);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            if (!getTrueTypeGlyphIndex(cmap, uc))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            if (!getTrueTypeGlyphIndex(cmap, cmapSize, uc))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 return false;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/gui/text/qfontengine_s60.cpp.orig
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/gui/text/qfontengine_s60.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -77,6 +77,7 @@ QSymbianTypeFaceExtras::QSymbianTypeFaceExtras(CFont* cFont, COpenFont *openFont
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     : m_cFont(cFont)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     , m_symbolCMap(false)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     , m_openFont(openFont)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    , m_cmapSize(0)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if (!symbianFontTableApiAvailable()) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         TAny *trueTypeExtension = NULL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -161,10 +162,9 @@ const uchar *QSymbianTypeFaceExtras::cmap() const
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if (m_cmapTable.isNull()) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         const QByteArray cmapTable = getSfntTable(MAKE_TAG('c', 'm', 'a', 'p'));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        int size = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         const uchar *cmap = QFontEngine::getCMap(reinterpret_cast<const uchar *>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                (cmapTable.constData()), cmapTable.size(), &m_symbolCMap, &size);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        m_cmapTable = QByteArray(reinterpret_cast<const char *>(cmap), size);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                (cmapTable.constData()), cmapTable.size(), &m_symbolCMap, &m_cmapSize);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        m_cmapTable = QByteArray(reinterpret_cast<const char *>(cmap), m_cmapSize);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     return reinterpret_cast<const uchar *>(m_cmapTable.constData());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -324,6 +324,7 @@ bool QFontEngineS60::stringToCMap(const QChar *characters, int len, QGlyphLayout
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     for (int i = 0; i < len; ++i) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         const unsigned int uc = getChar(characters, i, len);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         *g++ = QFontEngine::getTrueTypeGlyphIndex(cmap,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                                                  m_cmapSize,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                         (isRtl && !m_extras->isSymbolCMap()) ? QChar::mirroredChar(uc) : uc);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -463,7 +464,7 @@ bool QFontEngineS60::canRender(const QChar *string, int len)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     const unsigned char *cmap = m_extras->cmap();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     for (int i = 0; i < len; ++i) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         const unsigned int uc = getChar(string, i, len);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        if (QFontEngine::getTrueTypeGlyphIndex(cmap, uc) == 0)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        if (QFontEngine::getTrueTypeGlyphIndex(cmap, m_cmapSize, uc) == 0)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             return false;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     return true;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/gui/text/qfontengine_s60_p.h.orig
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/gui/text/qfontengine_s60_p.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -93,6 +93,7 @@ private:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     // the Font Table API
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     COpenFont *m_openFont;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     mutable MOpenFontTrueTypeExtension *m_trueTypeExtension;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    mutable int m_cmapSize;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ class QFontEngineS60 : public QFontEngine
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/gui/text/qfontengine_win.cpp.orig
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/gui/text/qfontengine_win.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -215,9 +215,8 @@ void QFontEngineWin::getCMap()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     bool symb = false;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if (ttf) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         cmapTable = getSfntTable(qbswap<quint32>(MAKE_TAG('c', 'm', 'a', 'p')));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        int size = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         cmap = QFontEngine::getCMap(reinterpret_cast<const uchar *>(cmapTable.constData()),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                       cmapTable.size(), &symb, &size);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                       cmapTable.size(), &symb, &cmapSize);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if (!cmap) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         ttf = false;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -263,14 +262,14 @@ int QFontEngineWin::getGlyphIndexes(const QChar *str, int numChars, QGlyphLayout
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         if (symbol) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             for (; i < numChars; ++i, ++glyph_pos) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 unsigned int uc = getChar(str, i, numChars);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                glyphs->glyphs[glyph_pos] = getTrueTypeGlyphIndex(cmap, uc);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                glyphs->glyphs[glyph_pos] = getTrueTypeGlyphIndex(cmap, cmapSize, uc);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 if (!glyphs->glyphs[glyph_pos] && uc < 0x100)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                    glyphs->glyphs[glyph_pos] = getTrueTypeGlyphIndex(cmap, uc + 0xf000);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                    glyphs->glyphs[glyph_pos] = getTrueTypeGlyphIndex(cmap, cmapSize, uc + 0xf000);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         } else if (ttf) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             for (; i < numChars; ++i, ++glyph_pos) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 unsigned int uc = getChar(str, i, numChars);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                glyphs->glyphs[glyph_pos] = getTrueTypeGlyphIndex(cmap, QChar::mirroredChar(uc));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                glyphs->glyphs[glyph_pos] = getTrueTypeGlyphIndex(cmap, cmapSize, QChar::mirroredChar(uc));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -296,14 +295,14 @@ int QFontEngineWin::getGlyphIndexes(const QChar *str, int numChars, QGlyphLayout
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         if (symbol) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             for (; i < numChars; ++i, ++glyph_pos) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 unsigned int uc = getChar(str, i, numChars);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                glyphs->glyphs[glyph_pos] = getTrueTypeGlyphIndex(cmap, uc);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                glyphs->glyphs[glyph_pos] = getTrueTypeGlyphIndex(cmap, cmapSize, uc);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 if(!glyphs->glyphs[glyph_pos] && uc < 0x100)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                    glyphs->glyphs[glyph_pos] = getTrueTypeGlyphIndex(cmap, uc + 0xf000);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                    glyphs->glyphs[glyph_pos] = getTrueTypeGlyphIndex(cmap, cmapSize, uc + 0xf000);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         } else if (ttf) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             for (; i < numChars; ++i, ++glyph_pos) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 unsigned int uc = getChar(str, i, numChars);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                glyphs->glyphs[glyph_pos] = getTrueTypeGlyphIndex(cmap, uc);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                glyphs->glyphs[glyph_pos] = getTrueTypeGlyphIndex(cmap, cmapSize, uc);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -335,6 +334,7 @@ QFontEngineWin::QFontEngineWin(const QString &name, HFONT _hfont, bool stockFont
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     _name = name;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     cmap = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    cmapSize = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     hfont = _hfont;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     logfont = lf;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     HDC hdc = shared_dc();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -811,9 +811,9 @@ bool QFontEngineWin::canRender(const QChar *string,  int len)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if (symbol) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         for (int i = 0; i < len; ++i) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             unsigned int uc = getChar(string, i, len);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            if (getTrueTypeGlyphIndex(cmap, uc) == 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            if (getTrueTypeGlyphIndex(cmap, cmapSize, uc) == 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 if (uc < 0x100) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                    if (getTrueTypeGlyphIndex(cmap, uc + 0xf000) == 0)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                    if (getTrueTypeGlyphIndex(cmap, cmapSize, uc + 0xf000) == 0)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                         return false;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                     return false;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -823,7 +823,7 @@ bool QFontEngineWin::canRender(const QChar *string,  int len)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     } else if (ttf) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         for (int i = 0; i < len; ++i) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             unsigned int uc = getChar(string, i, len);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            if (getTrueTypeGlyphIndex(cmap, uc) == 0)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            if (getTrueTypeGlyphIndex(cmap, cmapSize, uc) == 0)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 return false;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/gui/text/qfontengine_win_p.h.orig
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/gui/text/qfontengine_win_p.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -144,6 +144,7 @@ public:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     mutable uint widthCacheSize;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     mutable QFixed *designAdvances;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     mutable int designAdvancesSize;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    int cmapSize;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ private:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     bool hasCFFTable() const;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-- 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+2.10.2
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/aqua/qt4-mac/files/patch-qmake_generators_unix_unixmake.cpp.fix_arch.diff b/aqua/qt4-mac/files/patch-qmake_generators_unix_unixmake.cpp.fix_arch.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 0000000..c1e085e
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/aqua/qt4-mac/files/patch-qmake_generators_unix_unixmake.cpp.fix_arch.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,87 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- qmake/generators/unix/unixmake.cpp.framework
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ qmake/generators/unix/unixmake.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -589,9 +589,11 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     libdirs.append(QMakeLocalFileName("@PREFIX@/lib"));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     const QString lflags[] = { "QMAKE_LIBDIR_FLAGS", "QMAKE_FRAMEWORKPATH_FLAGS", "QMAKE_LFLAGS", "QMAKE_LIBS", QString() };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     for(int i = 0; !lflags[i].isNull(); i++) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      // warn_msg(WarnLogic, "processPrlFiles: 0: lflags[%d] is '%s'", i, lflags[i].toLatin1().constData());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         QStringList &l = project->values(lflags[i]);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         for(int lit = 0; lit < l.size(); ++lit) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             QString opt = l.at(lit).trimmed();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            // warn_msg(WarnLogic, "processPrlFiles: 1: opt[%d] is '%s'", lit, opt.toLatin1().constData());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             if(opt.startsWith("-")) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 if(opt.startsWith("-L")) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                     QMakeLocalFileName l(opt.right(opt.length()-2));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -727,6 +729,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             for(int lit = 0; lit < l.size(); ++lit) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 QString arch("default");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 QString opt = l.at(lit).trimmed();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                // warn_msg(WarnLogic, "processPrlFiles: 2: opt[%d] is '%s'", lit, opt.toLatin1().constData());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 if(opt.startsWith("-")) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                     if (Option::target_mode == Option::TARG_MACX_MODE && opt.startsWith("-Xarch")) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                         if (opt.length() > 7) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -734,7 +737,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                             opt = l.at(++lit);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                         }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                    // warn_msg(WarnLogic, "processPrlFiles: 2: arch is '%s'", arch.toLatin1().constData());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                     if(opt.startsWith("-L") ||
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        (Option::target_mode == Option::TARG_MACX_MODE && opt.startsWith("-F"))) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                         if(!lflags[arch].contains(opt))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -771,6 +774,55 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                             lflags[arch].append("-framework");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                             lflags[arch].append(opt);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                         }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                    } else if (Option::target_mode == Option::TARG_MACX_MODE && opt.startsWith("-arch")) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                      // warn_msg(WarnLogic, "%d / %d: %s, %s", lit, l.size (), opt.toLatin1().constData(), l.at(lit).toLatin1().constData(), l.at(1+lit).toLatin1().constData());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                      // make sure "-arch" is exact
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                      if (opt.toLower() != "-arch") {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                        warn_msg(WarnLogic, "Expect '-arch' flag to be standalone; got '%s'; ignoring extra.", opt.toLatin1().constData());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                      }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                      // retrieve the next argument, if it exists
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                      if (++lit >= l.size ()) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                        warn_msg(WarnLogic, "Lone '-arch' flag; ignoring.");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                        continue;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                      }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                      QString t_arch = l.at(lit).trimmed().toLower();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                      // make sure next option is valid
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                      const QString archs[] = { "i386", "x86_64", "ppc", "ppc64", QString() };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                      int i = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                      for(; !archs[i].isNull(); ++i) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                        if (t_arch.startsWith(archs[i])) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                          break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                      }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                      if (archs[i].isNull()) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                        warn_msg(WarnLogic, "Lone '-arch' flag; ignoring.");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                        --lit;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                        continue;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                      }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                      // make sure the option is exact
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                      if (archs[i] != t_arch) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                        warn_msg(WarnLogic, "Expect ARCH of '-arch ARCH' flag to be exact; got '%s'; ignoring extra.", t_arch.toLatin1().constData());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                        t_arch = archs[i];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                      }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                      // see if this flag is alread in place in the ldflags
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                      // for "default" and the selected arch.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                      // is "-arch ARCH" already in any set of flags?
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                      bool found = false;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                      for(int j = 0; j < lflags["default"].size(); ++j) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                        if ((lflags[arch].at(j) == "-arch") &&
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                            (lflags[arch].at(j+1) == t_arch)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                          // yes: flag already exists; ignore it
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                          found = true;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                          break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                      }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                      if (!found) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                        // no: add it
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                        lflags[arch].append("-arch");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                        lflags[arch].append(t_arch);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                      } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                        warn_msg(WarnLogic, "Found duplicate '-arch %s' flag; ignoring.", t_arch.toLatin1().constData());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                      }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                     } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                         lflags[arch].append(opt);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                     }
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/aqua/qt4-mac/files/patch-qmake_generators_unix_unixmakke.cpp.diff b/aqua/qt4-mac/files/patch-qmake_generators_unix_unixmake.cpp.framework.diff
</span>similarity index 96%
rename from aqua/qt4-mac/files/patch-qmake_generators_unix_unixmakke.cpp.diff
rename to aqua/qt4-mac/files/patch-qmake_generators_unix_unixmake.cpp.framework.diff
<span style='display:block; white-space:pre;color:#808080;'>index 1a93310..814cad2 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/aqua/qt4-mac/files/patch-qmake_generators_unix_unixmakke.cpp.diff
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/aqua/qt4-mac/files/patch-qmake_generators_unix_unixmake.cpp.framework.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,5 +1,5 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- qmake/generators/unix/unixmake.cpp.orig        2013-02-24 21:46:23.000000000 -0500
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ qmake/generators/unix/unixmake.cpp     2013-02-25 11:40:24.000000000 -0500
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- qmake/generators/unix/unixmake.cpp.orig
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ qmake/generators/unix/unixmake.cpp
</span> @@ -472,8 +472,9 @@
  UnixMakefileGenerator::findLibraries()
  {
</pre><pre style='margin:0'>

</pre>