Must not insert cache into hash table before completely validating.

The cache was inserted into the hash table before the timestamps in the
cache were verified; if that verification failed, an extra pointer to the
now freed cache would be left in the hash table. FcFini would fail an
assertion as a result.
This commit is contained in:
Keith Packard 2007-10-18 09:41:00 -07:00
parent e85789a997
commit bc5e8adb4d
1 changed files with 2 additions and 2 deletions

View File

@ -493,8 +493,8 @@ FcDirCacheMapFd (int fd, struct stat *fd_stat, struct stat *dir_stat)
if (cache->magic != FC_CACHE_MAGIC_MMAP || if (cache->magic != FC_CACHE_MAGIC_MMAP ||
cache->version < FC_CACHE_CONTENT_VERSION || cache->version < FC_CACHE_CONTENT_VERSION ||
cache->size != fd_stat->st_size || cache->size != fd_stat->st_size ||
!FcCacheInsert (cache, fd_stat) || !FcCacheTimeValid (cache, dir_stat) ||
!FcCacheTimeValid (cache, dir_stat)) !FcCacheInsert (cache, fd_stat))
{ {
if (allocated) if (allocated)
free (cache); free (cache);