Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package qt6-languageserver for openSUSE:Factory checked in at 2026-08-21 16:50:50 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/qt6-languageserver (Old) and /work/SRC/openSUSE:Factory/.qt6-languageserver.new.1258 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "qt6-languageserver" Fri Aug 21 16:50:50 2026 rev:33 rq:1372244 version:6.11.2 Changes: -------- --- /work/SRC/openSUSE:Factory/qt6-languageserver/qt6-languageserver.changes 2026-05-28 17:25:34.180317693 +0200 +++ /work/SRC/openSUSE:Factory/.qt6-languageserver.new.1258/qt6-languageserver.changes 2026-08-21 16:51:44.718608505 +0200 @@ -1,0 +2,6 @@ +Tue Aug 18 11:48:44 UTC 2026 - Christophe Marin <[email protected]> + +- Update to 6.11.2 + https://www.qt.io/blog/qt-6.11.2-released + +------------------------------------------------------------------- Old: ---- qtlanguageserver-everywhere-src-6.11.1.tar.xz New: ---- qtlanguageserver-everywhere-src-6.11.2.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ qt6-languageserver.spec ++++++ --- /var/tmp/diff_new_pack.1yYozF/_old 2026-08-21 16:51:45.516636881 +0200 +++ /var/tmp/diff_new_pack.1yYozF/_new 2026-08-21 16:51:45.518636952 +0200 @@ -16,14 +16,14 @@ # -%define real_version 6.11.1 +%define real_version 6.11.2 %define short_version 6.11 %define short_name qtlanguageserver %define tar_name qtlanguageserver-everywhere-src %define tar_suffix %{nil} # Name: qt6-languageserver -Version: 6.11.1 +Version: 6.11.2 Release: 0 Summary: Implementation of the Language Server Protocol License: GPL-2.0-only OR LGPL-3.0-only OR GPL-3.0-only ++++++ qtlanguageserver-everywhere-src-6.11.1.tar.xz -> qtlanguageserver-everywhere-src-6.11.2.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtlanguageserver-everywhere-src-6.11.1/.cmake.conf new/qtlanguageserver-everywhere-src-6.11.2/.cmake.conf --- old/qtlanguageserver-everywhere-src-6.11.1/.cmake.conf 2026-05-07 21:59:24.000000000 +0200 +++ new/qtlanguageserver-everywhere-src-6.11.2/.cmake.conf 2026-08-11 19:38:05.000000000 +0200 @@ -1,4 +1,4 @@ -set(QT_REPO_MODULE_VERSION "6.11.1") +set(QT_REPO_MODULE_VERSION "6.11.2") 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/qtlanguageserver-everywhere-src-6.11.1/.tag new/qtlanguageserver-everywhere-src-6.11.2/.tag --- old/qtlanguageserver-everywhere-src-6.11.1/.tag 2026-05-07 21:59:24.000000000 +0200 +++ new/qtlanguageserver-everywhere-src-6.11.2/.tag 2026-08-11 19:38:05.000000000 +0200 @@ -1 +1 @@ -7ef3bccd89cc163a664b46fe80a4bd56084b1983 +78cf6915d84657a719847235ab2433b5faf35bb5 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtlanguageserver-everywhere-src-6.11.1/dependencies.yaml new/qtlanguageserver-everywhere-src-6.11.2/dependencies.yaml --- old/qtlanguageserver-everywhere-src-6.11.1/dependencies.yaml 2026-05-07 21:59:24.000000000 +0200 +++ new/qtlanguageserver-everywhere-src-6.11.2/dependencies.yaml 2026-08-11 19:38:05.000000000 +0200 @@ -1,4 +1,4 @@ dependencies: ../qtbase: - ref: 59c81a3c2247b821b9b84b4eb8d939b77e07e276 + ref: ef55f427f2c8b410d34f8a7681020a3000cf6866 required: true diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtlanguageserver-everywhere-src-6.11.1/src/jsonrpc/qhttpmessagestreamparser.cpp new/qtlanguageserver-everywhere-src-6.11.2/src/jsonrpc/qhttpmessagestreamparser.cpp --- old/qtlanguageserver-everywhere-src-6.11.1/src/jsonrpc/qhttpmessagestreamparser.cpp 2026-05-07 21:59:24.000000000 +0200 +++ new/qtlanguageserver-everywhere-src-6.11.2/src/jsonrpc/qhttpmessagestreamparser.cpp 2026-08-11 19:38:05.000000000 +0200 @@ -72,8 +72,8 @@ errorMessage(QtWarningMsg, u"Unexpected space at start of headers, skipping"_s.arg( QString::fromUtf8(m_currentHeaderField))); - while (dataPos < data.size()) { - char c = data.at(++dataPos); + while (++dataPos < data.size()) { + char c = data.at(dataPos); if (c != space && c != tab) { advance(); m_state = State::InHeaderField; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtlanguageserver-everywhere-src-6.11.1/src/jsonrpc/qjsonrpcprotocol.cpp new/qtlanguageserver-everywhere-src-6.11.2/src/jsonrpc/qjsonrpcprotocol.cpp --- old/qtlanguageserver-everywhere-src-6.11.1/src/jsonrpc/qjsonrpcprotocol.cpp 2026-05-07 21:59:24.000000000 +0200 +++ new/qtlanguageserver-everywhere-src-6.11.2/src/jsonrpc/qjsonrpcprotocol.cpp 2026-08-11 19:38:05.000000000 +0200 @@ -313,8 +313,8 @@ handler->handleRequest(request, [this, id](const QJsonRpcProtocol::Response &response) { m_finished.append(createResponse(id, response)); bool found = false; - for (QJsonValueRef entry : m_finished) { - if (entry.toObject()[u"id"] == id) { + for (QJsonValueConstRef entry : std::as_const(m_finished)) { + if (entry.toObject().value(u"id") == id) { found = true; break; } @@ -396,7 +396,8 @@ && m_messagePreprocessor(message, error, [message, this](const QJsonRpcProtocol::Response &r) { Q_ASSERT(message.object().contains(u"id")); - this->sendMessage(createResponse(message.object()[u"id"], r)); + this->sendMessage( + createResponse(message.object().value(u"id"), r)); }) != QJsonRpcProtocol::Processing::Continue) { return; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtlanguageserver-everywhere-src-6.11.1/src/jsonrpc/qjsontypedrpc.cpp new/qtlanguageserver-everywhere-src-6.11.2/src/jsonrpc/qjsontypedrpc.cpp --- old/qtlanguageserver-everywhere-src-6.11.1/src/jsonrpc/qjsontypedrpc.cpp 2026-05-07 21:59:24.000000000 +0200 +++ new/qtlanguageserver-everywhere-src-6.11.2/src/jsonrpc/qjsontypedrpc.cpp 2026-08-11 19:38:05.000000000 +0200 @@ -28,9 +28,8 @@ void TypedResponse::doOnCloseActions() { m_typedRpc->doOnCloseAction(m_status, m_id); - for (const auto &a : m_onCloseActions) { + for (const auto &a : std::as_const(m_onCloseActions)) a(m_status, m_id, *m_typedRpc); - } m_onCloseActions.clear(); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtlanguageserver-everywhere-src-6.11.1/src/jsonrpc/qtypedjson.cpp new/qtlanguageserver-everywhere-src-6.11.2/src/jsonrpc/qtypedjson.cpp --- old/qtlanguageserver-everywhere-src-6.11.1/src/jsonrpc/qtypedjson.cpp 2026-05-07 21:59:24.000000000 +0200 +++ new/qtlanguageserver-everywhere-src-6.11.2/src/jsonrpc/qtypedjson.cpp 2026-08-11 19:38:05.000000000 +0200 @@ -22,7 +22,7 @@ Reader::~Reader() { - for (const QString &msg : m_p->errorMessages) + for (const QString &msg : std::as_const(m_p->errorMessages)) qCWarning(jsonRpcLog) << msg; delete m_p; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtlanguageserver-everywhere-src-6.11.1/src/languageserver/qlanguageserverjsonrpctransport.cpp new/qtlanguageserver-everywhere-src-6.11.2/src/languageserver/qlanguageserverjsonrpctransport.cpp --- old/qtlanguageserver-everywhere-src-6.11.1/src/languageserver/qlanguageserverjsonrpctransport.cpp 2026-05-07 21:59:24.000000000 +0200 +++ new/qtlanguageserver-everywhere-src-6.11.2/src/languageserver/qlanguageserverjsonrpctransport.cpp 2026-08-11 19:38:05.000000000 +0200 @@ -67,8 +67,7 @@ if (auto handler = diagnosticHandler()) { handler(Warning, QString::fromLatin1("Invalid %1: %2") - .arg(QString::fromUtf8(fieldName)) - .arg(QString::fromUtf8(fieldValue))); + .arg(QString::fromUtf8(fieldName), QString::fromUtf8(fieldValue))); } } } else if (auto handler = diagnosticHandler()) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtlanguageserver-everywhere-src-6.11.1/tests/auto/qjsonrpcprotocol/tst_qjsonrpcprotocol.cpp new/qtlanguageserver-everywhere-src-6.11.2/tests/auto/qjsonrpcprotocol/tst_qjsonrpcprotocol.cpp --- old/qtlanguageserver-everywhere-src-6.11.1/tests/auto/qjsonrpcprotocol/tst_qjsonrpcprotocol.cpp 2026-05-07 21:59:24.000000000 +0200 +++ new/qtlanguageserver-everywhere-src-6.11.2/tests/auto/qjsonrpcprotocol/tst_qjsonrpcprotocol.cpp 2026-08-11 19:38:05.000000000 +0200 @@ -98,6 +98,9 @@ void testHttpMessagesSplits_data(); void testHttpMessagesSplits(); + void testHttpMessagesBrokenInputs_data(); + void testHttpMessagesBrokenInputs(); + void badResponses(); private: @@ -609,6 +612,65 @@ QVERIFY(parser.receiveEof()); } +void tst_QJsonRpcProtocol::testHttpMessagesBrokenInputs_data() +{ + QTest::addColumn<QByteArray>("input"); + QTest::addColumn<bool>("shouldWarn"); + // valid content-length header and valid JSON body + QTest::newRow("valid content-length header and valid JSON body") + << QByteArray("Content-Length: 15\r\n\r\n{\"some\":\"json\"}") << false; + // correct content-length header but invalid JSON body + QTest::newRow("correct content-length header but invalid JSON body") + << QByteArray("Content-Length: 11\r\n\r\n{\"foo\":bar}") << true; + // content-length header is less than the actual body length + // warning 1: broken json, warning 2: partial message at the end + QTest::newRow("content-length header is less than the actual body length") + << QByteArray("Content-Length: 3\r\n\r\n{\"foo\":bar}") << true; + // misc invalid content-length headers + QTest::newRow("invalid content-length non-numeric") + << QByteArray("Content-Length: abc\r\n\r\n{\"some\":\"json\"}") << true; + QTest::newRow("invalid content-length negative") + << QByteArray("Content-Length: -10\r\n\r\n{\"some\":\"json\"}") << true; + QTest::newRow("missing content-length header") + << QByteArray("Foo: bar\r\n\r\n{\"some\":\"json\"}") << true; + // fuzz test input from libFuzzer, shouldn't crash + /* + O-�-- : n + Content-Length: 60 + + {"jsonrpc": 2.0", "method": "foo", ��"params + */ + QByteArray fromFuzzer; + fromFuzzer.append("O-�-- :\t\tn\r\nContent-Length: 60\r\n\r\n{\"jsonrpc\": 2.0\", \"method\": " + "\"foo\", ��\"params"); + QTest::newRow("libFuzzer") << fromFuzzer << true; +} + +void tst_QJsonRpcProtocol::testHttpMessagesBrokenInputs() +{ + QFETCH(QByteArray, input); + QFETCH(bool, shouldWarn); + + int warnings = 0; + const auto headerHandler = [](const QByteArray &, const QByteArray &) { }; + const auto diagnosticHandler = [&](QtMsgType error, QString msg) { + ++warnings; + QDebug(error) << "Message:" << msg; + }; + const auto bodyHandler = [&](const QByteArray &body) { + QJsonParseError error = { 0, QJsonParseError::NoError }; + const QJsonDocument doc = QJsonDocument::fromJson(body, &error); + if (error.error != QJsonParseError::NoError) { + diagnosticHandler(QtDebugMsg, + QString("Errors in JSON parsing: %1").arg(QString::fromUtf8(body))); + } + }; + QHttpMessageStreamParser parser(headerHandler, bodyHandler, diagnosticHandler); + + parser.receiveData(input); + QCOMPARE(warnings > 0, shouldWarn); +} + void SumHandler::handleRequest(const QJsonRpcProtocol::Request &request, const ResponseHandler &handler) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtlanguageserver-everywhere-src-6.11.1/tests/libfuzzer/jsonrpc/CMakeLists.txt new/qtlanguageserver-everywhere-src-6.11.2/tests/libfuzzer/jsonrpc/CMakeLists.txt --- old/qtlanguageserver-everywhere-src-6.11.1/tests/libfuzzer/jsonrpc/CMakeLists.txt 1970-01-01 01:00:00.000000000 +0100 +++ new/qtlanguageserver-everywhere-src-6.11.2/tests/libfuzzer/jsonrpc/CMakeLists.txt 2026-08-11 19:38:05.000000000 +0200 @@ -0,0 +1,30 @@ +# Copyright (C) 2026 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +cmake_minimum_required(VERSION 3.16) +project(next LANGUAGES CXX) + +set(CMAKE_INCLUDE_CURRENT_DIR ON) + +set(CMAKE_AUTOMOC ON) +set(CMAKE_AUTORCC ON) +set(CMAKE_AUTOUIC ON) + +find_package(Qt6 REQUIRED COMPONENTS JsonRpcPrivate) + +qt_add_executable(next + main.cpp +) + +target_link_libraries(next PUBLIC + Qt::JsonRpcPrivate +) +if(DEFINED ENV{LIB_FUZZING_ENGINE}) + target_link_libraries(next PRIVATE + $ENV{LIB_FUZZING_ENGINE} + ) +else() + target_link_libraries(next PRIVATE + -fsanitize=fuzzer + ) +endif() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtlanguageserver-everywhere-src-6.11.1/tests/libfuzzer/jsonrpc/main.cpp new/qtlanguageserver-everywhere-src-6.11.2/tests/libfuzzer/jsonrpc/main.cpp --- old/qtlanguageserver-everywhere-src-6.11.1/tests/libfuzzer/jsonrpc/main.cpp 1970-01-01 01:00:00.000000000 +0100 +++ new/qtlanguageserver-everywhere-src-6.11.2/tests/libfuzzer/jsonrpc/main.cpp 2026-08-11 19:38:05.000000000 +0200 @@ -0,0 +1,29 @@ +// Copyright (C) 2020 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only + +#include <QtJsonRpc/private/qjsonrpcprotocol_p.h> +#include <QtJsonRpc/private/qhttpmessagestreamparser_p.h> + +extern "C" int LLVMFuzzerTestOneInput(const char *Data, size_t Size) +{ + QByteArray content = QByteArray::fromRawData(Data, Size); + int warnings = 0; + const auto headerHandler = [](const QByteArray &, const QByteArray &) { }; + const auto diagnosticHandler = [&](QtMsgType error, QString msg) { + ++warnings; + qDebug() << "Warning Type:" << error << "-- Message:" << msg; + }; + const auto bodyHandler = [&](const QByteArray &body) { + QJsonParseError error = { 0, QJsonParseError::NoError }; + const QJsonDocument doc = QJsonDocument::fromJson(body, &error); + if (error.error != QJsonParseError::NoError) { + diagnosticHandler(QtDebugMsg, QString("Errors in JSON parsing: %1").arg(QString::fromUtf8(body))); + } + }; + QHttpMessageStreamParser parser( + headerHandler, bodyHandler, diagnosticHandler); + + // + parser.receiveData(content); + return 0; +}
