public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-commits] proj/kde:master commit in: kde-frameworks/baloo/, kde-frameworks/baloo/files/
@ 2016-09-14 14:13 Michael Palimaka
  0 siblings, 0 replies; only message in thread
From: Michael Palimaka @ 2016-09-14 14:13 UTC (permalink / raw
  To: gentoo-commits

commit:     615ee9f49835935edec62346ff9cdb944bc14cd7
Author:     Andreas Sturmlechner <andreas.sturmlechner <AT> gmail <DOT> com>
AuthorDate: Sun Sep 11 15:49:15 2016 +0000
Commit:     Michael Palimaka <kensington <AT> gentoo <DOT> org>
CommitDate: Wed Sep 14 14:13:12 2016 +0000
URL:        https://gitweb.gentoo.org/proj/kde.git/commit/?id=615ee9f4

kde-frameworks/baloo: Fix various crashes and prevent DB corruption

The following bugs are fixed:
- baloo_file crash with corrupted database
- baloo is instant killed by any file with timestamp 0
- baloo database not thread safe
- baloo_file_extractor crashes whenever the index exceeds 5G in size
- any application that uses baloo can corrupt the db

Adds a warning for x86 where the baloo index limit remains at 1G.

 kde-frameworks/baloo/baloo-5.26.0-r1.ebuild        |  50 ++++
 .../baloo/files/baloo-5.26.0-dont-corrupt.patch    | 193 ++++++++++++++++
 .../baloo/files/baloo-5.26.0-runtime-crash.patch   |  41 ++++
 .../baloo/files/baloo-5.26.0-size-limit.patch      | 118 ++++++++++
 .../baloo/files/baloo-5.26.0-thread-safety.patch   | 253 +++++++++++++++++++++
 .../files/baloo-5.26.0-zerotimestamp-crash.patch   |  39 ++++
 6 files changed, 694 insertions(+)

diff --git a/kde-frameworks/baloo/baloo-5.26.0-r1.ebuild b/kde-frameworks/baloo/baloo-5.26.0-r1.ebuild
new file mode 100644
index 0000000..ae67c60
--- /dev/null
+++ b/kde-frameworks/baloo/baloo-5.26.0-r1.ebuild
@@ -0,0 +1,50 @@
+# Copyright 1999-2016 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Id$
+
+EAPI=6
+
+KDE_TEST="forceoptional"
+VIRTUALX_REQUIRED="test"
+inherit kde5
+
+DESCRIPTION="Framework for searching and managing metadata"
+KEYWORDS="~amd64 ~arm ~x86"
+IUSE=""
+
+DEPEND="
+	$(add_frameworks_dep kconfig)
+	$(add_frameworks_dep kcoreaddons)
+	$(add_frameworks_dep kcrash)
+	$(add_frameworks_dep kdbusaddons)
+	$(add_frameworks_dep kfilemetadata)
+	$(add_frameworks_dep ki18n)
+	$(add_frameworks_dep kidletime)
+	$(add_frameworks_dep kio)
+	$(add_frameworks_dep solid)
+	$(add_qt_dep qtdbus)
+	$(add_qt_dep qtdeclarative)
+	$(add_qt_dep qtgui)
+	$(add_qt_dep qtwidgets)
+	>=dev-db/lmdb-0.9.17
+"
+RDEPEND="${DEPEND}
+	!kde-base/baloo:4[-minimal(-)]
+"
+
+PATCHES=(
+	"${FILESDIR}/${P}-runtime-crash.patch"
+	"${FILESDIR}/${P}-size-limit.patch"
+	"${FILESDIR}/${P}-zerotimestamp-crash.patch"
+	"${FILESDIR}/${P}-thread-safety.patch"
+	"${FILESDIR}/${P}-dont-corrupt.patch"
+)
+
+pkg_postinst() {
+	kde5_pkg_postinst
+	if use x86; then
+		ewarn "The baloo index size limit for 32-bit is 1GB. For large homes, exclude"
+		ewarn "subdirectories in System Settings / Search to avoid random segfaults."
+		ewarn "For more information, visit: https://bugs.kde.org/show_bug.cgi?id=364475"
+	fi
+}

diff --git a/kde-frameworks/baloo/files/baloo-5.26.0-dont-corrupt.patch b/kde-frameworks/baloo/files/baloo-5.26.0-dont-corrupt.patch
new file mode 100644
index 0000000..1dc1f1f
--- /dev/null
+++ b/kde-frameworks/baloo/files/baloo-5.26.0-dont-corrupt.patch
@@ -0,0 +1,193 @@
+From: Christoph Cullmann <cullmann@kde.org>
+Date: Sun, 11 Sep 2016 21:36:27 +0000
+Subject: Open baloo lmdb database read-only beside in baloo_file/baloo_file_extractor + balooctl (for some commands) + unit tests
+X-Git-Url: http://quickgit.kde.org/?p=baloo.git&a=commitdiff&h=02047b524a176da447d8c96e15c7e2abae8339ae
+---
+Open baloo lmdb database read-only beside in baloo_file/baloo_file_extractor + balooctl (for some commands) + unit tests
+
+At the moment, any application that uses baloo can corrupt the db.
+Now, only the things that need to write to it open it with read-write.
+This only works as long as the library exposes only read-only things like Query/...
+
+REVIEW: 128892
+---
+
+
+--- a/src/engine/database.cpp
++++ b/src/engine/database.cpp
+@@ -79,7 +79,7 @@
+     }
+     QFileInfo indexInfo(dir, QStringLiteral("index"));
+ 
+-    if (mode == OpenDatabase && !indexInfo.exists()) {
++    if ((mode != CreateDatabase) && !indexInfo.exists()) {
+         return false;
+     }
+ 
+@@ -117,7 +117,7 @@
+ 
+     // The directory needs to be created before opening the environment
+     QByteArray arr = QFile::encodeName(indexInfo.absoluteFilePath());
+-    rc = mdb_env_open(m_env, arr.constData(), MDB_NOSUBDIR | MDB_NOMEMINIT, 0664);
++    rc = mdb_env_open(m_env, arr.constData(), MDB_NOSUBDIR | MDB_NOMEMINIT | ((mode == ReadOnlyDatabase) ? MDB_RDONLY : 0), 0664);
+     if (rc) {
+         mdb_env_close(m_env);
+         m_env = nullptr;
+@@ -136,7 +136,7 @@
+     // Individual Databases
+     //
+     MDB_txn* txn;
+-    if (mode == OpenDatabase) {
++    if (mode != CreateDatabase) {
+         int rc = mdb_txn_begin(m_env, NULL, MDB_RDONLY, &txn);
+         Q_ASSERT_X(rc == 0, "Database::transaction ro begin", mdb_strerror(rc));
+         if (rc) {
+
+--- a/src/engine/database.h
++++ b/src/engine/database.h
+@@ -49,8 +49,20 @@
+      * Database open mode
+      */
+     enum OpenMode {
++        /**
++         * Create + open read-write dabase.
++         */
+         CreateDatabase,
+-        OpenDatabase
++
++        /**
++         * Read-Write Database, only works if database exists.
++         */
++        ReadWriteDatabase,
++
++        /**
++         * Read-Only Database, only works if database exists.
++         */
++        ReadOnlyDatabase
+     };
+ 
+     /**
+
+--- a/src/file/extractor/app.cpp
++++ b/src/file/extractor/app.cpp
+@@ -55,7 +55,7 @@
+ void App::slotNewInput()
+ {
+     Database *db = globalDatabaseInstance();
+-    if (!db->open(Database::OpenDatabase)) {
++    if (!db->open(Database::ReadWriteDatabase)) {
+         qCritical() << "Failed to open the database";
+         exit(1);
+     }
+
+--- a/src/lib/file.cpp
++++ b/src/lib/file.cpp
+@@ -96,7 +96,7 @@
+     }
+ 
+     Database *db = globalDatabaseInstance();
+-    if (!db->open(Database::OpenDatabase)) {
++    if (!db->open(Database::ReadOnlyDatabase)) {
+         return false;
+     }
+ 
+
+--- a/src/lib/searchstore.cpp
++++ b/src/lib/searchstore.cpp
+@@ -48,7 +48,7 @@
+     : m_db(0)
+ {
+     m_db = globalDatabaseInstance();
+-    if (!m_db->open(Database::OpenDatabase)) {
++    if (!m_db->open(Database::ReadOnlyDatabase)) {
+         m_db = 0;
+     }
+ 
+
+--- a/src/lib/taglistjob.cpp
++++ b/src/lib/taglistjob.cpp
+@@ -46,7 +46,7 @@
+ void TagListJob::start()
+ {
+     Database *db = globalDatabaseInstance();
+-    if (!db->open(Database::OpenDatabase)) {
++    if (!db->open(Database::ReadOnlyDatabase)) {
+         setError(UserDefinedError);
+         setErrorText(QStringLiteral("Failed to open the database"));
+         emitResult();
+
+--- a/src/qml/experimental/monitor.cpp
++++ b/src/qml/experimental/monitor.cpp
+@@ -126,7 +126,7 @@
+ void Monitor::fetchTotalFiles()
+ {
+     Baloo::Database *db = Baloo::globalDatabaseInstance();
+-    if (db->open(Baloo::Database::OpenDatabase)) {
++    if (db->open(Baloo::Database::ReadOnlyDatabase)) {
+         Baloo::Transaction tr(db, Baloo::Transaction::ReadOnly);
+         m_totalFiles = tr.size();
+         m_filesIndexed = tr.size() - tr.phaseOneSize();
+
+--- a/src/tools/balooctl/main.cpp
++++ b/src/tools/balooctl/main.cpp
+@@ -191,7 +191,7 @@
+         }
+ 
+         Database *db = globalDatabaseInstance();
+-        if (!db->open(Database::OpenDatabase)) {
++        if (!db->open(Database::ReadWriteDatabase)) {
+             out << "Baloo Index could not be opened\n";
+             return 1;
+         }
+@@ -230,7 +230,7 @@
+         }
+ 
+         Database *db = globalDatabaseInstance();
+-        if (!db->open(Database::OpenDatabase)) {
++        if (!db->open(Database::ReadWriteDatabase)) {
+             out << "Baloo Index could not be opened\n";
+             return 1;
+         }
+@@ -260,7 +260,7 @@
+ 
+     if (command == QStringLiteral("indexSize")) {
+         Database *db = globalDatabaseInstance();
+-        if (!db->open(Database::OpenDatabase)) {
++        if (!db->open(Database::ReadOnlyDatabase)) {
+             out << "Baloo Index could not be opened\n";
+             return 1;
+         }
+@@ -311,7 +311,7 @@
+ 
+     if (command == QStringLiteral("checkDb")) {
+         Database *db = globalDatabaseInstance();
+-        if (!db->open(Database::OpenDatabase)) {
++        if (!db->open(Database::ReadOnlyDatabase)) {
+             out << "Baloo Index could not be opened\n";
+             return 1;
+         }
+
+--- a/src/tools/balooctl/statuscommand.cpp
++++ b/src/tools/balooctl/statuscommand.cpp
+@@ -56,7 +56,7 @@
+     }
+ 
+     Database *db = globalDatabaseInstance();
+-    if (!db->open(Database::OpenDatabase)) {
++    if (!db->open(Database::ReadOnlyDatabase)) {
+         out << i18n("Baloo Index could not be opened") << endl;
+         return 1;
+     }
+
+--- a/src/tools/balooshow/main.cpp
++++ b/src/tools/balooshow/main.cpp
+@@ -101,7 +101,7 @@
+     QString text;
+ 
+     Baloo::Database *db = Baloo::globalDatabaseInstance();
+-    if (!db->open(Baloo::Database::OpenDatabase)) {
++    if (!db->open(Baloo::Database::ReadOnlyDatabase)) {
+         stream << i18n("The Baloo index could not be opened. Please run \"balooctl status\" to see if Baloo is enabled and working.")
+                << endl;
+         return 1;
+

diff --git a/kde-frameworks/baloo/files/baloo-5.26.0-runtime-crash.patch b/kde-frameworks/baloo/files/baloo-5.26.0-runtime-crash.patch
new file mode 100644
index 0000000..0ae8b9b
--- /dev/null
+++ b/kde-frameworks/baloo/files/baloo-5.26.0-runtime-crash.patch
@@ -0,0 +1,41 @@
+From: Christoph Cullmann <cullmann@kde.org>
+Date: Thu, 08 Sep 2016 22:00:40 +0000
+Subject: fix baloo_file crash with corrupted database
+X-Git-Url: http://quickgit.kde.org/?p=baloo.git&a=commitdiff&h=a03b0caa4ca1fbfc249bfc0c2730aac340bbf929
+---
+fix baloo_file crash with corrupted database
+
+CHANGELOG: Handle corruption of index database for baloo_file, try to recreate the database or abort if that fails.
+
+REVIEW: 128865
+---
+
+
+--- a/src/file/main.cpp
++++ b/src/file/main.cpp
+@@ -82,7 +82,23 @@
+     QFile::remove(path + "/index-lock");
+ 
+     Baloo::Database *db = Baloo::globalDatabaseInstance();
+-    db->open(Baloo::Database::CreateDatabase);
++
++    /**
++     * try to open, if that fails, try to unlink the index db and retry
++     */
++    if (!db->open(Baloo::Database::CreateDatabase)) {
++        // delete old stuff, set to initial run!
++        qWarning() << "Failed to create database, removing corrupted database.";
++        QFile::remove(path + "/index");
++        QFile::remove(path + "/index-lock");
++        indexerConfig.setInitialRun(true);
++
++        // try to create now after cleanup, if still no works => fail
++        if (!db->open(Baloo::Database::CreateDatabase)) {
++            qWarning() << "Failed to create database after deleting corrupted one.";
++            return 1;
++        }
++    }
+ 
+     Baloo::MainHub hub(db, &indexerConfig);
+     return app.exec();
+

diff --git a/kde-frameworks/baloo/files/baloo-5.26.0-size-limit.patch b/kde-frameworks/baloo/files/baloo-5.26.0-size-limit.patch
new file mode 100644
index 0000000..6739a27
--- /dev/null
+++ b/kde-frameworks/baloo/files/baloo-5.26.0-size-limit.patch
@@ -0,0 +1,118 @@
+From: Christoph Cullmann <cullmann@kde.org>
+Date: Sun, 11 Sep 2016 16:54:58 +0000
+Subject: Increase size limit of baloo index for 64-bit machines
+X-Git-Url: http://quickgit.kde.org/?p=baloo.git&a=commitdiff&h=b0890aca71aa4f0fdabe65ee7b7fbd0bc844d8b8
+---
+Increase size limit of baloo index for 64-bit machines
+
+CHANGELOG: On 64-bit systems baloo allows now > 5 GB index storage.
+
+Increase size limit of baloo index for 64-bit machines to avoid crashs after > 5GB of index size.
+(Better would be additional out-of-space handling, but ATM baloo has zero checks for that)
+
+The size limit for 32-bit is still 1GB, like before (there was a silent overflow from 5GB to 1GB in the computation), people with large homes will still get random segfaults on 32-bit.
+
+Patch based on patch from Hao Zhang, Bug 364475
+
+REVIEW: 128885
+BUG: 364475
+---
+
+
+--- a/src/engine/database.cpp
++++ b/src/engine/database.cpp
+@@ -93,8 +93,18 @@
+         return false;
+     }
+ 
++    /**
++     * maximal number of allowed named databases, must match number of databases we create below
++     * each additional one leads to overhead
++     */
+     mdb_env_set_maxdbs(m_env, 12);
+-    mdb_env_set_mapsize(m_env, static_cast<size_t>(1024) * 1024 * 1024 * 5); // 5 gb
++
++    /**
++     * size limit for database == size limit of mmap
++     * use 1 GB on 32-bit, use 256 GB on 64-bit
++     */
++    const size_t maximalSizeInBytes = size_t((sizeof(size_t) == 4) ? 1 : 256) * size_t(1024) * size_t(1024) * size_t(1024);
++    mdb_env_set_mapsize(m_env, maximalSizeInBytes);
+ 
+     // The directory needs to be created before opening the environment
+     QByteArray arr = QFile::encodeName(indexInfo.absoluteFilePath());
+
+--- a/src/engine/databasesize.h
++++ b/src/engine/databasesize.h
+@@ -31,30 +31,30 @@
+      * This is the size which is computed with all the pages used from all the
+      * individual database pages
+      */
+-    uint expectedSize;
++    size_t expectedSize;
+ 
+     /**
+      * This is the size based on the MDB_env and the total number of pages used
+      */
+-    uint actualSize;
++    size_t actualSize;
+ 
+-    uint postingDb;
+-    uint positionDb;
++    size_t postingDb;
++    size_t positionDb;
+ 
+-    uint docTerms;
+-    uint docFilenameTerms;
+-    uint docXattrTerms;
++    size_t docTerms;
++    size_t docFilenameTerms;
++    size_t docXattrTerms;
+ 
+-    uint idTree;
+-    uint idFilename;
++    size_t idTree;
++    size_t idFilename;
+ 
+-    uint docTime;
+-    uint docData;
++    size_t docTime;
++    size_t docData;
+ 
+-    uint contentIndexingIds;
+-    uint failedIds;
++    size_t contentIndexingIds;
++    size_t failedIds;
+ 
+-    uint mtimeDb;
++    size_t mtimeDb;
+ };
+ 
+ }
+
+--- a/src/engine/transaction.cpp
++++ b/src/engine/transaction.cpp
+@@ -402,7 +402,7 @@
+ //
+ // File Size
+ //
+-static uint dbiSize(MDB_txn* txn, MDB_dbi dbi)
++static size_t dbiSize(MDB_txn* txn, MDB_dbi dbi)
+ {
+     MDB_stat stat;
+     mdb_stat(txn, dbi, &stat);
+
+--- a/src/tools/balooctl/statuscommand.cpp
++++ b/src/tools/balooctl/statuscommand.cpp
+@@ -92,8 +92,8 @@
+ 
+         const QString path = fileIndexDbPath();
+ 
+-        QFileInfo indexInfo(path + QLatin1String("/index"));
+-        quint32 size = indexInfo.size();
++        const QFileInfo indexInfo(path + QLatin1String("/index"));
++        const auto size = indexInfo.size();
+         KFormat format(QLocale::system());
+         if (size) {
+             out << "Current size of index is " << format.formatByteSize(size, 2) << endl;
+

diff --git a/kde-frameworks/baloo/files/baloo-5.26.0-thread-safety.patch b/kde-frameworks/baloo/files/baloo-5.26.0-thread-safety.patch
new file mode 100644
index 0000000..11965f5
--- /dev/null
+++ b/kde-frameworks/baloo/files/baloo-5.26.0-thread-safety.patch
@@ -0,0 +1,253 @@
+From: Christoph Cullmann <cullmann@kde.org>
+Date: Sun, 11 Sep 2016 18:24:40 +0000
+Subject: Make e.g. Baloo::Query thread safe.
+X-Git-Url: http://quickgit.kde.org/?p=baloo.git&a=commitdiff&h=e34da150d82a57cf417a59b8b632b2fecb32a6f7
+---
+Make e.g. Baloo::Query thread safe.
+
+lmdb itself is thread safe (e.g. you can use the same env in multiple threads).
+Unfortunately, the Baloo:atabase itself not, as open() might race against other open calls (we have one unique db object in baloo).
+
+=> add non-recursive mutex (recursive mutex not needed, one just must avoid to call isOpen() or path() inside open, that is done, else no unit test works).
+
+REVIEW: 128890
+---
+Merged with commits
+988e5feb5de64ed25337fe2ff9b494eb30b15b47
+54f7363048c7db41f63c85f637911a5598c30e9e
+377e62b0307839edb0245d65381a3f55f594ae4e
+---
+
+--- a/src/engine/database.cpp
++++ b/src/engine/database.cpp
+@@ -1,6 +1,7 @@
+ /*
+    This file is part of the KDE Baloo project.
+  * Copyright (C) 2015  Vishesh Handa <vhanda@kde.org>
++ * Copyright (C) 2016  Christoph Cullmann <cullmann@kde.org>
+  *
+  * This library is free software; you can redistribute it and/or
+  * modify it under the terms of the GNU Lesser General Public
+@@ -43,23 +44,31 @@
+ #include <QFile>
+ #include <QFileInfo>
+ #include <QDir>
++#include <QMutexLocker>
+ 
+ using namespace Baloo;
+ 
+ Database::Database(const QString& path)
+     : m_path(path)
+-    , m_env(0)
++    , m_env(nullptr)
+ {
+ }
+ 
+ Database::~Database()
+ {
+-    mdb_env_close(m_env);
++    // try only to close if we did open the DB successfully
++    if (m_env) {
++        mdb_env_close(m_env);
++        m_env = nullptr;
++    }
+ }
+ 
+ bool Database::open(OpenMode mode)
+ {
+-    if (isOpen()) {
++    QMutexLocker locker(&m_mutex);
++
++    // nop if already open!
++    if (m_env) {
+         return true;
+     }
+ 
+@@ -89,7 +98,7 @@
+ 
+     int rc = mdb_env_create(&m_env);
+     if (rc) {
+-        m_env = 0;
++        m_env = nullptr;
+         return false;
+     }
+ 
+@@ -110,7 +119,8 @@
+     QByteArray arr = QFile::encodeName(indexInfo.absoluteFilePath());
+     rc = mdb_env_open(m_env, arr.constData(), MDB_NOSUBDIR | MDB_NOMEMINIT, 0664);
+     if (rc) {
+-        m_env = 0;
++        mdb_env_close(m_env);
++        m_env = nullptr;
+         return false;
+     }
+ 
+@@ -118,6 +128,7 @@
+     Q_ASSERT_X(rc == 0, "Database::open reader_check", mdb_strerror(rc));
+     if (rc) {
+         mdb_env_close(m_env);
++        m_env = nullptr;
+         return false;
+     }
+ 
+@@ -129,9 +140,8 @@
+         int rc = mdb_txn_begin(m_env, NULL, MDB_RDONLY, &txn);
+         Q_ASSERT_X(rc == 0, "Database::transaction ro begin", mdb_strerror(rc));
+         if (rc) {
+-            mdb_txn_abort(txn);
+             mdb_env_close(m_env);
+-            m_env = 0;
++            m_env = nullptr;
+             return false;
+         }
+ 
+@@ -157,7 +167,7 @@
+         if (!m_dbis.isValid()) {
+             mdb_txn_abort(txn);
+             mdb_env_close(m_env);
+-            m_env = 0;
++            m_env = nullptr;
+             return false;
+         }
+ 
+@@ -165,16 +175,15 @@
+         Q_ASSERT_X(rc == 0, "Database::transaction ro commit", mdb_strerror(rc));
+         if (rc) {
+             mdb_env_close(m_env);
+-            m_env = 0;
++            m_env = nullptr;
+             return false;
+         }
+     } else {
+         int rc = mdb_txn_begin(m_env, NULL, 0, &txn);
+         Q_ASSERT_X(rc == 0, "Database::transaction begin", mdb_strerror(rc));
+         if (rc) {
+-            mdb_txn_abort(txn);
+             mdb_env_close(m_env);
+-            m_env = 0;
++            m_env = nullptr;
+             return false;
+         }
+ 
+@@ -200,7 +209,7 @@
+         if (!m_dbis.isValid()) {
+             mdb_txn_abort(txn);
+             mdb_env_close(m_env);
+-            m_env = 0;
++            m_env = nullptr;
+             return false;
+         }
+ 
+@@ -208,16 +217,24 @@
+         Q_ASSERT_X(rc == 0, "Database::transaction commit", mdb_strerror(rc));
+         if (rc) {
+             mdb_env_close(m_env);
+-            m_env = 0;
++            m_env = nullptr;
+             return false;
+         }
+     }
+ 
++    Q_ASSERT(m_env);
+     return true;
+ }
+ 
++bool Database::isOpen() const
++{
++    QMutexLocker locker(&m_mutex);
++    return m_env != 0;
++}
++
+ QString Database::path() const
+ {
++    QMutexLocker locker(&m_mutex);
+     return m_path;
+ }
+ 
+--- a/src/engine/database.h
++++ b/src/engine/database.h
+@@ -1,6 +1,7 @@
+ /*
+    This file is part of the KDE Baloo project.
+  * Copyright (C) 2015  Vishesh Handa <vhanda@kde.org>
++ * Copyright (C) 2016  Christoph Cullmann <cullmann@kde.org>
+  *
+  * This library is free software; you can redistribute it and/or
+  * modify it under the terms of the GNU Lesser General Public
+@@ -21,6 +22,8 @@
+ #ifndef BALOO_DATABASE_H
+ #define BALOO_DATABASE_H
+ 
++#include <QMutex>
++
+ #include "document.h"
+ #include "databasedbis.h"
+ 
+@@ -31,21 +34,56 @@
+ class BALOO_ENGINE_EXPORT Database
+ {
+ public:
++    /**
++     * Init database for given DB path, will not open it.
++     * @param path db path
++     */
+     explicit Database(const QString& path);
++
++    /**
++     * Destruct db, might close it, if opened.
++     */
+     ~Database();
+ 
+-    QString path() const;
+-
++    /**
++     * Database open mode
++     */
+     enum OpenMode {
+         CreateDatabase,
+         OpenDatabase
+     };
++
++    /**
++     * Open database in given mode.
++     * Nop after open was done (even if mode differs).
++     * There is no close as this would invalidate the database for all threads using it.
++     * @param mode create or open only?
++     * @return success?
++     */
+     bool open(OpenMode mode);
+ 
+-    bool isOpen() const { return m_env != 0; }
++    /**
++     * Is database open?
++     * @return database open?
++     */
++    bool isOpen() const;
++
++    /**
++     * Path to database.
++     * @return database path
++     */
++    QString path() const;
+ 
+ private:
+-    QString m_path;
++    /**
++     * serialize access, as open might be called from multiple threads
++     */
++    mutable QMutex m_mutex;
++
++    /**
++     * database path
++     */
++    const QString m_path;
+ 
+     MDB_env* m_env;
+     DatabaseDbis m_dbis;
+@@ -56,6 +94,5 @@
+ };
+ }
+ 
+-
+ #endif // BALOO_DATABASE_H
+ 

diff --git a/kde-frameworks/baloo/files/baloo-5.26.0-zerotimestamp-crash.patch b/kde-frameworks/baloo/files/baloo-5.26.0-zerotimestamp-crash.patch
new file mode 100644
index 0000000..7e66613
--- /dev/null
+++ b/kde-frameworks/baloo/files/baloo-5.26.0-zerotimestamp-crash.patch
@@ -0,0 +1,39 @@
+From: Christoph Cullmann <cullmann@kde.org>
+Date: Sun, 11 Sep 2016 16:48:53 +0000
+Subject: allow ctime/mtime == 0
+X-Git-Url: http://quickgit.kde.org/?p=baloo.git&a=commitdiff&h=628daced19b88d0c537736a14aea3287a4662609
+---
+allow ctime/mtime == 0
+
+Fix that baloo is instant killed by any file with timestamp 0. (which is OK and can easily happen after unpacking some zip/tar/..)
+
+REVIEW: 128887
+BUG: 355238
+---
+
+
+--- a/src/engine/documenttimedb.cpp
++++ b/src/engine/documenttimedb.cpp
+@@ -58,8 +58,6 @@
+ void DocumentTimeDB::put(quint64 docId, const TimeInfo& info)
+ {
+     Q_ASSERT(docId > 0);
+-    Q_ASSERT(info.mTime);
+-    Q_ASSERT(info.cTime);
+ 
+     MDB_val key;
+     key.mv_size = sizeof(quint64);
+
+--- a/src/engine/writetransaction.cpp
++++ b/src/engine/writetransaction.cpp
+@@ -206,9 +206,6 @@
+     }
+ 
+     if (operations & DocumentTime) {
+-        Q_ASSERT(doc.m_mTime);
+-        Q_ASSERT(doc.m_cTime);
+-
+         DocumentTimeDB::TimeInfo info;
+         info.mTime = doc.m_mTime;
+         info.cTime = doc.m_cTime;
+


^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2016-09-14 14:13 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-09-14 14:13 [gentoo-commits] proj/kde:master commit in: kde-frameworks/baloo/, kde-frameworks/baloo/files/ Michael Palimaka

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox