[njam] Fix a crash on a very long SDL_VIDEODRIVER env variable (rhbz#767015)

Hans de Goede jwrdegoede at fedoraproject.org
Tue Dec 13 19:37:31 UTC 2011


commit 9b94e228129c7b70d2c27d828e058df18e86d742
Author: Hans de Goede <hdegoede at redhat.com>
Date:   Tue Dec 13 20:38:49 2011 +0100

    Fix a crash on a very long SDL_VIDEODRIVER env variable (rhbz#767015)

 njam-1.25-rhbz767015.patch |  100 ++++++++++++++++++++++++++++++++++++++++++++
 njam.spec                  |   28 ++++++-------
 2 files changed, 113 insertions(+), 15 deletions(-)
---
diff --git a/njam-1.25-rhbz767015.patch b/njam-1.25-rhbz767015.patch
new file mode 100644
index 0000000..955d3df
--- /dev/null
+++ b/njam-1.25-rhbz767015.patch
@@ -0,0 +1,100 @@
+diff -up njam-1.25-src/src/njam.cpp~ njam-1.25-src/src/njam.cpp
+--- njam-1.25-src/src/njam.cpp~	2011-12-13 20:18:40.000000000 +0100
++++ njam-1.25-src/src/njam.cpp	2011-12-13 20:29:08.795427328 +0100
+@@ -55,7 +55,6 @@ int main(int argc, char *argv[])
+ {
+  	bool Fullscreen = true;
+  	bool SWSurface = true;
+-	bool UseDGA = false;
+ 	gid_t realgid;
+ 	
+ 	highscore_fp = fopen("/var/lib/games/njam.hs", "r+");
+@@ -76,8 +75,6 @@ int main(int argc, char *argv[])
+ 					Fullscreen = false;	// use njam.exe -w windowed mode
+ 				else if (argv[i][1] == 'h')
+ 					SWSurface = false;	// use -h for hardware surfaces
+-				else if (argv[i][1] == 'd')
+-					UseDGA = true;
+ 				else
+ 					ok = false;
+ 			}
+@@ -89,7 +86,6 @@ int main(int argc, char *argv[])
+ 				printf("Usage:  njam -[w|d|h]\n\n");
+ 				printf("-w  start in Windowed mode (as opposed to fullscreen).\n");;
+ 				printf("-h  use Hardware surfaces (faster, doesn't work well with all graphic cards).\n");
+-				printf("-d  use DGA driver on Linux, (much faster, but must run as root).\n");
+ 				return 1;
+ 			}
+ 		}
+@@ -118,7 +114,7 @@ int main(int argc, char *argv[])
+ #endif
+ 
+ 	NjamEngine Engine;
+-	if (!Engine.Init(Fullscreen, SWSurface, UseDGA))
++	if (!Engine.Init(Fullscreen, SWSurface))
+ 	{
+ 		LogFile("Failed.\n");
+ 		return 1;
+@@ -171,12 +167,6 @@ NjamEngine::NjamEngine()
+ //-----------------------------------------------------------------------------
+ NjamEngine::~NjamEngine()
+ {
+-#ifdef __linux__
+-	char bufsdl[30];
+-	sprintf(bufsdl, "SDL_VIDEODRIVER=%s", linux_sdl_driver);
+-	putenv(bufsdl);
+-#endif
+-
+  	if (script_file)
+ 		fclose(script_file);
+ 
+@@ -345,7 +335,7 @@ void NjamEngine::DoScript(void)		// load
+     }
+ }
+ //-----------------------------------------------------------------------------
+-bool NjamEngine::Init(bool Fullscreen, bool SoftwareSurface, bool UseDGA)
++bool NjamEngine::Init(bool Fullscreen, bool SoftwareSurface)
+ {
+ #ifdef __linux__
+ 	// Check if $HOME/.njam-levels exists and if it doesn't create it
+@@ -353,20 +343,6 @@ bool NjamEngine::Init(bool Fullscreen, b
+ 	char *home = NjamGetHomeDir();
+ 	snprintf(buf, sizeof(buf), "%s/.njam-levels", home? home:"");
+ 	NjamCheckAndCreateDir(buf);
+-	
+-	sprintf(linux_sdl_driver, "x11\0");
+-	char *driver_name = getenv("SDL_VIDEODRIVER");
+-	if (driver_name)
+-		sprintf(linux_sdl_driver, "%s\0", driver_name);
+-
+-	if (UseDGA)
+-	{
+-		printf("You must be root to run DGA\nType ./njam -? for help\n");
+-		putenv("SDL_VIDEODRIVER=dga");
+-	}
+-#else
+-	if (UseDGA)
+-		printf("Parameter -d is ignored for non-Linux platforms.\n");
+ #endif
+ 
+  	LogFile("Initializing SDL: VIDEO & AUDIO...", true);
+diff -up njam-1.25-src/src/njam.h~ njam-1.25-src/src/njam.h
+--- njam-1.25-src/src/njam.h~	2011-12-13 20:18:40.000000000 +0100
++++ njam-1.25-src/src/njam.h	2011-12-13 20:29:31.131148076 +0100
+@@ -112,7 +112,6 @@ private:
+ 
+  	bool m_SDL;						// whether SDL is initialized or not
+ 	bool m_AudioAvailable;			// so we know wheter to try to play music/sfx
+-	char linux_sdl_driver[10];
+ 	SDL_Surface *m_Screen;
+ 
+ 	tGameOptions m_GameOptions;
+@@ -202,7 +201,7 @@ private:
+ public:
+ 	NjamEngine();
+ 	~NjamEngine();
+-	bool Init(bool,bool,bool);				// initialize everything except for networking
++	bool Init(bool,bool);				// initialize everything except for networking
+ 	void Start();					// start the music and main menu loop
+ };
+ //-----------------------------------------------------------------------------
diff --git a/njam.spec b/njam.spec
index b024f46..a9c76a4 100644
--- a/njam.spec
+++ b/njam.spec
@@ -1,6 +1,6 @@
 Name:           njam
 Version:        1.25
-Release:        13%{?dist}
+Release:        14%{?dist}
 Summary:        Maze-game, eat all the cookies while avoiding the badguys
 Group:          Amusements/Games
 License:        GPLv2+
@@ -15,7 +15,7 @@ Patch0:         njam-1.25-drop-setgid.patch
 Patch1:         njam-1.25-html.patch
 Patch2:         njam-1.25-leveledit.patch
 Patch3:         njam-1.25-gcc45.patch
-BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
+Patch4:         njam-1.25-rhbz767015.patch
 BuildRequires:  SDL-devel SDL_mixer-devel SDL_image-devel SDL_net-devel 
 BuildRequires:  ImageMagick desktop-file-utils
 Requires:       hicolor-icon-theme 
@@ -34,6 +34,7 @@ level skins, many different levels and an integrated level editor.
 %patch1 -p1
 %patch2 -p1 -z .leveledit
 %patch3 -p1
+%patch4 -p1
 
 
 %build
@@ -43,7 +44,6 @@ convert -transparent black njamicon.ico %{name}.png
 
 
 %install
-rm -rf $RPM_BUILD_ROOT
 make install DESTDIR=$RPM_BUILD_ROOT
 
 # make install installs the docs under /usr/share/njam. We want them in %doc.
@@ -74,25 +74,20 @@ install -p -m 644 %{name}.png \
   $RPM_BUILD_ROOT%{_datadir}/icons/hicolor/32x32/apps
 
 
-%clean
-rm -rf $RPM_BUILD_ROOT
-
-
 %post
-touch --no-create %{_datadir}/icons/hicolor || :
-if [ -x %{_bindir}/gtk-update-icon-cache ]; then
-   %{_bindir}/gtk-update-icon-cache --quiet %{_datadir}/icons/hicolor || :
-fi
+touch --no-create %{_datadir}/icons/hicolor &>/dev/null || :
 
 %postun
-touch --no-create %{_datadir}/icons/hicolor || :
-if [ -x %{_bindir}/gtk-update-icon-cache ]; then
-   %{_bindir}/gtk-update-icon-cache --quiet %{_datadir}/icons/hicolor || :
+if [ $1 -eq 0 ] ; then
+    touch --no-create %{_datadir}/icons/hicolor &>/dev/null
+    gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
 fi
 
+%posttrans
+gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
+
 
 %files
-%defattr(-,root,root,-)
 %doc COPYING ChangeLog NEWS README TODO levels/readme.txt html
 %attr(2755,root,games) %{_bindir}/%{name}
 %{_datadir}/%{name}
@@ -103,6 +98,9 @@ fi
 
 
 %changelog
+* Tue Dec 11 2011 Hans de Goede <hdegoede at redhat.com> - 1.25-14
+- Fix a crash on a very long SDL_VIDEODRIVER env variable (rhbz#767015)
+
 * Tue Feb 08 2011 Fedora Release Engineering <rel-eng at lists.fedoraproject.org> - 1.25-13
 - Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild
 


More information about the scm-commits mailing list