1
0
forked from pool/SDL_mixer

Accepting request 208073 from home:bmwiedemann:branches:games

- import patches from upstream (via archlinux)
  to fix mixer / mikmod free corruption (bnc#851996)

OBS-URL: https://build.opensuse.org/request/show/208073
OBS-URL: https://build.opensuse.org/package/show/games/SDL_mixer?expand=0&rev=27
This commit is contained in:
Matthias Mailänder 2013-11-23 19:39:49 +00:00 committed by Git OBS Bridge
parent ada85551b3
commit 19dc307ec7
5 changed files with 149 additions and 0 deletions

View File

@ -1,3 +1,9 @@
-------------------------------------------------------------------
Sat Nov 23 19:19:39 UTC 2013 - bwiedemann@suse.com
- import patches from https://projects.archlinux.org/svntogit/packages.git/tree/trunk?h=packages/sdl_mixer
to fix mixer / mikmod free corruption (bnc#851996)
-------------------------------------------------------------------
Tue Aug 13 12:04:26 UTC 2013 - jengelh@inai.de

View File

@ -27,6 +27,12 @@ Url: http://libsdl.org/projects/SDL_mixer/release-1.2.html
Source: http://libsdl.org/projects/SDL_mixer/release/%name-%version.tar.gz
Source1: baselibs.conf
# PATCH-FIX-UPSTREAM: http://hg.libsdl.org/SDL_mixer/rev/56cad6484b04
Patch1: mikmod1.patch
# PATCH-FIX-UPSTREAM: http://hg.libsdl.org/SDL_mixer/rev/2ebb0d016f27
Patch2: mikmod2.patch
# PATCH-FIX-UPSTREAM: http://hg.libsdl.org/SDL_mixer/rev/2d713670db9b
Patch3: double-free-crash.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-build
BuildRequires: flac-devel
BuildRequires: fluidsynth-devel
@ -75,6 +81,9 @@ Timidity MIDI, and SMPEG MP3 libraries.
%prep
%setup -q
%patch1 -p1
%patch2 -p1
%patch3 -p1
# remove unneccessary files from upstream tarball [bnc#508180] to clean up source RPM
rm libmikmod-3.1.12.zip
rm Watcom-OS2.zip

32
double-free-crash.patch Normal file
View File

@ -0,0 +1,32 @@
# HG changeset patch
# User Sam Lantinga <slouken@libsdl.org>
# Date 1329087437 18000
# Node ID 2d713670db9b832b0c5aa700824900bc1fc3c3cd
# Parent df72f22b4b411ad4b08f924329678aabd5ac97d6
Fixed 1418 - crash on double free if loading WAV file failed
diff -r df72f22b4b41 -r 2d713670db9b mixer.c
--- a/mixer.c Mon Jan 30 21:41:45 2012 -0500
+++ b/mixer.c Sun Feb 12 17:57:17 2012 -0500
@@ -610,13 +610,15 @@
break;
default:
SDL_SetError("Unrecognized sound file type");
- return(0);
+ if ( freesrc ) {
+ SDL_RWclose(src);
+ }
+ loaded = NULL;
+ break;
}
if ( !loaded ) {
+ /* The individual loaders have closed src if needed */
SDL_free(chunk);
- if ( freesrc ) {
- SDL_RWclose(src);
- }
return(NULL);
}

67
mikmod1.patch Normal file
View File

@ -0,0 +1,67 @@
# HG changeset patch
# User Sam Lantinga <slouken@libsdl.org>
# Date 1342998807 25200
# Node ID 56cad6484b04f83c8d42428c755a046678506436
# Parent c92001a2c18f628698c58aa4e05a7335d10d0e9e
Paul P Komkoff Jr fixed malloc/free mismatch in the MikMod driver
diff -r c92001a2c18f -r 56cad6484b04 CHANGES
--- a/CHANGES Sun Mar 04 21:32:47 2012 +0000
+++ b/CHANGES Sun Jul 22 16:13:27 2012 -0700
@@ -1,3 +1,7 @@
+1.2.13:
+Paul P Komkoff Jr - Sun Jul 22 16:12:28 PDT 2012
+ * Fixed malloc/free mismatch in the MikMod driver
+
1.2.12:
Sam Lantinga - Sat Jan 14 22:00:29 2012 -0500
* Fixed seek offset with SMPEG (was relative, should be absolute)
diff -r c92001a2c18f -r 56cad6484b04 dynamic_mod.c
--- a/dynamic_mod.c Sun Mar 04 21:32:47 2012 +0000
+++ b/dynamic_mod.c Sun Jul 22 16:13:27 2012 -0700
@@ -93,6 +93,13 @@
SDL_UnloadObject(mikmod.handle);
return -1;
}
+ mikmod.MikMod_free =
+ (void (*)(void*))
+ SDL_LoadFunction(mikmod.handle, "MikMod_free");
+ if ( mikmod.MikMod_free == NULL ) {
+ SDL_UnloadObject(mikmod.handle);
+ return -1;
+ }
mikmod.Player_Active =
(BOOL (*)(void))
SDL_LoadFunction(mikmod.handle, "Player_Active");
diff -r c92001a2c18f -r 56cad6484b04 dynamic_mod.h
--- a/dynamic_mod.h Sun Mar 04 21:32:47 2012 +0000
+++ b/dynamic_mod.h Sun Jul 22 16:13:27 2012 -0700
@@ -35,6 +35,7 @@
void (*MikMod_RegisterDriver)(struct MDRIVER*);
int* MikMod_errno;
char* (*MikMod_strerror)(int);
+ void (*MikMod_free)(void*);
BOOL (*Player_Active)(void);
void (*Player_Free)(MODULE*);
MODULE* (*Player_LoadGeneric)(MREADER*,int,BOOL);
diff -r c92001a2c18f -r 56cad6484b04 music_mod.c
--- a/music_mod.c Sun Mar 04 21:32:47 2012 +0000
+++ b/music_mod.c Sun Jul 22 16:13:27 2012 -0700
@@ -109,13 +109,13 @@
list = mikmod.MikMod_InfoDriver();
if ( list )
- free(list);
+ mikmod.MikMod_free(list);
else
mikmod.MikMod_RegisterDriver(mikmod.drv_nos);
list = mikmod.MikMod_InfoLoader();
if ( list )
- free(list);
+ mikmod.MikMod_free(list);
else
mikmod.MikMod_RegisterAllLoaders();

35
mikmod2.patch Normal file
View File

@ -0,0 +1,35 @@
# HG changeset patch
# User Sam Lantinga <slouken@libsdl.org>
# Date 1343000017 25200
# Node ID 2ebb0d016f277f7f643d8a66ed0e1099e10d1fba
# Parent 56cad6484b04f83c8d42428c755a046678506436
Fixed normal linking with libmikmod and linking with earlier versions of libmikmod.
diff -r 56cad6484b04 -r 2ebb0d016f27 dynamic_mod.c
--- a/dynamic_mod.c Sun Jul 22 16:13:27 2012 -0700
+++ b/dynamic_mod.c Sun Jul 22 16:33:37 2012 -0700
@@ -97,8 +97,8 @@
(void (*)(void*))
SDL_LoadFunction(mikmod.handle, "MikMod_free");
if ( mikmod.MikMod_free == NULL ) {
- SDL_UnloadObject(mikmod.handle);
- return -1;
+ /* libmikmod 3.1 and earlier doesn't have it */
+ mikmod.MikMod_free = free;
}
mikmod.Player_Active =
(BOOL (*)(void))
@@ -246,6 +246,11 @@
mikmod.MikMod_RegisterDriver = MikMod_RegisterDriver;
mikmod.MikMod_errno = &MikMod_errno;
mikmod.MikMod_strerror = MikMod_strerror;
+#if LIBMIKMOD_VERSION < ((3<<16)|(2<<8))
+ mikmod.MikMod_free = free;
+#else
+ mikmod.MikMod_free = MikMod_free;
+#endif
mikmod.Player_Active = Player_Active;
mikmod.Player_Free = Player_Free;
mikmod.Player_LoadGeneric = Player_LoadGeneric;