File jumpnbump-1.50-Use-safe-temporary-files.diff of Package jumpnbump
From 8b6432e02528b6908fe6acaba7ad29027b7c7564 Mon Sep 17 00:00:00 2001
From: Ansgar Burchardt <ansgar-guest@alioth.debian.org>
Date: Mon, 8 Dec 2008 01:33:13 +0100
Subject: [PATCH 2/8] Use safe temporary files
This may break Jump'n'bump on Windows. Maybe the patch should be
cleaned up a bit.
see http://bugs.debian.org/500611
---
modify/jnbunpack.c | 8 +++++++-
sdl/sound.c | 28 ++++++++++++++++++----------
2 files changed, 25 insertions(+), 11 deletions(-)
diff --git a/modify/jnbunpack.c b/modify/jnbunpack.c
index de7c851..aa55d79 100644
--- a/modify/jnbunpack.c
+++ b/modify/jnbunpack.c
@@ -23,6 +23,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
+#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
@@ -83,8 +84,13 @@ int main(int argc, char **argv)
memset(filename, 0, sizeof(filename));
strncpy(filename, datafile[i].filename, 12);
printf("Extracting %s ", filename);
+ fflush(stdout);
- outfd = open(filename, O_RDWR | O_CREAT | O_BINARY, 0644);
+ if (unlink(filename) == -1 && errno != ENOENT) {
+ perror("cannot unlink file");
+ exit(1);
+ }
+ outfd = open(filename, O_RDWR | O_CREAT | O_EXCL | O_BINARY, 0644);
if (!outfd) {
perror("cant open file");
exit(1);
diff --git a/sdl/sound.c b/sdl/sound.c
index 886d4b0..c6d129f 100644
--- a/sdl/sound.c
+++ b/sdl/sound.c
@@ -23,6 +23,8 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
+#include <stdlib.h>
+#include <string.h>
#include "globals.h"
#include <limits.h>
#ifndef _MSC_VER
@@ -463,11 +465,8 @@ char dj_ready_mod(char mod_num)
{
#ifndef NO_SDL_MIXER
FILE *tmp;
-# if ((defined _MSC_VER) || (defined __MINGW32__))
- char filename[] = "jnb.tmpmusic.mod";
-# else
- char filename[] = "/tmp/jnb.tmpmusic.mod";
-# endif
+ int tmp_fd;
+ char* filename;
unsigned char *fp;
int len;
@@ -506,15 +505,24 @@ char dj_ready_mod(char mod_num)
return 0;
}
- tmp = fopen(filename, "wb");
- if (tmp) {
- fwrite(fp, len, 1, tmp);
- fflush(tmp);
- fclose(tmp);
+ filename = strdup("/tmp/jumpnbump.mod.XXXXXX");
+ tmp_fd = mkstemp(filename);
+ if (tmp_fd == -1) {
+ free(filename);
+ return 0;
+ }
+ tmp = fdopen(tmp_fd, "wb");
+ if (!tmp) {
+ free(filename);
+ return 0;
}
+ fwrite(fp, len, 1, tmp);
+ fflush(tmp);
+ fclose(tmp);
current_music = Mix_LoadMUS(filename);
unlink(filename);
+ free(filename);
if (current_music == NULL) {
fprintf(stderr, "Couldn't load music: %s\n", SDL_GetError());
return 0;
--
1.6.2.1