aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKwanghyo Park <kwanghyo.park@qt.io>2026-08-31 15:00:42 +0300
committerKwanghyo Park <kwanghyo.park@qt.io>2026-09-18 17:59:15 +0000
commit543d91301c16484c7ac3e02526a276ca514ed8fb (patch)
treef82fda7231c8afa7f5b287ea2cb2a4c2c1e736c5
parent15a6449c56f96276181ac9ea74f20e77be05cdf9 (diff)
quickvectorimage: report a failed parse for the item generator
For the item generator, the return value of QQuickGenerator::generate() is discarded and only errorState() is checked. This does not cover a document that fails to parse. A broken file therefore takes the success branch, and status() reports Null instead of Error. Report the failure through errorState(), and derive Error in status() from a source that produced no item. Task-number: QTBUG-149650 Change-Id: Iff9271af651476b8aa179d74887234ad47cf45be Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
-rw-r--r--src/quickvectorimage/generator/qquickgenerator.cpp4
-rw-r--r--src/quickvectorimage/qquickvectorimage.cpp15
-rw-r--r--src/quickvectorimage/qquickvectorimageglobal_p.h3
3 files changed, 14 insertions, 8 deletions
diff --git a/src/quickvectorimage/generator/qquickgenerator.cpp b/src/quickvectorimage/generator/qquickgenerator.cpp
index 26e5a37807..8b023a89e3 100644
--- a/src/quickvectorimage/generator/qquickgenerator.cpp
+++ b/src/quickvectorimage/generator/qquickgenerator.cpp
@@ -49,7 +49,9 @@ bool QQuickGenerator::generate()
{
m_errorState = QQuickVectorImageGenerator::NoError;
QSvgVisitorImpl loader(m_source, this, m_flags.testFlag(QQuickVectorImageGenerator::AssumeTrustedSource));
- return loader.doTraversal();
+ if (!loader.doTraversal())
+ m_errorState = QQuickVectorImageGenerator::LoadFailed;
+ return m_errorState == QQuickVectorImageGenerator::NoError;
}
void QQuickGenerator::optimizePaths(const PathNodeInfo &info, const QRectF &overrideBoundingRect)
diff --git a/src/quickvectorimage/qquickvectorimage.cpp b/src/quickvectorimage/qquickvectorimage.cpp
index cc8d6a068f..fc4e34f0f2 100644
--- a/src/quickvectorimage/qquickvectorimage.cpp
+++ b/src/quickvectorimage/qquickvectorimage.cpp
@@ -152,11 +152,12 @@ void QQuickVectorImagePrivate::loadFile()
if (!generatedWithPlugin)
gen.generate();
- if (gen.errorState() == QQuickVectorImageGenerator::NoError) {
- pendingRootItem = gen.takeRootItem();
+ if (gen.errorState() != QQuickVectorImageGenerator::NoError) {
+ qCWarning(lcQuickVectorImage)
+ << "QQuickItemGenerator: failed to generate" << imageSource
+ << "(errorState:" << gen.errorState() << ")";
} else {
- qCWarning(lcQuickVectorImage) << "QQuickItemGenerator: failed to generate" << imageSource
- << "(errorState:" << gen.errorState() << ")";
+ pendingRootItem = gen.takeRootItem();
}
q->updateItem();
}
@@ -544,10 +545,12 @@ QQuickVectorImage::Status QQuickVectorImage::status() const
{
Q_D(const QQuickVectorImage);
if (d->incubator == nullptr) {
- if (d->rootItem == nullptr)
+ if (d->rootItem != nullptr)
+ return Status::Ready;
+ else if (!isComponentComplete() || d->imageSource.isEmpty())
return Status::Null;
else
- return Status::Ready;
+ return Status::Error;
}
switch (d->incubator->status()) {
diff --git a/src/quickvectorimage/qquickvectorimageglobal_p.h b/src/quickvectorimage/qquickvectorimageglobal_p.h
index 5cb2cada2f..3bdd9d925c 100644
--- a/src/quickvectorimage/qquickvectorimageglobal_p.h
+++ b/src/quickvectorimage/qquickvectorimageglobal_p.h
@@ -43,7 +43,8 @@ namespace QQuickVectorImageGenerator
enum ErrorState {
NoError = 0,
- SanityLimitsExceeded
+ SanityLimitsExceeded,
+ LoadFailed
};
}