Fix the underlying cause of the below segfault (must usually call

FcDirCacheHasCurrentArch after FcDirCacheValid).
This commit is contained in:
Patrick Lam 2006-02-18 18:18:07 +00:00
parent a68ce9525d
commit 530e66b008
4 changed files with 18 additions and 4 deletions

View File

@ -1,8 +1,16 @@
2006-02-18 Patrick Lam <plam@mit.edu>
* fc-cache/fc-cache.c (scanDirs):
* src/fccache.c (FcCacheReadDirs):
* src/fcdir.c (FcDirScanConfig):
Fix the underlying cause of the below segfault (must usually
call FcDirCacheHasCurrentArch after FcDirCacheValid).
2006-02-18 Patrick Lam <plam@mit.edu> 2006-02-18 Patrick Lam <plam@mit.edu>
* src/fccache.c (FcDirCacheHasCurrentArch): * src/fccache.c (FcDirCacheHasCurrentArch):
Fix segfault (reported by fcrozat) caused by incorrect Fix triggering of segfault caused by misreading cache files
input on cache files. (reported by fcrozat).
2006-02-17 Patrick Lam <plam@mit.edu> 2006-02-17 Patrick Lam <plam@mit.edu>
* src/fcint.h (FC_CACHE_MAGIC): * src/fcint.h (FC_CACHE_MAGIC):

View File

@ -234,6 +234,8 @@ scanDirs (FcStrList *list, FcConfig *config, char *program, FcBool force, FcBool
printf ("caching, %d fonts, %d dirs\n", printf ("caching, %d fonts, %d dirs\n",
set->nfont, nsubdirs (subdirs)); set->nfont, nsubdirs (subdirs));
/* This is the only reason we can't combine
* Valid w/HasCurrentArch... */
if (!FcDirCacheValid (dir)) if (!FcDirCacheValid (dir))
if (!FcDirCacheUnlink (dir, config)) if (!FcDirCacheUnlink (dir, config))
ret++; ret++;

View File

@ -931,7 +931,9 @@ FcCacheReadDirs (FcConfig * config, FcGlobalCache * cache,
FcStrSetDestroy (subdirs); FcStrSetDestroy (subdirs);
continue; continue;
} }
if (FcDirCacheValid (dir) && FcDirCacheRead (set, subdirs, dir, config)) if (FcDirCacheValid (dir) &&
FcDirCacheHasCurrentArch (dir) &&
FcDirCacheRead (set, subdirs, dir, config))
{ {
/* if an old entry is found in the global cache, disable it */ /* if an old entry is found in the global cache, disable it */
if ((d = FcGlobalCacheDirFind (cache, (const char *)dir)) != NULL) if ((d = FcGlobalCacheDirFind (cache, (const char *)dir)) != NULL)

View File

@ -142,7 +142,9 @@ FcDirScanConfig (FcFontSet *set,
if (cache && FcGlobalCacheReadDir (set, dirs, cache, (char *)dir, config)) if (cache && FcGlobalCacheReadDir (set, dirs, cache, (char *)dir, config))
return FcTrue; return FcTrue;
if (FcDirCacheValid (dir) && FcDirCacheRead (set, dirs, dir, config)) if (FcDirCacheValid (dir) &&
FcDirCacheHasCurrentArch (dir) &&
FcDirCacheRead (set, dirs, dir, config))
return FcTrue; return FcTrue;
} }