どこにしようか考えたんですが、ここへ。

  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ファイル
# も使えるようにしたパッチの部分に存在する問題なので。