aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorErik Verbruggen <erik.verbruggen@qt.io>2018-10-11 10:48:19 +0200
committerErik Verbruggen <erik.verbruggen@qt.io>2018-10-11 08:59:20 +0000
commitb8f4005f132c26b842387e1ae5f492594dc03d86 (patch)
tree7e3739557d168ce6e7a54fa884f330f649636bd7
parentf47c87e75fb94f1b322157fa663ac8b87a4dbd22 (diff)
JS: Check array subscripts for validity when generating code
Task-number: QTBUG-71079 Change-Id: I999130f3994f513bb9d2ca8ddaa94688451937fc Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
-rw-r--r--src/qml/compiler/qv4codegen.cpp2
-rw-r--r--tests/auto/qml/v4misc/tst_v4misc.cpp20
2 files changed, 22 insertions, 0 deletions
diff --git a/src/qml/compiler/qv4codegen.cpp b/src/qml/compiler/qv4codegen.cpp
index 321cf21c54..19e960bb57 100644
--- a/src/qml/compiler/qv4codegen.cpp
+++ b/src/qml/compiler/qv4codegen.cpp
@@ -1222,6 +1222,8 @@ bool Codegen::visit(ArrayMemberExpression *ast)
return false;
}
Reference index = expression(ast->expression);
+ if (hasError)
+ return false;
_expr.setResult(Reference::fromSubscript(base, index));
return false;
}
diff --git a/tests/auto/qml/v4misc/tst_v4misc.cpp b/tests/auto/qml/v4misc/tst_v4misc.cpp
index 22ff9c43fc..21a826850b 100644
--- a/tests/auto/qml/v4misc/tst_v4misc.cpp
+++ b/tests/auto/qml/v4misc/tst_v4misc.cpp
@@ -37,6 +37,9 @@ class tst_v4misc: public QObject
private slots:
void tdzOptimizations_data();
void tdzOptimizations();
+
+ void parserMisc_data();
+ void parserMisc();
};
void tst_v4misc::tdzOptimizations_data()
@@ -102,6 +105,23 @@ void tst_v4misc::tdzOptimizations()
}
+void tst_v4misc::parserMisc_data()
+{
+ QTest::addColumn<QString>("error");
+
+ QTest::newRow("8[++i][+++i]") << QString("ReferenceError: Prefix ++ operator applied to value that is not a reference.");
+}
+
+void tst_v4misc::parserMisc()
+{
+ QFETCH(QString, error);
+
+ QJSEngine engine;
+ QJSValue result = engine.evaluate(QString::fromUtf8(QTest::currentDataTag()));
+ QVERIFY(result.isError());
+ QCOMPARE(result.toString(), error);
+}
+
QTEST_MAIN(tst_v4misc);
#include "tst_v4misc.moc"