diff options
| author | Kwanghyo Park <kwanghyo.park@qt.io> | 2026-08-31 15:00:42 +0300 |
|---|---|---|
| committer | Kwanghyo Park <kwanghyo.park@qt.io> | 2026-09-18 17:59:15 +0000 |
| commit | 543d91301c16484c7ac3e02526a276ca514ed8fb (patch) | |
| tree | f82fda7231c8afa7f5b287ea2cb2a4c2c1e736c5 | |
| parent | 15a6449c56f96276181ac9ea74f20e77be05cdf9 (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.cpp | 4 | ||||
| -rw-r--r-- | src/quickvectorimage/qquickvectorimage.cpp | 15 | ||||
| -rw-r--r-- | src/quickvectorimage/qquickvectorimageglobal_p.h | 3 |
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 }; } |
