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