X-Git-Url: https://git.wh0rd.org/?a=blobdiff_plain;f=src%2Ffccache.c;h=84a366e662469daa9d56c575e314c595c9ecaa3c;hb=8e351527bb87798e9b796e12a3b1ee6229536a28;hp=af8a318c43e4f5743b693b548f9f16bbc458e9fe;hpb=7fd7221e683d6c65b9199fd06d34d5215582748e;p=fontconfig.git diff --git a/src/fccache.c b/src/fccache.c index af8a318..84a366e 100644 --- a/src/fccache.c +++ b/src/fccache.c @@ -793,7 +793,7 @@ FcDirCacheProduce (FcFontSet *set, FcCache *metadata) { void * current_dir_block, * final_dir_block; static unsigned int rand_state = 0; - int bank; + int bank, needed_bytes_no_align; if (!rand_state) rand_state = time(0L); @@ -804,20 +804,27 @@ FcDirCacheProduce (FcFontSet *set, FcCache *metadata) memset (metadata, 0, sizeof(FcCache)); FcFontSetNewBank(); - metadata->count = FcFontSetNeededBytes (set) + + needed_bytes_no_align = FcFontSetNeededBytes (set); + metadata->count = needed_bytes_no_align + FcFontSetNeededBytesAlign (); metadata->magic = FC_CACHE_MAGIC; metadata->bank = bank; - if (!metadata->count) /* not a failure, no fonts to write */ + if (!needed_bytes_no_align) /* not a failure, no fonts to write */ + { + /* no, you don't really need to write any bytes at all. */ + metadata->count = 0; return 0; + } current_dir_block = malloc (metadata->count); if (!current_dir_block) goto bail; + // shut up valgrind + memset (current_dir_block, 0, metadata->count); final_dir_block = FcFontSetDistributeBytes (metadata, current_dir_block); - if ((char *)current_dir_block + metadata->count != final_dir_block) + if ((void *)((char *)current_dir_block+metadata->count) < final_dir_block) goto bail; if (!FcFontSetSerialize (bank, set))