forked from gentoo/gentoo
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
app-misc/mc: fix VFS SEGV in GC, bug #700708
Paul reports that nested archives cause corruption of mc's data structures. Picked upstream patch that avoids dereference of stale entries. Reported-by: Paul Osmialowski Closes: https://bugs.gentoo.org/700708 Package-Manager: Portage-2.3.79, Repoman-2.3.18 Signed-off-by: Sergei Trofimovich <[email protected]>
- Loading branch information
Sergei Trofimovich
committed
Nov 21, 2019
1 parent
2cf2221
commit 9bebf55
Showing
2 changed files
with
153 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
https://bugs.gentoo.org/700708 | ||
|
||
From 8411b93ff7cc955b0acf1541207977c52201bbfc Mon Sep 17 00:00:00 2001 | ||
From: Andrew Borodin <[email protected]> | ||
Date: Wed, 11 Sep 2019 09:17:18 +0300 | ||
Subject: [PATCH] (vfs_stamp_compare): fix NULL dereference. | ||
|
||
(vfs_stamp): likewise. | ||
|
||
Signed-off-by: Andrew Borodin <[email protected]> | ||
--- | ||
lib/vfs/gc.c | 4 ++-- | ||
1 file changed, 2 insertions(+), 2 deletions(-) | ||
|
||
--- a/lib/vfs/gc.c | ||
+++ b/lib/vfs/gc.c | ||
@@ -127,7 +127,7 @@ vfs_stamp_compare (gconstpointer a, gconstpointer b) | ||
const struct vfs_stamping *vsa = (const struct vfs_stamping *) a; | ||
const struct vfs_stamping *vsb = (const struct vfs_stamping *) b; | ||
|
||
- return (vsa->v == vsb->v && vsa->id == vsb->id) ? 0 : 1; | ||
+ return (vsa == NULL || vsb == NULL || (vsa->v == vsb->v && vsa->id == vsb->id)) ? 0 : 1; | ||
} | ||
|
||
/* --------------------------------------------------------------------------------------------- */ | ||
@@ -163,7 +163,7 @@ vfs_stamp (struct vfs_class *v, vfsid id) | ||
gboolean ret = FALSE; | ||
|
||
stamp = g_slist_find_custom (stamps, &what, vfs_stamp_compare); | ||
- if (stamp != NULL) | ||
+ if (stamp != NULL && stamp->data != NULL) | ||
{ | ||
gettimeofday (&(VFS_STAMPING (stamp->data)->time), NULL); | ||
ret = TRUE; | ||
-- | ||
2.24.0 | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,116 @@ | ||
# Copyright 1999-2019 Gentoo Authors | ||
# Distributed under the terms of the GNU General Public License v2 | ||
|
||
EAPI=7 | ||
|
||
inherit flag-o-matic | ||
|
||
MY_P=${P/_/-} | ||
|
||
DESCRIPTION="GNU Midnight Commander is a text based file manager" | ||
HOMEPAGE="https://www.midnight-commander.org" | ||
SRC_URI="http://ftp.midnight-commander.org/${MY_P}.tar.xz" | ||
|
||
LICENSE="GPL-3" | ||
SLOT="0" | ||
KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 ~amd64-linux ~ppc-macos ~x64-macos ~x86-macos ~sparc-solaris ~sparc64-solaris ~x86-solaris" | ||
IUSE="+edit gpm nls samba sftp +slang spell test unicode X +xdg" | ||
|
||
REQUIRED_USE="spell? ( edit )" | ||
|
||
RDEPEND=">=dev-libs/glib-2.26.0:2 | ||
gpm? ( sys-libs/gpm ) | ||
kernel_linux? ( sys-fs/e2fsprogs ) | ||
samba? ( net-fs/samba ) | ||
sftp? ( net-libs/libssh2 ) | ||
slang? ( >=sys-libs/slang-2 ) | ||
!slang? ( sys-libs/ncurses:0=[unicode?] ) | ||
spell? ( app-text/aspell ) | ||
X? ( x11-libs/libX11 | ||
x11-libs/libICE | ||
x11-libs/libXau | ||
x11-libs/libXdmcp | ||
x11-libs/libSM )" | ||
DEPEND="${RDEPEND} | ||
app-arch/xz-utils | ||
virtual/pkgconfig | ||
nls? ( sys-devel/gettext ) | ||
test? ( dev-libs/check ) | ||
" | ||
|
||
RESTRICT="!test? ( test )" | ||
|
||
S=${WORKDIR}/${MY_P} | ||
|
||
PATCHES=( | ||
"${FILESDIR}"/${P}-3933-iso9660-1.patch | ||
"${FILESDIR}"/${P}-3933-iso9660-2.patch | ||
"${FILESDIR}"/${PN}-4.8.23-gettext.patch | ||
"${FILESDIR}"/${PN}-4.8.23-gettext-test.patch | ||
"${FILESDIR}"/${PN}-4.8.23-vfs-gc-SEGV.patch | ||
) | ||
|
||
pkg_pretend() { | ||
if use slang && use unicode ; then | ||
ewarn "\"unicode\" USE flag only takes effect when the \"slang\" USE flag is disabled." | ||
fi | ||
} | ||
|
||
src_configure() { | ||
[[ ${CHOST} == *-solaris* ]] && append-ldflags "-lnsl -lsocket" | ||
|
||
local myeconfargs=( | ||
--disable-dependency-tracking | ||
--disable-silent-rules | ||
--enable-charset | ||
--enable-vfs | ||
--with-homedir=$(usex xdg 'XDG' '.mc') | ||
--with-screen=$(usex slang 'slang' "ncurses$(usex unicode 'w' '')") | ||
$(use_enable kernel_linux vfs-undelfs) | ||
# Today mclib does not expose any headers and is linked to | ||
# single 'mc' binary. Thus there is no advantage of having | ||
# a library. Let's avoid shared library altogether | ||
# as it also conflicts with sci-libs/mc: bug #685938 | ||
--disable-mclib | ||
$(use_enable nls) | ||
$(use_enable samba vfs-smb) | ||
$(use_enable sftp vfs-sftp) | ||
$(use_enable spell aspell) | ||
$(use_enable test tests) | ||
$(use_with gpm gpm-mouse) | ||
$(use_with X x) | ||
$(use_with edit internal-edit) | ||
) | ||
econf "${myeconfargs[@]}" | ||
} | ||
|
||
src_test() { | ||
# CK_FORK=no to avoid using fork() in check library | ||
# as mc mocks fork() itself: bug #644462. | ||
# | ||
# VERBOSE=1 to make test failures contain detailed | ||
# information. | ||
CK_FORK=no emake check VERBOSE=1 | ||
} | ||
|
||
src_install() { | ||
emake DESTDIR="${D}" install | ||
dodoc AUTHORS README NEWS | ||
|
||
# fix bug #334383 | ||
if use kernel_linux && [[ ${EUID} == 0 ]] ; then | ||
fowners root:tty /usr/libexec/mc/cons.saver | ||
fperms g+s /usr/libexec/mc/cons.saver | ||
fi | ||
|
||
if ! use xdg ; then | ||
sed 's@MC_XDG_OPEN="xdg-open"@MC_XDG_OPEN="/bin/false"@' \ | ||
-i "${ED}"/usr/libexec/mc/ext.d/*.sh || die | ||
fi | ||
} | ||
|
||
pkg_postinst() { | ||
elog "To enable exiting to latest working directory," | ||
elog "put this into your ~/.bashrc:" | ||
elog ". ${EPREFIX}/usr/libexec/mc/mc.sh" | ||
} |