1

で無効な TIFF ファイルを開こうとするとTIFFOpen()、関数は を返しますNULL。何らかの理由で、エラー ハンドラーが呼び出されません。ただし、ファイルは開いたままなので、同じプロセスから削除/上書きすることはできません。

TIFFFdOpen()ハンドルを自分で閉じることができるように を使用してみましたが、何らかの理由で、有効な TIFF でこのエラーが発生します: 「TIFF ヘッダーを読み取れません」。今回は、エラー ハンドラを介してエラーが渡されます。

これらの問題のいずれかを解決するにはどうすればよいですか?

更新: 私はTIFFOpen()それ自体の問題について話しているのであって、後で呼び出される関数の問題についてではありません。たとえば、TIFF ファイルのサイズがゼロの場合に発生する可能性があります。

4

1 に答える 1

0

おそらく、libtiff が古いか壊れていますか? libtiff-3.8.2 で試してみましたが、問題なく動作するようです:

$ head -c 1000000 sample.tif > broken.tif
$ tiffinfo broken.tif
TIFFReadDirectory: broken.tif: Can not read TIFF directory count.
$ strace tiffinfo broken.tif 
...
open("broken.tif", O_RDONLY)            = 3
...
write(2, "broken.tif: Can not read TIFF dir"...
...
close(3)                                = 0
exit_group(0)                           = ?

すなわち。正常なエラーがあり、リークはありません (終了前の明示的なクローズ)。自分のコードでも同じ動作が得られます。

于 2009-05-07T12:30:02.770 に答える