1 $DragonFly: src/gnu/usr.bin/texinfo/texindex/texindex.c.patch,v 1.1 2006/02/11 01:21:27 joerg Exp $
2 Security fix for CAN-2005-3001.
5 ===================================================================
6 RCS file: /cvs/src/contrib/texinfo-4/util/texindex.c,v
7 retrieving revision 1.1
8 diff -u -r1.1 texindex.c
9 --- texindex.c 28 Aug 2005 12:23:25 -0000 1.1
10 +++ texindex.c 11 Feb 2006 01:11:08 -0000
12 /* Return a name for temporary file COUNT. */
15 -maketempname (int count)
16 +maketempname (int count, int can_exist)
18 static char *tempbase = NULL;
26 tempbase = concat (tempdir, "txidxXXXXXX");
28 fd = mkstemp (tempbase);
32 sprintf (tempsuffix, ".%d", count);
33 - return concat (tempbase, tempsuffix);
34 + tempname = concat (tempbase, tempsuffix);
36 + fd = open (tempname, O_CREAT|O_EXCL|O_WRONLY, 0600);
38 + pfatal_with_name (tempname);
48 while (last_deleted_tempcount < to_count)
49 - unlink (maketempname (++last_deleted_tempcount));
50 + unlink (maketempname (++last_deleted_tempcount, 1));
56 for (i = 0; i < ntemps; i++)
58 - char *outname = maketempname (++tempcount);
59 + char *outname = maketempname (++tempcount, 0);
60 FILE *ostream = fopen (outname, "w");
65 for (i = 0; i < ntemps; i++)
67 - char *newtemp = maketempname (++tempcount);
68 + char *newtemp = maketempname (++tempcount, 0);
69 sort_in_core (tempfiles[i], MAX_IN_CORE_SORT, newtemp);
71 unlink (tempfiles[i]);
73 int nf = MAX_DIRECT_MERGE;
75 nf = nfiles - i * MAX_DIRECT_MERGE;
76 - tempfiles[i] = maketempname (++tempcount);
77 + tempfiles[i] = maketempname (++tempcount, 0);
78 value |= merge_direct (&infiles[i * MAX_DIRECT_MERGE], nf, tempfiles[i]);