+++ /dev/null
-diff -uNrp xc/lib/font/fontfile.orig/dirfile.c xc/lib/font/fontfile/dirfile.c
---- xc/lib/font/fontfile.orig/dirfile.c 2003-04-10 13:03:53.000000000 +0200
-+++ xc/lib/font/fontfile/dirfile.c 2004-02-12 11:22:14.000000000 +0100
-@@ -68,6 +68,9 @@ FontFileReadDirectory (char *directory,
-
- FontDirectoryPtr dir = NullFontDirectory;
-
-+ if (strlen(directory) + 1 + sizeof(FontDirFile) > sizeof(dir_file))
-+ return BadFontPath;
-+
- #ifdef FONTDIRATTRIB
- /* Check for font directory attributes */
- #ifndef __UNIXOS2__
-@@ -159,6 +162,9 @@ FontFileDirectoryChanged(FontDirectoryPt
- char dir_file[MAXFONTFILENAMELEN];
- struct stat statb;
-
-+ if (strlen(dir->directory) + sizeof(FontDirFile) > sizeof(dir_file))
-+ return FALSE;
-+
- strcpy (dir_file, dir->directory);
- strcat (dir_file, FontDirFile);
- if (stat (dir_file, &statb) == -1)
-@@ -207,6 +213,8 @@ AddFileNameAliases(FontDirectoryPtr dir)
- continue;
-
- len = strlen (fileName) - renderer->fileSuffixLen;
-+ if (len >= sizeof(copy))
-+ continue;
- CopyISOLatin1Lowered (copy, fileName, len);
- copy[len] = '\0';
- name.name = copy;
-@@ -256,9 +264,13 @@ ReadFontAlias(char *directory, Bool isFi
- int status = Successful;
- struct stat statb;
-
-+ if (strlen(directory) >= sizeof(alias_file))
-+ return BadFontPath;
- dir = *pdir;
- strcpy(alias_file, directory);
- if (!isFile) {
-+ if (strlen(directory) + 1 + sizeof(FontAliasFile) > sizeof(alias_file))
-+ return BadFontPath;
- if (directory[strlen(directory) - 1] != '/')
- strcat(alias_file, "/");
- strcat(alias_file, FontAliasFile);
-@@ -291,6 +303,10 @@ ReadFontAlias(char *directory, Bool isFi
- status = AllocError;
- break;
- case NAME:
-+ if (strlen(lexToken) >= sizeof(alias)) {
-+ status = BadFontPath;
-+ break;
-+ }
- strcpy(alias, lexToken);
- token = lexAlias(file, &lexToken);
- switch (token) {
-@@ -307,6 +323,10 @@ ReadFontAlias(char *directory, Bool isFi
- status = AllocError;
- break;
- case NAME:
-+ if (strlen(lexToken) >= sizeof(font_name)) {
-+ status = BadFontPath;
-+ break;
-+ }
- CopyISOLatin1Lowered(alias, alias, strlen(alias));
- CopyISOLatin1Lowered(font_name, lexToken, strlen(lexToken));
- if (!FontFileAddFontAlias (dir, alias, font_name))
-diff -uNrp xc/lib/font/fontfile.orig/encparse.c xc/lib/font/fontfile/encparse.c
---- xc/lib/font/fontfile.orig/encparse.c 2003-12-19 05:45:49.000000000 +0100
-+++ xc/lib/font/fontfile/encparse.c 2004-02-12 11:22:14.000000000 +0100
-@@ -837,6 +837,7 @@ FontEncReallyReallyLoad(const char *char
- char file_name[MAXFONTFILENAMELEN], encoding_name[MAXFONTNAMELEN],
- buf[MAXFONTFILENAMELEN];
- int count, n;
-+ static char format[24] = "";
-
- /* As we don't really expect to open encodings that often, we don't
- take the trouble of caching encodings directories. */
-@@ -852,8 +853,12 @@ FontEncReallyReallyLoad(const char *char
- }
-
- encoding = NULL;
-+ if (!format[0]) {
-+ sprintf(format, "%%%ds %%%d[^\n]\n", sizeof(encoding_name) - 1,
-+ sizeof(file_name) - 1);
-+ }
- for(;;) {
-- count = fscanf(file, "%s %[^\n]\n", encoding_name, file_name);
-+ count = fscanf(file, format, encoding_name, file_name);
- if(count == EOF)
- break;
- if(count != 2)
-diff -uNrp xc/lib/font/fontfile.orig/fontfile.c xc/lib/font/fontfile/fontfile.c
---- xc/lib/font/fontfile.orig/fontfile.c 2003-12-03 05:58:58.000000000 +0100
-+++ xc/lib/font/fontfile/fontfile.c 2004-02-12 12:01:07.727501240 +0100
-@@ -423,11 +423,16 @@ FontFileOpenFont (pointer client, FontPa
- vals.ranges = ranges;
- vals.nranges = nranges;
-
-- strcpy (fileName, dir->directory);
-- strcat (fileName, scalable->fileName);
-- ret = (*scalable->renderer->OpenScalable) (fpe, pFont,
-+ if (strlen(dir->directory) + strlen(scalable->fileName) >= sizeof(fileName))
-+ ret = BadFontName;
-+ else
-+ {
-+ strcpy(fileName, dir->directory);
-+ strcat(fileName, scalable->fileName);
-+ ret = (*scalable->renderer->OpenScalable) (fpe, pFont,
- flags, entry, fileName, &vals, format, fmask,
- non_cachable_font);
-+ }
-
- /* In case rasterizer does something bad because of
- charset subsetting... */
-@@ -498,6 +503,8 @@ FontFileOpenBitmapNCF (FontPathElementPt
- bitmap = &entry->u.bitmap;
- if(!bitmap || !bitmap->renderer->OpenBitmap)
- return BadFontName;
-+ if (strlen(dir->directory) + strlen(bitmap->fileName) >= sizeof(fileName))
-+ return BadFontName;
- strcpy (fileName, dir->directory);
- strcat (fileName, bitmap->fileName);
- ret = (*bitmap->renderer->OpenBitmap)
-@@ -533,6 +540,8 @@ FontFileGetInfoBitmap (FontPathElementPt
- bitmap = &entry->u.bitmap;
- if (!bitmap || !bitmap->renderer->GetInfoBitmap)
- return BadFontName;
-+ if (strlen(dir->directory) + strlen(bitmap->fileName) >= sizeof(fileName))
-+ return BadFontName;
- strcpy (fileName, dir->directory);
- strcat (fileName, bitmap->fileName);
- ret = (*bitmap->renderer->GetInfoBitmap) (fpe, pFontInfo, entry, fileName);
-@@ -872,10 +881,15 @@ FontFileListOneFontWithInfo (pointer cli
- bc = &entry->u.bc;
- entry = bc->entry;
- /* Make a new scaled instance */
-- strcpy (fileName, dir->directory);
-- strcat (fileName, scalable->fileName);
-- ret = (*scalable->renderer->GetInfoScalable)
-+ if (strlen(dir->directory) + strlen(scalable->fileName) >= sizeof(fileName))
-+ ret = BadFontName;
-+ else
-+ {
-+ strcpy(fileName, dir->directory);
-+ strcat(fileName, scalable->fileName);
-+ ret = (*scalable->renderer->GetInfoScalable)
- (fpe, *pFontInfo, entry, tmpName, fileName, &bc->vals);
-+ }
- break;
- #endif
- default:
-@@ -980,10 +994,15 @@ FontFileListOneFontWithInfo (pointer cli
- vals.nranges = nranges;
-
- /* Make a new scaled instance */
-- strcpy (fileName, dir->directory);
-- strcat (fileName, scalable->fileName);
-- ret = (*scalable->renderer->GetInfoScalable)
-- (fpe, *pFontInfo, entry, &tmpName, fileName, &vals);
-+ if (strlen(dir->directory) + strlen(scalable->fileName) >= sizeof(fileName))
-+ ret = BadFontName;
-+ else
-+ {
-+ strcpy (fileName, dir->directory);
-+ strcat (fileName, scalable->fileName);
-+ ret = (*scalable->renderer->GetInfoScalable)
-+ (fpe, *pFontInfo, entry, &tmpName, fileName, &vals);
-+ }
- if (ranges) xfree(ranges);
- }
- }