[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