* gnu/packages/pretty-print.scm (a2ps)[source]: Add patches. * gnu/packages/patches/a2ps-CVE-2001-1593.patch, gnu/packages/patches/a2ps-CVE-2014-0466.patch: New variables. * gnu/local.mk (dist_patch_DATA): Add them.
		
			
				
	
	
		
			69 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			69 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| Index: b/lib/routines.c
 | |
| ===================================================================
 | |
| --- a/lib/routines.c
 | |
| +++ b/lib/routines.c
 | |
| @@ -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;
 | |
| +static unsigned	ntempfiles;
 | |
| +
 | |
| +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;
 | |
| +}
 | |
| Index: b/lib/routines.h
 | |
| ===================================================================
 | |
| --- a/lib/routines.h
 | |
| +++ b/lib/routines.h
 | |
| @@ -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
 |