summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKonstantin Ritt <ritt.ks@gmail.com>2012-11-16 20:44:12 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2012-11-21 11:03:48 +0100
commitf4a2352cd1efee9bbffe89e7d430b8be0cacc5bd (patch)
tree26fed6c9ca89e0d1663aaebe6a69bb0dfe3bf4fd /src
parentcc7d085ca21bff029e1a67b92b4facebfdc51c6f (diff)
Fix possible crash/assertion in qt_fontHasNarrowOutlines()
1. cloneWithSize() may return 0 1bis. QRawFont::setPixelSize() may ivalidate the font (due to 1.) 2. using the data obtained from a temporary QString is never safe! Change-Id: I0cd5f807d8077ef5112704e475f1904bd6fc4b1b Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@digia.com>
Diffstat (limited to 'src')
-rw-r--r--src/gui/text/qdistancefield.cpp14
1 files changed, 10 insertions, 4 deletions
diff --git a/src/gui/text/qdistancefield.cpp b/src/gui/text/qdistancefield.cpp
index ba8ec1c1c3..40143d8903 100644
--- a/src/gui/text/qdistancefield.cpp
+++ b/src/gui/text/qdistancefield.cpp
@@ -736,14 +736,19 @@ static bool imageHasNarrowOutlines(const QImage &im)
bool qt_fontHasNarrowOutlines(QFontEngine *fontEngine)
{
QFontEngine *fe = fontEngine->cloneWithSize(QT_DISTANCEFIELD_DEFAULT_BASEFONTSIZE);
+ if (!fe)
+ return false;
QGlyphLayout glyphs;
glyph_t glyph;
glyphs.glyphs = &glyph;
- int numGlyphs;
- QChar *chars = QString(QLatin1String("O")).data();
- fe->stringToCMap(chars, 1, &glyphs, &numGlyphs, QFontEngine::GlyphIndicesOnly);
+ glyphs.numGlyphs = 1;
+ int numGlyphs = 1;
+ QChar uc = QLatin1Char('O');
+ fe->stringToCMap(&uc, 1, &glyphs, &numGlyphs, QFontEngine::GlyphIndicesOnly);
QImage im = fe->alphaMapForGlyph(glyph, QFixed(), QTransform());
+
+ Q_ASSERT(fe->ref.load() == 0);
delete fe;
return imageHasNarrowOutlines(im);
@@ -753,7 +758,8 @@ bool qt_fontHasNarrowOutlines(const QRawFont &f)
{
QRawFont font = f;
font.setPixelSize(QT_DISTANCEFIELD_DEFAULT_BASEFONTSIZE);
- Q_ASSERT(font.isValid());
+ if (!font.isValid())
+ return false;
QVector<quint32> glyphIndices = font.glyphIndexesForString(QLatin1String("O"));
if (glyphIndices.size() < 1)