summaryrefslogtreecommitdiffstats
path: root/src/plugins/geometryloaders/default/objgeometryloader.cpp
diff options
context:
space:
mode:
authorAurélien Brooke <aurelien@bahiasoft.fr>2023-06-12 08:37:54 +0200
committerAurélien Brooke <aurelien@bahiasoft.fr>2023-06-12 16:11:47 +0200
commitc1c07cb434fe4ead401e70d4fae7000ba6c50c76 (patch)
tree447b9e5b1408cbfde54d9377a6db03feb17eac38 /src/plugins/geometryloaders/default/objgeometryloader.cpp
parentbe9ef64a8fcaae548321dccfeb9ece29eb007550 (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 Pick-to: 6.5 6.6 Change-Id: I57c4f36973f3d5a6f9aecf4d22626af3e29f71f4 Reviewed-by: Mike Krus <mike.krus@kdab.com>
Diffstat (limited to 'src/plugins/geometryloaders/default/objgeometryloader.cpp')
-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 dc41ca492..e741426c1 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);