xpdf-3.00 with truetype-patch
どこにしようか考えたんですが、ここへ。
xpdf-3.00に、xpdf-3.00pl[12].patchと、VineSeedPlusの
xpdf-3.00-0vl5.src.rpmから取り出したxpdf-3.00-TrueType.patchを当てたもの
を今試しているのですが、xpdfが(一時ファイルでない)フォントファイルを削除
しようとする場合があることに気づきました。例えば手元では、xpdfrcに
displayCIDFontTT Adobe-Japan1 /usr/share/fonts/TrueType/fgcntkym.ttc
のようなことを書いて実験してみたのですが、
$ strace -o/tmp/x xpdf sample.pdf
$ fgrep unlink /tmp/x
…
unlink("/usr/share/fonts/TrueType/fgcntkym.ttc") = -1 EACCES (Permission denied)
…
のようになります。一般ユーザで実行しているので、実際にフォントファイルを
削除されることは防げているのですが。もしrootで実行していたら、フォントファ
イルを削除されていたのかも知れません。
で、ちょっと見てみた限りでは、xpdf-3.00-TrueType.patchがおかしいようで
す。これを当てると、splash/SplashFTFontEngine.cc中の関数
plashFTFontEngine::loadTrueTypeFont()内に、
SplashFTFontFile::loadTrueTypeFont()を呼ぶところができるのですが、ここで
第3引数fileNameが一時ファイルとは限らないのに、第4引数にgTrueを与えてい
ます。この第4引数は、最後にフォントファイルをunlinkするかどうかのフラグ
なので、これだと一時ファイルでないフォントファイルも削除しようとしてしま
うことになります。
手元ではこんなパッチで解決しています。xpdf-3.00-TrueType.patchへのさら
にパッチという妙なものです:-)
--- xpdf-3.00-TrueType.patch.orig Sat Jan 1 23:42:40 2005
+++ xpdf-3.00-TrueType.patch Sun Jan 2 21:35:25 2005
@@ -134,7 +134,7 @@
if (!(ff = FoFiTrueType::load(fileName))) {
- return NULL;
+ ret = SplashFTFontFile::loadTrueTypeFont(this, idA,
-+ fileName, gTrue,
++ fileName, deleteFile,
+ codeToGID, codeToGIDLen);
+
+ delete ff;
nide@ics.nara-wu.ac.jp
# 元記事が間違っていたので、Supercedesして出し直してます。元記事では.ttf
# ファイルでこの現象が起きるように書いていましたが、実際には.ttfファイル
# ではこの現象は起きず、.ttcファイルでしか起きません。xpdfが.ttcファイル
# も使えるようにしたパッチの部分に存在する問題なので。
Fnews-brouse 1.9(20180406) -- by Mizuno, MWE <mwe@ccsf.jp>
GnuPG Key ID = ECC8A735
GnuPG Key fingerprint = 9BE6 B9E9 55A5 A499 CD51 946E 9BDC 7870 ECC8 A735