[nogravity] Fix crash when loading level 5 (rhbz#768754)

Hans de Goede jwrdegoede at fedoraproject.org
Wed Apr 11 14:57:15 UTC 2012


commit 76666b73ea54cf701ee83dd970a440125e2d02df
Author: Hans de Goede <hdegoede at redhat.com>
Date:   Wed Apr 11 17:00:41 2012 +0200

    Fix crash when loading level 5 (rhbz#768754)

 0001-v3xscene-Remove-some-unused-code.patch    |  330 ++++++++++++++++++++++++
 0002-rlx32-Stop-using-MaxExtentableObjet.patch |  105 ++++++++
 nogravity.spec                                 |    9 +-
 3 files changed, 443 insertions(+), 1 deletions(-)
---
diff --git a/0001-v3xscene-Remove-some-unused-code.patch b/0001-v3xscene-Remove-some-unused-code.patch
new file mode 100644
index 0000000..f10614f
--- /dev/null
+++ b/0001-v3xscene-Remove-some-unused-code.patch
@@ -0,0 +1,330 @@
+From 869d7eb1e78cf54d773f79f6125446a2bd760bcf Mon Sep 17 00:00:00 2001
+From: Hans de Goede <hdegoede at redhat.com>
+Date: Wed, 11 Apr 2012 16:35:49 +0200
+Subject: [PATCH 1/2] v3xscene: Remove some unused code
+
+And mark some private helpers as such.
+
+Signed-off-by: Hans de Goede <hdegoede at redhat.com>
+---
+ rlx32/include/v3xscene.h |    7 --
+ rlx32/src/v3xscen2.c     |  232 ++--------------------------------------------
+ 2 files changed, 7 insertions(+), 232 deletions(-)
+
+diff --git a/rlx32/include/v3xscene.h b/rlx32/include/v3xscene.h
+index aef9f0a..a3bc057 100644
+--- a/rlx32/include/v3xscene.h
++++ b/rlx32/include/v3xscene.h
+@@ -348,13 +348,6 @@ struct _gx_viewport;
+ 
+ __extern_c
+ //
+-_RLXEXPORTFUNC V3XORI RLXAPI *V3XScene_NewORI(V3XSCENE *Scene);
+-_RLXEXPORTFUNC V3XOVI	RLXAPI *V3XScene_NewOVI(V3XSCENE *Scene);
+-_RLXEXPORTFUNC V3XTVI RLXAPI *V3XScene_NewTVI(V3XSCENE *Scene);
+-_RLXEXPORTFUNC V3XTRI RLXAPI *V3XScene_NewTRI(V3XSCENE *Scene);
+-_RLXEXPORTFUNC V3XOVI RLXAPI *V3XScene_NewObject(V3XSCENE *Scene, u_int32_t flags);
+-_RLXEXPORTFUNC int RLXAPI V3XScene_ReleaseObject(V3XSCENE *Scene, V3XOVI *OVI, u_int32_t flags);
+-//
+ _RLXEXPORTFUNC int RLXAPI V3XScene_Type_Counts(V3XSCENE *Scene, int type);
+ _RLXEXPORTFUNC V3XOVI RLXAPI *V3XScene_Type_GetByIndex(V3XSCENE *Scene, int index_OVI, int type);
+ _RLXEXPORTFUNC V3XOVI RLXAPI *V3XScene_Camera_GetByName(V3XSCENE *Scene, const char *name);
+diff --git a/rlx32/src/v3xscen2.c b/rlx32/src/v3xscen2.c
+index 643a187..01ae513 100644
+--- a/rlx32/src/v3xscen2.c
++++ b/rlx32/src/v3xscen2.c
+@@ -159,7 +159,7 @@ void RLXAPI static V3x_Create_TVI(V3XTVI  *TVI, int i)
+ * DESCRIPTION :
+ *
+ */
+-V3XORI RLXAPI *V3XScene_NewORI(V3XSCENE *pScene)
++static V3XORI RLXAPI *V3XScene_NewORI(V3XSCENE *pScene)
+ {
+     V3XORI *ORI = pScene->ORI;
+     int p;
+@@ -175,7 +175,7 @@ V3XORI RLXAPI *V3XScene_NewORI(V3XSCENE *pScene)
+ * Description :  
+ *
+ */
+-int RLXAPI V3XScene_ReleaseObject(V3XSCENE *pScene, V3XOVI *OVI, u_int32_t flags)
++static int RLXAPI V3XScene_ReleaseObject(V3XSCENE *pScene, V3XOVI *OVI, u_int32_t flags)
+ {
+     V3XORI *ORI = OVI->ORI;
+     ORI->type = V3XOBJ_NONE;
+@@ -196,7 +196,7 @@ int RLXAPI V3XScene_ReleaseObject(V3XSCENE *pScene, V3XOVI *OVI, u_int32_t flags
+ * DESCRIPTION :
+ *
+ */
+-V3XOVI RLXAPI *V3XScene_NewOVI(V3XSCENE *pScene)
++static V3XOVI RLXAPI *V3XScene_NewOVI(V3XSCENE *pScene)
+ {
+     V3XOVI *OVI = pScene->OVI;
+     int p;
+@@ -216,7 +216,7 @@ V3XOVI RLXAPI *V3XScene_NewOVI(V3XSCENE *pScene)
+ * DESCRIPTION :
+ *
+ */
+-V3XTRI * RLXAPI V3XScene_NewTRI(V3XSCENE *pScene)
++static V3XTRI * RLXAPI V3XScene_NewTRI(V3XSCENE *pScene)
+ {
+     V3XTRI *TRI = pScene->TRI;
+     int p;
+@@ -232,7 +232,7 @@ V3XTRI * RLXAPI V3XScene_NewTRI(V3XSCENE *pScene)
+ * DESCRIPTION :
+ *
+ */
+-V3XTVI * RLXAPI V3XScene_NewTVI(V3XSCENE *pScene)
++static V3XTVI * RLXAPI V3XScene_NewTVI(V3XSCENE *pScene)
+ {
+     V3XTVI *TVI = pScene->TVI;
+     int p;
+@@ -248,7 +248,7 @@ V3XTVI * RLXAPI V3XScene_NewTVI(V3XSCENE *pScene)
+ * DESCRIPTION :
+ *
+ */
+-V3XOVI *V3XScene_NewObject(V3XSCENE *pScene, u_int32_t flags)
++static V3XOVI *V3XScene_NewObject(V3XSCENE *pScene, u_int32_t flags)
+ {
+     V3XORI    *ORI;
+     V3XOVI *OVI;
+@@ -577,7 +577,7 @@ void RLXAPI static v3x_freeMorph3D(V3XTWEEN *mo)
+ * Description :  
+ *
+ */
+-void V3XLight_Release(V3XLIGHT *light)
++static void V3XLight_Release(V3XLIGHT *light)
+ {
+     if ((light->material)&&(light->flags&V3XLIGHTCAPS_LENZFLARE))
+     {
+@@ -774,116 +774,6 @@ void RLXAPI V3XScene_Release(V3XSCENE *pScene)
+ }
+ /*------------------------------------------------------------------------
+ *
+-* PROTOTYPE  : V3XSCENE* init_V3XSCENE(void)
+-*
+-* DESCRIPTION :
+-*
+-*/
+-V3XSCENE *V3XScene_New(int option)
+-{
+-    V3XSCENE *pScene;
+-    V3XTVI  *TVI;
+-    V3XTRI     *TRI;
+-    V3XOVI *OVI;
+-    V3XORI    *ORI;
+-    unsigned int i;
+-    pScene = (V3XSCENE*) MM_heap.malloc(sizeof(V3XSCENE));
+-    pScene->numOVI = (u_int16_t)V3X.Setup.MaxStartObjet;
+-    pScene->numTVI = (u_int16_t)V3X.Setup.MaxStartObjet;
+-    pScene->numTRI = (u_int16_t)V3X.Setup.MaxStartObjet;
+-    pScene->numORI = (u_int16_t)V3X.Setup.MaxStartObjet;
+-    if (V3X.Setup.MaxExtentableObjet<V3X.Setup.MaxStartObjet)
+-    V3X.Setup.MaxExtentableObjet=V3X.Setup.MaxStartObjet*2;
+-    pScene->ORI = (V3XORI*) MM_heap.malloc(V3X.Setup.MaxExtentableObjet*sizeof(V3XORI));
+-    pScene->OVI = (V3XOVI*) MM_heap.malloc(V3X.Setup.MaxExtentableObjet*sizeof(V3XOVI));
+-    pScene->TRI = (V3XTRI*) MM_heap.malloc(V3X.Setup.MaxExtentableObjet*sizeof(V3XTRI));
+-    pScene->TVI = (V3XTVI*) MM_heap.malloc(V3X.Setup.MaxExtentableObjet*sizeof(V3XTVI));
+-    for (ORI=pScene->ORI, i=0;i<V3X.Setup.MaxExtentableObjet;i++, ORI++)
+-    {
+-        switch(i) {
+-            case 0: if (option&V3XSCENE_NEWVIEWPORT)
+-            {
+-                sysMemZero(ORI, sizeof(V3XORI));
+-                sprintf(ORI->name, "viewport");
+-                OVI = V3XScene_NewOVI(pScene);
+-                OVI->ORI = ORI;
+-                ORI->type = V3XOBJ_VIEWPORT;
+-                ORI->mesh = (V3XMESH*) MM_heap.malloc(sizeof(V3XNODE));
+-                OVI->TVI = V3XScene_NewTVI(pScene);
+-                OVI->TVI->TRI = V3XScene_NewTRI(pScene);
+-            }
+-            else if (option&V3XSCENE_NEWNODES) V3x_Create_ORI(ORI, i);
+-            break;
+-            case 1: if (option&V3XSCENE_NEWCAMERA)
+-            {
+-                sysMemZero(ORI, sizeof(V3XORI));
+-                sprintf(ORI->name, "camera");
+-                OVI = V3XScene_NewOVI(pScene);
+-                OVI->ORI = ORI;
+-                ORI->type = V3XOBJ_CAMERA;
+-                ORI->mesh = (V3XMESH*) MM_heap.malloc(sizeof(V3XMESH));
+-                OVI->TVI = V3XScene_NewTVI(pScene);
+-                OVI->TVI->TRI = V3XScene_NewTRI(pScene);
+-            }
+-            else if (option&V3XSCENE_NEWNODES) V3x_Create_ORI(ORI, i);
+-            break;
+-            case 2: 
+-				if (option&V3XSCENE_NEWLIGHT)
+-            {
+-                sysMemZero(ORI, sizeof(V3XORI));
+-                sprintf(ORI->name, "light");
+-                OVI = V3XScene_NewOVI(pScene);
+-                OVI->ORI = ORI;
+-                ORI->type = V3XOBJ_LIGHT;
+-                ORI->light = (V3XLIGHT*) MM_heap.malloc(sizeof(V3XNODE));
+-                ORI->light->type = V3XLIGHTTYPE_DIRECTIONAL;
+-                ORI->light->intensity = 255.f;
+-                RGB_Set(ORI->light->color, 180, 180, 180);
+-                *OVI->node = *ORI->node;
+-                OVI->TVI = V3XScene_NewTVI(pScene);
+-                OVI->TVI->TRI = V3XScene_NewTRI(pScene);
+-            }
+-            else
+-            if (option&V3XSCENE_NEWNODES)
+-            {
+-                V3x_Create_ORI(ORI, i);
+-            }
+-            break;
+-            default:
+-            if (option&V3XSCENE_NEWOBJECTS) V3x_Create_ORI(ORI, i);
+-            else ORI->type = V3XOBJ_NONE;
+-            break;
+-        }
+-    }
+-    if (option&V3XSCENE_NEWKF)
+-    for (TVI=pScene->TVI, TRI=pScene->TRI, i=0;i<V3X.Setup.MaxExtentableObjet;i++, TRI++, TVI++)
+-    {
+-        V3x_Create_TVI(TVI, i);
+-        V3x_Create_TRI(TRI, i);
+-        TVI->TRI = TRI;
+-    }
+-    for (OVI=pScene->OVI, i=0;i<V3X.Setup.MaxExtentableObjet;i++, OVI++)
+-    {
+-        if (option&V3XSCENE_NEWOBJECTS)
+-        {
+-            if (!OVI->ORI)
+-            {
+-                V3x_Create_OVI(OVI, TRUE);
+-                if (option&V3XSCENE_NEWKF)
+-                OVI->TVI = pScene->TVI + i;
+-                OVI->ORI = pScene->ORI + i;
+-            }
+-        }
+-        OVI->state|=V3XSTATE_VALIDPOINTER;
+-    }
+-    if (option&V3XSCENE_NEWNODES)
+-    V3XScene_Validate(pScene);
+-    sysStrCpy(pScene->Layer.bg.filename, ".");
+-    pScene->Layer.bg.flags= V3XBG_BLACK;
+-    return pScene;
+-}
+-/*------------------------------------------------------------------------
+-*
+ * PROTOTYPE  : static void V3x_GetRenderBackground(V3XSCENE *pScene, char *res)
+ *
+ * DESCRIPTION :
+@@ -2103,111 +1993,3 @@ V3XOVI *V3XScene_Mesh_Merge(V3XSCENE *pScene, V3XMESH *mesh, const char *name)
+     sysStrCpy(ORI->name, name);
+     return OVI;
+ }
+-/*------------------------------------------------------------------------
+-*
+-* PROTOTYPE  :  V3XOVI *V3XOVI_InstanceOVI(V3XSCENE *pScene, V3XOVI *cOVI)
+-*
+-* Description :  
+-*
+-*/
+-V3XOVI *V3XOVI_InstanceOVI(V3XSCENE *pScene, V3XOVI *cOVI, int mode)
+-{
+-    V3XORI    *cORI = cOVI->ORI;
+-    V3XOVI *OVI = V3XScene_NewObject(pScene, (mode & 1) ? 6 : 2);
+-	V3XORI    *ORI = OVI->ORI;
+-	if (mode & 2)
+-	{
+-		V3XNODE *node = ORI->node;
+-		*ORI = *cORI;
+-		ORI->node = node;
+-        ORI->Cs = NULL;
+-		V3XMesh_Duplicate(OVI->mesh, cORI->mesh);
+-		ORI->flags|=V3XORI_DUPLICATED;
+-		OVI->index_INSTANCE = 0;
+-		*ORI->mesh = *OVI->mesh;
+-		sysStrCpy(ORI->name, cORI->name);
+-	}
+-	else
+-    if (mode & 1)
+-    {
+-        OVI->ORI = cORI;
+-        OVI->index_INSTANCE = 0;  
+-		OVI->state|=V3XSTATE_INSTANCED;
+-    }
+-    else
+-    {
+-		char tex[256];
+-        V3XORI *ORI = OVI->ORI;
+-		assert(cORI!=NULL);
+-        *ORI = *cORI;
+-        ORI->Cs = NULL;//cORI->Cs;  
+-        sprintf(tex, "%s~%x", cOVI->ORI->name, (unsigned)(OVI-pScene->OVI));
+-        sysStrnCpy(ORI->name, tex, 15);
+-        ORI->flags|=V3XORI_DUPLICATED|V3XORI_CSDUPLICATED;
+-        OVI->index_INSTANCE = cORI - pScene->ORI;  
+-		assert(OVI->ORI!=NULL);		
+-		OVI->state|=V3XSTATE_INSTANCED;
+-    }
+-    OVI->state|=V3XSTATE_VALIDPOINTER;
+-    return OVI;
+-}
+-/*------------------------------------------------------------------------
+-*
+-* PROTOTYPE  :  V3XOVI *V3XOVI_InstanceGroup(V3XSCENE *pScene, V3XOVI *cOVI)
+-*
+-* Description :
+-*
+-*/
+-V3XOVI *V3XOVI_InstanceGroup(V3XSCENE *pScene, V3XOVI *cOVI, int mode)
+-{
+-    V3XOVI **child = cOVI->child;
+-    V3XOVI *OVI;
+-    int n = 0;
+-	if (!child) V3XOVI_BuildChildren(cOVI, pScene);
+-	child = cOVI->child;
+-	
+-	while (*child!=NULL) {child++;n++;}	
+-    OVI = V3XOVI_InstanceOVI(pScene, cOVI, mode);
+-    OVI->parent = cOVI->parent;
+-    if (!n) n++;
+-    OVI->child = (V3XOVI **)MM_heap.malloc((n+1)*sizeof(V3XOVI **));
+-    for (n = 0, child = cOVI->child;*child!=NULL;child++, n++)
+-    {
+-        OVI->child[n] = V3XOVI_InstanceOVI(pScene, *child, mode);
+-    }
+-    OVI->child[n] = NULL;
+-    for (n = 0, child = cOVI->child;*child!=NULL;child++, n++)
+-    {
+-        OVI->child[n]->parent = OVI;
+-    }
+-    return OVI;
+-}
+-/*------------------------------------------------------------------------
+-*
+-* PROTOTYPE  :  void V3XOVI_Release(V3XSCENE *pScene, V3XOVI *OVI, int doChild)
+-*
+-* Description :  
+-*
+-*/
+-void V3XOVI_Release(V3XSCENE *pScene, V3XOVI *OVI, int doChild)
+-{
+-    int i = OVI - pScene->OVI;
+-    int j = OVI->ORI - pScene->ORI;
+-    if ((doChild)&&(OVI->child))
+-    {
+-        int n;
+-        V3XOVI **child = OVI->child;
+-        for (n = 0, child = OVI->child;*child!=NULL;child++, n++)
+-        {   
+-            V3XOVI *ch = *child;
+-            int k = ch->ORI - pScene->ORI;
+-            v3x_Destroy_OVI(pScene, ch - pScene->OVI);
+-            if (ch->ORI)
+-            v3x_Destroy_ORI(pScene, k);
+-        }  
+-    }
+-    v3x_Destroy_OVI(pScene, i);
+-    v3x_Destroy_ORI(pScene, j); 
+-    return;
+-}
+-
+-- 
+1.7.9.3
+
diff --git a/0002-rlx32-Stop-using-MaxExtentableObjet.patch b/0002-rlx32-Stop-using-MaxExtentableObjet.patch
new file mode 100644
index 0000000..09e90a5
--- /dev/null
+++ b/0002-rlx32-Stop-using-MaxExtentableObjet.patch
@@ -0,0 +1,105 @@
+From 1c6a4aaa01633ba09b05959c19e213b80bb071a2 Mon Sep 17 00:00:00 2001
+From: Hans de Goede <hdegoede at redhat.com>
+Date: Wed, 11 Apr 2012 16:45:52 +0200
+Subject: [PATCH 2/2] rlx32: Stop using MaxExtentableObjet
+
+MaxExtentableObjet was only used in a few places, and there its usage was
+wrong, since sometimes not enough elements were allocated, and we actually
+know how much we need to allocate!
+
+This fixes the crash reported here:
+https://bugzilla.redhat.com/show_bug.cgi?id=768754
+
+Signed-off-by: Hans de Goede <hdegoede at redhat.com>
+---
+ rlx32/include/v3xdefs.h |    2 +-
+ rlx32/src/v3x_2.c       |    1 -
+ rlx32/src/v3xscen2.c    |   25 ++++++++++++-------------
+ src/lithium.c           |    1 -
+ 4 files changed, 13 insertions(+), 16 deletions(-)
+
+diff --git a/rlx32/include/v3xdefs.h b/rlx32/include/v3xdefs.h
+index 5e9c33d..e4d423c 100644
+--- a/rlx32/include/v3xdefs.h
++++ b/rlx32/include/v3xdefs.h
+@@ -491,7 +491,7 @@ typedef struct _v3x_sceneSetup {
+     u_int32_t       flags;                  // flags
+     char        texturePath[256];
+     unsigned    MaxStartObjet;          // object of objects by default in a scene
+-    unsigned    MaxExtentableObjet;     // object maximum per scene
++    unsigned    Unused_but_do_not_remove;
+     void      (*add_poly)(void);        // callback before object processing
+ 	void      (*add_lights)(void);      // callback after processing lights
+     void      (*pre_render)(void);      // callback before polygons processing
+diff --git a/rlx32/src/v3x_2.c b/rlx32/src/v3x_2.c
+index 87f161c..428784e 100644
+--- a/rlx32/src/v3x_2.c
++++ b/rlx32/src/v3x_2.c
+@@ -281,7 +281,6 @@ int V3XKernel_Alloc(void)
+     V3X.ViewPort.minVisibleRadius =  2.f/600;
+     V3X.ViewPort.minTextureVisibleRadius = 4.f/600;
+     V3X.Setup.MaxStartObjet =  32;
+-    V3X.Setup.MaxExtentableObjet =  32;
+     V3X.Setup.pre_render =  v3x_NothingToAdd;
+     V3X.Setup.post_render =  v3x_NothingToAdd;
+     V3X.Setup.add_poly =  v3x_NothingToAdd;
+diff --git a/rlx32/src/v3xscen2.c b/rlx32/src/v3xscen2.c
+index 01ae513..439c61f 100644
+--- a/rlx32/src/v3xscen2.c
++++ b/rlx32/src/v3xscen2.c
+@@ -1627,28 +1627,27 @@ static void ReadSceneNodes(V3XSCENE *pScene, SYS_FILEHANDLE in, int bFormat97)
+     layer->tm.numFrames = 0;
+     layer->tm.firstFrame = 0;
+ 
+-    if (bFormat97)
+-		v3xORI_Convert97(pScene, in);
+-    else
+-                /* Note: not fixed for 64 bits, currently bFormat97 always is true */
+-		pScene->ORI = (V3XORI*)v3x_read_alloc(sizeof(V3XORI), pScene->numORI, V3X.Setup.MaxExtentableObjet, in);
+-    for (i=0;i<V3X.Setup.MaxExtentableObjet;i++)
++    if (!bFormat97) {
++        fprintf(stderr, "Fatal error non Format97 is NOT supported\n");
++        abort();
++    }
++
++    v3xORI_Convert97(pScene, in);
++
++    for (i=0;i<pScene->numORI;i++)
+     {
+         if (pScene->ORI[i].type == 0) 
+ 		pScene->ORI[i].type = V3XOBJ_NONE;
+     }
+-    if (bFormat97)
+-		v3xOVI_Convert97(pScene, in);
+-    else
+-                /* Note: not fixed for 64 bits, currently bFormat97 always is true */
+-		pScene->OVI = (V3XOVI*) v3x_read_alloc(sizeof(V3XOVI), pScene->numOVI, V3X.Setup.MaxExtentableObjet, in);
++
++    v3xOVI_Convert97(pScene, in);
+ 
+     /* Unfortunately we cannot directly read the structs from disk as
+        tkey contain (not used on disk) pointers, which on disk are 32 bit, but
+        may in reality be different (64 bits) */
+-    pScene->TRI = (V3XTRI*)MM_heap.malloc(V3X.Setup.MaxExtentableObjet * sizeof(V3XTRI));
++    pScene->TRI = (V3XTRI*)MM_heap.malloc(pScene->numTRI * sizeof(V3XTRI));
+     rawTRIs = (u_int32_t *)v3x_read_alloc(sizeof(u_int32_t), pScene->numTRI * 8, -1, in);
+-    pScene->TVI = (V3XTVI*)MM_heap.malloc(V3X.Setup.MaxExtentableObjet * sizeof(V3XTVI));
++    pScene->TVI = (V3XTVI*)MM_heap.malloc(pScene->numTVI * sizeof(V3XTVI));
+     rawTVIs = (u_int32_t *)v3x_read_alloc(sizeof(u_int32_t), pScene->numTVI * 4, -1, in);
+     /* copy the raw data to the in memory structs */
+     for (i = 0; i < pScene->numTVI; i++)
+diff --git a/src/lithium.c b/src/lithium.c
+index adb6a56..3027678 100644
+--- a/src/lithium.c
++++ b/src/lithium.c
+@@ -537,7 +537,6 @@ void STUB_ReadyToRun(void)
+ 	NG_SetGameInfo();
+ 	
+     V3X.Setup.flags|=V3XOPTION_COLLISION;
+-    V3X.Setup.MaxExtentableObjet = 200;
+     return;
+ }
+ /*------------------------------------------------------------------------
+-- 
+1.7.9.3
+
diff --git a/nogravity.spec b/nogravity.spec
index 7446663..bae8406 100644
--- a/nogravity.spec
+++ b/nogravity.spec
@@ -1,6 +1,6 @@
 Name:           nogravity
 Version:        2.00
-Release:        15%{?dist}
+Release:        16%{?dist}
 Summary:        Space shooter in 3D
 Group:          Amusements/Games
 License:        GPLv2+
@@ -24,6 +24,8 @@ Patch7:         nogravity--bufer-overflows.patch
 Patch8:         nogravity--strcpy-abuse.patch
 Patch9:         nogravity-2.00-rhbz699274.patch
 Patch10:        nogravity-2.00-libpng15.patch
+Patch11:        0001-v3xscene-Remove-some-unused-code.patch
+Patch12:        0002-rlx32-Stop-using-MaxExtentableObjet.patch
 Requires:       %{name}-data = %{version}
 BuildRequires:  SDL_mixer-devel openal-soft-devel libpng-devel libvorbis-devel
 BuildRequires:  automake desktop-file-utils
@@ -52,6 +54,8 @@ cp %{SOURCE6} ./src/Linux/configure.in
 %patch8 -p1 -b .strcpy
 %patch9 -p1
 %patch10 -p1
+%patch11 -p1
+%patch12 -p1
 sed -i 's/\r//g' GNU.TXT README.TXT
 pushd src/Linux
 sh bootstrap
@@ -109,6 +113,9 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
 
 
 %changelog
+* Wed Apr 11 2012 Hans de Goede <hdegoede at redhat.com> - 2.00-16
+- Fix crash when loading level 5 (rhbz#768754)
+
 * Fri Jan 13 2012 Fedora Release Engineering <rel-eng at lists.fedoraproject.org> - 2.00-15
 - Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild
 


More information about the scm-commits mailing list