aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorUlf Hermann <ulf.hermann@qt.io>2020-01-27 17:33:56 +0100
committerUlf Hermann <ulf.hermann@qt.io>2020-02-12 15:40:07 +0100
commite192874c6c134f0e7e1f08795e277cbc80cd55d5 (patch)
treeb2da4b1022f5148ccc396d941db202ad1671f249 /tests
parent8d634b512712a1cc7969ffc94a399dca233e4535 (diff)
Guard against invalid version specifiers in import statements
Check that the version parsed is in the valid range for QTypeRevision and produce a compile error if not. Task-number: QTBUG-71278 Change-Id: I9a957a10f4254387f9868a8f3f1e231440bc2cd2 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/qml/qqmlparser/tst_qqmlparser.cpp44
1 files changed, 44 insertions, 0 deletions
diff --git a/tests/auto/qml/qqmlparser/tst_qqmlparser.cpp b/tests/auto/qml/qqmlparser/tst_qqmlparser.cpp
index 0b88358d4a..981fe7407e 100644
--- a/tests/auto/qml/qqmlparser/tst_qqmlparser.cpp
+++ b/tests/auto/qml/qqmlparser/tst_qqmlparser.cpp
@@ -37,6 +37,7 @@
#include <qtest.h>
#include <QDir>
#include <QDebug>
+#include <QRegularExpression>
#include <cstdlib>
class tst_qqmlparser : public QQmlDataTest
@@ -67,6 +68,8 @@ private slots:
void typeAssertion();
void annotations_data();
void annotations();
+ void invalidImportVersion_data();
+ void invalidImportVersion();
private:
QStringList excludedDirs;
@@ -584,6 +587,47 @@ void tst_qqmlparser::annotations()
}
}
+void tst_qqmlparser::invalidImportVersion_data()
+{
+ QTest::addColumn<QString>("expression");
+
+ const QStringList segments = {
+ "0", "255", "500", "3030303030303030303030303"
+ };
+
+ for (const QString &major : segments) {
+ if (major != "0") {
+ QTest::addRow("%s", qPrintable(major))
+ << QString::fromLatin1("import Foo %1").arg(major);
+ }
+
+ for (const QString &minor : segments) {
+ if (major == "0" && minor == "0")
+ continue;
+
+ QTest::addRow("%s.%s", qPrintable(major), qPrintable(minor))
+ << QString::fromLatin1("import Foo %1.%2").arg(major).arg(minor);
+ }
+ }
+
+
+}
+
+void tst_qqmlparser::invalidImportVersion()
+{
+ QFETCH(QString, expression);
+
+ QQmlJS::Engine engine;
+ QQmlJS::Lexer lexer(&engine);
+ lexer.setCode(expression, 1);
+ QQmlJS::Parser parser(&engine);
+ QVERIFY(!parser.parse());
+
+ QRegularExpression regexp(
+ "^Invalid (major )?version. Version numbers must be >= 0 and < 255\\.$");
+ QVERIFY(regexp.match(parser.errorMessage()).hasMatch());
+}
+
QTEST_MAIN(tst_qqmlparser)
#include "tst_qqmlparser.moc"