Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package qt6-websockets for openSUSE:Factory checked in at 2026-05-28 17:25:29 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/qt6-websockets (Old) and /work/SRC/openSUSE:Factory/.qt6-websockets.new.1937 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "qt6-websockets" Thu May 28 17:25:29 2026 rev:35 rq:1355450 version:6.11.1 Changes: -------- --- /work/SRC/openSUSE:Factory/qt6-websockets/qt6-websockets.changes 2026-03-28 20:13:53.290752944 +0100 +++ /work/SRC/openSUSE:Factory/.qt6-websockets.new.1937/qt6-websockets.changes 2026-05-28 17:26:38.130964825 +0200 @@ -1,0 +2,6 @@ +Thu May 14 14:56:43 UTC 2026 - Christophe Marin <[email protected]> + +- Update to 6.11.1 + https://www.qt.io/blog/qt-6.11.1-released + +------------------------------------------------------------------- Old: ---- qtwebsockets-everywhere-src-6.11.0.tar.xz New: ---- qtwebsockets-everywhere-src-6.11.1.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ qt6-websockets.spec ++++++ --- /var/tmp/diff_new_pack.YUDTIY/_old 2026-05-28 17:26:39.019001584 +0200 +++ /var/tmp/diff_new_pack.YUDTIY/_new 2026-05-28 17:26:39.019001584 +0200 @@ -16,7 +16,7 @@ # -%define real_version 6.11.0 +%define real_version 6.11.1 %define short_version 6.11 %define tar_name qtwebsockets-everywhere-src %define tar_suffix %{nil} @@ -27,7 +27,7 @@ %endif # Name: qt6-websockets%{?pkg_suffix} -Version: 6.11.0 +Version: 6.11.1 Release: 0 Summary: Qt 6 WebSockets library License: GPL-2.0-only OR GPL-3.0-or-later OR LGPL-3.0-only ++++++ qtwebsockets-everywhere-src-6.11.0.tar.xz -> qtwebsockets-everywhere-src-6.11.1.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtwebsockets-everywhere-src-6.11.0/.cmake.conf new/qtwebsockets-everywhere-src-6.11.1/.cmake.conf --- old/qtwebsockets-everywhere-src-6.11.0/.cmake.conf 2026-03-10 06:07:38.000000000 +0100 +++ new/qtwebsockets-everywhere-src-6.11.1/.cmake.conf 2026-05-08 03:18:55.000000000 +0200 @@ -1,4 +1,4 @@ -set(QT_REPO_MODULE_VERSION "6.11.0") +set(QT_REPO_MODULE_VERSION "6.11.1") set(QT_REPO_MODULE_PRERELEASE_VERSION_SEGMENT "alpha1") set(QT_EXTRA_INTERNAL_TARGET_DEFINES "QT_NO_CONTEXTLESS_CONNECT=1" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtwebsockets-everywhere-src-6.11.0/.tag new/qtwebsockets-everywhere-src-6.11.1/.tag --- old/qtwebsockets-everywhere-src-6.11.0/.tag 2026-03-10 06:07:38.000000000 +0100 +++ new/qtwebsockets-everywhere-src-6.11.1/.tag 2026-05-08 03:18:55.000000000 +0200 @@ -1 +1 @@ -882f182c8bb5d249ecd97601557ab0e671bdf520 +451920600d7f0b8a4b458bba56a2dd303e587026 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtwebsockets-everywhere-src-6.11.0/dependencies.yaml new/qtwebsockets-everywhere-src-6.11.1/dependencies.yaml --- old/qtwebsockets-everywhere-src-6.11.0/dependencies.yaml 2026-03-10 06:07:38.000000000 +0100 +++ new/qtwebsockets-everywhere-src-6.11.1/dependencies.yaml 2026-05-08 03:18:55.000000000 +0200 @@ -1,7 +1,7 @@ dependencies: ../qtbase: - ref: 8ba7ea4b77a4b8f1948760221e264917ddc9e1c8 + ref: 59c81a3c2247b821b9b84b4eb8d939b77e07e276 required: true ../qtdeclarative: - ref: e602a097ca314e9610b1fd3b7dbfa467a868731a + ref: a02bed441965ee1f18f856352c7d5ee5ba35d795 required: false diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtwebsockets-everywhere-src-6.11.0/src/websockets/qwebsocket_p.cpp new/qtwebsockets-everywhere-src-6.11.1/src/websockets/qwebsocket_p.cpp --- old/qtwebsockets-everywhere-src-6.11.0/src/websockets/qwebsocket_p.cpp 2026-03-10 06:07:38.000000000 +0100 +++ new/qtwebsockets-everywhere-src-6.11.1/src/websockets/qwebsocket_p.cpp 2026-05-08 03:18:55.000000000 +0200 @@ -510,6 +510,10 @@ setSocketState(QAbstractSocket::ConnectingState); sslSocket->setSslConfiguration(m_configuration.m_sslConfiguration); + + if (!request.peerVerifyName().isEmpty()) + sslSocket->setPeerVerifyName(request.peerVerifyName()); + if (Q_UNLIKELY(m_configuration.m_ignoreSslErrors)) sslSocket->ignoreSslErrors(); else @@ -1239,11 +1243,16 @@ m_key = generateKey(); QList<QPair<QString, QString> > headers; + QString hostHeaderOverride; const auto h = m_request.headers(); for (qsizetype i = 0; i < h.size(); ++i) { const auto name = h.nameAt(i); const auto value = h.valueAt(i); + if (name.compare("Host", Qt::CaseInsensitive) == 0) { + hostHeaderOverride = QString::fromLatin1(value); + continue; + } // protocols handled separately below if (name.compare("Sec-WebSocket-Protocol", Qt::CaseInsensitive) == 0) continue; @@ -1277,7 +1286,9 @@ | QUrl::RemovePath | QUrl::RemoveQuery | QUrl::RemoveFragment; // mid(2) removes the prefix "//" from the remaining url - const QString host = removeZoneId(m_request.url().toString(format).mid(2)); + const QString host = hostHeaderOverride.isEmpty() + ? removeZoneId(m_request.url().toString(format).mid(2)) + : hostHeaderOverride; const QString handshake = createHandShakeRequest(m_resourceName, host, origin(), diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtwebsockets-everywhere-src-6.11.0/src/websockets/qwebsocketserver_p.cpp new/qtwebsockets-everywhere-src-6.11.1/src/websockets/qwebsocketserver_p.cpp --- old/qtwebsockets-everywhere-src-6.11.0/src/websockets/qwebsocketserver_p.cpp 2026-03-10 06:07:38.000000000 +0100 +++ new/qtwebsockets-everywhere-src-6.11.1/src/websockets/qwebsocketserver_p.cpp 2026-05-08 03:18:55.000000000 +0200 @@ -405,7 +405,6 @@ while (m_pTcpServer->hasPendingConnections()) { QTcpSocket *pTcpSocket = m_pTcpServer->nextPendingConnection(); Q_ASSERT(pTcpSocket); - startHandshakeTimeout(pTcpSocket); handleConnection(pTcpSocket); } } @@ -539,6 +538,8 @@ void QWebSocketServerPrivate::handleConnection(QTcpSocket *pTcpSocket) const { if (Q_LIKELY(pTcpSocket)) { + startHandshakeTimeout(pTcpSocket); + // Use a queued connection because a QSslSocket needs the event loop to process incoming // data. If not queued, data is incomplete when handshakeReceived is called. QObjectPrivate::connect(pTcpSocket, &QTcpSocket::readyRead, @@ -556,7 +557,7 @@ } } -void QWebSocketServerPrivate::startHandshakeTimeout(QTcpSocket *pTcpSocket) +void QWebSocketServerPrivate::startHandshakeTimeout(QTcpSocket *pTcpSocket) const { if (m_handshakeTimeout < 0) return; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtwebsockets-everywhere-src-6.11.0/src/websockets/qwebsocketserver_p.h new/qtwebsockets-everywhere-src-6.11.1/src/websockets/qwebsocketserver_p.h --- old/qtwebsockets-everywhere-src-6.11.0/src/websockets/qwebsocketserver_p.h 2026-03-10 06:07:38.000000000 +0100 +++ new/qtwebsockets-everywhere-src-6.11.1/src/websockets/qwebsocketserver_p.h 2026-05-08 03:18:55.000000000 +0200 @@ -93,7 +93,7 @@ void handleConnection(QTcpSocket *pTcpSocket) const; private slots: - void startHandshakeTimeout(QTcpSocket *pTcpSocket); + void startHandshakeTimeout(QTcpSocket *pTcpSocket) const; private: QTcpServer *m_pTcpServer; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtwebsockets-everywhere-src-6.11.0/tests/auto/websockets/qwebsocket/tst_qwebsocket.cpp new/qtwebsockets-everywhere-src-6.11.1/tests/auto/websockets/qwebsocket/tst_qwebsocket.cpp --- old/qtwebsockets-everywhere-src-6.11.0/tests/auto/websockets/qwebsocket/tst_qwebsocket.cpp 2026-03-10 06:07:38.000000000 +0100 +++ new/qtwebsockets-everywhere-src-6.11.1/tests/auto/websockets/qwebsocket/tst_qwebsocket.cpp 2026-05-08 03:18:55.000000000 +0200 @@ -163,6 +163,7 @@ void incomingMessageTooLong(); void incomingFrameTooLong(); void testingFrameAndMessageSizeApi(); + void hostHeaderFromNetworkRequest(); void customHeader(); void splitUtf8Sequence(); }; @@ -295,6 +296,12 @@ QFETCH(QAbstractSocket::SocketState, stateAfterOpenCall); QFETCH(int, disconnectedCount); QFETCH(int, stateChangedCount); +#if defined(__QNX__) && __QNX__ >= 800 + if (url == QStringLiteral("ws://127.0.0.1:1/")) + QSKIP("QNX 8.0 rejects loopback connects to non-listening ports " + "synchronously, bypassing the ConnectingState transient the " + "test expects to observe."); +#endif QWebSocket socket; QSignalSpy errorSpy(&socket, SIGNAL(error(QAbstractSocket::SocketError))); QSignalSpy aboutToCloseSpy(&socket, SIGNAL(aboutToClose())); @@ -363,6 +370,11 @@ void tst_QWebSocket::tst_invalidOrigin() { +#if defined(__QNX__) && __QNX__ >= 800 + QSKIP("QNX 8.0 rejects loopback connects to non-listening ports " + "synchronously, bypassing the ConnectingState transient the " + "test expects to observe."); +#endif QWebSocket socket(QStringLiteral("My server\r\nin the wild.")); QSignalSpy errorSpy(&socket, SIGNAL(error(QAbstractSocket::SocketError))); @@ -1429,6 +1441,54 @@ QTRY_COMPARE(maxAllowedIncomingMessageSize, socket.maxAllowedIncomingMessageSize()); } +void tst_QWebSocket::hostHeaderFromNetworkRequest() +{ + QTcpServer server; + QSignalSpy serverSpy(&server, &QTcpServer::newConnection); + + QVERIFY(server.listen(QHostAddress(u"127.0.0.1"_s))); + + QUrl url = QUrl(u"ws://127.0.0.1"_s); + url.setPort(server.serverPort()); + QNetworkRequest request(url); + request.setRawHeader("Host", "localhost"); + + QWebSocket socket; + socket.open(request); + + QVERIFY(serverSpy.wait()); + std::unique_ptr<QTcpSocket> serverSocket; + serverSocket.reset(server.nextPendingConnection()); + QSignalSpy serverSocketSpy(serverSocket.get(), &QIODevice::readyRead); + QByteArray data; + while (!data.contains("\r\n\r\n")) { + QVERIFY(serverSocketSpy.wait()); + data.append(serverSocket->readAll()); + } + + const auto headerEndIndex = data.indexOf("\r\n\r\n"); + QCOMPARE_NE(headerEndIndex, -1); + const auto headerView = QLatin1StringView(QByteArrayView(data).first(headerEndIndex + 2)); + QCOMPARE(headerView.count("Host: "_L1, Qt::CaseInsensitive), 1); + QVERIFY(headerView.contains("\r\nHost: localhost\r\n"_L1, Qt::CaseInsensitive)); + + const QLatin1StringView keyView = + AuthServer::getHeaderValue("Sec-WebSocket-Key"_L1, QByteArrayView(data)); + QVERIFY(!keyView.isEmpty()); + const QByteArray accept = + QByteArrayView(keyView) % "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"_ba; + serverSocket->write( + "HTTP/1.1 101 Switching Protocols\r\n" + "Upgrade: websocket\r\n" + "Connection: Upgrade\r\n" + "Sec-WebSocket-Accept: " + % QCryptographicHash::hash(accept, QCryptographicHash::Sha1).toBase64() + % "\r\n\r\n"); + + QSignalSpy connectedSpy(&socket, &QWebSocket::connected); + QVERIFY(connectedSpy.wait()); +} + void tst_QWebSocket::customHeader() { QTcpServer server;
