Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package kf6-baloo for openSUSE:Factory checked in at 2025-08-09 19:57:27 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/kf6-baloo (Old) and /work/SRC/openSUSE:Factory/.kf6-baloo.new.1085 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "kf6-baloo" Sat Aug 9 19:57:27 2025 rev:18 rq:1298513 version:6.17.0 Changes: -------- --- /work/SRC/openSUSE:Factory/kf6-baloo/kf6-baloo.changes 2025-07-14 10:48:44.837331559 +0200 +++ /work/SRC/openSUSE:Factory/.kf6-baloo.new.1085/kf6-baloo.changes 2025-08-09 19:57:29.988436288 +0200 @@ -1,0 +2,19 @@ +Mon Aug 4 06:57:18 UTC 2025 - Christophe Marin <christo...@krop.fr> + +- Update to 6.17.0 + * New feature release + * For more details please see: + * https://kde.org/announcements/frameworks/6/6.17.0 +- Changes since 6.16.0: + * Update dependency version to 6.17.0 + * Fix build with clang + * Bump kf ecm_set_disabled_deprecation_versions. + * [TermGenerator] Check input text validity (kde#506187) + * Update clang-format CI image to suse-qt610 + * [Extractor] Handle parent exit during batch + * [ExtractorProcess] Test extractor exit when parent quits + * [ExtractorProcess] Extend tests, align better with extractor code + * [ExtractorProcess] Fix deprecated implicit capture of this + * Update version to 6.17.0 + +------------------------------------------------------------------- Old: ---- baloo-6.16.0.tar.xz baloo-6.16.0.tar.xz.sig New: ---- baloo-6.17.0.tar.xz baloo-6.17.0.tar.xz.sig ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ kf6-baloo.spec ++++++ --- /var/tmp/diff_new_pack.VxxVky/_old 2025-08-09 19:57:30.916474837 +0200 +++ /var/tmp/diff_new_pack.VxxVky/_new 2025-08-09 19:57:30.920475004 +0200 @@ -1,7 +1,7 @@ # # spec file for package kf6-baloo # -# Copyright (c) 2025 SUSE LLC +# Copyright (c) 2025 SUSE LLC and contributors # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -19,11 +19,11 @@ %define qt6_version 6.8.0 %define rname baloo -# Full KF6 version (e.g. 6.16.0) +# Full KF6 version (e.g. 6.17.0) %{!?_kf6_version: %global _kf6_version %{version}} %bcond_without released Name: kf6-baloo -Version: 6.16.0 +Version: 6.17.0 Release: 0 Summary: Framework for searching and managing metadata License: GPL-2.0-or-later AND LGPL-2.1-or-later AND LGPL-3.0-only ++++++ baloo-6.16.0.tar.xz -> baloo-6.17.0.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/baloo-6.16.0/.gitlab-ci.yml new/baloo-6.17.0/.gitlab-ci.yml --- old/baloo-6.16.0/.gitlab-ci.yml 2025-07-04 17:09:01.000000000 +0200 +++ new/baloo-6.17.0/.gitlab-ci.yml 2025-08-01 12:28:30.000000000 +0200 @@ -13,7 +13,7 @@ # Verify changes against clang-format clang-format: stage: build - image: invent-registry.kde.org/sysadmin/ci-images/suse-qt68:latest + image: invent-registry.kde.org/sysadmin/ci-images/suse-qt610:latest tags: - Linux script: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/baloo-6.16.0/CMakeLists.txt new/baloo-6.17.0/CMakeLists.txt --- old/baloo-6.16.0/CMakeLists.txt 2025-07-04 17:09:01.000000000 +0200 +++ new/baloo-6.17.0/CMakeLists.txt 2025-08-01 12:28:30.000000000 +0200 @@ -1,8 +1,8 @@ # set minimum version requirements cmake_minimum_required(VERSION 3.16) set(REQUIRED_QT_VERSION 6.7.0) -set(KF_VERSION "6.16.0") # handled by release scripts -set(KF_DEP_VERSION "6.16.0") # handled by release scripts +set(KF_VERSION "6.17.0") # handled by release scripts +set(KF_DEP_VERSION "6.17.0") # handled by release scripts # set up project project(Baloo VERSION ${KF_VERSION}) @@ -79,7 +79,7 @@ # compiler flags and build system ecm_set_disabled_deprecation_versions( QT 6.9.0 - KF 6.13.0 + KF 6.16.0 ) find_package(Inotify) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/baloo-6.16.0/autotests/unit/engine/termgeneratortest.cpp new/baloo-6.17.0/autotests/unit/engine/termgeneratortest.cpp --- old/baloo-6.16.0/autotests/unit/engine/termgeneratortest.cpp 2025-07-04 17:09:01.000000000 +0200 +++ new/baloo-6.17.0/autotests/unit/engine/termgeneratortest.cpp 2025-08-01 12:28:30.000000000 +0200 @@ -7,6 +7,7 @@ #include "termgenerator.h" #include "document.h" +#include "termgenerator_p.h" #include <QTest> @@ -19,6 +20,8 @@ Q_OBJECT private Q_SLOTS: + void testStringValidity(); + void testStringValidity_data(); void testWordBoundaries(); void testWordBoundaries_data(); void benchmarkWordBoundaries(); @@ -45,6 +48,41 @@ } }; +void TermGeneratorTest::testStringValidity() +{ + QFETCH(QString, input); + QFETCH(bool, isValid); + + QCOMPARE(Baloo::detail::verifySurrogates(input), isValid); +} + +void TermGeneratorTest::testStringValidity_data() +{ + using namespace Qt::Literals::StringLiterals; + using namespace std::string_literals; + + QTest::addColumn<QString>("input"); + QTest::addColumn<bool>("isValid"); + + // clang-format off + QTest::newRow("empty") << QString() << true; + QTest::newRow("ASCII characters") << u" !\"#$%&'()*+,-./ 0123456789:;<=>? @ABCDEFGHIJKLMNO PQRSTUVWXYZ[\\]^_ `abcdefghijklmno pqrstuvwxyz{|}~"_s << true; + QTest::newRow("BMP 0 plane") << u"ÄÖÜäöüßáàâ€"_s << true; + + static_assert(QStringView(u"🧸").size() == 2); // UTF-16 0xD83E 0xDDF8 + QTest::newRow("SMP 1 symbol (1)") << u"Teddy Bear 🧸"_s << true; + QTest::newRow("SMP 1 symbol (2)") << QString(std::array<QChar, 4>{u' ', QChar{0xD83E}, QChar{0xDDF8}, u' '}) << true; + QTest::newRow("SMP 1 symbol (3)") << QString(std::array<QChar, 4>{u' ', u' ', QChar{0xD83E}, QChar{0xDDF8}}) << true; + QTest::newRow("Bad Surrogate pair") << QString(std::array<QChar, 2>{QChar{0xDDF8}, QChar{0xD83E}}) << false; + QTest::newRow("High Surrogate (1)") << QString(std::array<QChar, 1>{QChar{0xD83E}}) << false; + QTest::newRow("High Surrogate (2)") << QString(std::array<QChar, 2>{u' ', QChar{0xD83E}}) << false; + QTest::newRow("High Surrogate (3)") << QString(std::array<QChar, 4>{u' ', QChar{0xD83E}, u' ', u' '}) << false; + QTest::newRow("Low Surrogate (1)") << QString(std::array<QChar, 1>{QChar{0xDDF8}}) << false; + QTest::newRow("Low Surrogate (2)") << QString(std::array<QChar, 2>{u' ', QChar{0xDDF8}}) << false; + QTest::newRow("Low Surrogate (3)") << QString(std::array<QChar, 4>{u' ', QChar{0xDDF8}, u' ', u' '}) << false; + // clang-format on +} + void TermGeneratorTest::testWordBoundaries() { QFETCH(QString, input); @@ -79,6 +117,11 @@ << QList<QByteArray>{"como", "esta", "kug"}; QTest::newRow("Mail address") << u"m...@vhanda.in"_s << QList<QByteArray>{"in", "me", "vhanda"}; + QTest::newRow("Teddy symbol") << u"Teddy Bear 🧸"_s + << QList<QByteArray>{"bear", "teddy", "🧸"}; + QTest::newRow("High Surrogate") << QString(std::array<QChar, 4>{u' ', QChar{0xD83E}, u' ', u' '}) + << QList<QByteArray>(); + // clang-format on } } // namespace <anonymous> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/baloo-6.16.0/autotests/unit/file/extractorprocess_fake.cpp new/baloo-6.17.0/autotests/unit/file/extractorprocess_fake.cpp --- old/baloo-6.16.0/autotests/unit/file/extractorprocess_fake.cpp 2025-07-04 17:09:01.000000000 +0200 +++ new/baloo-6.17.0/autotests/unit/file/extractorprocess_fake.cpp 2025-08-01 12:28:30.000000000 +0200 @@ -18,6 +18,76 @@ #include <sys/resource.h> #include <unistd.h> //for STDIN_FILENO +struct Context { + using WorkerPipe = Baloo::Private::WorkerPipe; + Context(); + + void processOne(); + + QSocketNotifier notifier; + QFile input; + QFile output; + WorkerPipe worker; + QVector<quint64> pendingIds; +}; + +Context::Context() + : notifier(STDIN_FILENO, QSocketNotifier::Read) + , worker(&input, &output) +{ + input.open(STDIN_FILENO, QIODevice::ReadOnly | QIODevice::Unbuffered); + output.open(STDOUT_FILENO, QIODevice::WriteOnly | QIODevice::Unbuffered); + + QObject::connect(¬ifier, // + &QSocketNotifier::activated, + &worker, + &WorkerPipe::processIdData); + + QObject::connect(&worker, // + &WorkerPipe::newDocumentIds, + [this](const QVector<quint64> &ids) { + qCInfo(BALOO) << "Processing " << ids << " ..."; + pendingIds = ids; + QTimer::singleShot(0, [this]() { + processOne(); + }); + }); + + QObject::connect(&worker, &WorkerPipe::inputEnd, &QCoreApplication::quit); +} + +void Context::processOne() +{ + if (pendingIds.empty()) { + worker.batchFinished(); + qCInfo(BALOO) << "Processing done"; + return; + } + + auto id = pendingIds.takeFirst(); + worker.urlStarted(QString::number(id)); + + if (id == 0) { + raise(SIGSEGV); + } else if (id == 1) { + exit(1); + } else if (id == 2) { + exit(2); + } else if (id < 100) { + worker.urlFailed(QString::number(id)); + } else if (id < 200) { + worker.urlFinished(QString::number(id)); + } else { + worker.urlFinished(QString::number(id)); + qCInfo(BALOO) << "... waiting for event ..."; + return; + } + + QTimer::singleShot(0, [this]() { + processOne(); + }); +} + int main(int argc, char* argv[]) { using Baloo::Private::WorkerPipe; @@ -29,42 +99,7 @@ KCrash::setDrKonqiEnabled(false); QCoreApplication app(argc, argv); - QFile input; - input.open(STDIN_FILENO, QIODevice::ReadOnly | QIODevice::Unbuffered); - QSocketNotifier inputNotifier(STDIN_FILENO, QSocketNotifier::Read); - - QFile output; - output.open(STDOUT_FILENO, QIODevice::WriteOnly | QIODevice::Unbuffered); - - WorkerPipe worker(&input, &output); - QObject::connect(&inputNotifier, &QSocketNotifier::activated, - &worker, &WorkerPipe::processIdData); - - QObject::connect(&worker, &WorkerPipe::inputEnd, &QCoreApplication::quit); - QObject::connect(&worker, &WorkerPipe::newDocumentIds, - [&worker](const QVector<quint64>& ids) { - QTimer::singleShot(0, [&worker, ids]() { - qCInfo(BALOO) << "Processing ..."; - - for(auto id : ids) { - worker.urlStarted(QString::number(id)); - - if (id == 0) { - raise(SIGSEGV); - } else if (id == 1) { - exit(1); - } else if (id == 2) { - exit(2); - } else if (id < 100) { - worker.urlFailed(QString::number(id)); - } else { - worker.urlFinished(QString::number(id)); - } - } - worker.batchFinished(); - qCInfo(BALOO) << "Processing done"; - }); - }); + Context context; return app.exec(); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/baloo-6.16.0/autotests/unit/file/extractorprocesstest.cpp new/baloo-6.17.0/autotests/unit/file/extractorprocesstest.cpp --- old/baloo-6.16.0/autotests/unit/file/extractorprocesstest.cpp 2025-07-04 17:09:01.000000000 +0200 +++ new/baloo-6.17.0/autotests/unit/file/extractorprocesstest.cpp 2025-08-01 12:28:30.000000000 +0200 @@ -35,8 +35,10 @@ void initTestCase(); void testSignals(); - void testSignals2(); + void testFailedSignal(); void testExit(); + void testExit_data(); + void testParentExit(); private: QString m_workerPath; @@ -62,7 +64,7 @@ QCOMPARE(spyF.size(), 4); } -void ExtractorProcessTest::testSignals2() +void ExtractorProcessTest::testFailedSignal() { Baloo::ExtractorProcess extractor{m_workerPath}; QSignalSpy spyS(&extractor, &ExtractorProcess::startedIndexingFile); @@ -73,19 +75,54 @@ QVERIFY(spyD.wait()); QCOMPARE(spyS.size(), 2); QCOMPARE(spyF.size(), 2); + QCOMPARE(spyF.at(0).at(0).toString(), QStringLiteral("123")); + QCOMPARE(spyF.at(0).at(1).toBool(), true); // success + QCOMPARE(spyF.at(1).at(0).toString(), QStringLiteral("23")); + QCOMPARE(spyF.at(1).at(1).toBool(), false); // failed } void ExtractorProcessTest::testExit() { + QFETCH(quint64, exitCode); + Baloo::ExtractorProcess extractor{m_workerPath}; QSignalSpy spyS(&extractor, &ExtractorProcess::startedIndexingFile); QSignalSpy spyF(&extractor, &ExtractorProcess::finishedIndexingFile); QSignalSpy spyD(&extractor, &ExtractorProcess::done); QSignalSpy spyX(&extractor, &ExtractorProcess::failed); - extractor.index({123, 0, 23}); + extractor.index({121}); + QVERIFY(spyD.wait()); + + extractor.index({123, exitCode, 23}); QVERIFY(spyX.wait()); - QCOMPARE(spyS.size(), 2); + QCOMPARE(spyS.size(), 3); + QCOMPARE(spyF.size(), 2); + QCOMPARE(spyD.size(), 1); + QCOMPARE(spyS.at(0).at(0).toString(), QStringLiteral("121")); + QCOMPARE(spyS.at(1).at(0).toString(), QStringLiteral("123")); + QCOMPARE(spyS.at(2).at(0).toString(), QString::number(exitCode)); +} + +void ExtractorProcessTest::testExit_data() +{ + QTest::addColumn<quint64>("exitCode"); + + QTest::newRow("Crash") << quint64(0); + QTest::newRow("DB error") << quint64(1); +} + +void ExtractorProcessTest::testParentExit() +{ + auto extractor = std::make_unique<Baloo::ExtractorProcess>(m_workerPath); + + QSignalSpy spyF(extractor.get(), &ExtractorProcess::finishedIndexingFile); + QSignalSpy spyD(extractor.get(), &ExtractorProcess::done); + + extractor->index({223}); + QVERIFY(spyF.wait()); + + extractor = nullptr; QCOMPARE(spyF.size(), 1); QCOMPARE(spyD.size(), 0); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/baloo-6.16.0/po/ar/baloo_file6.po new/baloo-6.17.0/po/ar/baloo_file6.po --- old/baloo-6.16.0/po/ar/baloo_file6.po 2025-07-04 17:09:01.000000000 +0200 +++ new/baloo-6.17.0/po/ar/baloo_file6.po 2025-08-01 12:28:30.000000000 +0200 @@ -15,7 +15,7 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " -"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" +"&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n" #, kde-format msgctxt "NAME OF TRANSLATORS" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/baloo-6.16.0/po/ar/baloo_file_extractor6.po new/baloo-6.17.0/po/ar/baloo_file_extractor6.po --- old/baloo-6.16.0/po/ar/baloo_file_extractor6.po 2025-07-04 17:09:01.000000000 +0200 +++ new/baloo-6.17.0/po/ar/baloo_file_extractor6.po 2025-08-01 12:28:30.000000000 +0200 @@ -15,7 +15,7 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " -"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" +"&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n" #, kde-format msgctxt "NAME OF TRANSLATORS" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/baloo-6.16.0/po/ar/balooctl6.po new/baloo-6.17.0/po/ar/balooctl6.po --- old/baloo-6.16.0/po/ar/balooctl6.po 2025-07-04 17:09:01.000000000 +0200 +++ new/baloo-6.17.0/po/ar/balooctl6.po 2025-08-01 12:28:30.000000000 +0200 @@ -16,7 +16,7 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " -"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" +"&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n" "X-Generator: Lokalize 23.08.5\n" #, kde-format diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/baloo-6.16.0/po/ar/baloodb6.po new/baloo-6.17.0/po/ar/baloodb6.po --- old/baloo-6.16.0/po/ar/baloodb6.po 2025-07-04 17:09:01.000000000 +0200 +++ new/baloo-6.17.0/po/ar/baloodb6.po 2025-08-01 12:28:30.000000000 +0200 @@ -16,7 +16,7 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " -"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" +"&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n" #, kde-format msgctxt "NAME OF TRANSLATORS" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/baloo-6.16.0/po/ar/balooengine6.po new/baloo-6.17.0/po/ar/balooengine6.po --- old/baloo-6.16.0/po/ar/balooengine6.po 2025-07-04 17:09:01.000000000 +0200 +++ new/baloo-6.17.0/po/ar/balooengine6.po 2025-08-01 12:28:30.000000000 +0200 @@ -16,7 +16,7 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " -"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" +"&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n" #: experimental/databasesanitizer.cpp:259 #, kde-format diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/baloo-6.16.0/po/ar/baloosearch6.po new/baloo-6.17.0/po/ar/baloosearch6.po --- old/baloo-6.16.0/po/ar/baloosearch6.po 2025-07-04 17:09:01.000000000 +0200 +++ new/baloo-6.17.0/po/ar/baloosearch6.po 2025-08-01 12:28:30.000000000 +0200 @@ -17,7 +17,7 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " -"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" +"&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n" #, kde-format msgctxt "NAME OF TRANSLATORS" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/baloo-6.16.0/po/ar/balooshow6.po new/baloo-6.17.0/po/ar/balooshow6.po --- old/baloo-6.16.0/po/ar/balooshow6.po 2025-07-04 17:09:01.000000000 +0200 +++ new/baloo-6.17.0/po/ar/balooshow6.po 2025-08-01 12:28:30.000000000 +0200 @@ -17,7 +17,7 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " -"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" +"&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n" #, kde-format msgctxt "NAME OF TRANSLATORS" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/baloo-6.16.0/po/ar/kio6_baloosearch.po new/baloo-6.17.0/po/ar/kio6_baloosearch.po --- old/baloo-6.16.0/po/ar/kio6_baloosearch.po 2025-07-04 17:09:01.000000000 +0200 +++ new/baloo-6.17.0/po/ar/kio6_baloosearch.po 2025-08-01 12:28:30.000000000 +0200 @@ -16,7 +16,7 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " -"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" +"&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n" #: kio_search.cpp:48 #, kde-format diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/baloo-6.16.0/po/ar/kio6_tags.po new/baloo-6.17.0/po/ar/kio6_tags.po --- old/baloo-6.16.0/po/ar/kio6_tags.po 2025-07-04 17:09:01.000000000 +0200 +++ new/baloo-6.17.0/po/ar/kio6_tags.po 2025-08-01 12:28:30.000000000 +0200 @@ -16,7 +16,7 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " -"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" +"&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n" #: kio_tags.cpp:110 kio_tags.cpp:166 #, kde-format diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/baloo-6.16.0/po/ar/kio6_timeline.po new/baloo-6.17.0/po/ar/kio6_timeline.po --- old/baloo-6.16.0/po/ar/kio6_timeline.po 2025-07-04 17:09:01.000000000 +0200 +++ new/baloo-6.17.0/po/ar/kio6_timeline.po 2025-08-01 12:28:30.000000000 +0200 @@ -16,7 +16,7 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " -"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" +"&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n" #: kio_timeline.cpp:77 #, kde-format diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/baloo-6.16.0/po/ka/balooctl6.po new/baloo-6.17.0/po/ka/balooctl6.po --- old/baloo-6.16.0/po/ka/balooctl6.po 2025-07-04 17:09:01.000000000 +0200 +++ new/baloo-6.17.0/po/ka/balooctl6.po 2025-08-01 12:28:30.000000000 +0200 @@ -315,7 +315,7 @@ "Only applies to \"%4\"" msgstr "" "გამოტანის ფორმატი <%1|%2|%3>.\n" -"ნაგულისხმები ფორმატია \"%1\".\n" +"ნაგულისხმევი ფორმატია \"%1\".\n" "მხოლოდ ეხება \"%4\"" #: main.cpp:83 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/baloo-6.16.0/po/ka/baloodb6.po new/baloo-6.17.0/po/ka/baloodb6.po --- old/baloo-6.16.0/po/ka/baloodb6.po 2025-07-04 17:09:01.000000000 +0200 +++ new/baloo-6.17.0/po/ka/baloodb6.po 2025-08-01 12:28:30.000000000 +0200 @@ -40,7 +40,7 @@ "May be given multiple times." msgstr "" "მოწყობილობის ID-ით გაფილტვრა.\n" -"0 (ნაგულისხმები) არაფერს გაფილტრავს და ყველაფერი ნაჩვენები იქნება.\n" +"0 (ნაგულისხმევი) არაფერს გაფილტრავს და ყველაფერი ნაჩვენები იქნება.\n" "დადებითი რიცხვები შეიცავენ ფილტრებს, რომლებიც მხოლოდ მითითებულ მოწყობილობის " "ID-ებს აჩვენებენ.\n" "უარყოფითი რიცხვები კი გამორიცხავენ მათ. გამოტანილი იქნება ყველაფერი, " diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/baloo-6.16.0/src/engine/termgenerator.cpp new/baloo-6.17.0/src/engine/termgenerator.cpp --- old/baloo-6.16.0/src/engine/termgenerator.cpp 2025-07-04 17:09:01.000000000 +0200 +++ new/baloo-6.17.0/src/engine/termgenerator.cpp 2025-08-01 12:28:30.000000000 +0200 @@ -6,6 +6,7 @@ */ #include "termgenerator.h" +#include "termgenerator_p.h" #include <QTextBoundaryFinder> @@ -32,9 +33,13 @@ void appendTerm(QByteArrayList &list, const QString &term) { - if (!term.isEmpty()) { - // Truncate the string to avoid arbitrarily long terms - list << QStringView(term).left(TermGenerator::maxTermSize).toUtf8(); + if (term.isEmpty()) { + return; + } + // Truncate the string to avoid arbitrarily long terms + auto utf8 = QStringView(term).left(TermGenerator::maxTermSize).toUtf8(); + if (!utf8.isEmpty()) { + list.append(utf8); } } @@ -53,6 +58,10 @@ QByteArrayList TermGenerator::termList(const QString& text_) { + if (!Baloo::detail::verifySurrogates(text_)) { + return {}; + } + QString text(text_); text.replace(QLatin1Char('_'), QLatin1Char(' ')); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/baloo-6.16.0/src/engine/termgenerator_p.h new/baloo-6.17.0/src/engine/termgenerator_p.h --- old/baloo-6.16.0/src/engine/termgenerator_p.h 1970-01-01 01:00:00.000000000 +0100 +++ new/baloo-6.17.0/src/engine/termgenerator_p.h 2025-08-01 12:28:30.000000000 +0200 @@ -0,0 +1,50 @@ +/* + This file is part of the KDE Baloo project. + SPDX-FileCopyrightText: 2025 Stefan Brüns <stefan.bru...@rwth-aachen.de> + + SPDX-License-Identifier: LGPL-2.1-or-later +*/ + +#ifndef BALOO_TERMGENERATOR_P_H +#define BALOO_TERMGENERATOR_P_H + +namespace Baloo +{ +namespace detail +{ + +bool verifySurrogates(QStringView text) +{ + if (auto size = text.size(); size == 1) { + return !text.back().isSurrogate(); + } else if (size == 0) { + return true; + } + + for (qsizetype i = 0; i < text.size() - 1; i++) { + const QChar &c = text.at(i); + if (!c.isSurrogate()) { + continue; + } + if (c.isLowSurrogate()) { + return false; + } else if (!text.at(i + 1).isLowSurrogate()) { + return false; + } else { + i++; + } + } + if (!text.back().isSurrogate()) { + return true; + } else if (text.back().isHighSurrogate()) { + return false; + } else { + auto back2 = text.at(text.size() - 2); + return back2.isHighSurrogate(); + } +} + +} // namespace detail +} // namespace Baloo + +#endif // BALOO_TERMGENERATOR_P_H diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/baloo-6.16.0/src/file/extractor/app.cpp new/baloo-6.17.0/src/file/extractor/app.cpp --- old/baloo-6.16.0/src/file/extractor/app.cpp 2025-07-04 17:09:01.000000000 +0200 +++ new/baloo-6.17.0/src/file/extractor/app.cpp 2025-08-01 12:28:30.000000000 +0200 @@ -81,18 +81,12 @@ m_idleTime->catchNextResumeEvent(); } - QTimer::singleShot((m_isBusy ? 500 : 0), this, [this, db] () { + QTimer::singleShot((m_isBusy ? 500 : 0), this, [this, db]() { // FIXME: The transaction is open for way too long. We should just open it for when we're // committing the data not during the extraction. m_tr = std::make_unique<Transaction>(db, Transaction::ReadWrite); processNextFile(); }); - - /** - * A Single Batch seems to be triggering the SocketNotifier more than once - * so we disable it till the batch is done. - */ - m_notifyNewData.setEnabled(false); } void App::processNextFile() @@ -119,8 +113,6 @@ } m_tr.reset(); - // Enable the SocketNotifier for the next batch - m_notifyNewData.setEnabled(true); m_workerPipe.batchFinished(); } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/baloo-6.16.0/src/file/extractorprocess.cpp new/baloo-6.17.0/src/file/extractorprocess.cpp --- old/baloo-6.16.0/src/file/extractorprocess.cpp 2025-07-04 17:09:01.000000000 +0200 +++ new/baloo-6.17.0/src/file/extractorprocess.cpp 2025-08-01 12:28:30.000000000 +0200 @@ -31,7 +31,7 @@ Q_EMIT done(); }); - connect(&m_extractorProcess, &QProcess::finished, [=](int exitCode, QProcess::ExitStatus exitStatus) { + connect(&m_extractorProcess, &QProcess::finished, [this](int exitCode, QProcess::ExitStatus exitStatus) { if (exitStatus == QProcess::CrashExit) { qCWarning(BALOO) << "Extractor crashed"; Q_EMIT failed();