2009-05-07 9 views
1

Si j'essaie d'ouvrir un fichier TIFF non valide avec TIFFOpen(), la fonction renvoie NULL. Pour une raison quelconque, le gestionnaire d'erreur n'est pas appelé. Cependant, le fichier reste ouvert, donc je ne peux pas le supprimer/le remplacer par le même processus.TiffLib transfère les handles vers des fichiers non valides

J'ai essayé d'utiliser TIFFFdOpen(), afin que je puisse fermer le gérer moi-même, mais pour une raison quelconque, il me donne cette erreur sur TIFFs valides: « Impossible de lire en-tête TIFF ». Cette fois, l'erreur est transmise via le gestionnaire d'erreurs.

Comment puis-je résoudre l'un ou l'autre de ces problèmes?

Mise à jour: Je parle de problèmes dans TIFFOpen() lui-même, pas dans les fonctions appelées plus tard. Par exemple, ils peuvent se produire si le fichier TIFF a la taille zéro.

Répondre

0

Peut-être avez-vous un vieux libtiff? J'ai essayé avec libtiff-3.8.2 et il semble fonctionner OK:

$ 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. il y a une erreur saine et aucune fuite (fermeture explicite avant la sortie). J'ai le même comportement avec mon propre code.

+0

Bon point. J'ai 3.7.3 Mais de toute façon, peut-être que cette erreur n'est pas dans TIFFOpen(). Que se passe-t-il avec un fichier de taille nulle? – Lev