Make fccache more resilient to broken cache files by checking return value
of FcCacheReadString all the time. reviewed by: plam
This commit is contained in:
parent
946478e1a7
commit
c5411c4cae
|
@ -1,3 +1,12 @@
|
||||||
|
2006-01-30 Mike Fabian <mfabian@suse.de>
|
||||||
|
reviewed by: plam
|
||||||
|
|
||||||
|
* src/fccache.c (FcGlobalCacheLoad, FcDirCacheUnlink
|
||||||
|
FcDirCacheOpen, FcDirCacheRead, FcDirCacheWrite):
|
||||||
|
|
||||||
|
Make fccache more resilient to broken cache files by checking
|
||||||
|
return value of FcCacheReadString all the time.
|
||||||
|
|
||||||
2006-01-30 Frederic Crozat <fcrozat@mandriva.com>
|
2006-01-30 Frederic Crozat <fcrozat@mandriva.com>
|
||||||
reviewed by: plam
|
reviewed by: plam
|
||||||
|
|
||||||
|
|
|
@ -218,7 +218,8 @@ FcGlobalCacheLoad (FcGlobalCache *cache,
|
||||||
|
|
||||||
cache->updated = FcFalse;
|
cache->updated = FcFalse;
|
||||||
|
|
||||||
FcCacheReadString (cache->fd, name_buf, sizeof (name_buf));
|
if (!FcCacheReadString (cache->fd, name_buf, sizeof (name_buf)))
|
||||||
|
return;
|
||||||
if (strcmp (name_buf, FC_GLOBAL_MAGIC_COOKIE) != 0)
|
if (strcmp (name_buf, FC_GLOBAL_MAGIC_COOKIE) != 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -229,8 +230,9 @@ FcGlobalCacheLoad (FcGlobalCache *cache,
|
||||||
goto bail_and_destroy;
|
goto bail_and_destroy;
|
||||||
|
|
||||||
lseek (cache->fd, current_arch_start, SEEK_SET);
|
lseek (cache->fd, current_arch_start, SEEK_SET);
|
||||||
FcCacheReadString (cache->fd, candidate_arch_machine_name,
|
if (!FcCacheReadString (cache->fd, candidate_arch_machine_name,
|
||||||
sizeof (candidate_arch_machine_name));
|
sizeof (candidate_arch_machine_name)))
|
||||||
|
goto bail_and_destroy;
|
||||||
if (strlen(candidate_arch_machine_name) == 0)
|
if (strlen(candidate_arch_machine_name) == 0)
|
||||||
goto bail_and_destroy;
|
goto bail_and_destroy;
|
||||||
|
|
||||||
|
@ -238,8 +240,7 @@ FcGlobalCacheLoad (FcGlobalCache *cache,
|
||||||
{
|
{
|
||||||
off_t targ;
|
off_t targ;
|
||||||
|
|
||||||
FcCacheReadString (cache->fd, name_buf, sizeof (name_buf));
|
if (!FcCacheReadString (cache->fd, name_buf, sizeof (name_buf)) || !strlen(name_buf))
|
||||||
if (!strlen(name_buf))
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/* Directory must be older than the global cache file; also
|
/* Directory must be older than the global cache file; also
|
||||||
|
@ -721,8 +722,7 @@ FcDirCacheUnlink (const FcChar8 *dir, FcConfig *config)
|
||||||
return FcTrue;
|
return FcTrue;
|
||||||
}
|
}
|
||||||
|
|
||||||
FcCacheReadString (fd, name_buf, sizeof (name_buf));
|
if (!FcCacheReadString (fd, name_buf, sizeof (name_buf)) || !strlen(name_buf))
|
||||||
if (!strlen(name_buf))
|
|
||||||
{
|
{
|
||||||
FcStrFree ((FcChar8 *)cache_hashed);
|
FcStrFree ((FcChar8 *)cache_hashed);
|
||||||
goto bail;
|
goto bail;
|
||||||
|
@ -943,8 +943,7 @@ FcDirCacheOpen (const FcChar8 *dir)
|
||||||
FcStrFree ((FcChar8 *)cache_file);
|
FcStrFree ((FcChar8 *)cache_file);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
FcCacheReadString (fd, name_buf, sizeof (name_buf));
|
if (!FcCacheReadString (fd, name_buf, sizeof (name_buf)) || !strlen(name_buf))
|
||||||
if (!strlen(name_buf))
|
|
||||||
goto bail;
|
goto bail;
|
||||||
|
|
||||||
name_buf_dir = FcStrDirname ((FcChar8 *)name_buf);
|
name_buf_dir = FcStrDirname ((FcChar8 *)name_buf);
|
||||||
|
@ -990,7 +989,7 @@ FcDirCacheRead (FcFontSet * set, FcStrSet * dirs, const FcChar8 *dir, FcConfig *
|
||||||
sizeof (candidate_arch_machine_name)) == 0)
|
sizeof (candidate_arch_machine_name)) == 0)
|
||||||
goto bail1;
|
goto bail1;
|
||||||
|
|
||||||
while (strlen(FcCacheReadString (fd, subdirName, sizeof (subdirName))) > 0)
|
while (FcCacheReadString (fd, subdirName, sizeof (subdirName)) && strlen (subdirName) > 0)
|
||||||
FcStrSetAdd (dirs, (FcChar8 *)subdirName);
|
FcStrSetAdd (dirs, (FcChar8 *)subdirName);
|
||||||
|
|
||||||
if (!FcDirCacheConsume (fd, (const char *)dir, set, config))
|
if (!FcDirCacheConsume (fd, (const char *)dir, set, config))
|
||||||
|
@ -1130,11 +1129,12 @@ FcDirCacheWrite (FcFontSet *set, FcStrSet *dirs, const FcChar8 *dir)
|
||||||
fd = open(cache_hashed, O_RDONLY);
|
fd = open(cache_hashed, O_RDONLY);
|
||||||
if (fd == -1)
|
if (fd == -1)
|
||||||
break;
|
break;
|
||||||
FcCacheReadString (fd, name_buf, sizeof (name_buf));
|
if(!FcCacheReadString (fd, name_buf, sizeof (name_buf)) || !strlen(name_buf))
|
||||||
|
{
|
||||||
close (fd);
|
close (fd);
|
||||||
|
|
||||||
if (!strlen(name_buf))
|
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
close (fd);
|
||||||
|
|
||||||
if (strcmp (name_buf, cache_file) != 0)
|
if (strcmp (name_buf, cache_file) != 0)
|
||||||
continue;
|
continue;
|
||||||
|
|
Loading…
Reference in New Issue