TiffLib将句柄泄漏到无效文件

时间:2009-05-07 12:14:20

标签: c libtiff

如果我尝试使用TIFFOpen()打开无效的TIFF文件,该函数将返回NULL。由于某种原因,不会调用错误处理程序。但是,该文件仍保持打开状态,因此我无法从同一进程中删除/覆盖它。

我尝试使用TIFFFdOpen(),以便我可以自己关闭句柄,但由于某种原因,它会在有效的TIFF上出现此错误:“无法读取TIFF标题”。这次错误通过错误处理程序传递。

如何解决这两个问题?

更新:我在谈论TIFFOpen()本身的问题,而不是稍后调用的函数。例如,如果TIFF文件的大小为零,则可能会出现这种情况。

1 个答案:

答案 0 :(得分: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)                           = ?

IE中。有一个理智的错误,没有泄漏(退出前明确关闭)。我用自己的代码得到了同样的行为。