+2006-02-18 Patrick Lam <plam@mit.edu>
+ * src/fccache.c (FcDirCacheHasCurrentArch):
+
+ Fix segfault (reported by fcrozat) caused by incorrect
+ input on cache files.
+
2006-02-17 Patrick Lam <plam@mit.edu>
* src/fcint.h (FC_CACHE_MAGIC):
off_t current_arch_start;
char *current_arch_machine_name;
FcCache metadata;
+ char subdirName[FC_MAX_FILE_LEN + 1 + 12 + 1];
fd = FcDirCacheOpen (dir);
if (fd < 0)
if (current_arch_start >= 0)
{
+ if (lseek (fd, current_arch_start, SEEK_SET) != current_arch_start)
+ goto bail1;
+
+ FcCacheSkipString (fd);
+
+ while (FcCacheReadString (fd, subdirName, sizeof (subdirName)) && strlen (subdirName) > 0)
+ ;
+
if (read(fd, &metadata, sizeof(FcCache)) != sizeof(FcCache))
- {
- close (fd);
- return FcFalse;
- }
+ goto bail1;
if (metadata.magic != FC_CACHE_MAGIC)
- {
- close (fd);
- return FcFalse;
- }
+ goto bail1;
}
close (fd);
return FcTrue;
+ bail1:
+ close (fd);
bail:
return FcFalse;
}