summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames Le Cuirot <chewi@gentoo.org>2021-09-05 18:08:20 +0100
committerJames Le Cuirot <chewi@gentoo.org>2021-09-05 18:09:10 +0100
commit66b0c1ea58b968df55f721e6af3046a6901caa59 (patch)
tree4feb09bf632ad85e4f688198baa35dbbb2dd7e66 /media-libs/sdl2-mixer
parentdev-lang/tk: Stabilize 8.6.11.1 arm, #806276 (diff)
downloadgentoo-66b0c1ea58b968df55f721e6af3046a6901caa59.tar.gz
gentoo-66b0c1ea58b968df55f721e6af3046a6901caa59.tar.bz2
gentoo-66b0c1ea58b968df55f721e6af3046a6901caa59.zip
media-libs/sdl2-mixer: Backport patch to fix FluidSynth memory issue
Signed-off-by: James Le Cuirot <chewi@gentoo.org>
Diffstat (limited to 'media-libs/sdl2-mixer')
-rw-r--r--media-libs/sdl2-mixer/files/sdl2-mixer-2.0.4-fluidsynth.patch30
-rw-r--r--media-libs/sdl2-mixer/sdl2-mixer-2.0.4-r1.ebuild125
2 files changed, 155 insertions, 0 deletions
diff --git a/media-libs/sdl2-mixer/files/sdl2-mixer-2.0.4-fluidsynth.patch b/media-libs/sdl2-mixer/files/sdl2-mixer-2.0.4-fluidsynth.patch
new file mode 100644
index 000000000000..cd740ac85c11
--- /dev/null
+++ b/media-libs/sdl2-mixer/files/sdl2-mixer-2.0.4-fluidsynth.patch
@@ -0,0 +1,30 @@
+From 6160668079f91d57a5d7bf0b40ffdd843be70daf Mon Sep 17 00:00:00 2001
+From: Sam Lantinga <slouken@libsdl.org>
+Date: Wed, 20 Jan 2021 10:17:10 -0800
+Subject: [PATCH] Fixed use-after-free in music_fluidsynth.c
+
+Tom M.
+
+There is a dangerous use-after-free in FLUIDSYNTH_Delete(): the settings object is deleted **before** the synth. Since the settings have been created first to initialize the synth, you must first delete the synth and then delete the settings. This currently crashes all applications that use fluidsynth 2.1.6 and SDL2_mixer. Please apply the attached patch and release a bug fix release.
+
+Originally reported at https://github.com/FluidSynth/fluidsynth/issues/748
+---
+ src/codecs/music_fluidsynth.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/src/codecs/music_fluidsynth.c b/src/codecs/music_fluidsynth.c
+index 8667f0d9..a47247f4 100644
+--- a/music_fluidsynth.c
++++ b/music_fluidsynth.c
+@@ -285,9 +285,10 @@ static void FLUIDSYNTH_Stop(void *context)
+ static void FLUIDSYNTH_Delete(void *context)
+ {
+ FLUIDSYNTH_Music *music = (FLUIDSYNTH_Music *)context;
++ fluid_settings_t *settings = fluidsynth.fluid_synth_get_settings(music->synth);
+ fluidsynth.delete_fluid_player(music->player);
+- fluidsynth.delete_fluid_settings(fluidsynth.fluid_synth_get_settings(music->synth));
+ fluidsynth.delete_fluid_synth(music->synth);
++ fluidsynth.delete_fluid_settings(settings);
+ SDL_free(music);
+ }
+
diff --git a/media-libs/sdl2-mixer/sdl2-mixer-2.0.4-r1.ebuild b/media-libs/sdl2-mixer/sdl2-mixer-2.0.4-r1.ebuild
new file mode 100644
index 000000000000..dcbbcee2dae0
--- /dev/null
+++ b/media-libs/sdl2-mixer/sdl2-mixer-2.0.4-r1.ebuild
@@ -0,0 +1,125 @@
+# Copyright 1999-2021 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+MY_P="SDL2_mixer-${PV}"
+inherit autotools multilib-minimal
+
+DESCRIPTION="Simple Direct Media Layer Mixer Library"
+HOMEPAGE="https://www.libsdl.org/projects/SDL_mixer/"
+SRC_URI="https://www.libsdl.org/projects/SDL_mixer/release/${MY_P}.tar.gz"
+
+LICENSE="ZLIB"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~ppc ~ppc64 ~sparc ~x86"
+IUSE="flac fluidsynth mad midi mikmod mod modplug mp3 opus playtools static-libs timidity tremor vorbis +wav"
+REQUIRED_USE="
+ midi? ( || ( timidity fluidsynth ) )
+ timidity? ( midi )
+ fluidsynth? ( midi )
+ mad? ( mp3 )
+ mod? ( || ( mikmod modplug ) )
+ mikmod? ( mod )
+ modplug? ( mod )
+ tremor? ( vorbis )
+"
+
+RDEPEND="
+ >=media-libs/libsdl2-2.0.7[${MULTILIB_USEDEP}]
+ flac? ( >=media-libs/flac-1.2.1-r5[${MULTILIB_USEDEP}] )
+ midi? (
+ fluidsynth? ( >=media-sound/fluidsynth-1.1.6-r1:=[${MULTILIB_USEDEP}] )
+ timidity? ( media-sound/timidity++ )
+ )
+ mod? (
+ mikmod? ( >=media-libs/libmikmod-3.3.6-r1[${MULTILIB_USEDEP}] )
+ modplug? ( >=media-libs/libmodplug-0.8.8.4-r1[${MULTILIB_USEDEP}] )
+ )
+ mp3? (
+ mad? ( >=media-libs/libmad-0.15.1b-r8[${MULTILIB_USEDEP}] )
+ !mad? ( media-sound/mpg123[${MULTILIB_USEDEP}] )
+ )
+ opus? ( >=media-libs/opusfile-0.2 )
+ vorbis? (
+ tremor? ( >=media-libs/tremor-0_pre20130223[${MULTILIB_USEDEP}] )
+ !tremor? (
+ >=media-libs/libvorbis-1.3.3-r1[${MULTILIB_USEDEP}]
+ >=media-libs/libogg-1.3.0[${MULTILIB_USEDEP}] )
+ )
+"
+DEPEND="${RDEPEND}"
+
+S="${WORKDIR}/${MY_P}"
+
+PATCHES=(
+ "${FILESDIR}/${PN}-2.0.4-slibtool.patch"
+ "${FILESDIR}/${PN}-2.0.4-fluidsynth.patch"
+)
+
+src_prepare() {
+ default
+
+ # for slibtool patch in 2.0.4, can drop in future with eautoreconf
+ rm aclocal.m4 || die
+ eautoreconf
+ multilib_copy_sources
+}
+
+multilib_src_configure() {
+ local myeconfargs=(
+ $(use_enable static-libs static)
+ --disable-sdltest
+ --enable-music-cmd
+ $(use_enable wav music-wave)
+ $(use_enable mod music-mod)
+ $(use_enable modplug music-mod-modplug)
+ --disable-music-mod-modplug-shared
+ $(use_enable mikmod music-mod-mikmod)
+ --disable-music-mod-mikmod-shared
+ $(use_enable midi music-midi)
+ $(use_enable timidity music-midi-timidity)
+ $(use_enable fluidsynth music-midi-fluidsynth)
+ --disable-music-midi-fluidsynth-shared
+ $(use_enable vorbis music-ogg)
+ $(use_enable tremor music-ogg-tremor)
+ --disable-music-ogg-shared
+ $(use_enable flac music-flac)
+ --disable-music-flac-shared
+ $(use_enable mp3 music-mp3)
+ $(use_enable !mad music-mp3-mpg123)
+ --disable-music-mp3-mpg123-shared
+ $(use_enable mad music-mp3-mad-gpl)
+ $(use_enable opus music-opus)
+ --disable-music-opus-shared
+ LIBMIKMOD_CONFIG=${EPREFIX}/usr/bin/${CHOST}-libmikmod-config
+ )
+ ECONF_SOURCE=${S} econf "${myeconfargs[@]}"
+}
+
+multilib_src_install() {
+ emake DESTDIR="${D}" install
+ if multilib_is_native_abi && use playtools ; then
+ emake DESTDIR="${D}" install-bin
+ fi
+}
+
+multilib_src_install_all() {
+ dodoc {CHANGES,README}.txt
+ find "${D}" -name '*.la' -delete || die
+}
+
+pkg_postinst() {
+ # bug 412035
+ # https://bugs.gentoo.org/show_bug.cgi?id=412035
+ if use midi && use fluidsynth; then
+ ewarn "FluidSynth support requires you to set the SDL_SOUNDFONTS"
+ ewarn "environment variable to the location of a SoundFont file"
+ ewarn "unless the game or application happens to do this for you."
+ if use timidity; then
+ ewarn "Failing to do so will result in Timidity being used instead."
+ else
+ ewarn "Failing to do so will result in silence."
+ fi
+ fi
+}