Re: Yet another easy to reproduce crash in fontconfig

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Mike FABIAN <mfabian@xxxxxxx> さんは書きました:

> mfabian@magellan:~$ sudo rm /var/cache/fontconfig/*cache*
> mfabian@magellan:~$ rm .fonts.cache-2 
> mfabian@magellan:~$ fc-match sans
> arial.ttf: "Arial" "Regular"
> mfabian@magellan:~$ touch .fonts.conf
> mfabian@magellan:~$ fc-match sans
> セグメンテーション違反です (core dumped)
> mfabian@magellan:~$
>
> (gdb) bt
> #0  0x00002aaaab12c420 in strlen () from /lib64/libc.so.6
> #1  0x00002aaaaabd7075 in FcGlobalCacheReadDir () from /usr/lib64/libfontconfig.so.1

The attached patch seems to fix the problem for me.

Without that patch, directories which are subdirectories of
directories listed in the config files (/etc/fonts/fonts.conf etc)
were added too late to the list of font directories in "FcConfig
*config". For example, when FcDirScanConfig() was called with the
argument "/usr/share/fonts/bdf" the list of font directories in
config->fontDirs->strs still contained only the higher level
directory "/usr/share/fonts" because only that was listed in the
config files, not the "bdf" subdirectory.

FcDirScanConfig() then calls FcGlobalCacheReadDir() before
adding the subdirectory to the list, FcGlobalCacheReadDir()
calls FcConfigNormalizeFontDir(dir) which returns 0 because the directory
is not yet in the list and then it crashes in strlen(dir) of course.

To fix this, I moved the call to FcConfigAddFontDir (config, dir)
upwards in FcDirScanConfig() to add the directory *before*
FcGlobalCacheReadDir() is called.

diff -ru fontconfig-2.3.93.20060116.orig/src/fcdir.c fontconfig-2.3.93.20060116/src/fcdir.c
--- fontconfig-2.3.93.20060116.orig/src/fcdir.c	2006-01-16 12:47:55.000000000 +0100
+++ fontconfig-2.3.93.20060116/src/fcdir.c	2006-01-18 15:12:06.000000000 +0100
@@ -130,6 +130,8 @@
 
     if (config && !FcConfigAcceptFilename (config, dir))
 	return FcTrue;
+    
+    FcConfigAddFontDir (config, dir);
 
     if (!force)
     {
@@ -165,7 +167,6 @@
 	return FcFalse;
     }
 
-    FcConfigAddFontDir (config, dir);
     tmpSet = FcFontSetCreate();
     if (!tmpSet)
     {	
-- 
Mike FABIAN   <mfabian@xxxxxxx>   http://www.suse.de/~mfabian
睡眠不足はいい仕事の敵だ。
_______________________________________________
Fontconfig mailing list
Fontconfig@xxxxxxxxxxxxxxxxxxxxx
http://lists.freedesktop.org/mailman/listinfo/fontconfig

[Index of Archives]     [Fedora Fonts]     [Fedora Users]     [Fedora Cloud]     [Kernel]     [Fedora Packaging]     [Fedora Desktop]     [PAM]     [Gimp Graphics Editor]     [Yosemite News]

  Powered by Linux