summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Palimaka <kensington@gentoo.org>2016-09-15 04:04:32 +1000
committerMichael Palimaka <kensington@gentoo.org>2016-09-15 04:12:16 +1000
commit1f9700ed2ec8463a6b7d80a06f83c7b50c973b54 (patch)
tree4a5042f5e2915e29ee83096ce0306f8e0e8208ee /kde-frameworks/kfilemetadata
parentdev-python/simplecv: remove unused patch (diff)
downloadgentoo-1f9700ed2ec8463a6b7d80a06f83c7b50c973b54.tar.gz
gentoo-1f9700ed2ec8463a6b7d80a06f83c7b50c973b54.tar.bz2
gentoo-1f9700ed2ec8463a6b7d80a06f83c7b50c973b54.zip
kde-frameworks: version bump 5.26.0
Package-Manager: portage-2.3.0
Diffstat (limited to 'kde-frameworks/kfilemetadata')
-rw-r--r--kde-frameworks/kfilemetadata/Manifest1
-rw-r--r--kde-frameworks/kfilemetadata/files/kfilemetadata-5.26.0-epubextractor-segfault.patch149
-rw-r--r--kde-frameworks/kfilemetadata/files/kfilemetadata-5.26.0-odfextractor-segfault.patch66
-rw-r--r--kde-frameworks/kfilemetadata/kfilemetadata-5.26.0-r1.ebuild55
4 files changed, 271 insertions, 0 deletions
diff --git a/kde-frameworks/kfilemetadata/Manifest b/kde-frameworks/kfilemetadata/Manifest
index eb04ffa272f..69754c3f257 100644
--- a/kde-frameworks/kfilemetadata/Manifest
+++ b/kde-frameworks/kfilemetadata/Manifest
@@ -1,2 +1,3 @@
DIST kfilemetadata-5.23.0.tar.xz 131344 SHA256 fad84cbc477c36aa967a1f4facd7bfa6825346bdddae87b1fd9db64d9dc2688f SHA512 2291eb96fb4b2d569683c5da70ed4aa90df8995b572d83efaad5aba51e7aac0a050cefab6a7f606e16d6326ac0be0d43663c6d219336986fb493a0758a42cf11 WHIRLPOOL 93de030b6915e73a33d324b8edd3b46a3e9231b26db3a5c6a46f35c78a38d21477a71cbfc7a1f4245b6973f0059379e54e56b9d93101a0d7f358b59e0c238c81
DIST kfilemetadata-5.25.0.tar.xz 131632 SHA256 f7f7ede8b3a7a518e8058374733847c2610b59aa717562c253f70a01c614ebf9 SHA512 d17160e50c2c3f60836c4d7e3163e2c533e30983bb92dae9c868bed47f98b73785595ac5e01ff464a8a0abba9d8d9404c4789d208ddf9ecb3f8f0e39436428c0 WHIRLPOOL 9c8f455cf228b3428500743ed612abcd2dff74953e5eca82ef8ed74672ed4433e249df9c28d08213c5d9572c46c013d30f96e56dafa633c72fafd90e759a4497
+DIST kfilemetadata-5.26.0.tar.xz 131636 SHA256 345c02a2e6e808cda7e278848722ece2050bf8f9577fdfec3ece18fb15a500f9 SHA512 1737f8fe3d46d91af7f29aadcb6d06fc638b12741902bb011dce56395d7fd8dc24fd0745d4e7ef326d2cd78119fa4be175c0281d81a09b82d9a6bda705e88286 WHIRLPOOL 6f5d93cf934da0a80d109744eb527c90642cb8ad88098ff526aa29552749a301c4613b6575a4a666f87bedac603474389579f8ea4bf5742d8b3dc85e53a1d782
diff --git a/kde-frameworks/kfilemetadata/files/kfilemetadata-5.26.0-epubextractor-segfault.patch b/kde-frameworks/kfilemetadata/files/kfilemetadata-5.26.0-epubextractor-segfault.patch
new file mode 100644
index 00000000000..b738d1ae09a
--- /dev/null
+++ b/kde-frameworks/kfilemetadata/files/kfilemetadata-5.26.0-epubextractor-segfault.patch
@@ -0,0 +1,149 @@
+From: Christoph Cullmann <cullmann@kde.org>
+Date: Sun, 11 Sep 2016 17:14:51 +0000
+Subject: Improve epub extractor, less segfaults
+X-Git-Url: http://quickgit.kde.org/?p=kfilemetadata.git&a=commitdiff&h=47f6e57b2fa3768feb4f1f4a2cd3ce46660d90f2
+---
+Improve epub extractor, less segfaults
+
+Improve epub extractor:
+
+1) check for more nullpointers (e.g. data can be null for some fields, iterators, ...)
+2) actually close the epub file again at all
+3) iterator seems to handle clink as stated in docs, fix double free
+
+e.g. see bug 361727
+could be the double freed clink in the last iterator
+
+BUG: 361727
+REVIEW: 128888
+---
+
+
+--- a/src/extractors/epubextractor.cpp
++++ b/src/extractors/epubextractor.cpp
+@@ -1,5 +1,6 @@
+ /*
+ Copyright (C) 2013 Vishesh Handa <me@vhanda.in>
++ 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
+@@ -46,11 +47,14 @@
+ QString fetchMetadata(struct epub* e, const epub_metadata& type)
+ {
+ int size = 0;
+-
+ unsigned char** data = epub_get_metadata(e, type, &size);
+ if (data) {
+ QStringList strList;
+ for (int i = 0; i < size; i++) {
++ // skip nullptr entries, can happen for broken xml files
++ if (!data[i])
++ continue;
++
+ strList << QString::fromUtf8((char*)data[i]);
+ free(data[i]);
+ }
+@@ -65,7 +69,8 @@
+
+ void EPubExtractor::extract(ExtractionResult* result)
+ {
+- struct epub* ePubDoc = epub_open(result->inputUrl().toUtf8().constData(), 1);
++ // open epub, return on exit, file will be closed again at end of function
++ auto ePubDoc = epub_open(result->inputUrl().toUtf8().constData(), 1);
+ if (!ePubDoc) {
+ qWarning() << "Invalid document";
+ return;
+@@ -138,49 +143,49 @@
+ //
+ // Plain Text
+ //
+- if (!(result->inputFlags() & ExtractionResult::ExtractPlainText)) {
+- return;
++ if (result->inputFlags() & ExtractionResult::ExtractPlainText) {
++ if (auto iter = epub_get_iterator(ePubDoc, EITERATOR_SPINE, 0)) {
++ do {
++ char* curr = epub_it_get_curr(iter);
++ if (!curr)
++ continue;
++
++ QString html = QString::fromUtf8(curr);
++ html.remove(QRegularExpression(QStringLiteral("<[^>]*>")));
++ result->append(html);
++ } while (epub_it_get_next(iter));
++
++ epub_free_iterator(iter);
++ }
++
++ auto tit = epub_get_titerator(ePubDoc, TITERATOR_NAVMAP, 0);
++ if (!tit) {
++ tit = epub_get_titerator(ePubDoc, TITERATOR_GUIDE, 0);
++ }
++ if (tit) {
++ if (epub_tit_curr_valid(tit)) {
++ do {
++ // get link, iterator handles freeing of it
++ char* clink = epub_tit_get_curr_link(tit);
++
++ // epub_get_data returns -1 on failure
++ char* data = nullptr;
++ const int size = epub_get_data(ePubDoc, clink, &data);
++ if (size >= 0 && data) {
++ QString html = QString::fromUtf8(data, size);
++ // strip html tags
++ html.remove(QRegularExpression(QStringLiteral("<[^>]*>")));
++
++ result->append(html);
++ free(data);
++ }
++ } while (epub_tit_next(tit));
++ }
++ epub_free_titerator(tit);
++ }
+ }
+
+- struct eiterator* iter = epub_get_iterator(ePubDoc, EITERATOR_SPINE, 0);
+- do {
+- char* curr = epub_it_get_curr(iter);
+- if (!curr)
+- continue;
+- QString html = QString::fromUtf8(curr);
+- html.remove(QRegularExpression(QStringLiteral("<[^>]*>")));
+-
+- result->append(html);
+- } while (epub_it_get_next(iter));
+-
+- epub_free_iterator(iter);
+-
+- struct titerator* tit;
+-
+- tit = epub_get_titerator(ePubDoc, TITERATOR_NAVMAP, 0);
+- if (!tit) {
+- tit = epub_get_titerator(ePubDoc, TITERATOR_GUIDE, 0);
+- }
+-
+- if (epub_tit_curr_valid(tit)) {
+- do {
+- char* clink = epub_tit_get_curr_link(tit);
+-
+- char* data;
+- int size = epub_get_data(ePubDoc, clink, &data);
+- free(clink);
+-
+- // epub_get_data returns -1 on failure
+- if (size > 0 && data) {
+- QString html = QString::fromUtf8(data, size);
+- // strip html tags
+- html.remove(QRegularExpression(QStringLiteral("<[^>]*>")));
+-
+- result->append(html);
+- free(data);
+- }
+- } while (epub_tit_next(tit));
+- }
+- epub_free_titerator(tit);
++ // close epub file again
++ epub_close(ePubDoc);
+ }
+
+
diff --git a/kde-frameworks/kfilemetadata/files/kfilemetadata-5.26.0-odfextractor-segfault.patch b/kde-frameworks/kfilemetadata/files/kfilemetadata-5.26.0-odfextractor-segfault.patch
new file mode 100644
index 00000000000..9f3029bdbb8
--- /dev/null
+++ b/kde-frameworks/kfilemetadata/files/kfilemetadata-5.26.0-odfextractor-segfault.patch
@@ -0,0 +1,66 @@
+From: Christoph Cullmann <cullmann@kde.org>
+Date: Sun, 11 Sep 2016 13:07:47 +0000
+Subject: Make odf indexer more error prove, check if the files are there (and are files at all) (meta.xml + content.xml)
+X-Git-Url: http://quickgit.kde.org/?p=kfilemetadata.git&a=commitdiff&h=40730d75397aefb92145f86fc6abc9b303c56cfe
+---
+Make odf indexer more error prove, check if the files are there (and are files at all) (meta.xml + content.xml)
+
+REVIEW: 128886
+BUG 364748
+
+=> if you download this odt's to indexed directories your baloo will die on each index, be careful
+---
+
+
+--- a/src/extractors/odfextractor.cpp
++++ b/src/extractors/odfextractor.cpp
+@@ -2,6 +2,7 @@
+ <one line to give the library's name and an idea of what it does.>
+ Copyright (C) 2013 Vishesh Handa <me@vhanda.in>
+ Copyright (C) 2012 Jörg Ehrichs <joerg.ehrichs@gmx.de>
++ 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
+@@ -59,19 +60,18 @@
+ return;
+ }
+
+- const QStringList entries = directory->entries();
+- if (!entries.contains(QStringLiteral("meta.xml"))) {
++ // we need a meta xml file in the archive!
++ const auto metaXml = directory->entry(QStringLiteral("meta.xml"));
++ if (!metaXml || !metaXml->isFile()) {
+ qWarning() << "Invalid document structure (meta.xml is missing)";
+ return;
+ }
+
+ QDomDocument metaData(QStringLiteral("metaData"));
+- const KArchiveFile* file = static_cast<const KArchiveFile*>(directory->entry(QStringLiteral("meta.xml")));
+- metaData.setContent(file->data());
++ metaData.setContent(static_cast<const KArchiveFile*>(metaXml)->data());
+
+ // parse metadata ...
+ QDomElement docElem = metaData.documentElement();
+-
+ QDomNode n = docElem.firstChild().firstChild(); // <office:document-meta> ... <office:meta> ... content
+ while (!n.isNull()) {
+ QDomElement e = n.toElement();
+@@ -129,9 +129,14 @@
+ return;
+ }
+
+- const KArchiveFile* contentsFile = static_cast<const KArchiveFile*>(directory->entry(QStringLiteral("content.xml")));
+- QXmlStreamReader xml(contentsFile->createDevice());
++ // for content indexing, we need content xml file
++ const auto contentXml = directory->entry(QStringLiteral("content.xml"));
++ if (!contentXml || !contentXml->isFile()) {
++ qWarning() << "Invalid document structure (content.xml is missing)";
++ return;
++ }
+
++ QXmlStreamReader xml(static_cast<const KArchiveFile*>(contentXml)->createDevice());
+ while (!xml.atEnd()) {
+ xml.readNext();
+ if (xml.isCharacters()) {
+
diff --git a/kde-frameworks/kfilemetadata/kfilemetadata-5.26.0-r1.ebuild b/kde-frameworks/kfilemetadata/kfilemetadata-5.26.0-r1.ebuild
new file mode 100644
index 00000000000..ecf7e652f56
--- /dev/null
+++ b/kde-frameworks/kfilemetadata/kfilemetadata-5.26.0-r1.ebuild
@@ -0,0 +1,55 @@
+# Copyright 1999-2016 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Id$
+
+EAPI=6
+
+inherit eutils kde5
+
+DESCRIPTION="Library for extracting file metadata"
+KEYWORDS="~amd64 ~arm ~x86"
+IUSE="epub exif ffmpeg libav pdf taglib"
+
+RDEPEND="
+ $(add_frameworks_dep karchive)
+ $(add_frameworks_dep ki18n)
+ $(add_qt_dep qtxml)
+ epub? ( app-text/ebook-tools )
+ exif? ( media-gfx/exiv2:= )
+ ffmpeg? (
+ libav? ( media-video/libav:= )
+ !libav? ( media-video/ffmpeg:0= )
+ )
+ pdf? ( app-text/poppler[qt5] )
+ taglib? ( media-libs/taglib )
+"
+DEPEND="${RDEPEND}
+ kernel_linux? ( sys-apps/attr )
+"
+
+PATCHES=(
+ "${FILESDIR}/${P}-odfextractor-segfault.patch"
+ "${FILESDIR}/${P}-epubextractor-segfault.patch"
+)
+
+src_configure() {
+ local mycmakeargs=(
+ $(cmake-utils_use_find_package epub EPub)
+ $(cmake-utils_use_find_package exif Exiv2)
+ $(cmake-utils_use_find_package ffmpeg FFmpeg)
+ $(cmake-utils_use_find_package pdf PopplerQt5)
+ $(cmake-utils_use_find_package taglib Taglib)
+ )
+
+ kde5_src_configure
+}
+
+pkg_postinst() {
+ kde5_pkg_postinst
+
+ if ! has_version app-text/catdoc || ! has_version dev-libs/libxls; then
+ elog "To get additional features, optional runtime dependencies may be installed:"
+ optfeature "indexing of Microsoft Word or Powerpoint files" app-text/catdoc
+ optfeature "indexing of Microsoft Excel files" dev-libs/libxls
+ fi
+}