summaryrefslogtreecommitdiffstats
path: root/src/gui/text
diff options
context:
space:
mode:
authorUlf Hermann <ulf.hermann@digia.com>2014-10-09 15:17:48 +0200
committerKonstantin Ritt <ritt.ks@gmail.com>2014-11-26 01:28:41 +0100
commit9ccc2560c844dcd607ff3d5f08f7daa7df08b623 (patch)
tree60a68933ccfc1828e87a71d1982368712431b619 /src/gui/text
parent8e3fdf13543f43d7a4cb4fa41f7279f9a5d274d3 (diff)
QFontDatabase: Fall back to "Any" writing system if none matches
The scriptForWritingSystem array has significantly fewer entries than QChar::Script. It can easily happen that we don't find a writing system for a given script. In that case, just assume any writing system can be used. This fixes an out-of-bounds array access resulting from the writing system index being one-past-end if std::find doesn't find a match. Change-Id: Ic277be1dad71af42d479e70e0b4bf29a7dc8d0a7 Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com> Reviewed-by: Allan Sandfeld Jensen <allan.jensen@theqtcompany.com>
Diffstat (limited to 'src/gui/text')
-rw-r--r--src/gui/text/qfontdatabase.cpp5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/gui/text/qfontdatabase.cpp b/src/gui/text/qfontdatabase.cpp
index 8fe6aff79f..c00d3d18a6 100644
--- a/src/gui/text/qfontdatabase.cpp
+++ b/src/gui/text/qfontdatabase.cpp
@@ -1144,7 +1144,10 @@ static int match(int script, const QFontDef &request,
load(family_name, script);
- const size_t writingSystem = std::find(scriptForWritingSystem, scriptForWritingSystem + QFontDatabase::WritingSystemsCount, script) - scriptForWritingSystem;
+ size_t writingSystem = std::find(scriptForWritingSystem, scriptForWritingSystem +
+ QFontDatabase::WritingSystemsCount, script) - scriptForWritingSystem;
+ if (writingSystem >= QFontDatabase::WritingSystemsCount)
+ writingSystem = QFontDatabase::Any;
QFontDatabasePrivate *db = privateDb();
for (int x = 0; x < db->count; ++x) {