diff options
author | Chris Adams <christopher.adams@nokia.com> | 2011-12-30 13:20:33 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-02-09 04:54:25 +0100 |
commit | fdf80ee4677a3b83c00e69071e614cadf54f9897 (patch) | |
tree | 64c27aea85e58c07c3574cb11d19a55567c09831 /tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp | |
parent | e51bb395b466bcf88042688ffaf14b0d9fad61fe (diff) |
Handle exceptions while compiling v8 bindings
Previously, no exception handling existed, which could cause a crash
if an invalid v8 binding expression was generated. Such invalid
bindings should usually be rewritten into valid form by the bindings
rewriter, but in some cases it is too costly to do so, so we need
to handle exceptions.
Task-number: QTBUG-24064
Task-number: QTBUG-23387
Change-Id: I7da12a936780a561c9e9cad3a4a7b62c06d6973e
Reviewed-by: Alan Alpert <alan.alpert@nokia.com>
Diffstat (limited to 'tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp')
-rw-r--r-- | tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp b/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp index 219eac6e14..1c42d9d425 100644 --- a/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp +++ b/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp @@ -113,6 +113,7 @@ private slots: void exceptionClearsOnReeval(); void exceptionSlotProducesWarning(); void exceptionBindingProducesWarning(); + void compileInvalidBinding(); void transientErrors(); void shutdownErrors(); void compositePropertyType(); @@ -1562,6 +1563,17 @@ void tst_qdeclarativeecmascript::exceptionBindingProducesWarning() delete object; } +void tst_qdeclarativeecmascript::compileInvalidBinding() +{ + // QTBUG-23387: ensure that invalid bindings don't cause a crash. + QDeclarativeComponent component(&engine, testFileUrl("v8bindingException.qml")); + QString warning = component.url().toString() + ":16: SyntaxError: Unexpected token ILLEGAL"; + QTest::ignoreMessage(QtWarningMsg, warning.toLatin1().constData()); + QObject *object = component.create(); + QVERIFY(object != 0); + delete object; +} + static int transientErrorsMsgCount = 0; static void transientErrorsMsgHandler(QtMsgType, const char *) { |