summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergei Trofimovich <slyfox@gentoo.org>2018-12-06 08:11:50 +0000
committerSergei Trofimovich <slyfox@gentoo.org>2018-12-06 19:35:34 +0000
commit19469ee08b4e50d056384139750a488db8276cfa (patch)
tree5ad62506e03b4666277e6942b428980a664c9924 /media-sound/xmms2
parentdev-qt/qtlocation: Add USE-DEPEND on dev-qt/qtpositioning[qml] (diff)
downloadgentoo-19469ee08b4e50d056384139750a488db8276cfa.tar.gz
gentoo-19469ee08b4e50d056384139750a488db8276cfa.tar.bz2
gentoo-19469ee08b4e50d056384139750a488db8276cfa.zip
media-sound/xmms2: fix c++ client dangling reference
Picked patch from https://github.com/xmms2/xmms2-devel/pull/5 Reported-by: James Le Cuirot Package-Manager: Portage-2.3.52, Repoman-2.3.12 Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>
Diffstat (limited to 'media-sound/xmms2')
-rw-r--r--media-sound/xmms2/files/xmms2-0.8_p20161122-cpp-client.patch68
-rw-r--r--media-sound/xmms2/xmms2-0.8_p20161122-r5.ebuild300
2 files changed, 368 insertions, 0 deletions
diff --git a/media-sound/xmms2/files/xmms2-0.8_p20161122-cpp-client.patch b/media-sound/xmms2/files/xmms2-0.8_p20161122-cpp-client.patch
new file mode 100644
index 000000000000..cedc87fcc469
--- /dev/null
+++ b/media-sound/xmms2/files/xmms2-0.8_p20161122-cpp-client.patch
@@ -0,0 +1,68 @@
+https://github.com/xmms2/xmms2-devel/pull/5
+
+From 82741bf3094c8e0bca8eb1b7f3bc147eeb51ea06 Mon Sep 17 00:00:00 2001
+From: Sergei Trofimovich <slyfox@gentoo.org>
+Date: Thu, 6 Dec 2018 07:19:08 +0000
+Subject: [PATCH] OTHER: fix c++ client dangling reference
+
+On #xmm2 Chewi reported c++/tut7 to be broken at start:
+
+```
+GLib-WARNING **: glib-2.56.2/glib/giounix.c:410
+Error while getting flags for FD: Bad file descriptor (9)
+```
+
+valgrind shows the problem as read of uninitialized data:
+
+```
+$ valgrind ./tut7
+
+==32268== Conditional jump or move depends on uninitialised value(s)
+==32268== at 0x49DC36B: xmmsc_mainloop_gmain_init (xmmsclient-glib.c:80)
+==32268== by 0x49E11BE: Xmms::GMainloop::GMainloop(xmmsc_connection_St*) (xmmsclient++-glib.cpp:11)
+==32268== by 0x10C64D: main (in /home/slyfox/dev/git/xmms2-devel/doc/tutorial/c++/tut7)
+==32268== Uninitialised value was created by a stack allocation
+==32268== at 0x49E119A: Xmms::GMainloop::GMainloop(xmmsc_connection_St*) (xmmsclient++-glib.cpp:8)
+```
+
+This happens due to use of dangling C++ reference to stack variable:
+
+```
+// somewhere in src/include/xmmsclient/xmmsclient++/mainloop.h
+class MainloopInterface {
+ MainloopInterface( xmmsc_connection_t* conn ) :
+ running_( false ), conn_( conn ) { }
+ protected:
+ bool running_;
+ xmmsc_connection_t*& conn_;
+}
+```
+
+Note: `conn_` refers to dangling local variable of
+`MainloopInterface::MainloopInterface` constructor.
+
+The fix is to pass through pointer reference.
+`MainLoop::MainLoop()` already does it.
+
+Reported-by: James Le Cuirot
+Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>
+---
+ src/include/xmmsclient/xmmsclient++/mainloop.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/include/xmmsclient/xmmsclient++/mainloop.h b/src/include/xmmsclient/xmmsclient++/mainloop.h
+index de97e20d..268ca6f7 100644
+--- a/src/include/xmmsclient/xmmsclient++/mainloop.h
++++ b/src/include/xmmsclient/xmmsclient++/mainloop.h
+@@ -41,7 +41,7 @@ namespace Xmms
+ * @note The constructor should only initialize the
+ * mainloop, not start it!
+ */
+- MainloopInterface( xmmsc_connection_t* conn ) :
++ MainloopInterface( xmmsc_connection_t*& conn ) :
+ running_( false ), conn_( conn ) { }
+
+ /** Destructor. Should also stop the loop.
+--
+2.19.2
+
diff --git a/media-sound/xmms2/xmms2-0.8_p20161122-r5.ebuild b/media-sound/xmms2/xmms2-0.8_p20161122-r5.ebuild
new file mode 100644
index 000000000000..d6d2392bada7
--- /dev/null
+++ b/media-sound/xmms2/xmms2-0.8_p20161122-r5.ebuild
@@ -0,0 +1,300 @@
+# Copyright 1999-2018 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=6
+
+PYTHON_COMPAT=( python{2_7,3_4,3_5,3_6} )
+USE_RUBY="ruby23 ruby24 ruby25"
+
+inherit eutils multiprocessing python-single-r1 ruby-single toolchain-funcs
+
+# generated as 'python2 ./utils/gen-tarball.py' from clean git tree
+MY_P="${P%_p*}DrO_o-949-gca15e830"
+
+DESCRIPTION="X(cross)platform Music Multiplexing System. Next generation of the XMMS player"
+HOMEPAGE="https://xmms2.org/wiki/Main_Page"
+#SRC_URI="mirror://sourceforge/${PN}/${MY_P}.tar.bz2"
+SRC_URI="https://dev.gentoo.org/~slyfox/distfiles/${MY_P}.tar.bz2"
+LICENSE="GPL-2 LGPL-2.1"
+
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~ppc ~x86"
+
+IUSE="aac airplay +alsa ao asf cdda curl cxx ffmpeg flac fluidsynth ices
+jack mac mlib-update mms +mad modplug mp3 mp4 musepack ofa opus oss
+perl phonehome pulseaudio python ruby samba +server sid sndfile speex
+test valgrind +vorbis vocoder wavpack xml zeroconf"
+
+RDEPEND="server? (
+ >=dev-db/sqlite-3.3.4
+
+ aac? ( >=media-libs/faad2-2.0 )
+ airplay? ( dev-libs/openssl:0= )
+ alsa? ( media-libs/alsa-lib )
+ ao? ( media-libs/libao )
+ cdda? ( dev-libs/libcdio-paranoia
+ >=media-libs/libdiscid-0.1.1
+ >=media-sound/cdparanoia-3.9.8 )
+ curl? ( >=net-misc/curl-7.15.1 )
+ ffmpeg? ( virtual/ffmpeg )
+ flac? ( media-libs/flac )
+ fluidsynth? ( media-sound/fluidsynth )
+ ices? ( media-libs/libogg
+ media-libs/libshout
+ media-libs/libvorbis )
+ jack? ( virtual/jack )
+ mac? ( media-sound/mac )
+ mms? ( virtual/ffmpeg
+ >=media-libs/libmms-0.3 )
+ modplug? ( media-libs/libmodplug )
+ mad? ( media-libs/libmad )
+ mp3? ( >=media-sound/mpg123-1.5.1 )
+ musepack? ( media-sound/musepack-tools )
+ ofa? ( media-libs/libofa )
+ opus? ( media-libs/opus
+ media-libs/opusfile )
+ pulseaudio? ( media-sound/pulseaudio )
+ samba? ( >=net-fs/samba-4.2 )
+ sid? ( media-sound/sidplay
+ media-libs/resid )
+ sndfile? ( media-libs/libsndfile )
+ speex? ( media-libs/speex
+ media-libs/libogg )
+ vorbis? ( media-libs/libvorbis )
+ vocoder? ( sci-libs/fftw:3.0= media-libs/libsamplerate )
+ wavpack? ( media-sound/wavpack )
+ xml? ( dev-libs/libxml2 )
+ zeroconf? ( net-dns/avahi[mdnsresponder-compat] )
+ )
+
+ >=dev-libs/glib-2.12.9
+ cxx? ( >=dev-libs/boost-1.32 )
+ perl? ( >=dev-lang/perl-5.8.8 )
+ python? ( ${PYTHON_DEPS} )
+ ruby? ( ${RUBY_DEPS} )
+"
+
+DEPEND="${RDEPEND}
+ dev-lang/python
+ virtual/pkgconfig
+ perl? ( dev-perl/Module-Build
+ virtual/perl-Module-Metadata )
+ python? ( >=dev-python/cython-0.15.1
+ dev-python/pyrex )
+ test? ( dev-util/cunit
+ valgrind? ( dev-util/valgrind ) )
+"
+
+REQUIRED_USE="${PYTHON_REQUIRED_USE}"
+
+S="${WORKDIR}/${MY_P}"
+
+pkg_setup() {
+ # used both for building xmms2 and
+ # optionally linking client library
+ # against python
+ python-single-r1_pkg_setup
+}
+
+# use_enable() is taken as proto
+# $1 - useflag
+# $2 - xmms2 option/plugin name (equals to $1 if not set)
+
+xmms2_flag() {
+ [[ -z $1 ]] && eerror "!!! empty arg. usage: xmms2_flag <USEFLAG> [<xmms2_flagname>]."
+
+ local UWORD=${2:-$1}
+
+ case $1 in
+ ENABLED)
+ echo ",${UWORD}"
+ ;;
+ DISABLED)
+ ;;
+ *)
+ use $1 && echo ",${UWORD}"
+ ;;
+ esac
+}
+
+src_prepare() {
+ ./waf # inflate waf
+ cd .waf* || die
+ # needs port
+ #epatch "${FILESDIR}/${PN}"-0.8DrO_o-waflib-fix-perl.patch #578778
+ eapply "${FILESDIR}/${PN}"-0.8_p20161122-perl-no-local.patch
+ cd "${S}"
+
+ eapply "${FILESDIR}/${PN}"-0.8-ffmpeg2.patch #536232
+
+ eapply "${FILESDIR}/${PN}"-0.8-rtvg.patch #424377
+
+ # required to build tarball from git tree
+ eapply "${FILESDIR}/${P}"-tarball.patch
+
+ # fix hash to be the same on LE/BE platforms
+ eapply "${FILESDIR}/${P}"-be-hash.patch
+
+ # handle mac-3 -> -4 API change
+ eapply "${FILESDIR}/${P}"-mac-4.patch
+
+ # C++ client dangling reference: https://github.com/xmms2/xmms2-devel/pull/5
+ eapply "${FILESDIR}/${P}"-cpp-client.patch
+
+ eapply_user
+}
+
+src_configure() {
+ # ./configure alike options.
+ local waf_params="--prefix=/usr \
+ --libdir=/usr/$(get_libdir) \
+ --with-target-platform=${CHOST} \
+ --mandir=/usr/share/man \
+ --infodir=/usr/share/info \
+ --datadir=/usr/share \
+ --sysconfdir=/etc \
+ --localstatedir=/var/lib"
+
+ local optionals=""
+ local plugins=""
+ if ! use server ; then
+ waf_params+=" --without-xmms2d"
+ else
+ # some fun static mappings:
+ local option_map=( # USE # sorted xmms2 option flag (same, as USE if empty)
+ "phonehome et"
+ "ENABLED launcher"
+ "mlib-update medialib-updater"
+ "ENABLED nycli"
+ " perl"
+ "ENABLED pixmaps"
+ " python"
+ " ruby"
+ "DISABLED tests"
+ "DISABLED vistest"
+ "cxx xmmsclient++"
+ "cxx xmmsclient++-glib"
+ "DISABLED xmmsclient-cf"
+ "DISABLED xmmsclient-ecore" # not in tree
+
+ "test tests"
+ )
+
+ local plugin_map=( # USE # sorted xmms2 plugin flag (same, as USE if empty)
+ " alsa"
+ " airplay"
+ " ao"
+ "ffmpeg apefile"
+ "ffmpeg avcodec"
+ " asf"
+ "ENABLED asx"
+ " cdda"
+ "DISABLED coreaudio" # MacOS only?
+ " curl"
+ "ENABLED cue"
+ "zeroconf daap"
+ "ENABLED diskwrite"
+ "ENABLED equalizer"
+ "aac faad"
+ "ENABLED file"
+ " flac"
+ " fluidsynth"
+ "ffmpeg flv"
+ "ffmpeg tta"
+ "DISABLED gme" # not in tree
+ "DISABLED gvfs" # obsolete #647604
+ "ENABLED html"
+ " ices"
+ "ENABLED icymetaint"
+ "ENABLED id3v2"
+ " jack"
+ "ENABLED karaoke"
+ "ENABLED m3u"
+ " mac"
+ " mms"
+ " mad"
+ "ENABLED midsquash"
+ " mp4" # bug #387961 (aac, mp3, ape can sit there)
+ "mp3 mpg123"
+ " modplug"
+ " musepack"
+ "DISABLED nms" # not in tree
+ "ENABLED normalize"
+ "ENABLED null"
+ "ENABLED nulstripper"
+ " ofa"
+ " opus"
+ " oss"
+ "ENABLED pls"
+ "pulseaudio pulse"
+ "ENABLED replaygain"
+ "xml rss"
+ " samba"
+ "DISABLED sc68" #not in tree
+ " sid"
+ " sndfile"
+ " speex"
+ "DISABLED sun" # {Open,Net}BSD only
+ "DISABLED tremor" # not in tree
+ " vorbis"
+ " vocoder"
+ "ffmpeg tta"
+ "ENABLED wave"
+ "DISABLED waveout" # windows only
+ " wavpack"
+ "xml xspf"
+ "ENABLED xml"
+ )
+
+ local option
+ for option in "${option_map[@]}"; do
+ optionals+=$(xmms2_flag $option)
+ done
+
+ local plugin
+ for plugin in "${plugin_map[@]}"; do
+ plugins+=$(xmms2_flag $plugin)
+ done
+ fi # ! server
+
+ # pass them explicitely even if empty as we try to avoid magic deps
+ waf_params+=" --with-optionals=${optionals:1}" # skip first ',' if yet
+ waf_params+=" --with-plugins=${plugins:1}"
+ waf_params+=" $(use_with valgrind)"
+
+ CC="$(tc-getCC)" \
+ CPP="$(tc-getCPP)" \
+ AR="$(tc-getAR)" \
+ RANLIB="$(tc-getRANLIB)" \
+ CXX="$(tc-getCXX)" \
+ ./waf configure ${waf_params} || die "'waf configure' failed"
+}
+
+src_compile() {
+ # waf is very keen to run tests in build phase (bug #424377) but
+ # it does not bother running tests twice, so the hack below works:
+ ./waf --verbose build || ./waf --verbose build || die "waf build failed"
+}
+
+src_test() {
+ # rerun tests
+ ./waf --alltests || die "waf --alltests failed"
+}
+
+src_install() {
+ ./waf --without-ldconfig --destdir="${D}" install || die "'waf install' failed"
+ dodoc AUTHORS TODO
+}
+
+pkg_postinst() {
+ elog "This version is built on experimental development code"
+ elog "If you encounter any errors report them at https://bugs.xmms2.org"
+ elog "and visit #xmms2 at irc://irc.freenode.net"
+ if use phonehome ; then
+ einfo ""
+ einfo "The phone-home client xmms2-et was activated"
+ einfo "This client sends anonymous usage-statistics to the xmms2"
+ einfo "developers which may help finding bugs"
+ einfo "Disable the phonehome useflag if you don't like that"
+ fi
+}