summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAurélien Brooke <aurelien@bahiasoft.fr>2023-06-12 08:37:54 +0200
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2023-06-12 16:16:31 +0000
commit237d6e615d57605df4abf6de7ab1523e54ac13c6 (patch)
treeeee22f4739c3773dfa47c4201d931fb90855c5c9
parentc99cb8c094b181309303bdb9c377e7b52a0b055a (diff)
ObjGeometryLoader: fix out-of-bounds accesses
We were reading values before the beginning of the array. "Conditional jump or move depends on uninitialised value(s)" Check the value of lineSize before using it as an index. Fixes: QTBUG-97751 Change-Id: I57c4f36973f3d5a6f9aecf4d22626af3e29f71f4 Reviewed-by: Mike Krus <mike.krus@kdab.com> (cherry picked from commit c1c07cb434fe4ead401e70d4fae7000ba6c50c76) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r--src/plugins/geometryloaders/default/objgeometryloader.cpp11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/plugins/geometryloaders/default/objgeometryloader.cpp b/src/plugins/geometryloaders/default/objgeometryloader.cpp
index 264c951c3..740b5916b 100644
--- a/src/plugins/geometryloaders/default/objgeometryloader.cpp
+++ b/src/plugins/geometryloaders/default/objgeometryloader.cpp
@@ -66,10 +66,19 @@ bool ObjGeometryLoader::doLoad(QIODevice *ioDev, const QString &subMesh)
if (lineSize > 0 && line[0] != '#') {
if (line[lineSize - 1] == '\n')
--lineSize; // chop newline
+ if (lineSize <= 0)
+ continue;
+
if (line[lineSize - 1] == '\r')
--lineSize; // chop newline also for CRLF format
- while (line[lineSize - 1] == ' ' || line[lineSize - 1] == '\t')
+ if (lineSize <= 0)
+ continue;
+
+ while (lineSize > 0 && (line[lineSize - 1] == ' ' || line[lineSize - 1] == '\t')) {
--lineSize; // chop trailing spaces
+ }
+ if (lineSize <= 0)
+ continue;
const ByteArraySplitter tokens(line, line + lineSize, ' ', Qt::SkipEmptyParts);