From 6c3599460ca9a7eaba728adbb4b7ab3d519f3ffb Mon Sep 17 00:00:00 2001 From: Volker Hilsheimer Date: Fri, 19 Mar 2021 17:22:14 +0100 Subject: Assert that engine isn't nullptr before dereferencing Various checks for "engine" in the previous code suggested that engine might be nullptr by the time we want to populate the out-parameters. This must not be the case, and QFontDatabase::load asserts already that a valid engine is loaded and returned. Fix static analyzer warning 7f68daa282c72e8cc172c681eb02f559 by asserting it here as well. As a drive-by, change the tested out-parameter to the last one in the list of optional parameters. Pick-to: 6.1 Change-Id: I3d9ff0f5f7c4740014301c073480d14fef54e2fb Reviewed-by: Jonas Karlsson Reviewed-by: Eskil Abrahamsen Blomfeldt --- src/gui/text/qtextengine.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/gui/text/qtextengine.cpp b/src/gui/text/qtextengine.cpp index b31b880693..898538b64f 100644 --- a/src/gui/text/qtextengine.cpp +++ b/src/gui/text/qtextengine.cpp @@ -2351,8 +2351,8 @@ QFontEngine *QTextEngine::fontEngine(const QScriptItem &si, QFixed *ascent, QFix font = font.resolve(fnt); } engine = font.d->engineForScript(script); - if (engine) - engine->ref.ref(); + Q_ASSERT(engine); + engine->ref.ref(); QTextCharFormat::VerticalAlignment valign = f.verticalAlignment(); if (valign == QTextCharFormat::AlignSuperScript || valign == QTextCharFormat::AlignSubScript) { @@ -2382,9 +2382,8 @@ QFontEngine *QTextEngine::fontEngine(const QScriptItem &si, QFixed *ascent, QFix engine = feCache.prevFontEngine; else { engine = font.d->engineForScript(script); - - if (engine) - engine->ref.ref(); + Q_ASSERT(engine); + engine->ref.ref(); if (feCache.prevFontEngine) releaseCachedFontEngine(feCache.prevFontEngine); feCache.prevFontEngine = engine; @@ -2402,7 +2401,10 @@ QFontEngine *QTextEngine::fontEngine(const QScriptItem &si, QFixed *ascent, QFix } } - if (ascent) { + if (leading) { + Q_ASSERT(engine); + Q_ASSERT(ascent); + Q_ASSERT(descent); *ascent = engine->ascent(); *descent = engine->descent(); *leading = engine->leading(); -- cgit v1.2.3