summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp3
-rw-r--r--src/plugins/platforms/windows/qwindowsfontdatabase.cpp3
-rw-r--r--tests/auto/gui/text/qrawfont/tst_qrawfont.cpp11
3 files changed, 17 insertions, 0 deletions
diff --git a/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp b/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp
index 17717dd53c..b8da9726d5 100644
--- a/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp
+++ b/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp
@@ -660,6 +660,9 @@ QFontEngine *QFontconfigDatabase::fontEngine(const QFontDef &f, void *usrPtr)
QFontEngine *QFontconfigDatabase::fontEngine(const QByteArray &fontData, qreal pixelSize, QFont::HintingPreference hintingPreference)
{
QFontEngineFT *engine = static_cast<QFontEngineFT*>(QBasicFontDatabase::fontEngine(fontData, pixelSize, hintingPreference));
+ if (engine == 0)
+ return 0;
+
QFontDef fontDef = engine->fontDef;
QFontEngineFT::GlyphFormat format;
diff --git a/src/plugins/platforms/windows/qwindowsfontdatabase.cpp b/src/plugins/platforms/windows/qwindowsfontdatabase.cpp
index 940d75614c..6d9f01da4e 100644
--- a/src/plugins/platforms/windows/qwindowsfontdatabase.cpp
+++ b/src/plugins/platforms/windows/qwindowsfontdatabase.cpp
@@ -165,6 +165,9 @@ namespace {
Q_ASSERT(tagName.size() == 4);
quint32 tagId = *(reinterpret_cast<const quint32 *>(tagName.constData()));
+ if (m_fontData.size() < sizeof(OffsetSubTable) + sizeof(TableDirectory))
+ return 0;
+
OffsetSubTable *offsetSubTable = reinterpret_cast<OffsetSubTable *>(m_fontData.data());
TableDirectory *tableDirectory = reinterpret_cast<TableDirectory *>(offsetSubTable + 1);
diff --git a/tests/auto/gui/text/qrawfont/tst_qrawfont.cpp b/tests/auto/gui/text/qrawfont/tst_qrawfont.cpp
index ae6e450301..20bfaf99dd 100644
--- a/tests/auto/gui/text/qrawfont/tst_qrawfont.cpp
+++ b/tests/auto/gui/text/qrawfont/tst_qrawfont.cpp
@@ -99,6 +99,8 @@ private slots:
void rawFontSetPixelSize();
void multipleRawFontsFromData();
+
+ void rawFontFromInvalidData();
private:
QString testFont;
QString testFontBoldItalic;
@@ -939,6 +941,15 @@ void tst_QRawFont::multipleRawFontsFromData()
|| testFont.style() != (testFontBoldItalic.style()));
}
+void tst_QRawFont::rawFontFromInvalidData()
+{
+ QByteArray invalidData("foobar");
+ QRawFont font;
+ font.loadFromData(invalidData, 10, QFont::PreferDefaultHinting);
+
+ QVERIFY(!font.isValid());
+}
+
#endif // QT_NO_RAWFONT
QTEST_MAIN(tst_QRawFont)