Skip to content

Commit

Permalink
kde-frameworks/kfilemetadata: Fix crashing over .spx binary files
Browse files Browse the repository at this point in the history
KDE-Bug: https://bugs.kde.org/show_bug.cgi?id=403902
Package-Manager: Portage-2.3.66, Repoman-2.3.12
Signed-off-by: Andreas Sturmlechner <[email protected]>
  • Loading branch information
a17r committed May 1, 2019
1 parent 3bb7437 commit 4a44b13
Show file tree
Hide file tree
Showing 2 changed files with 114 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
From 61b1916c3e87c3b8f4fc3d1f1d19bf427b9247da Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stefan=20Br=C3=BCns?= <[email protected]>
Date: Tue, 30 Apr 2019 03:51:14 +0200
Subject: [TagLibExtractor] Fix crash on invalid Speex files

Summary:
TagLib::Ogg::Speex::File::isValid() returns true even for invalid files,
but tag() only returns a valid XiphComment when the file is valid.

Other TagLib::Ogg::* classes properly clear the valid flag when
encountering files.

See https://github.com/taglib/taglib/issues/902

BUG: 403902

Reviewers: #baloo, #frameworks, ngraham, astippich

Reviewed By: #baloo, ngraham, astippich

Subscribers: kde-frameworks-devel

Tags: #frameworks, #baloo

Differential Revision: https://phabricator.kde.org/D20913
---
src/extractors/taglibextractor.cpp | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/extractors/taglibextractor.cpp b/src/extractors/taglibextractor.cpp
index 1954cac..e355907 100644
--- a/src/extractors/taglibextractor.cpp
+++ b/src/extractors/taglibextractor.cpp
@@ -476,7 +476,9 @@ void TagLibExtractor::extract(ExtractionResult* result)
}
} else if (mimeType == QLatin1String("audio/speex") || mimeType == QLatin1String("audio/x-speex+ogg")) {
TagLib::Ogg::Speex::File file(&stream, true);
- if (file.isValid()) {
+ // Workaround for buggy taglib:
+ // isValid() returns true for invalid files, but XiphComment* tag() returns a nullptr
+ if (file.isValid() && file.tag()) {
extractAudioProperties(&file, result);
readGenericProperties(file.properties(), result);
}
--
cgit v1.1
68 changes: 68 additions & 0 deletions kde-frameworks/kfilemetadata/kfilemetadata-5.57.0-r1.ebuild
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
# Copyright 1999-2019 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=7

PYTHON_COMPAT=( python{2_7,3_{5,6,7}} )
inherit kde5 python-any-r1

DESCRIPTION="Library for extracting file metadata"
KEYWORDS="~amd64 ~arm ~arm64 ~x86"
IUSE="epub exif ffmpeg kernel_linux libav office pdf taglib"

BDEPEND="
test? ( ${PYTHON_DEPS} )
"
RDEPEND="
$(add_frameworks_dep kcoreaddons)
$(add_frameworks_dep ki18n)
$(add_qt_dep qtxml)
epub? ( app-text/ebook-tools )
exif? ( media-gfx/exiv2:= )
ffmpeg? (
libav? ( >=media-video/libav-12.2:= )
!libav? ( media-video/ffmpeg:0= )
)
office? ( $(add_frameworks_dep karchive) )
pdf? ( app-text/poppler[qt5] )
taglib? ( media-libs/taglib )
"
DEPEND="${RDEPEND}
kernel_linux? ( sys-apps/attr )
"

PATCHES=( "${FILESDIR}/${P}-non-speex-files-crash.patch" )

pkg_setup() {
use test && python-any-r1_pkg_setup
kde5_pkg_setup
}

src_configure() {
local mycmakeargs=(
$(cmake-utils_use_find_package epub EPub)
$(cmake-utils_use_find_package exif LibExiv2)
$(cmake-utils_use_find_package ffmpeg FFmpeg)
$(cmake-utils_use_find_package office KF5Archive)
$(cmake-utils_use_find_package pdf Poppler)
$(cmake-utils_use_find_package taglib Taglib)
)

kde5_src_configure
}

src_test() {
# FIXME: bug 644650, fails on tmpfs (but not for everyone)
local myctestargs=( -E "(usermetadatawritertest)" )
kde5_src_test
}

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:"
elog "app-text/catdoc - indexing of Microsoft Word or Powerpoint files"
elog "dev-libs/libxls - indexing of Microsoft Excel files"
fi
}

0 comments on commit 4a44b13

Please sign in to comment.