Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package qt6-lottie for openSUSE:Factory checked in at 2026-02-03 21:30:22 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/qt6-lottie (Old) and /work/SRC/openSUSE:Factory/.qt6-lottie.new.1995 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "qt6-lottie" Tue Feb 3 21:30:22 2026 rev:39 rq:1330585 version:6.10.2 Changes: -------- --- /work/SRC/openSUSE:Factory/qt6-lottie/qt6-lottie.changes 2025-11-25 15:54:22.690353191 +0100 +++ /work/SRC/openSUSE:Factory/.qt6-lottie.new.1995/qt6-lottie.changes 2026-02-03 21:31:37.176958951 +0100 @@ -1,0 +2,6 @@ +Sat Jan 31 08:10:37 UTC 2026 - Christophe Marin <[email protected]> + +- Update to 6.10.2: + * https://www.qt.io/blog/qt-6.10.2-released + +------------------------------------------------------------------- Old: ---- qtlottie-everywhere-src-6.10.1.tar.xz New: ---- qtlottie-everywhere-src-6.10.2.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ qt6-lottie.spec ++++++ --- /var/tmp/diff_new_pack.NbjV4d/_old 2026-02-03 21:31:37.800985157 +0100 +++ /var/tmp/diff_new_pack.NbjV4d/_new 2026-02-03 21:31:37.808985493 +0100 @@ -1,7 +1,7 @@ # # spec file for package qt6-lottie # -# Copyright (c) 2025 SUSE LLC and contributors +# Copyright (c) 2026 SUSE LLC and contributors # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -16,7 +16,7 @@ # -%define real_version 6.10.1 +%define real_version 6.10.2 %define short_version 6.10 %define short_name qtlottie %define tar_name qtlottie-everywhere-src @@ -28,7 +28,7 @@ %endif # Name: qt6-lottie%{?pkg_suffix} -Version: 6.10.1 +Version: 6.10.2 Release: 0 Summary: QML API for rendering graphics and animation # LICENSE.GPL3-EXCEPT only applies to the conan recipe which is not used @@ -42,8 +42,8 @@ BuildRequires: cmake(Qt6GuiPrivate) = %{real_version} BuildRequires: cmake(Qt6Qml) = %{real_version} BuildRequires: cmake(Qt6Quick) = %{real_version} -BuildRequires: cmake(Qt6QuickPrivate) = %{real_version} BuildRequires: cmake(Qt6QuickControls2) = %{real_version} +BuildRequires: cmake(Qt6QuickPrivate) = %{real_version} BuildRequires: cmake(Qt6QuickTest) = %{real_version} BuildRequires: cmake(Qt6QuickVectorImageGeneratorPrivate) = %{real_version} %if "%{qt6_flavor}" == "docs" @@ -89,7 +89,6 @@ ### Private only library ### - %package -n libQt6LottieVectorImageGenerator6 Summary: Qt 6 LottieVectorImageGeneratorPrivate library ++++++ qtlottie-everywhere-src-6.10.1.tar.xz -> qtlottie-everywhere-src-6.10.2.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtlottie-everywhere-src-6.10.1/.cmake.conf new/qtlottie-everywhere-src-6.10.2/.cmake.conf --- old/qtlottie-everywhere-src-6.10.1/.cmake.conf 2025-11-13 21:37:09.000000000 +0100 +++ new/qtlottie-everywhere-src-6.10.2/.cmake.conf 2026-01-22 20:42:02.000000000 +0100 @@ -1,4 +1,7 @@ -set(QT_REPO_MODULE_VERSION "6.10.1") +set(QT_REPO_MODULE_VERSION "6.10.2") set(QT_REPO_MODULE_PRERELEASE_VERSION_SEGMENT "alpha1") -set(QT_EXTRA_INTERNAL_TARGET_DEFINES "QT_NO_AS_CONST=1") -list(APPEND QT_EXTRA_INTERNAL_TARGET_DEFINES "QT_NO_FOREACH=1") +set(QT_EXTRA_INTERNAL_TARGET_DEFINES + "QT_NO_CONTEXTLESS_CONNECT=1" + "QT_NO_FOREACH=1" + "QT_NO_QASCONST=1" +) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtlottie-everywhere-src-6.10.1/.tag new/qtlottie-everywhere-src-6.10.2/.tag --- old/qtlottie-everywhere-src-6.10.1/.tag 2025-11-13 21:37:09.000000000 +0100 +++ new/qtlottie-everywhere-src-6.10.2/.tag 2026-01-22 20:42:02.000000000 +0100 @@ -1 +1 @@ -f5ccb0bd1f7287039f8500b50852a77aa74dbd63 +9ba84605866dbfe5abb58d7f025b1eb88c2cc3a5 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtlottie-everywhere-src-6.10.1/CMakeLists.txt new/qtlottie-everywhere-src-6.10.2/CMakeLists.txt --- old/qtlottie-everywhere-src-6.10.1/CMakeLists.txt 2025-11-13 21:37:09.000000000 +0100 +++ new/qtlottie-everywhere-src-6.10.2/CMakeLists.txt 2026-01-22 20:42:02.000000000 +0100 @@ -19,6 +19,7 @@ Quick QuickShapesPrivate QuickTest + QuickTestUtilsPrivate QuickVectorImageGeneratorPrivate QuickControls2) qt_internal_project_setup() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtlottie-everywhere-src-6.10.1/dependencies.yaml new/qtlottie-everywhere-src-6.10.2/dependencies.yaml --- old/qtlottie-everywhere-src-6.10.1/dependencies.yaml 2025-11-13 21:37:09.000000000 +0100 +++ new/qtlottie-everywhere-src-6.10.2/dependencies.yaml 2026-01-22 20:42:02.000000000 +0100 @@ -1,7 +1,7 @@ dependencies: ../qtbase: - ref: 90b845d15ffb97693dba527385db83510ebd121a + ref: 000d6c62f7880bb8d3054724e8da0b8ae244130e required: true ../qtdeclarative: - ref: 22fb5e739a2ea700448b22d34ade0d5c1927cb48 + ref: 09c70541c76659bcd8c49f05841b0e778c9ffd4c required: true diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtlottie-everywhere-src-6.10.1/src/lottiegenerator/qlottievisitor.cpp new/qtlottie-everywhere-src-6.10.2/src/lottiegenerator/qlottievisitor.cpp --- old/qtlottie-everywhere-src-6.10.1/src/lottiegenerator/qlottievisitor.cpp 2025-11-13 21:37:09.000000000 +0100 +++ new/qtlottie-everywhere-src-6.10.2/src/lottiegenerator/qlottievisitor.cpp 2026-01-22 20:42:02.000000000 +0100 @@ -85,6 +85,24 @@ m_generator->generateRootNode(info); } +QString QLottieVisitor::scrub(const QString &raw) +{ + QString res(raw.left(80)); + + if (!res.isEmpty()) { + constexpr QLatin1StringView legalSymbols("_-.:/[](){}*| "); // No quot. mark or backslash! + qsizetype i = 0; + do { + if (res.at(i).isLetterOrNumber() || legalSymbols.contains(res.at(i))) + i++; + else + res.remove(i, 1); + } while (i < res.size()); + } + + return res; +} + void QLottieVisitor::fillCommonNodeInfo(const QLottieBase *node, NodeInfo *info) { Q_ASSERT(node); @@ -153,10 +171,7 @@ StructureNodeInfo info; info.stage = StructureNodeStage::Start; - if (layer.type() == LOTTIE_LAYER_PRECOMP_IX) - info.nodeId = layer.definition().value(QLatin1String("refId")).toString(); - else - info.nodeId = layer.name(); + info.nodeId = scrub(layer.name()); info.transform.setDefaultValue(QVariant::fromValue(m_currentPaintInfo.transform)); info.isDefaultTransform = m_currentPaintInfo.transform.isIdentity(); @@ -214,7 +229,7 @@ if (groupHasTransform) { StructureNodeInfo info; info.stage = StructureNodeStage::Start; - info.nodeId = group.name(); + info.nodeId = scrub(group.name()); info.transform.setDefaultValue(QVariant::fromValue(m_currentPaintInfo.transform)); info.isDefaultTransform = m_currentPaintInfo.transform.isIdentity(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtlottie-everywhere-src-6.10.1/src/lottiegenerator/qlottievisitor_p.h new/qtlottie-everywhere-src-6.10.2/src/lottiegenerator/qlottievisitor_p.h --- old/qtlottie-everywhere-src-6.10.1/src/lottiegenerator/qlottievisitor_p.h 2025-11-13 21:37:09.000000000 +0100 +++ new/qtlottie-everywhere-src-6.10.2/src/lottiegenerator/qlottievisitor_p.h 2026-01-22 20:42:02.000000000 +0100 @@ -107,6 +107,7 @@ void collectTransformAnimations(const QLottieBasicTransform *transform, bool isShapeTransform = false); void enumerateLayerChildren(const QLottieBase *node); + QString scrub(const QString &raw); QString m_lottieFileName; QQuickGenerator *m_generator; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtlottie-everywhere-src-6.10.1/src/plugins/vectorimageformats/lottie/main.cpp new/qtlottie-everywhere-src-6.10.2/src/plugins/vectorimageformats/lottie/main.cpp --- old/qtlottie-everywhere-src-6.10.1/src/plugins/vectorimageformats/lottie/main.cpp 2025-11-13 21:37:09.000000000 +0100 +++ new/qtlottie-everywhere-src-6.10.2/src/plugins/vectorimageformats/lottie/main.cpp 2026-01-22 20:42:02.000000000 +0100 @@ -44,7 +44,7 @@ static int frameNo = qEnvironmentVariableIntValue("QLT_FRAMENO"); - if (!root.parseSource(jsonSource, fileName)) { + if (root.parseSource(jsonSource, QUrl::fromLocalFile(fileName)) >= 0) { if (frameNo < 0) frameNo = root.startFrame() + (root.endFrame() - root.startFrame()) / 2; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtlottie-everywhere-src-6.10.1/tests/auto/lottie/CMakeLists.txt new/qtlottie-everywhere-src-6.10.2/tests/auto/lottie/CMakeLists.txt --- old/qtlottie-everywhere-src-6.10.1/tests/auto/lottie/CMakeLists.txt 2025-11-13 21:37:09.000000000 +0100 +++ new/qtlottie-everywhere-src-6.10.2/tests/auto/lottie/CMakeLists.txt 2026-01-22 20:42:02.000000000 +0100 @@ -1 +1,7 @@ add_subdirectory(shape) + +if(TARGET Qt::QuickPrivate + AND TARGET Qt::QuickShapesPrivate + AND TARGET Qt::QuickVectorImageGeneratorPrivate) + add_subdirectory(vectorimage) +endif() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtlottie-everywhere-src-6.10.1/tests/auto/lottie/vectorimage/CMakeLists.txt new/qtlottie-everywhere-src-6.10.2/tests/auto/lottie/vectorimage/CMakeLists.txt --- old/qtlottie-everywhere-src-6.10.1/tests/auto/lottie/vectorimage/CMakeLists.txt 1970-01-01 01:00:00.000000000 +0100 +++ new/qtlottie-everywhere-src-6.10.2/tests/auto/lottie/vectorimage/CMakeLists.txt 2026-01-22 20:42:02.000000000 +0100 @@ -0,0 +1,61 @@ +# Copyright (C) 2025 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT) + cmake_minimum_required(VERSION 3.16) + project(tst_vectorimage LANGUAGES CXX) + find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST) +endif() + +# Collect test data +file(GLOB_RECURSE test_data_glob + RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} + data/*) +list(APPEND test_data ${test_data_glob}) + +qt_internal_add_test(tst_vectorimage + SOURCES + tst_vectorimage.cpp + LIBRARIES + Qt::CorePrivate + Qt::Gui + Qt::GuiPrivate + Qt::Qml + Qt::QmlPrivate + Qt::QuickPrivate + Qt::QuickTestUtilsPrivate + TESTDATA + ${test_data} + DEFINES + QT_QMLTEST_DATADIR="${CMAKE_CURRENT_SOURCE_DIR}/data" +) + +file(GLOB_RECURSE test_data_glob_lottie_original + RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_SOURCE_DIR}/../../../baseline/data/original/*) +list(APPEND lottie_data ${test_data_glob_lottie_original}) + +qt_add_resources(tst_vectorimage lottieoriginal + PREFIX /json + BASE ${CMAKE_CURRENT_SOURCE_DIR}/../../../baseline/data/original/ + FILES + ${lottie_data} +) + +file(GLOB_RECURSE test_data_glob_lottie_docsamples + RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_SOURCE_DIR}/../../../baseline/data/docsamples/*) +list(APPEND lottie_data ${test_data_glob_lottie_docsamples}) + +qt_add_resources(tst_vectorimage lottiedocsamples + PREFIX /json + BASE ${CMAKE_CURRENT_SOURCE_DIR}/../../../baseline/data/docsamples/ + FILES + ${lottie_data} +) + +qt_internal_extend_target(tst_vectorimage CONDITION ANDROID OR IOS + OR QT_FORCE_BUILTIN_TESTDATA + DEFINES + QT_QMLTEST_DATADIR=":/data" +) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtlottie-everywhere-src-6.10.1/tests/auto/lottie/vectorimage/data/json/broken.json new/qtlottie-everywhere-src-6.10.2/tests/auto/lottie/vectorimage/data/json/broken.json --- old/qtlottie-everywhere-src-6.10.1/tests/auto/lottie/vectorimage/data/json/broken.json 1970-01-01 01:00:00.000000000 +0100 +++ new/qtlottie-everywhere-src-6.10.2/tests/auto/lottie/vectorimage/data/json/broken.json 2026-01-22 20:42:02.000000000 +0100 @@ -0,0 +1,327 @@ +{ + "ddd": 0, + "h": 400, + "w": 400, + "fr": 30, + "op": 15,, + "meta": { + "g": "@lottiefiles/toolkit-js 0.57.2-beta.0" + }, + "layers": [ + { + "ty": 4, + "sr": 1, + "st": 0, + "op": 15.666666666666668, + "ip": 0, + "ln": "13", + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 0, + 0 + ] + }, + "s": { + "a": 0, + "k": [ + 100, + 100, + 100 + ] + }, + "p": { + "a": 0, + "k": [ + 200, + 200 + ] + }, + "r": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100 + } + }, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ty": "rc", + "d": 1, + "p": { + "a": 0, + "k": [ + 0, + 0 + ] + }, + "r": { + "a": 0, + "k": 0 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ] + } + }, + { + "ty": "st", + "lc": 1, + "lj": 1, + "ml": 4, + "o": { + "a": 0, + "k": 100 + }, + "w": { + "a": 0, + "k": 2 + }, + "c": { + "a": 0, + "k": [ + 1, + 1, + 1 + ] + } + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0, + 1, + 0.0818 + ] + }, + "r": 1, + "o": { + "a": 0, + "k": 100 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0, + 0 + ] + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ] + }, + "p": { + "a": 0, + "k": [ + 0, + 0 + ] + }, + "r": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100 + } + } + ] + }, + { + "ty": "gr", + "it": [ + { + "ty": "rc", + "d": 1, + "p": { + "a": 0, + "k": [ + 0, + 0 + ] + }, + "r": { + "a": 0, + "k": 0 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ] + } + }, + { + "ty": "st", + "lc": 1, + "lj": 1, + "ml": 4, + "o": { + "a": 0, + "k": 100 + }, + "w": { + "a": 0, + "k": 2 + }, + "c": { + "a": 0, + "k": [ + 1, + 1, + 1 + ] + } + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0, + 0.0119, + 1 + ] + }, + "r": 1, + "o": { + "a": 0, + "k": 100 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0, + 0 + ] + }, + "s": { + "a": 1, + "k": [ + { + "s": [ + 102.027, + 102.027 + ], + "i": { + "x": [ + 0.97, + 0.97 + ], + "y": [ + 5.296, + 5.296 + ] + }, + "o": { + "x": [ + 0.03, + 0.03 + ], + "y": [ + 0.293, + 0.293 + ] + }, + "t": 0 + }, + { + "s": [ + 200, + 200 + ], + "i": { + "x": [ + 1, + 1 + ], + "y": [ + 1, + 1 + ] + }, + "o": { + "x": [ + 0.167, + 0.167 + ], + "y": [ + -0.182, + -0.182 + ] + }, + "t": 10.333333333333334 + } + ] + }, + "p": { + "a": 0, + "k": [ + 0, + 0 + ] + }, + "r": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 0 + ], + "t": 0 + }, + { + "s": [ + 45 + ], + "t": 10.333333333333334 + } + ] + }, + "o": { + "a": 0, + "k": 100 + } + } + ] + } + ], + "ind": 1 + } + ], + "v": "5.7.0", + "ip": 0, + "assets": [] +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtlottie-everywhere-src-6.10.1/tests/auto/lottie/vectorimage/data/json/ok.json new/qtlottie-everywhere-src-6.10.2/tests/auto/lottie/vectorimage/data/json/ok.json --- old/qtlottie-everywhere-src-6.10.1/tests/auto/lottie/vectorimage/data/json/ok.json 1970-01-01 01:00:00.000000000 +0100 +++ new/qtlottie-everywhere-src-6.10.2/tests/auto/lottie/vectorimage/data/json/ok.json 2026-01-22 20:42:02.000000000 +0100 @@ -0,0 +1,327 @@ +{ + "ddd": 0, + "h": 400, + "w": 400, + "fr": 30, + "op": 15, + "meta": { + "g": "@lottiefiles/toolkit-js 0.57.2-beta.0" + }, + "layers": [ + { + "ty": 4, + "sr": 1, + "st": 0, + "op": 15.666666666666668, + "ip": 0, + "ln": "13", + "hasMask": false, + "ao": 0, + "ks": { + "a": { + "a": 0, + "k": [ + 0, + 0 + ] + }, + "s": { + "a": 0, + "k": [ + 100, + 100, + 100 + ] + }, + "p": { + "a": 0, + "k": [ + 200, + 200 + ] + }, + "r": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100 + } + }, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ty": "rc", + "d": 1, + "p": { + "a": 0, + "k": [ + 0, + 0 + ] + }, + "r": { + "a": 0, + "k": 0 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ] + } + }, + { + "ty": "st", + "lc": 1, + "lj": 1, + "ml": 4, + "o": { + "a": 0, + "k": 100 + }, + "w": { + "a": 0, + "k": 2 + }, + "c": { + "a": 0, + "k": [ + 1, + 1, + 1 + ] + } + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0, + 1, + 0.0818 + ] + }, + "r": 1, + "o": { + "a": 0, + "k": 100 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0, + 0 + ] + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ] + }, + "p": { + "a": 0, + "k": [ + 0, + 0 + ] + }, + "r": { + "a": 0, + "k": 0 + }, + "o": { + "a": 0, + "k": 100 + } + } + ] + }, + { + "ty": "gr", + "it": [ + { + "ty": "rc", + "d": 1, + "p": { + "a": 0, + "k": [ + 0, + 0 + ] + }, + "r": { + "a": 0, + "k": 0 + }, + "s": { + "a": 0, + "k": [ + 100, + 100 + ] + } + }, + { + "ty": "st", + "lc": 1, + "lj": 1, + "ml": 4, + "o": { + "a": 0, + "k": 100 + }, + "w": { + "a": 0, + "k": 2 + }, + "c": { + "a": 0, + "k": [ + 1, + 1, + 1 + ] + } + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [ + 0, + 0.0119, + 1 + ] + }, + "r": 1, + "o": { + "a": 0, + "k": 100 + } + }, + { + "ty": "tr", + "a": { + "a": 0, + "k": [ + 0, + 0 + ] + }, + "s": { + "a": 1, + "k": [ + { + "s": [ + 102.027, + 102.027 + ], + "i": { + "x": [ + 0.97, + 0.97 + ], + "y": [ + 5.296, + 5.296 + ] + }, + "o": { + "x": [ + 0.03, + 0.03 + ], + "y": [ + 0.293, + 0.293 + ] + }, + "t": 0 + }, + { + "s": [ + 200, + 200 + ], + "i": { + "x": [ + 1, + 1 + ], + "y": [ + 1, + 1 + ] + }, + "o": { + "x": [ + 0.167, + 0.167 + ], + "y": [ + -0.182, + -0.182 + ] + }, + "t": 10.333333333333334 + } + ] + }, + "p": { + "a": 0, + "k": [ + 0, + 0 + ] + }, + "r": { + "a": 1, + "k": [ + { + "o": { + "x": 0.167, + "y": 0.167 + }, + "i": { + "x": 0.833, + "y": 0.833 + }, + "s": [ + 0 + ], + "t": 0 + }, + { + "s": [ + 45 + ], + "t": 10.333333333333334 + } + ] + }, + "o": { + "a": 0, + "k": 100 + } + } + ] + } + ], + "ind": 1 + } + ], + "v": "5.7.0", + "ip": 0, + "assets": [] +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtlottie-everywhere-src-6.10.1/tests/auto/lottie/vectorimage/data/vectorimage.qml new/qtlottie-everywhere-src-6.10.2/tests/auto/lottie/vectorimage/data/vectorimage.qml --- old/qtlottie-everywhere-src-6.10.1/tests/auto/lottie/vectorimage/data/vectorimage.qml 1970-01-01 01:00:00.000000000 +0100 +++ new/qtlottie-everywhere-src-6.10.2/tests/auto/lottie/vectorimage/data/vectorimage.qml 2026-01-22 20:42:02.000000000 +0100 @@ -0,0 +1,13 @@ +// Copyright (C) 2025 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only + +import QtQuick +import QtQuick.Shapes +import QtQuick.VectorImage + +VectorImage { + width: 440 + height: 220 + source: fileName + assumeTrustedSource: true +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtlottie-everywhere-src-6.10.1/tests/auto/lottie/vectorimage/data/vectorimage_noassumetrustedsource.qml new/qtlottie-everywhere-src-6.10.2/tests/auto/lottie/vectorimage/data/vectorimage_noassumetrustedsource.qml --- old/qtlottie-everywhere-src-6.10.1/tests/auto/lottie/vectorimage/data/vectorimage_noassumetrustedsource.qml 1970-01-01 01:00:00.000000000 +0100 +++ new/qtlottie-everywhere-src-6.10.2/tests/auto/lottie/vectorimage/data/vectorimage_noassumetrustedsource.qml 2026-01-22 20:42:02.000000000 +0100 @@ -0,0 +1,13 @@ +// Copyright (C) 2025 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only + +import QtQuick +import QtQuick.Shapes +import QtQuick.VectorImage + +VectorImage { + width: 440 + height: 220 + source: fileName + assumeTrustedSource: false +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtlottie-everywhere-src-6.10.1/tests/auto/lottie/vectorimage/tst_vectorimage.cpp new/qtlottie-everywhere-src-6.10.2/tests/auto/lottie/vectorimage/tst_vectorimage.cpp --- old/qtlottie-everywhere-src-6.10.1/tests/auto/lottie/vectorimage/tst_vectorimage.cpp 1970-01-01 01:00:00.000000000 +0100 +++ new/qtlottie-everywhere-src-6.10.2/tests/auto/lottie/vectorimage/tst_vectorimage.cpp 2026-01-22 20:42:02.000000000 +0100 @@ -0,0 +1,155 @@ +// Copyright (C) 2025 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only + +#include <QtTest/QTest> +#include <QtTest/QSignalSpy> +#include <QtCore/qfileinfo.h> +#include <QtCore/qdiriterator.h> +#include <QtQml/qqmlcontext.h> +#include <QtQml/qqmlengine.h> +#include <QtQml/qqmlcomponent.h> +#include <QtQuick/qquickitem.h> + +#include <QtQuickTestUtils/private/qmlutils_p.h> +#include <QtQuickTestUtils/private/viewtestutils_p.h> +#include <QtQuickTestUtils/private/visualtestutils_p.h> + +class tst_VectorImage : public QQmlDataTest +{ + Q_OBJECT +public: + tst_VectorImage(); + +private slots: + void parseFiles_data(); + void parseFiles(); + void parseBrokenFile(); + void parseNoAssumeTrustedSource(); +}; + +tst_VectorImage::tst_VectorImage() + : QQmlDataTest(QT_QMLTEST_DATADIR) +{ +} + +void tst_VectorImage::parseFiles_data() +{ + QTest::addColumn<QString>("fileName"); + + { + QDirIterator it(QStringLiteral(":/json"), + { QStringLiteral("*.json") }); + QVERIFY(it.hasNext()); + + while (it.hasNext()) { + QFileInfo info(it.next()); + + QString fileName = info.fileName(); + QByteArray rowName = fileName.toUtf8(); + + QTest::newRow(rowName) << fileName; + } + } + + { + QDirIterator it(QStringLiteral(":/json/precomp"), + { QStringLiteral("*.json") }); + QVERIFY(it.hasNext()); + + while (it.hasNext()) { + QFileInfo info(it.next()); + + QString fileName = QStringLiteral("precomp/") + info.fileName(); + QByteArray rowName = fileName.toUtf8(); + + QTest::newRow(rowName) << fileName; + } + } + + { + QDirIterator it(QStringLiteral(":/json/mod"), + { QStringLiteral("*.json") }); + QVERIFY(it.hasNext()); + + while (it.hasNext()) { + QFileInfo info(it.next()); + + QString fileName = QStringLiteral("mod/") + info.fileName(); + QByteArray rowName = fileName.toUtf8(); + + QTest::newRow(rowName) << fileName; + } + } +} + +void tst_VectorImage::parseFiles() +{ + QFETCH(QString, fileName); + + QQmlEngine engine; + engine.rootContext()->setContextProperty(QStringLiteral("fileName"), QStringLiteral("qrc:/json/%1").arg(fileName)); + + QQmlComponent c(&engine, testFileUrl("vectorimage.qml")); + QQuickItem *item = qobject_cast<QQuickItem *>(c.create()); + auto cleanup = qScopeGuard([&item] { + delete item; + item = nullptr; + }); + + QVERIFY(item != nullptr); + QVERIFY(!item->childItems().isEmpty()); + QVERIFY(!item->childItems().first()->size().isNull()); +} + +void tst_VectorImage::parseBrokenFile() +{ + QQmlEngine engine; + engine.rootContext()->setContextProperty(QStringLiteral("fileName"), testFileUrl("json/broken.json")); + + QQmlComponent c(&engine, testFileUrl("vectorimage.qml")); + QQuickItem *item = qobject_cast<QQuickItem *>(c.create()); + auto cleanup = qScopeGuard([&item] { + delete item; + item = nullptr; + }); + + QVERIFY(item != nullptr); + QVERIFY(!item->childItems().isEmpty()); + QVERIFY(item->childItems().first()->size().isNull()); +} + +void tst_VectorImage::parseNoAssumeTrustedSource() +{ + QQmlEngine engine; + engine.rootContext()->setContextProperty(QStringLiteral("fileName"), testFileUrl("json/ok.json")); + + { + QQmlComponent c(&engine, testFileUrl("vectorimage.qml")); + QQuickItem *item = qobject_cast<QQuickItem *>(c.create()); + auto cleanup = qScopeGuard([&item] { + delete item; + item = nullptr; + }); + + QVERIFY(item != nullptr); + QVERIFY(!item->childItems().isEmpty()); + QVERIFY(!item->childItems().first()->size().isNull()); + } + + { + QQmlComponent c(&engine, testFileUrl("vectorimage_noassumetrustedsource.qml")); + QQuickItem *item = qobject_cast<QQuickItem *>(c.create()); + auto cleanup = qScopeGuard([&item] { + delete item; + item = nullptr; + }); + + QVERIFY(item != nullptr); + QVERIFY(!item->childItems().isEmpty()); + QVERIFY(item->childItems().first()->size().isNull()); + } +} + +QTEST_MAIN(tst_VectorImage) + +#include "tst_vectorimage.moc" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtlottie-everywhere-src-6.10.1/tools/lottietoqml/main.cpp new/qtlottie-everywhere-src-6.10.2/tools/lottietoqml/main.cpp --- old/qtlottie-everywhere-src-6.10.1/tools/lottietoqml/main.cpp 2025-11-13 21:37:09.000000000 +0100 +++ new/qtlottie-everywhere-src-6.10.2/tools/lottietoqml/main.cpp 2026-01-22 20:42:02.000000000 +0100 @@ -121,7 +121,7 @@ if (f.open(QIODevice::ReadOnly)) { QByteArray jsonSource = f.readAll(); - if (!root.parseSource(jsonSource, inFileName)) { + if (root.parseSource(jsonSource, QUrl::fromLocalFile(inFileName)) >= 0) { root.setStructureDumping(true); for (QLottieBase *elem : root.children()) { if (elem->active(frameNo))
