From e03fb08bcc66108a24bb90d1aa041a27e2519074 Mon Sep 17 00:00:00 2001 From: Vlad Zahorodnii Date: Thu, 22 Aug 2024 16:48:15 +0300 Subject: [PATCH] utils: Validate svg cursor metadata better Metadata array must contain at least one item. --- src/utils/svgcursorreader.cpp | 34 +++++++++++++++++++--------------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/src/utils/svgcursorreader.cpp b/src/utils/svgcursorreader.cpp index 38568db869..eab6b6412a 100644 --- a/src/utils/svgcursorreader.cpp +++ b/src/utils/svgcursorreader.cpp @@ -73,24 +73,28 @@ std::optional SvgCursorMetaData::parse(const QString &filePat return std::nullopt; } - QList entries; - if (document.isArray()) { - const QJsonArray array = document.array(); - for (int i = 0; i < array.size(); ++i) { - const QJsonValue element = array.at(i); - if (!element.isObject()) { - return std::nullopt; - } - if (const auto entry = SvgCursorMetaDataEntry::parse(element.toObject())) { - entries.append(entry.value()); - } else { - return std::nullopt; - } - } - } else { + if (!document.isArray()) { return std::nullopt; } + const QJsonArray array = document.array(); + if (array.isEmpty()) { + return std::nullopt; + } + + QList entries; + for (int i = 0; i < array.size(); ++i) { + const QJsonValue element = array.at(i); + if (!element.isObject()) { + return std::nullopt; + } + if (const auto entry = SvgCursorMetaDataEntry::parse(element.toObject())) { + entries.append(entry.value()); + } else { + return std::nullopt; + } + } + return SvgCursorMetaData{ .entries = entries, };