TiffLib просачивается в недействительные файлы - PullRequest
1 голос
/ 07 мая 2009

Если я пытаюсь открыть неверный файл TIFF с помощью TIFFOpen(), функция возвращает NULL. По какой-то причине обработчик ошибок не вызывается. Однако файл остается открытым, поэтому я не могу удалить / перезаписать его из того же процесса.

Я попытался использовать TIFFFdOpen(), чтобы я сам мог закрыть дескриптор, но по какой-то причине он дает мне эту ошибку на допустимых файлах TIFF: "Не удается прочитать заголовок TIFF" . На этот раз ошибка передается через обработчик ошибок.

Как я могу решить любую из этих проблем?

Обновление: я говорю о проблемах в самом TIFFOpen(), а не в функциях, вызываемых позже. Например, они могут возникать, если размер файла TIFF равен нулю.

1 Ответ

0 голосов
/ 07 мая 2009

Возможно, у вас есть старый или сломанный либтиф? Я попытался с 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)                           = ?

Т.е.. есть нормальная ошибка и нет утечки (явное закрытие перед выходом). У меня такое же поведение с моим собственным кодом.

...