Details
-
Bug
-
Resolution: Done
-
P1: Critical
-
5.8.0
-
None
-
Arch Linux
Config: Using QtTest library 5.8.0 (branch), Qt 5.8.0 (x86_64-little_endian-lp64 shared (dynamic) debug build; by GCC 6.3.1 20170109)
-
0f32f4efc5a9a8b33369013c2ba6c27c78498cf2
Description
Closing a QWebSocket with pending data leads to a crash (SIGABRT).
Minimal example:
#include <QWebSocket> #include <QWebSocketServer> #include <QtTest> class test_RemoteWebSocketServer : public QObject { Q_OBJECT private Q_SLOTS: void testDummy() { QWebSocketServer server("TestServer", QWebSocketServer::NonSecureMode); server.setProxy(QNetworkProxy(QNetworkProxy::NoProxy)); QVERIFY(server.listen(QHostAddress::LocalHost)); QWebSocket client; QSignalSpy spyConnected(&client, &QWebSocket::connected); QSignalSpy spyDisconnected(&client, &QWebSocket::disconnected); client.open(QString("ws://127.0.0.1:%1").arg(server.serverPort())); QTRY_COMPARE(spyConnected.count(), 1); client.sendBinaryMessage(QByteArray(30 * 1024 * 1024, 'A')); client.close(); QTRY_COMPARE(spyDisconnected.count(), 1); } }; QTEST_GUILESS_MAIN(test_RemoteWebSocketServer) #include "test_RemoteWebSocketServer.moc"
Stacktrace:
1 raise 0x7ffff441904f 2 abort 0x7ffff441a47a 3 qt_message_fatal qlogging.cpp 1687 0x7ffff50cf38b 4 QMessageLogger::fatal qlogging.cpp 795 0x7ffff50cb7a4 5 qt_assert qglobal.cpp 3070 0x7ffff50c46ec 6 QWebSocketPrivate::processData qwebsocket_p.cpp 1148 0x7ffff7e6655b 7 QtPrivate::FunctorCall<QtPrivate::IndexesList<>, QtPrivate::List<>, void, void (QWebSocketPrivate:: *)()>::call(void (QWebSocketPrivate:: *)(), QWebSocketPrivate *, void * *) qobjectdefs_impl.h 143 0x7ffff7e6dfc6 8 QtPrivate::FunctionPointer<void (QWebSocketPrivate:: *)()>::call<QtPrivate::List<>, void>(void (QWebSocketPrivate:: *)(), QWebSocketPrivate *, void * *) qobjectdefs_impl.h 162 0x7ffff7e6d79d 9 QtPrivate::QPrivateSlotObject<void (QWebSocketPrivate:: *)(), QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase *, QObject *, void * *, bool *) qobject_p.h 310 0x7ffff7e6c9a3 10 QtPrivate::QSlotObjectBase::call qobject_impl.h 101 0x7ffff537762d 11 QMetaCallEvent::placeMetaCall qobject.cpp 500 0x7ffff536ca97 12 QObject::event qobject.cpp 1263 0x7ffff536db88 13 QCoreApplicationPrivate::notify_helper qcoreapplication.cpp 1122 0x7ffff5333a20 14 doNotify qcoreapplication.cpp 1063 0x7ffff53336a3 15 QCoreApplication::notify qcoreapplication.cpp 1049 0x7ffff5333616 16 QCoreApplication::notifyInternal2 qcoreapplication.cpp 988 0x7ffff53335a6 17 QCoreApplication::sendEvent qcoreapplication.h 231 0x7ffff5337624 18 QCoreApplicationPrivate::sendPostedEvents qcoreapplication.cpp 1648 0x7ffff53349d7 19 QCoreApplication::sendPostedEvents qcoreapplication.cpp 1502 0x7ffff5334354 20 postEventSourceDispatch qeventdispatcher_glib.cpp 276 0x7ffff53af9d2 21 g_main_context_dispatch 0x7ffff0e135a7 22 ?? 0x7ffff0e13810 23 g_main_context_iteration 0x7ffff0e138bc 24 QEventDispatcherGlib::processEvents qeventdispatcher_glib.cpp 423 0x7ffff53b0189 25 QCoreApplication::processEvents qcoreapplication.cpp 1206 0x7ffff5333b36 26 QTest::qWait qtestsystem.h 64 0x40672c 27 test_RemoteWebSocketServer::testDummy test_RemoteWebSocketServer.cpp 27 0x406fe6 28 test_RemoteWebSocketServer::qt_static_metacall test_RemoteWebSocketServer.moc 71 0x4064e1 29 QMetaMethod::invoke qmetaobject.cpp 2222 0x7ffff533fec2 30 QMetaMethod::invoke qmetaobject.h 123 0x7ffff7f86364 31 QTest::TestMethods::invokeTestOnData qtestcase.cpp 835 0x7ffff7f7f879 32 QTest::TestMethods::invokeTest qtestcase.cpp 1016 0x7ffff7f80322 33 QTest::TestMethods::invokeTests qtestcase.cpp 1323 0x7ffff7f813e9 34 QTest::qExec qtestcase.cpp 1738 0x7ffff7f81f0d 35 main test_RemoteWebSocketServer.cpp 34 0x40645f