Fix segfault (reported by fcrozat) caused by incorrect input on cache
files.
This commit is contained in:
parent
310817371c
commit
a68ce9525d
|
@ -1,3 +1,9 @@
|
|||
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):
|
||||
|
||||
|
|
|
@ -760,6 +760,7 @@ FcDirCacheHasCurrentArch (const FcChar8 *dir)
|
|||
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)
|
||||
|
@ -770,17 +771,19 @@ FcDirCacheHasCurrentArch (const FcChar8 *dir)
|
|||
|
||||
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);
|
||||
|
@ -790,6 +793,8 @@ FcDirCacheHasCurrentArch (const FcChar8 *dir)
|
|||
|
||||
return FcTrue;
|
||||
|
||||
bail1:
|
||||
close (fd);
|
||||
bail:
|
||||
return FcFalse;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue