summaryrefslogtreecommitdiffstats
path: root/tests/auto/widgets/qwebenginescript
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/widgets/qwebenginescript')
-rw-r--r--tests/auto/widgets/qwebenginescript/resources/webChannelWithBadString.html14
-rw-r--r--tests/auto/widgets/qwebenginescript/tst_qwebenginescript.cpp17
-rw-r--r--tests/auto/widgets/qwebenginescript/tst_qwebenginescript.qrc1
3 files changed, 32 insertions, 0 deletions
diff --git a/tests/auto/widgets/qwebenginescript/resources/webChannelWithBadString.html b/tests/auto/widgets/qwebenginescript/resources/webChannelWithBadString.html
new file mode 100644
index 000000000..af40f6a2b
--- /dev/null
+++ b/tests/auto/widgets/qwebenginescript/resources/webChannelWithBadString.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>webChannelWithBadString</title>
+ </head>
+ <body>
+ <script src="/qwebchannel.js"></script>
+ <script type="text/javascript">
+ new QWebChannel(qt.webChannelTransport, (channel) => {
+ channel.objects.host.text = String.fromCharCode(0xD800);
+ });
+ </script>
+ </body>
+</html>
diff --git a/tests/auto/widgets/qwebenginescript/tst_qwebenginescript.cpp b/tests/auto/widgets/qwebenginescript/tst_qwebenginescript.cpp
index cb45e524e..a9efabf97 100644
--- a/tests/auto/widgets/qwebenginescript/tst_qwebenginescript.cpp
+++ b/tests/auto/widgets/qwebenginescript/tst_qwebenginescript.cpp
@@ -42,6 +42,7 @@ private Q_SLOTS:
void webChannelResettingAndUnsetting();
void webChannelWithExistingQtObject();
void navigation();
+ void webChannelWithBadString();
};
void tst_QWebEngineScript::domEditing()
@@ -470,6 +471,22 @@ void tst_QWebEngineScript::navigation()
QCOMPARE(testObject.text(), url3);
}
+// Try to set TestObject::text to an invalid UTF-16 string.
+//
+// See QTBUG-61969.
+void tst_QWebEngineScript::webChannelWithBadString()
+{
+ QWebEnginePage page;
+ TestObject host;
+ QSignalSpy hostSpy(&host, &TestObject::textChanged);
+ QWebChannel channel;
+ channel.registerObject(QStringLiteral("host"), &host);
+ page.setWebChannel(&channel);
+ page.setUrl(QStringLiteral("qrc:/resources/webChannelWithBadString.html"));
+ QVERIFY(hostSpy.wait(20000));
+ QCOMPARE(host.text(), QString(QChar(QChar::ReplacementCharacter)));
+}
+
QTEST_MAIN(tst_QWebEngineScript)
#include "tst_qwebenginescript.moc"
diff --git a/tests/auto/widgets/qwebenginescript/tst_qwebenginescript.qrc b/tests/auto/widgets/qwebenginescript/tst_qwebenginescript.qrc
index 9960a37ba..ada06119a 100644
--- a/tests/auto/widgets/qwebenginescript/tst_qwebenginescript.qrc
+++ b/tests/auto/widgets/qwebenginescript/tst_qwebenginescript.qrc
@@ -4,5 +4,6 @@
<file>resources/test_iframe_outer.html</file>
<file>resources/test_iframe_inner.html</file>
<file>resources/test_window_open.html</file>
+ <file>resources/webChannelWithBadString.html</file>
</qresource>
</RCC>