Sisyphus repository
Last update: 1 october 2023 | SRPMs: 18631 | Visits: 37754442
en ru br
ALT Linux repos
S:4.14-alt3
5.0: 4.13-alt3
4.1: 4.13-alt3
4.0: 4.13-alt3
3.0: 4.13-alt2

Other repositories
Upstream:4.13b

Group :: Publishing
RPM: a2ps

 Main   Changelog   Spec   Patches   Sources   Download   Gear   Bugs and FR  Repocop 

Patch: a2ps-2.13-pld-security.patch
Download


diff -ur a2ps-4.13.orig/lib/routines.c a2ps-4.13/lib/routines.c
--- a2ps-4.13.orig/lib/routines.c	Sat Oct 16 06:46:37 1999
+++ a2ps-4.13/lib/routines.c	Fri Jan  5 12:51:20 2001
@@ -242,3 +242,50 @@
   /* Don't complain if you can't unlink.  Who cares of a tmp file? */
   unlink (filename);
 }
+
+/*
+ * Securely generate a temp file, and make sure it gets
+ * deleted upon exit.
+ */
+static char **	tempfiles = NULL;
+static unsigned	ntempfiles = 0;
+
+static void
+cleanup_tempfiles()
+{
+	while (ntempfiles--)
+		unlink(tempfiles[ntempfiles]);
+}
+
+char *
+safe_tempnam(const char *pfx)
+{
+	char	*dirname, *filename;
+	int	fd;
+
+	if (!(dirname = getenv("TMPDIR")))
+		dirname = "/tmp";
+
+	tempfiles = (char **) realloc(tempfiles,
+			(ntempfiles+1) * sizeof(char *));
+	if (tempfiles == NULL)
+		return NULL;
+
+	filename = malloc(strlen(dirname) + strlen(pfx) + sizeof("/XXXXXX"));
+	if (!filename)
+		return NULL;
+
+	sprintf(filename, "%s/%sXXXXXX", dirname, pfx);
+
+	if ((fd = mkstemp(filename)) < 0) {
+		free(filename);
+		return NULL;
+	}
+	close(fd);
+
+	if (ntempfiles == 0)
+		atexit(cleanup_tempfiles);
+	tempfiles[ntempfiles++] = filename;
+
+	return filename;
+}
diff -ur a2ps-4.13.orig/lib/routines.h a2ps-4.13/lib/routines.h
--- a2ps-4.13.orig/lib/routines.h	Mon Oct 18 22:24:41 1999
+++ a2ps-4.13/lib/routines.h	Fri Jan  5 12:37:53 2001
@@ -255,7 +255,8 @@
 /* If _STR_ is not defined, give it a tempname in _TMPDIR_ */
 #define tempname_ensure(Str)				\
 do {							\
-  (Str) = (Str) ? (Str) : tempnam (NULL, "a2_");	\
+  (Str) = (Str) ? (Str) : safe_tempnam("a2_");	\
 } while (0)
+char * safe_tempnam(const char *);
 
 #endif
 
design & coding: Vladimir Lettiev aka crux © 2004-2005, Andrew Avramenko aka liks © 2007-2008
current maintainer: Michael Shigorin