Commit 8b413bb6 authored by Patrick Lam's avatar Patrick Lam
Browse files

Takashi Iwai <tiwai@suse.de>

Don't loop infinitely on recursive symlinks (client-side).
parent 660acf8f
2006-02-06 Patrick Lam <plam@mit.edu>
Takashi Iwai <tiwai@suse.de>
* src/fccache.c (FcCacheReadDirs, FcCacheRead):
Don't loop infinitely on recursive symlinks (client-side).
2006-02-06 Takashi Iwai <tiwai@suse.de>
reviewed by: plam
* fc-cache/fc-cache.c (scanDirs, main):
......
......@@ -863,7 +863,7 @@ FcDirCacheUnlink (const FcChar8 *dir, FcConfig *config)
static int
FcCacheReadDirs (FcConfig * config, FcGlobalCache * cache,
FcStrList *list, FcFontSet * set)
FcStrList *list, FcFontSet * set, FcStrSet *processed_dirs)
{
int ret = 0;
FcChar8 *dir;
......@@ -887,9 +887,9 @@ FcCacheReadDirs (FcConfig * config, FcGlobalCache * cache,
name = FcConfigNormalizeFontDir (config, dir);
if (name)
{
if ((d = FcGlobalCacheDirFind (cache, (const char *)name)) != NULL &&
d->state == FcGCDirUpdated)
if (FcStrSetMember (processed_dirs, dir))
continue;
FcStrSetAdd (processed_dirs, dir);
}
subdirs = FcStrSetCreate ();
......@@ -955,7 +955,7 @@ FcCacheReadDirs (FcConfig * config, FcGlobalCache * cache,
ret++;
continue;
}
ret += FcCacheReadDirs (config, cache, sublist, set);
ret += FcCacheReadDirs (config, cache, sublist, set, processed_dirs);
}
FcStrListDone (list);
return ret;
......@@ -964,15 +964,24 @@ FcCacheReadDirs (FcConfig * config, FcGlobalCache * cache,
FcFontSet *
FcCacheRead (FcConfig *config, FcGlobalCache * cache)
{
FcFontSet * s = FcFontSetCreate();
FcFontSet *s = FcFontSetCreate();
FcStrSet *processed_dirs;
if (!s)
return 0;
if (FcCacheReadDirs (config, cache, FcConfigGetConfigDirs (config), s))
processed_dirs = FcStrSetCreate();
if (!processed_dirs)
goto bail;
if (FcCacheReadDirs (config, cache, FcConfigGetConfigDirs (config), s, processed_dirs))
goto bail1;
FcStrSetDestroy (processed_dirs);
return s;
bail1:
FcStrSetDestroy (processed_dirs);
bail:
FcFontSetDestroy (s);
return 0;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment