@@ -0,0 +1,153 @@
|
||||
From 99d8ef879911a0f85a5729d058e38f895acc8c37 Mon Sep 17 00:00:00 2001
|
||||
From: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
|
||||
Date: Fri, 31 Oct 2025 09:08:51 +0100
|
||||
Subject: [PATCH] Rich text: Limit size of text object
|
||||
|
||||
When we draw a text object, we need to store this in RAM
|
||||
since the QTextObjectInterface is QPainter-based. This
|
||||
could lead to over-allocation if the text object size
|
||||
was set to be very large. We use the existing image IO
|
||||
infrastructure for making sure allocations are within
|
||||
reasonable (and configurable) limits.
|
||||
|
||||
Task-number: QTBUG-141515
|
||||
Change-Id: Ieae06a9e92a7bd078d22ab2314889201c2049122
|
||||
Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io>
|
||||
(cherry picked from commit 144ce34e846b3f732bdb003f99b1f9455425416f)
|
||||
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
|
||||
(cherry picked from commit c3a07c99f9d2328cee4aa48a51d261d243b50d85)
|
||||
---
|
||||
|
||||
diff --git a/src/quick/items/qquicktextnodeengine.cpp b/src/quick/items/qquicktextnodeengine.cpp
|
||||
index 32de7c4..a7cfa08 100644
|
||||
--- a/src/quick/items/qquicktextnodeengine.cpp
|
||||
+++ b/src/quick/items/qquicktextnodeengine.cpp
|
||||
@@ -11,6 +11,7 @@
|
||||
#include <QtGui/qtextobject.h>
|
||||
#include <QtGui/qtexttable.h>
|
||||
#include <QtGui/qtextlist.h>
|
||||
+#include <QtGui/qimageiohandler.h>
|
||||
|
||||
#include <private/qquicktext_p.h>
|
||||
#include <private/qtextdocumentlayout_p.h>
|
||||
@@ -434,12 +435,15 @@
|
||||
}
|
||||
|
||||
if (image.isNull()) {
|
||||
- image = QImage((size * m_devicePixelRatio).toSize(), QImage::Format_ARGB32_Premultiplied);
|
||||
- image.setDevicePixelRatio(m_devicePixelRatio);
|
||||
- image.fill(Qt::transparent);
|
||||
- {
|
||||
- QPainter painter(&image);
|
||||
- handler->drawObject(&painter, QRectF({}, size), textDocument, pos, format);
|
||||
+ if (QImageIOHandler::allocateImage((size * m_devicePixelRatio).toSize(),
|
||||
+ QImage::Format_ARGB32_Premultiplied,
|
||||
+ &image)) {
|
||||
+ image.setDevicePixelRatio(m_devicePixelRatio);
|
||||
+ image.fill(Qt::transparent);
|
||||
+ {
|
||||
+ QPainter painter(&image);
|
||||
+ handler->drawObject(&painter, QRectF({}, size), textDocument, pos, format);
|
||||
+ }
|
||||
}
|
||||
}
|
||||
|
||||
diff --git a/tests/auto/quick/qquicktext/tst_qquicktext.cpp b/tests/auto/quick/qquicktext/tst_qquicktext.cpp
|
||||
index 9f8f250..d6534e5 100644
|
||||
--- a/tests/auto/quick/qquicktext/tst_qquicktext.cpp
|
||||
+++ b/tests/auto/quick/qquicktext/tst_qquicktext.cpp
|
||||
@@ -125,6 +125,8 @@
|
||||
void imgTagsElide();
|
||||
void imgTagsUpdates();
|
||||
void imgTagsError();
|
||||
+ void imgSize_data();
|
||||
+ void imgSize();
|
||||
void fontSizeMode_data();
|
||||
void fontSizeMode();
|
||||
void fontSizeModeMultiline_data();
|
||||
@@ -3451,6 +3453,85 @@
|
||||
QVERIFY(textObject != nullptr);
|
||||
}
|
||||
|
||||
+void tst_qquicktext::imgSize_data()
|
||||
+{
|
||||
+ QTest::addColumn<QString>("url");
|
||||
+ QTest::addColumn<qint64>("width");
|
||||
+ QTest::addColumn<qint64>("height");
|
||||
+ QTest::addColumn<QQuickText::TextFormat>("format");
|
||||
+
|
||||
+ QTest::newRow("negative (styled text)") << QStringLiteral("images/starfish_2.png")
|
||||
+ << qint64(-0x7FFFFF)
|
||||
+ << qint64(-0x7FFFFF)
|
||||
+ << QQuickText::StyledText;
|
||||
+ QTest::newRow("negative (rich text)") << QStringLiteral("images/starfish_2.png")
|
||||
+ << qint64(-0x7FFFFF)
|
||||
+ << qint64(-0x7FFFFF)
|
||||
+ << QQuickText::RichText;
|
||||
+ QTest::newRow("large (styled text)") << QStringLiteral("images/starfish_2.png")
|
||||
+ << qint64(0x7FFFFF)
|
||||
+ << qint64(0x7FFFFF)
|
||||
+ << QQuickText::StyledText;
|
||||
+ QTest::newRow("large (right text)") << QStringLiteral("images/starfish_2.png")
|
||||
+ << qint64(0x7FFFFF)
|
||||
+ << qint64(0x7FFFFF)
|
||||
+ << QQuickText::RichText;
|
||||
+ QTest::newRow("medium (styled text)") << QStringLiteral("images/starfish_2.png")
|
||||
+ << qint64(0x10000)
|
||||
+ << qint64(0x10000)
|
||||
+ << QQuickText::StyledText;
|
||||
+ QTest::newRow("medium (right text)") << QStringLiteral("images/starfish_2.png")
|
||||
+ << qint64(0x10000)
|
||||
+ << qint64(0x10000)
|
||||
+ << QQuickText::RichText;
|
||||
+ QTest::newRow("large non-existent (styled text)") << QStringLiteral("a")
|
||||
+ << qint64(0x7FFFFF)
|
||||
+ << qint64(0x7FFFFF)
|
||||
+ << QQuickText::StyledText;
|
||||
+ QTest::newRow("medium non-existent (styled text)") << QStringLiteral("a")
|
||||
+ << qint64(0x10000)
|
||||
+ << qint64(0x10000)
|
||||
+ << QQuickText::StyledText;
|
||||
+ QTest::newRow("out-of-bounds non-existent (styled text)") << QStringLiteral("a")
|
||||
+ << (qint64(INT_MAX) + 1)
|
||||
+ << (qint64(INT_MAX) + 1)
|
||||
+ << QQuickText::StyledText;
|
||||
+ QTest::newRow("large non-existent (rich text)") << QStringLiteral("a")
|
||||
+ << qint64(0x7FFFFF)
|
||||
+ << qint64(0x7FFFFF)
|
||||
+ << QQuickText::RichText;
|
||||
+ QTest::newRow("medium non-existent (rich text)") << QStringLiteral("a")
|
||||
+ << qint64(0x10000)
|
||||
+ << qint64(0x10000)
|
||||
+ << QQuickText::RichText;
|
||||
+}
|
||||
+
|
||||
+void tst_qquicktext::imgSize()
|
||||
+{
|
||||
+ QFETCH(QString, url);
|
||||
+ QFETCH(qint64, width);
|
||||
+ QFETCH(qint64, height);
|
||||
+ QFETCH(QQuickText::TextFormat, format);
|
||||
+
|
||||
+ // Reusing imgTagsUpdates.qml here, since it is just an empty Text component
|
||||
+ QScopedPointer<QQuickView> window(createView(testFile("imgTagsUpdates.qml")));
|
||||
+ window->show();
|
||||
+ QVERIFY(QTest::qWaitForWindowExposed(window.data()));
|
||||
+
|
||||
+ QScopedPointer<QQuickText> myText(window->rootObject()->findChild<QQuickText*>("myText"));
|
||||
+ QVERIFY(myText);
|
||||
+
|
||||
+ myText->setTextFormat(format);
|
||||
+
|
||||
+ QString imgStr = QStringLiteral("<img src=\"%1\" width=\"%2\" height=\"%3\" />")
|
||||
+ .arg(url)
|
||||
+ .arg(width)
|
||||
+ .arg(height);
|
||||
+ myText->setText(imgStr);
|
||||
+
|
||||
+ QVERIFY(QQuickTest::qWaitForPolish(myText.data()));
|
||||
+}
|
||||
+
|
||||
void tst_qquicktext::fontSizeMode_data()
|
||||
{
|
||||
QTest::addColumn<QString>("text");
|
||||
@@ -0,0 +1,108 @@
|
||||
From 855f02c96d3c089ea7c0010ebbe4b29fab9cc1ba Mon Sep 17 00:00:00 2001
|
||||
From: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
|
||||
Date: Wed, 29 Oct 2025 09:43:40 +0100
|
||||
Subject: [PATCH] Increase robustness of <img> tag in Text component
|
||||
|
||||
For Text.StyledText, there was no protection against <img> tags
|
||||
with very large widths or heights. This could cause an application
|
||||
to spend a very long time processing a layout and sometimes crash
|
||||
if the size was too large.
|
||||
|
||||
We reuse the internal coord limit in QPainter as our maximum size
|
||||
here, similar to what we do in Qt Svg for instance.
|
||||
|
||||
For Text.RichText, there were no issues in release builds, but in
|
||||
debug builds, you could trigger an overflow assert when rounding
|
||||
the number if it exceeded INT_MAX. For this, we simply cap the
|
||||
width and height at INT_MAX.
|
||||
|
||||
Fixes: QTBUG-141515
|
||||
Change-Id: I4bcba16158f5f495a0de38963316effc4c46aae1
|
||||
Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io>
|
||||
(cherry picked from commit 4aaf9bf21f7cc69d73066785e254b664fcc82025)
|
||||
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
|
||||
(cherry picked from commit 907c7ceb7b27586039262567273efd5ec79e6202)
|
||||
Reviewed-by: Antti Kokko <antti.kokko@qt.io>
|
||||
---
|
||||
|
||||
diff --git a/src/quick/items/qquicktextdocument.cpp b/src/quick/items/qquicktextdocument.cpp
|
||||
index d11bae5..798b0d0 100644
|
||||
--- a/src/quick/items/qquicktextdocument.cpp
|
||||
+++ b/src/quick/items/qquicktextdocument.cpp
|
||||
@@ -590,9 +590,9 @@
|
||||
{
|
||||
if (format.isImageFormat()) {
|
||||
QTextImageFormat imageFormat = format.toImageFormat();
|
||||
- int width = qRound(imageFormat.width());
|
||||
+ int width = qRound(qBound(qreal(INT_MIN), imageFormat.width(), qreal(INT_MAX)));
|
||||
const bool hasWidth = imageFormat.hasProperty(QTextFormat::ImageWidth) && width > 0;
|
||||
- const int height = qRound(imageFormat.height());
|
||||
+ const int height = qRound(qBound(qreal(INT_MIN), imageFormat.height(), qreal(INT_MAX)));
|
||||
const bool hasHeight = imageFormat.hasProperty(QTextFormat::ImageHeight) && height > 0;
|
||||
const auto maxWidth = imageFormat.maximumWidth();
|
||||
const bool hasMaxWidth = imageFormat.hasProperty(QTextFormat::ImageMaxWidth) && maxWidth.type() != QTextLength::VariableLength;
|
||||
diff --git a/src/quick/util/qquickstyledtext.cpp b/src/quick/util/qquickstyledtext.cpp
|
||||
index bb003c1..7d21c89 100644
|
||||
--- a/src/quick/util/qquickstyledtext.cpp
|
||||
+++ b/src/quick/util/qquickstyledtext.cpp
|
||||
@@ -11,6 +11,11 @@
|
||||
#include "qquickstyledtext_p.h"
|
||||
#include <QQmlContext>
|
||||
#include <QtGui/private/qtexthtmlparser_p.h>
|
||||
+#include <QtGui/private/qoutlinemapper_p.h>
|
||||
+
|
||||
+#ifndef QQUICKSTYLEDPARSER_COORD_LIMIT
|
||||
+# define QQUICKSTYLEDPARSER_COORD_LIMIT QT_RASTER_COORD_LIMIT
|
||||
+#endif
|
||||
|
||||
Q_STATIC_LOGGING_CATEGORY(lcStyledText, "qt.quick.styledtext")
|
||||
|
||||
@@ -660,9 +665,19 @@
|
||||
if (is_equal_ignoring_case(attr.first, QLatin1String("src"))) {
|
||||
image->url = QUrl(attr.second.toString());
|
||||
} else if (is_equal_ignoring_case(attr.first, QLatin1String("width"))) {
|
||||
- image->size.setWidth(attr.second.toString().toInt());
|
||||
+ bool ok;
|
||||
+ int v = attr.second.toString().toInt(&ok);
|
||||
+ if (ok && v <= QQUICKSTYLEDPARSER_COORD_LIMIT)
|
||||
+ image->size.setWidth(v);
|
||||
+ else
|
||||
+ qCWarning(lcStyledText) << "Invalid width provided for <img>";
|
||||
} else if (is_equal_ignoring_case(attr.first, QLatin1String("height"))) {
|
||||
- image->size.setHeight(attr.second.toString().toInt());
|
||||
+ bool ok;
|
||||
+ int v = attr.second.toString().toInt(&ok);
|
||||
+ if (ok && v <= QQUICKSTYLEDPARSER_COORD_LIMIT)
|
||||
+ image->size.setHeight(v);
|
||||
+ else
|
||||
+ qCWarning(lcStyledText) << "Invalid height provided for <img>";
|
||||
} else if (is_equal_ignoring_case(attr.first, QLatin1String("align"))) {
|
||||
if (is_equal_ignoring_case(attr.second, QLatin1String("top"))) {
|
||||
image->align = QQuickStyledTextImgTag::Top;
|
||||
diff --git a/tests/auto/quick/qquicktext/tst_qquicktext.cpp b/tests/auto/quick/qquicktext/tst_qquicktext.cpp
|
||||
index d6534e5..6f37a6a 100644
|
||||
--- a/tests/auto/quick/qquicktext/tst_qquicktext.cpp
|
||||
+++ b/tests/auto/quick/qquicktext/tst_qquicktext.cpp
|
||||
@@ -3484,6 +3484,22 @@
|
||||
<< qint64(0x10000)
|
||||
<< qint64(0x10000)
|
||||
<< QQuickText::RichText;
|
||||
+ QTest::newRow("out-of-bounds (styled text)") << QStringLiteral("images/starfish_2.png")
|
||||
+ << (qint64(INT_MAX) + 1)
|
||||
+ << (qint64(INT_MAX) + 1)
|
||||
+ << QQuickText::StyledText;
|
||||
+ QTest::newRow("out-of-bounds (rich text)") << QStringLiteral("images/starfish_2.png")
|
||||
+ << (qint64(INT_MAX) + 1)
|
||||
+ << (qint64(INT_MAX) + 1)
|
||||
+ << QQuickText::RichText;
|
||||
+ QTest::newRow("negative out-of-bounds (styled text)") << QStringLiteral("images/starfish_2.png")
|
||||
+ << (qint64(INT_MIN) - 1)
|
||||
+ << (qint64(INT_MIN) - 1)
|
||||
+ << QQuickText::StyledText;
|
||||
+ QTest::newRow("negative out-of-bounds (rich text)") << QStringLiteral("images/starfish_2.png")
|
||||
+ << (qint64(INT_MIN) - 1)
|
||||
+ << (qint64(INT_MIN) - 1)
|
||||
+ << QQuickText::RichText;
|
||||
QTest::newRow("large non-existent (styled text)") << QStringLiteral("a")
|
||||
<< qint64(0x7FFFFF)
|
||||
<< qint64(0x7FFFFF)
|
||||
@@ -1,14 +0,0 @@
|
||||
https://bugreports.qt.io/browse/QTBUG-135158
|
||||
https://codereview.qt-project.org/c/qt/qtdeclarative/+/647212
|
||||
--- a/src/quicktemplates/qquickpopuppositioner.cpp
|
||||
+++ b/src/quicktemplates/qquickpopuppositioner.cpp
|
||||
@@ -321,5 +321,8 @@
|
||||
: p->parentItem->mapToGlobal(windowPos.x(), windowPos.y());
|
||||
QRectF rect = { globalCoords.x(), globalCoords.y(), popupItem->width(), popupItem->height() };
|
||||
- if (!skipFittingStep) {
|
||||
+
|
||||
+ // QTBUG-99618: On wayland, we can't use QWindow::mapToGlobal(), and should use a xdg_positioner instead.
|
||||
+ static bool isWayland = QGuiApplication::platformName().startsWith(QLatin1String("wayland"));
|
||||
+ if (!skipFittingStep && !isWayland) {
|
||||
const QScreen *screenAtPopupPosition = QGuiApplication::screenAt(globalCoords.toPoint());
|
||||
const QScreen *screen = screenAtPopupPosition ? screenAtPopupPosition : QGuiApplication::primaryScreen();
|
||||
@@ -1,32 +0,0 @@
|
||||
https://bugreports.qt.io/browse/QTBUG-136998
|
||||
https://bugreports.qt.io/browse/QTBUG-137196
|
||||
https://bugreports.qt.io/browse/QTBUG-137411
|
||||
https://github.com/qt/qtdeclarative/commit/672e6777e8e6a8fd86c7877075e7a8aa0ea0a31a
|
||||
--- a/src/qmlcompiler/qqmljsimportvisitor.cpp
|
||||
+++ b/src/qmlcompiler/qqmljsimportvisitor.cpp
|
||||
@@ -1042,14 +1042,15 @@
|
||||
|
||||
if (!prevRequiredScope.isNull()) {
|
||||
- auto sourceScope = prevRequiredScope->baseType();
|
||||
- suggestion = QQmlJSFixSuggestion{
|
||||
- "%1:%2:%3: Property marked as required in %4."_L1
|
||||
- .arg(sourceScope->filePath())
|
||||
- .arg(sourceScope->sourceLocation().startLine)
|
||||
- .arg(sourceScope->sourceLocation().startColumn)
|
||||
- .arg(requiredScopeName),
|
||||
- sourceScope->sourceLocation()
|
||||
- };
|
||||
- suggestion->setFilename(sourceScope->filePath());
|
||||
+ if (auto sourceScope = prevRequiredScope->baseType()) {
|
||||
+ suggestion = QQmlJSFixSuggestion{
|
||||
+ "%1:%2:%3: Property marked as required in %4."_L1
|
||||
+ .arg(sourceScope->filePath())
|
||||
+ .arg(sourceScope->sourceLocation().startLine)
|
||||
+ .arg(sourceScope->sourceLocation().startColumn)
|
||||
+ .arg(requiredScopeName),
|
||||
+ sourceScope->sourceLocation()
|
||||
+ };
|
||||
+ suggestion->setFilename(sourceScope->filePath());
|
||||
+ }
|
||||
} else {
|
||||
message += " (marked as required by %1)"_L1.arg(requiredScopeName);
|
||||
-128
@@ -1,128 +0,0 @@
|
||||
From e5d9bcf70ae704569e091ee0ee93561e01fefe38 Mon Sep 17 00:00:00 2001
|
||||
From: Ulf Hermann <ulf.hermann@qt.io>
|
||||
Date: Fri, 11 Apr 2025 17:00:52 +0200
|
||||
Subject: [PATCH] QmlCompiler: Error out on unstorable types
|
||||
|
||||
We already do this for return types, but it's fatal on any type.
|
||||
|
||||
Fixes: QTBUG-135342
|
||||
Change-Id: I7aee2a19ffcd39d2707eceb34b5073057d8b5ebb
|
||||
Reviewed-by: Olivier De Cannière <olivier.decanniere@qt.io>
|
||||
(cherry picked from commit 0bd329a0b42b4c8c3bf77c201f3d8b187467ef02)
|
||||
---
|
||||
|
||||
diff --git a/src/qmlcompiler/qqmljsstorageinitializer.cpp b/src/qmlcompiler/qqmljsstorageinitializer.cpp
|
||||
index 4123716..60f46fa 100644
|
||||
--- a/src/qmlcompiler/qqmljsstorageinitializer.cpp
|
||||
+++ b/src/qmlcompiler/qqmljsstorageinitializer.cpp
|
||||
@@ -35,17 +35,25 @@
|
||||
if (!content.isValid() || !content.storage().isNull())
|
||||
return;
|
||||
|
||||
- const QQmlJSRegisterContent original = m_typeResolver->original(content);
|
||||
- const QQmlJSScope::ConstPtr originalStored
|
||||
- = m_typeResolver->storedType(original.containedType());
|
||||
- m_pool->storeType(content, originalStored);
|
||||
+ const QQmlJSScope::ConstPtr original = m_typeResolver->originalContainedType(content);
|
||||
+ if (const QQmlJSScope::ConstPtr originalStored = m_typeResolver->storedType(original)) {
|
||||
+ m_pool->storeType(content, originalStored);
|
||||
+ } else {
|
||||
+ addError(QStringLiteral("Cannot store type %1.").arg(original->internalName()));
|
||||
+ return;
|
||||
+ }
|
||||
|
||||
- const QQmlJSScope::ConstPtr adjustedStored
|
||||
- = m_typeResolver->storedType(content.containedType());
|
||||
+ const QQmlJSScope::ConstPtr contentContained = content.containedType();
|
||||
+ const QQmlJSScope::ConstPtr adjustedStored = m_typeResolver->storedType(contentContained);
|
||||
+ if (!adjustedStored) {
|
||||
+ addError(QStringLiteral("Cannot store type %1.")
|
||||
+ .arg(contentContained->internalName()));
|
||||
+ return;
|
||||
+ }
|
||||
|
||||
if (!m_typeResolver->adjustTrackedType(content.storage(), adjustedStored)) {
|
||||
- addError(QStringLiteral("Cannot adjust stored type for %1.")
|
||||
- .arg(content.containedType()->internalName()));
|
||||
+ addError(QStringLiteral("Cannot adjust stored type for %1 to %2.")
|
||||
+ .arg(contentContained->internalName(), adjustedStored->internalName()));
|
||||
}
|
||||
};
|
||||
|
||||
diff --git a/tests/auto/qml/qmlcppcodegen/data/CMakeLists.txt b/tests/auto/qml/qmlcppcodegen/data/CMakeLists.txt
|
||||
index 4661211..cc92631 100644
|
||||
--- a/tests/auto/qml/qmlcppcodegen/data/CMakeLists.txt
|
||||
+++ b/tests/auto/qml/qmlcppcodegen/data/CMakeLists.txt
|
||||
@@ -308,6 +308,7 @@
|
||||
undefinedToDouble.qml
|
||||
unknownAttached.qml
|
||||
unknownParameter.qml
|
||||
+ unknownUnderlyingType.qml
|
||||
unstoredUndefined.qml
|
||||
unusedAttached.qml
|
||||
urlString.qml
|
||||
diff --git a/tests/auto/qml/qmlcppcodegen/data/enumproblems.h b/tests/auto/qml/qmlcppcodegen/data/enumproblems.h
|
||||
index 36f97be..9c98789 100644
|
||||
--- a/tests/auto/qml/qmlcppcodegen/data/enumproblems.h
|
||||
+++ b/tests/auto/qml/qmlcppcodegen/data/enumproblems.h
|
||||
@@ -116,4 +116,19 @@
|
||||
Q_ENUM(EType)
|
||||
};
|
||||
|
||||
+using uint_myown_t = decltype(75 - 12);
|
||||
+
|
||||
+class UnknownUnderlyingType : public QObject
|
||||
+{
|
||||
+ Q_OBJECT
|
||||
+ QML_ELEMENT
|
||||
+
|
||||
+public:
|
||||
+ enum Bla : uint_myown_t {
|
||||
+ Yo = 11,
|
||||
+ };
|
||||
+ Q_ENUM(Bla)
|
||||
+};
|
||||
+
|
||||
+
|
||||
#endif // ENUMPROBLEMS_H
|
||||
diff --git a/tests/auto/qml/qmlcppcodegen/data/unknownUnderlyingType.qml b/tests/auto/qml/qmlcppcodegen/data/unknownUnderlyingType.qml
|
||||
new file mode 100644
|
||||
index 0000000..8e43828
|
||||
--- /dev/null
|
||||
+++ b/tests/auto/qml/qmlcppcodegen/data/unknownUnderlyingType.qml
|
||||
@@ -0,0 +1,6 @@
|
||||
+import QtQml
|
||||
+import TestTypes as FB
|
||||
+
|
||||
+QtObject {
|
||||
+ property var foo: FB.UnknownUnderlyingType.Yo
|
||||
+}
|
||||
diff --git a/tests/auto/qml/qmlcppcodegen/tst_qmlcppcodegen.cpp b/tests/auto/qml/qmlcppcodegen/tst_qmlcppcodegen.cpp
|
||||
index f44cae1..5f701d7 100644
|
||||
--- a/tests/auto/qml/qmlcppcodegen/tst_qmlcppcodegen.cpp
|
||||
+++ b/tests/auto/qml/qmlcppcodegen/tst_qmlcppcodegen.cpp
|
||||
@@ -269,6 +269,7 @@
|
||||
void undefinedToDouble();
|
||||
void unknownAttached();
|
||||
void unknownParameter();
|
||||
+ void unknownUnderlyingType();
|
||||
void unstoredUndefined();
|
||||
void unusedAttached();
|
||||
void urlString();
|
||||
@@ -5466,6 +5467,16 @@
|
||||
QCOMPARE(object->property("cppProp").toInt(), 18);
|
||||
}
|
||||
|
||||
+void tst_QmlCppCodegen::unknownUnderlyingType()
|
||||
+{
|
||||
+ QQmlEngine engine;
|
||||
+ QQmlComponent component(&engine, QUrl(u"qrc:/qt/qml/TestTypes/unknownUnderlyingType.qml"_s));
|
||||
+ QVERIFY2(!component.isError(), component.errorString().toUtf8());
|
||||
+ QScopedPointer<QObject> object(component.create());
|
||||
+ QVERIFY(!object.isNull());
|
||||
+ QCOMPARE(object->property("foo").toInt(), 11);
|
||||
+}
|
||||
+
|
||||
void tst_QmlCppCodegen::unstoredUndefined()
|
||||
{
|
||||
QQmlEngine engine;
|
||||
@@ -1,78 +1,86 @@
|
||||
<?xml version="1.0" ?>
|
||||
<!DOCTYPE PISI SYSTEM "http://www.pisilinux.org/projeler/pisi/pisi-spec.dtd">
|
||||
<!DOCTYPE PISI SYSTEM "https://pisilinux.org/projeler/pisi/pisi-spec.dtd">
|
||||
<PISI>
|
||||
<Source>
|
||||
<Name>qt6-declarative</Name>
|
||||
<Homepage>http://qt.digia.com/</Homepage>
|
||||
<Packager>
|
||||
<Name>PisiLinux Community</Name>
|
||||
<Email>admins@pisilinux.org</Email>
|
||||
</Packager>
|
||||
<Summary>Classes for QML and JavaScript languages</Summary>
|
||||
<Description>Classes for QML and JavaScript languages</Description>
|
||||
<License>LGPLv2.1-linking-exception</License>
|
||||
<Archive sha1sum="aa00670d8e01f93a96cc45ea6bf878162afde778" type="tarxz">https://download.qt.io/official_releases/qt/6.9/6.9.3/submodules/qtdeclarative-everywhere-src-6.9.3.tar.xz</Archive>
|
||||
<BuildDependencies>
|
||||
<Dependency>ninja</Dependency>
|
||||
<Dependency>cmake</Dependency>
|
||||
<Dependency>python3</Dependency>
|
||||
<Dependency>libxkbcommon-devel</Dependency>
|
||||
<Dependency versionFrom="13.0.4">mesa-devel</Dependency>
|
||||
<Dependency versionFrom="6.9.3">qt6-sql-odbc</Dependency>
|
||||
<Dependency versionFrom="6.9.3">qt6-sql-mysql</Dependency>
|
||||
<Dependency versionFrom="6.9.3">qt6-svg-devel</Dependency>
|
||||
<Dependency versionFrom="6.9.3">qt6-sql-sqlite</Dependency>
|
||||
<Dependency versionFrom="6.9.3">qt6-base-devel</Dependency>
|
||||
<Dependency versionFrom="6.9.3">qt6-imageformats</Dependency>
|
||||
<Dependency versionFrom="6.9.3">qt6-sql-postgresql</Dependency>
|
||||
<Dependency versionFrom="6.9.3">qt6-shadertools-devel</Dependency>
|
||||
<Dependency versionFrom="6.9.3">qt6-languageserver-devel</Dependency>
|
||||
</BuildDependencies>
|
||||
<Patches>
|
||||
<!-- <Patch level="1">qtdeclarative-6.9.1-QTBUG-135158.patch</Patch> -->
|
||||
<!-- <Patch level="1">qtdeclarative-6.9.1-qmlcachegen-crash.patch</Patch> -->
|
||||
</Patches>
|
||||
</Source>
|
||||
<Package>
|
||||
<Name>qt6-declarative</Name>
|
||||
<RuntimeDependencies>
|
||||
<Dependency>libgcc</Dependency>
|
||||
<Dependency>libglvnd</Dependency>
|
||||
<Dependency versionFrom="6.9.3">qt6-svg</Dependency>
|
||||
<Dependency versionFrom="6.9.3">qt6-base</Dependency>
|
||||
<Dependency versionFrom="6.9.3">qt6-languageserver</Dependency>
|
||||
</RuntimeDependencies>
|
||||
<Files>
|
||||
<Path fileType="library">/usr/lib</Path>
|
||||
<Path fileType="library">/usr/lib/qt6</Path>
|
||||
<Path fileType="data">/usr/share/licenses</Path>
|
||||
<Path fileType="executable">/usr/lib/qt6/bin</Path>
|
||||
<Path fileType="executable">/usr/bin/</Path>
|
||||
<Path fileType="data">/usr/share/qt6/modules</Path>
|
||||
</Files>
|
||||
</Package>
|
||||
<Package>
|
||||
<Name>qt6-declarative-devel</Name>
|
||||
<Files>
|
||||
<Path fileType="library">/usr/lib/pkgconfig</Path>
|
||||
<Path fileType="data">/usr/lib/cmake</Path>
|
||||
<Path fileType="header">/usr/include/qt6</Path>
|
||||
</Files>
|
||||
<RuntimeDependencies>
|
||||
<Dependency versionFrom="6.9.3">qt6-base-devel</Dependency>
|
||||
<Dependency release="current">qt6-declarative</Dependency>
|
||||
</RuntimeDependencies>
|
||||
</Package>
|
||||
<!--Package>
|
||||
<Name>qt6-declarative-docs</Name>
|
||||
<Source>
|
||||
<Name>qt6-declarative</Name>
|
||||
<Homepage>http://qt.digia.com/</Homepage>
|
||||
<Packager>
|
||||
<Name>PisiLinux Community</Name>
|
||||
<Email>admins@pisilinux.org</Email>
|
||||
</Packager>
|
||||
<Summary>Classes for QML and JavaScript languages</Summary>
|
||||
<Description>Classes for QML and JavaScript languages</Description>
|
||||
<License>LGPLv2.1-linking-exception</License>
|
||||
<Archive sha1sum="aa00670d8e01f93a96cc45ea6bf878162afde778" type="tarxz">https://download.qt.io/official_releases/qt/6.9/6.9.3/submodules/qtdeclarative-everywhere-src-6.9.3.tar.xz</Archive>
|
||||
<BuildDependencies>
|
||||
<Dependency>ninja</Dependency>
|
||||
<Dependency>cmake</Dependency>
|
||||
<Dependency>python3</Dependency>
|
||||
<Dependency>libxkbcommon-devel</Dependency>
|
||||
<Dependency versionFrom="13.0.4">mesa-devel</Dependency>
|
||||
<Dependency versionFrom="6.9.3">qt6-sql-odbc</Dependency>
|
||||
<Dependency versionFrom="6.9.3">qt6-sql-mysql</Dependency>
|
||||
<Dependency versionFrom="6.9.3">qt6-svg-devel</Dependency>
|
||||
<Dependency versionFrom="6.9.3">qt6-sql-sqlite</Dependency>
|
||||
<Dependency versionFrom="6.9.3">qt6-base-devel</Dependency>
|
||||
<Dependency versionFrom="6.9.3">qt6-imageformats</Dependency>
|
||||
<Dependency versionFrom="6.9.3">qt6-sql-postgresql</Dependency>
|
||||
<Dependency versionFrom="6.9.3">qt6-shadertools-devel</Dependency>
|
||||
<Dependency versionFrom="6.9.3">qt6-languageserver-devel</Dependency>
|
||||
</BuildDependencies>
|
||||
<Patches>
|
||||
<Patch level="1">CVE-2025-12385-qtdeclarative-6.9-0001.diff</Patch>
|
||||
<Patch level="1">CVE-2025-12385-qtdeclarative-6.9-0002.diff</Patch>
|
||||
</Patches>
|
||||
</Source>
|
||||
<Package>
|
||||
<Name>qt6-declarative</Name>
|
||||
<RuntimeDependencies>
|
||||
<Dependency>libgcc</Dependency>
|
||||
<Dependency>libglvnd</Dependency>
|
||||
<Dependency versionFrom="6.9.3">qt6-svg</Dependency>
|
||||
<Dependency versionFrom="6.9.3">qt6-base</Dependency>
|
||||
<Dependency versionFrom="6.9.3">qt6-languageserver</Dependency>
|
||||
</RuntimeDependencies>
|
||||
<Files>
|
||||
<Path fileType="doc">/usr/share/doc/qt6</Path>
|
||||
<Path fileType="library">/usr/lib</Path>
|
||||
<Path fileType="library">/usr/lib/qt6</Path>
|
||||
<Path fileType="data">/usr/share/licenses</Path>
|
||||
<Path fileType="executable">/usr/lib/qt6/bin</Path>
|
||||
<Path fileType="executable">/usr/bin/</Path>
|
||||
<Path fileType="data">/usr/share/qt6/modules</Path>
|
||||
</Files>
|
||||
</Package-->
|
||||
</Package>
|
||||
|
||||
<Package>
|
||||
<Name>qt6-declarative-devel</Name>
|
||||
<Files>
|
||||
<Path fileType="library">/usr/lib/pkgconfig</Path>
|
||||
<Path fileType="data">/usr/lib/cmake</Path>
|
||||
<Path fileType="header">/usr/include/qt6</Path>
|
||||
</Files>
|
||||
<RuntimeDependencies>
|
||||
<Dependency versionFrom="6.9.3">qt6-base-devel</Dependency>
|
||||
<Dependency release="current">qt6-declarative</Dependency>
|
||||
</RuntimeDependencies>
|
||||
</Package>
|
||||
<!--Package>
|
||||
<Name>qt6-declarative-docs</Name>
|
||||
<RuntimeDependencies>
|
||||
<Dependency versionFrom="6.9.3">qt6-base</Dependency>
|
||||
</RuntimeDependencies>
|
||||
<Files>
|
||||
<Path fileType="doc">/usr/share/doc/qt6</Path>
|
||||
</Files>
|
||||
</Package-->
|
||||
<History>
|
||||
<Update release="19">
|
||||
<Date>2025-11-29</Date>
|
||||
<Version>6.9.3</Version>
|
||||
<Comment>Rebuild.</Comment>
|
||||
<Name>Pisi Linux Community</Name>
|
||||
<Email>admin@pisilinux.org</Email>
|
||||
</Update>
|
||||
<Update release="18">
|
||||
<Date>2025-10-07</Date>
|
||||
<Version>6.9.3</Version>
|
||||
@@ -87,117 +95,117 @@
|
||||
<Name>Pisi Linux Community</Name>
|
||||
<Email>admin@pisilinux.org</Email>
|
||||
</Update>
|
||||
<Update release="16">
|
||||
<Date>2025-07-24</Date>
|
||||
<Version>6.9.1</Version>
|
||||
<Comment>Rebuild.</Comment>
|
||||
<Name>Pisi Linux Community</Name>
|
||||
<Email>admin@pisilinux.org</Email>
|
||||
</Update>
|
||||
<Update release="15">
|
||||
<Date>2025-06-09</Date>
|
||||
<Version>6.9.1</Version>
|
||||
<Comment>Version bump.</Comment>
|
||||
<Name>Pisi Linux Community</Name>
|
||||
<Email>admin@pisilinux.org</Email>
|
||||
</Update>
|
||||
<Update release="14">
|
||||
<Date>2025-05-12</Date>
|
||||
<Version>6.9.0</Version>
|
||||
<Comment>Version bump.</Comment>
|
||||
<Name>Pisi Linux Community</Name>
|
||||
<Email>admin@pisilinux.org</Email>
|
||||
</Update>
|
||||
<Update release="13">
|
||||
<Date>2025-02-01</Date>
|
||||
<Version>6.8.2</Version>
|
||||
<Comment>Version bump.</Comment>
|
||||
<Name>Pisi Linux Community</Name>
|
||||
<Email>admin@pisilinux.org</Email>
|
||||
</Update>
|
||||
<Update release="12">
|
||||
<Date>2024-12-02</Date>
|
||||
<Version>6.8.1</Version>
|
||||
<Comment>Version bump.</Comment>
|
||||
<Name>Pisi Linux Community</Name>
|
||||
<Email>admin@pisilinux.org</Email>
|
||||
</Update>
|
||||
<Update release="11">
|
||||
<Date>2024-09-27</Date>
|
||||
<Version>6.7.3</Version>
|
||||
<Comment>Version bump.</Comment>
|
||||
<Name>Pisi Linux Community</Name>
|
||||
<Email>admin@pisilinux.org</Email>
|
||||
</Update>
|
||||
<Update release="10">
|
||||
<Date>2024-06-02</Date>
|
||||
<Version>6.7.1</Version>
|
||||
<Comment>Version bump.</Comment>
|
||||
<Name>Pisi Linux Community</Name>
|
||||
<Email>admin@pisilinux.org</Email>
|
||||
</Update>
|
||||
<Update release="9">
|
||||
<Date>2024-03-30</Date>
|
||||
<Version>6.6.3</Version>
|
||||
<Comment>Version bump.</Comment>
|
||||
<Name>Mustafa Cinasal</Name>
|
||||
<Email>muscnsl@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="8">
|
||||
<Date>2024-02-15</Date>
|
||||
<Version>6.6.2</Version>
|
||||
<Comment>Version bump.</Comment>
|
||||
<Name>Mustafa Cinasal</Name>
|
||||
<Email>muscnsl@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="7">
|
||||
<Date>2023-11-28</Date>
|
||||
<Version>6.6.1</Version>
|
||||
<Comment>Version bump.</Comment>
|
||||
<Name>Mustafa Cinasal</Name>
|
||||
<Email>muscnsl@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="6">
|
||||
<Date>2023-11-17</Date>
|
||||
<Version>6.6.0</Version>
|
||||
<Comment>Version bump.</Comment>
|
||||
<Name>Mustafa Cinasal</Name>
|
||||
<Email>muscnsl@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="5">
|
||||
<Date>2023-10-09</Date>
|
||||
<Version>6.5.3</Version>
|
||||
<Comment>Version bump.</Comment>
|
||||
<Name>Mustafa Cinasal</Name>
|
||||
<Email>muscnsl@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="4">
|
||||
<Date>2023-05-27</Date>
|
||||
<Version>6.5.1</Version>
|
||||
<Comment>Version bump.</Comment>
|
||||
<Name>Mustafa Cinasal</Name>
|
||||
<Email>muscnsl@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="3">
|
||||
<Date>2023-04-13</Date>
|
||||
<Version>6.5.0</Version>
|
||||
<Comment>Version bump.</Comment>
|
||||
<Name>Mustafa Cinasal</Name>
|
||||
<Email>muscnsl@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="2">
|
||||
<Date>2023-01-08</Date>
|
||||
<Version>6.4.2</Version>
|
||||
<Comment>Version bump.</Comment>
|
||||
<Name>Mustafa Cinasal</Name>
|
||||
<Email>muscnsl@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="1">
|
||||
<Date>2022-10-05</Date>
|
||||
<Version>6.4.0</Version>
|
||||
<Comment>First release</Comment>
|
||||
<Name>Mustafa Cinasal</Name>
|
||||
<Email>muscnsl@gmail.com</Email>
|
||||
</Update>
|
||||
</History>
|
||||
<Update release="16">
|
||||
<Date>2025-07-24</Date>
|
||||
<Version>6.9.1</Version>
|
||||
<Comment>Rebuild.</Comment>
|
||||
<Name>Pisi Linux Community</Name>
|
||||
<Email>admin@pisilinux.org</Email>
|
||||
</Update>
|
||||
<Update release="15">
|
||||
<Date>2025-06-09</Date>
|
||||
<Version>6.9.1</Version>
|
||||
<Comment>Version bump.</Comment>
|
||||
<Name>Pisi Linux Community</Name>
|
||||
<Email>admin@pisilinux.org</Email>
|
||||
</Update>
|
||||
<Update release="14">
|
||||
<Date>2025-05-12</Date>
|
||||
<Version>6.9.0</Version>
|
||||
<Comment>Version bump.</Comment>
|
||||
<Name>Pisi Linux Community</Name>
|
||||
<Email>admin@pisilinux.org</Email>
|
||||
</Update>
|
||||
<Update release="13">
|
||||
<Date>2025-02-01</Date>
|
||||
<Version>6.8.2</Version>
|
||||
<Comment>Version bump.</Comment>
|
||||
<Name>Pisi Linux Community</Name>
|
||||
<Email>admin@pisilinux.org</Email>
|
||||
</Update>
|
||||
<Update release="12">
|
||||
<Date>2024-12-02</Date>
|
||||
<Version>6.8.1</Version>
|
||||
<Comment>Version bump.</Comment>
|
||||
<Name>Pisi Linux Community</Name>
|
||||
<Email>admin@pisilinux.org</Email>
|
||||
</Update>
|
||||
<Update release="11">
|
||||
<Date>2024-09-27</Date>
|
||||
<Version>6.7.3</Version>
|
||||
<Comment>Version bump.</Comment>
|
||||
<Name>Pisi Linux Community</Name>
|
||||
<Email>admin@pisilinux.org</Email>
|
||||
</Update>
|
||||
<Update release="10">
|
||||
<Date>2024-06-02</Date>
|
||||
<Version>6.7.1</Version>
|
||||
<Comment>Version bump.</Comment>
|
||||
<Name>Pisi Linux Community</Name>
|
||||
<Email>admin@pisilinux.org</Email>
|
||||
</Update>
|
||||
<Update release="9">
|
||||
<Date>2024-03-30</Date>
|
||||
<Version>6.6.3</Version>
|
||||
<Comment>Version bump.</Comment>
|
||||
<Name>Mustafa Cinasal</Name>
|
||||
<Email>muscnsl@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="8">
|
||||
<Date>2024-02-15</Date>
|
||||
<Version>6.6.2</Version>
|
||||
<Comment>Version bump.</Comment>
|
||||
<Name>Mustafa Cinasal</Name>
|
||||
<Email>muscnsl@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="7">
|
||||
<Date>2023-11-28</Date>
|
||||
<Version>6.6.1</Version>
|
||||
<Comment>Version bump.</Comment>
|
||||
<Name>Mustafa Cinasal</Name>
|
||||
<Email>muscnsl@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="6">
|
||||
<Date>2023-11-17</Date>
|
||||
<Version>6.6.0</Version>
|
||||
<Comment>Version bump.</Comment>
|
||||
<Name>Mustafa Cinasal</Name>
|
||||
<Email>muscnsl@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="5">
|
||||
<Date>2023-10-09</Date>
|
||||
<Version>6.5.3</Version>
|
||||
<Comment>Version bump.</Comment>
|
||||
<Name>Mustafa Cinasal</Name>
|
||||
<Email>muscnsl@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="4">
|
||||
<Date>2023-05-27</Date>
|
||||
<Version>6.5.1</Version>
|
||||
<Comment>Version bump.</Comment>
|
||||
<Name>Mustafa Cinasal</Name>
|
||||
<Email>muscnsl@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="3">
|
||||
<Date>2023-04-13</Date>
|
||||
<Version>6.5.0</Version>
|
||||
<Comment>Version bump.</Comment>
|
||||
<Name>Mustafa Cinasal</Name>
|
||||
<Email>muscnsl@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="2">
|
||||
<Date>2023-01-08</Date>
|
||||
<Version>6.4.2</Version>
|
||||
<Comment>Version bump.</Comment>
|
||||
<Name>Mustafa Cinasal</Name>
|
||||
<Email>muscnsl@gmail.com</Email>
|
||||
</Update>
|
||||
<Update release="1">
|
||||
<Date>2022-10-05</Date>
|
||||
<Version>6.4.0</Version>
|
||||
<Comment>First release</Comment>
|
||||
<Name>Mustafa Cinasal</Name>
|
||||
<Email>muscnsl@gmail.com</Email>
|
||||
</Update>
|
||||
</History>
|
||||
</PISI>
|
||||
|
||||
Reference in New Issue
Block a user