Commit c001a192 authored by Patrick Lam's avatar Patrick Lam

Bail gracefully if the cache file does not contain enough data.

parent a7757294
2006-04-19 Patrick Lam <>
* src/fccache.c (FcDirCacheConsume, FcCacheNextOffset):
Bail gracefully if the cache file does not contain enough data.
2006-04-14 Patrick Lam <>
Font configuration and customization library
Version 2.3.94
Version 2.3.95
Check INSTALL for compilation and installation instructions.
Report bugs to in the fontconfig module.
Match 'Standard Symbols L' for 'Symbol'. Add URW fonts as aliases for
all of the PostScript fonts. (reported by Miguel Rodriguez). Fix a
number of Coverity defects (Frederic Crozat). Speed up FcFontSort
(fix suggested by Kenichi Handa). Fix error with charsets. Survive
missing docbook2pdf. Compile on HP-UX, AIX, SGI and Windows (Cygwin,
MinGW). Fix intel compiler warnings. Fix multiarch support (don't
destroy multiarch files!) Require pkg-config. (Thanks Behdad; better
solution wanted for libxml2 detection!) Fix typos in orth files and
add orth for Lingala (reported by Denis Jacquerye). Remove debian/
directory. Add a configuration file that disables hinting for the
Lohit Gujarati font (since the hinting distorts some glyphs quite
badly). Sort directory entries while scanning them from disk;
prevents Heisenbugs due to file ordering in a directory (due to Egmont
Koblinger). Fix Wine's problem with finding fonts. (Reported by
Bernhard Rosenkraenzer.)
fc-cat can take directories as input and creates old-style fonts.cache
......@@ -33,7 +33,7 @@ dnl This is the package version number, not the shared library
dnl version. This same version number must appear in fontconfig/fontconfig.h
dnl Yes, it is a pain to synchronize version numbers. Unfortunately, it's
dnl not possible to extract the version number here from fontconfig.h
AM_INIT_AUTOMAKE(fontconfig, 2.3.94)
AM_INIT_AUTOMAKE(fontconfig, 2.3.95)
dnl libtool versioning
......@@ -46,7 +46,7 @@ typedef int FcBool;
#define FC_MAJOR 2
#define FC_MINOR 3
#define FC_REVISION 94
#define FC_REVISION 95
#define FC_VERSION ((FC_MAJOR * 10000) + (FC_MINOR * 100) + (FC_REVISION))
......@@ -617,6 +617,10 @@ static int
FcCacheNextOffset(off_t w)
static long pagesize = -1;
if (w == -1)
return w;
if (pagesize == -1)
#if defined (HAVE_SYSCONF)
pagesize = sysconf(_SC_PAGESIZE);
......@@ -1164,7 +1168,7 @@ FcDirCacheConsume (int fd, const char * dir, FcFontSet *set, FcConfig *config)
FcCache metadata;
void * current_dir_block;
off_t pos;
off_t pos, endpos;
if (read(fd, &metadata, sizeof(FcCache)) != sizeof(FcCache))
return FcFalse;
......@@ -1181,6 +1185,19 @@ FcDirCacheConsume (int fd, const char * dir, FcFontSet *set, FcConfig *config)
pos = FcCacheNextOffset (lseek(fd, 0, SEEK_CUR));
/* This is not failsafe (multi-arches can break it),
* but fd has got to have at least as many bytes as
* metadata.count, or something's going to go horribly wrong. */
if (pos == (off_t)-1)
return FcFalse;
endpos = lseek (fd, 0, SEEK_END);
if (endpos == (off_t)-1 || endpos - pos < metadata.count)
return FcFalse;
if (lseek (fd, pos, SEEK_SET) == -1)
return FcFalse;
#if defined(HAVE_MMAP) || defined(__CYGWIN__)
current_dir_block = mmap (0, metadata.count,
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment