summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--x11-libs/libfm/Manifest1
-rw-r--r--x11-libs/libfm/files/libfm-fix-use-after-free.diff23
-rw-r--r--x11-libs/libfm/libfm-1.2.5-r1.ebuild144
3 files changed, 168 insertions, 0 deletions
diff --git a/x11-libs/libfm/Manifest b/x11-libs/libfm/Manifest
new file mode 100644
index 00000000..7be34662
--- /dev/null
+++ b/x11-libs/libfm/Manifest
@@ -0,0 +1 @@
+DIST libfm-1.2.5.tar.gz 1261152 BLAKE2B 30da6771ad4ab31be675a3af2ce7c9dd04e80be9f33b25300bf386f45f9fd652654e211c312d1e283a63cdbde4f5c8e3673a36fc0075e3b1981d9f5995683057 SHA512 0bc7910081cadc4c8c4648f3483fb5791e9480700400ded452dd5985e7fb0d8524f2c676f0171a5cd283422a13f240f40cfe5ccc8d10dce02dd784d62250b7cc
diff --git a/x11-libs/libfm/files/libfm-fix-use-after-free.diff b/x11-libs/libfm/files/libfm-fix-use-after-free.diff
new file mode 100644
index 00000000..4a0ae61c
--- /dev/null
+++ b/x11-libs/libfm/files/libfm-fix-use-after-free.diff
@@ -0,0 +1,23 @@
+diff -Naur libfm-1.2.3/src/base/fm-config.c libfm-1.2.3-fix-uaf-new2/src/base/fm-config.c
+--- libfm-1.2.3/src/base/fm-config.c 2014-10-14 18:29:21.000000000 +0200
++++ libfm-1.2.3-fix-uaf-new2/src/base/fm-config.c 2016-06-18 18:23:35.721837971 +0200
+@@ -346,7 +346,8 @@
+ cfg->modules_blacklist = NULL;
+ cfg->system_modules_blacklist = NULL;
+ _cfg_monitor_free(cfg);
+- g_free(cfg->_cfg_name);
++ if(name != cfg->_cfg_name)
++ g_free(cfg->_cfg_name);
+ if(G_LIKELY(!name))
+ name = "libfm/libfm.conf";
+ else
+@@ -363,7 +364,8 @@
+ }
+ }
+
+- cfg->_cfg_name = g_strdup(name);
++ if(name != cfg->_cfg_name)
++ cfg->_cfg_name = g_strdup(name);
+ dirs = g_get_system_config_dirs();
+ /* bug SF #887: first dir in XDG_CONFIG_DIRS is the most relevant
+ so we shoult process the list in reverse order */
diff --git a/x11-libs/libfm/libfm-1.2.5-r1.ebuild b/x11-libs/libfm/libfm-1.2.5-r1.ebuild
new file mode 100644
index 00000000..ffa37fbe
--- /dev/null
+++ b/x11-libs/libfm/libfm-1.2.5-r1.ebuild
@@ -0,0 +1,144 @@
+# Copyright 1999-2018 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=5
+
+inherit autotools fdo-mime multilib vala
+
+MY_PV=${PV/_/}
+MY_P="${PN}-${MY_PV}"
+DESCRIPTION="A library for file management"
+HOMEPAGE="http://pcmanfm.sourceforge.net/"
+SRC_URI="https://github.com/lxde/libfm/archive/${PV}.tar.gz -> ${MY_P}.tar.gz"
+
+KEYWORDS="~alpha amd64 arm ~arm64 ~mips ppc x86 ~amd64-linux ~x86-linux"
+LICENSE="GPL-2"
+SLOT="0/4.5.0" #copy ABI_VERSION because it seems upstream change it randomly
+IUSE="+automount debug doc examples exif gtk gtk3 udisks vala"
+
+COMMON_DEPEND=">=dev-libs/glib-2.18:2
+ gtk? ( >=x11-libs/gtk+-2.16:2 )
+ gtk3? ( >=x11-libs/gtk+-3.18:3 )
+ >=lxde-base/menu-cache-0.3.2:=
+ ~x11-libs/libfm-extra-${PV}
+ udisks? ( dev-libs/dbus-glib )"
+RDEPEND="${COMMON_DEPEND}
+ !lxde-base/lxshortcut
+ x11-misc/shared-mime-info
+ automount? (
+ udisks? ( gnome-base/gvfs[udev,udisks] )
+ !udisks? ( gnome-base/gvfs[udev] )
+ )
+ exif? ( media-libs/libexif )"
+DEPEND="${COMMON_DEPEND}
+ vala? ( $(vala_depend) )
+ doc? (
+ dev-util/gtk-doc
+ )
+ app-arch/xz-utils
+ >=dev-util/intltool-0.40
+ virtual/pkgconfig
+ sys-devel/gettext"
+
+S="${WORKDIR}"/${MY_P}
+
+REQUIRED_USE="udisks? ( automount ) doc? ( gtk ) gtk3? ( gtk )"
+
+src_prepare() {
+ # Fix use after free bug, see
+ # https://github.com/lxde/libfm/pull/11/commits/9e3a809c6a8a5079f05e04edac9457d317822321
+ epatch "${FILESDIR}"/libfm-fix-use-after-free.diff
+
+ if ! use doc; then
+ sed -ie '/^SUBDIR.*=/s#docs##' "${S}"/Makefile.am || die "sed failed"
+ sed -ie '/^[[:space:]]*docs/d' configure.ac || die "sed failed"
+ fi
+ sed -i -e "s:-O0::" -e "/-DG_ENABLE_DEBUG/s: -g::" \
+ configure.ac || die "sed failed"
+
+ #disable unused translations. Bug #356029
+ for trans in app-chooser ask-rename exec-file file-prop preferred-apps \
+ progress;do
+ echo "data/ui/"${trans}.ui >> po/POTFILES.in
+ done
+ #Remove -Werror for automake-1.12. Bug #421101
+ sed -i "s:-Werror::" configure.ac || die
+
+ # subslot sanity check
+ local sub_slot=${SLOT#*/}
+ local libfm_major_abi=$(sed -rne '/ABI_VERSION/s:.*=::p' src/Makefile.am | tr ':' '.')
+
+ if [[ ${sub_slot} != ${libfm_major_abi} ]]; then
+ eerror "Ebuild sub-slot (${sub_slot}) does not match ABI_VERSION(${libfm_major_abi})"
+ eerror "Please update SLOT variable as follows:"
+ eerror " SLOT=\"${SLOT%%/*}/${libfm_major_abi}\""
+ eerror
+ die "sub-slot sanity check failed"
+ fi
+
+ eautoreconf
+ rm -r autom4te.cache || die
+ use vala && export VALAC="$(type -p valac-$(vala_best_api_version))"
+}
+
+src_configure() {
+ if use gtk3; then
+ econf \
+ --sysconfdir="${EPREFIX}/etc" \
+ --disable-dependency-tracking \
+ --disable-static \
+ --with-gtk=3 \
+ $(use_enable examples demo) \
+ $(use_enable debug) \
+ $(use_enable udisks) \
+ $(use_enable vala actions) \
+ $(use_enable doc gtk-doc) \
+ --with-html-dir=/usr/share/doc/${PF}/html
+ else
+ econf \
+ --sysconfdir="${EPREFIX}/etc" \
+ --disable-dependency-tracking \
+ --disable-static \
+ $(use_enable examples demo) \
+ $(use_enable exif) \
+ $(use_enable debug) \
+ $(use_enable udisks) \
+ $(use_enable vala actions) \
+ $(use_with gtk) \
+ $(use_enable doc gtk-doc) \
+ --with-html-dir=/usr/share/doc/${PF}/html
+ fi
+}
+
+src_install() {
+ default
+ find "${D}" -name '*.la' -exec rm -f '{}' +
+ # Sometimes a directory is created instead of a symlink. No idea why...
+ # It is wrong anyway. We expect a libfm-1.0 directory and then a libfm
+ # symlink to it.
+ if [[ -h ${D}/usr/include/${PN} || -d ${D}/usr/include/${PN} ]]; then
+ rm -r "${D}"/usr/include/${PN}
+ fi
+ # Remove files installed by split-off libfm-extra package
+ rm "${D}"/usr/include/libfm-1.0/fm-{extra,version,xml-file}.h
+ rm "${D}"/usr/$(get_libdir)/libfm-extra*
+ rm "${D}"/usr/$(get_libdir)/pkgconfig/libfm-extra.pc
+}
+
+pkg_preinst() {
+ # Resolve the symlink mess. Bug #439570
+ [[ -d "${ROOT}"/usr/include/${PN} ]] && \
+ rm -rf "${ROOT}"/usr/include/${PN}
+ if [[ -d "${D}"/usr/include/${PN}-1.0 ]]; then
+ cd "${D}"/usr/include
+ ln -s --force ${PN}-1.0 ${PN}
+ fi
+}
+
+pkg_postinst() {
+ fdo-mime_mime_database_update
+}
+
+pkg_postrm() {
+ fdo-mime_mime_database_update
+}