Use valid glyph index for box font engine

Glyph index 0 is reserved for "glyph not found", which can
confuse Harfbuzz. For QFontEngineBox we always return a valid
glyph since it is the fallback font when no other fonts are
available.

Symptom of issue was that we could get to Q_UNREACHABLE for
certain strings when Harfbuzz returned a glyph count of 0.

[ChangeLog][QtGui] Fixed a potential crash when rendering text
with an empty font database.

Fixes: QTBUG-85016
Pick-to: 5.15
Change-Id: Iaf1d003cdff57320bf4327aa8e63dffd9d1da82c
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
This commit is contained in:
Eskil Abrahamsen Blomfeldt 2020-10-19 10:01:04 +02:00
parent 2ffbac7cb2
commit 05078459de

View File

@ -1539,7 +1539,7 @@ QFontEngineBox::~QFontEngineBox()
glyph_t QFontEngineBox::glyphIndex(uint ucs4) const
{
Q_UNUSED(ucs4);
return 0;
return 1;
}
bool QFontEngineBox::stringToCMap(const QChar *str, int len, QGlyphLayout *glyphs, int *nglyphs, QFontEngine::ShaperFlags flags) const
@ -1554,7 +1554,7 @@ bool QFontEngineBox::stringToCMap(const QChar *str, int len, QGlyphLayout *glyph
QStringIterator it(str, str + len);
while (it.hasNext()) {
it.advance();
glyphs->glyphs[ucs4Length++] = 0;
glyphs->glyphs[ucs4Length++] = 1;
}
*nglyphs = ucs4Length;