Fix double free (spotted by Coverity, CID #1965).

Check if pattern is not null before using it (Coverity defect #1883).
Fix memory leak with hash collision (Coverity defect #1829).
Fix memory leak when bail cases (Coverity defect #1828).
Don't leak directory name (Coverity defect #1827).
reviewed by: plam
This commit is contained in:
Patrick Lam 2006-04-10 15:46:34 +00:00
parent 86abd75965
commit ae2aafe602
4 changed files with 30 additions and 5 deletions

View File

@ -1,3 +1,21 @@
2006-04-10 Frederic Crozat <fcrozat@mandriva.com>
reviewed by: plam
* src/fccache.c: (FcDirCacheWrite):
Fix double free (spotted by Coverity, CID #1965).
* fc-match/fc-match.c: (main):
Check if pattern is not null before using it (Coverity defect #1883).
* src/fccache.c: (FcDirCacheWrite):
Fix memory leak with hash collision (Coverity defect #1829).
* src/fccfg.c: (FcConfigBuildFonts):
Fix memory leak when bail cases (Coverity defect #1828).
* src/fccache.c: (FcGlobalCacheLoad):
Don't leak directory name (Coverity defect #1827).
2006-04-07 Dominic Lachowicz <cinamod@hotmail.com>
reviewed by: plam
* fc-cache/Makefile.am:

View File

@ -134,6 +134,9 @@ main (int argc, char **argv)
else
pat = FcPatternCreate ();
if (!pat)
return 1;
FcConfigSubstitute (0, pat, FcMatchPattern);
FcDefaultSubstitute (pat);
@ -147,7 +150,6 @@ main (int argc, char **argv)
if (match)
FcFontSetAdd (fs, match);
}
if (pat)
FcPatternDestroy (pat);
if (fs)

View File

@ -236,7 +236,7 @@ FcGlobalCacheLoad (FcGlobalCache *cache,
FcCache md;
off_t off;
FcStrSetAdd (staleDirs, FcStrCopy ((FcChar8 *)name_buf));
FcStrSetAdd (staleDirs, (FcChar8 *)name_buf);
/* skip subdirs */
while (FcCacheReadString (cache->fd, subdirName,
@ -1311,12 +1311,16 @@ FcDirCacheWrite (FcFontSet *set, FcStrSet *dirs, const FcChar8 *dir)
if(!FcCacheReadString (fd, name_buf, sizeof (name_buf)) || !strlen(name_buf))
{
close (fd);
FcStrFree ((FcChar8 *)cache_hashed);
continue;
}
close (fd);
if (strcmp (name_buf, cache_file) != 0)
{
FcStrFree ((FcChar8 *)cache_hashed);
continue;
}
break;
} while (1);
@ -1445,7 +1449,7 @@ FcDirCacheWrite (FcFontSet *set, FcStrSet *dirs, const FcChar8 *dir)
free (header);
close(fd);
if (!FcAtomicReplaceOrig(atomic))
goto bail5;
goto bail3;
FcStrFree ((FcChar8 *)cache_hashed);
FcStrFree ((FcChar8 *)cache_file);
FcAtomicUnlock (atomic);

View File

@ -335,6 +335,7 @@ FcConfigBuildFonts (FcConfig *config)
return FcTrue;
bail2:
FcGlobalCacheDestroy (cache);
FcStrSetDestroy (oldDirs);
bail1:
FcFontSetDestroy (fonts);