1999.08.16 16:40 "BYTE tag bug", by Martin McBride
Hi,
libtiff V3.4Beta 032, NT system (although I don't believe the bug is system dependent).
Summary:
Adding extra private tags of type BYTE (or BYTE array) doesn't work properly. I think I have identified the problem and I have included a possible fix.
Background:
I added some new tags to the library, using the xtiff_dir method contributed by Niles Ritter.
The tags I added included LONG, ASCII, BYTE and variable-array-of-BYTE type tags. I the method worked well for the LONG and ASCII type tags, but BYTE and BYTE array tags didn't write properly.
Solution:
I have tracked the problem down to TIFFWriteNormalTag in dir_write.c
The basic problem is that the switch statement in there doesn't handle the BYTE type case - it falls straight through.
My initial thought was that the UNDEFINED case might do pretty much what I wanted, but that isn't quite right either. I think adding the following case fixes the problem:
case TIFF_BYTE:
if (wc > 1) {
char* cp;
if (wc == (u_short) TIFF_VARIABLE) {
TIFFGetField(tif, fip->field_tag, &wc, &cp);
dir->tdir_count = wc;
} else
TIFFGetField(tif, fip->field_tag, &cp);
if (!TIFFWriteByteArray(tif, dir, cp))
return (0);
} else {
char cv;
TIFFGetField(tif, fip->field_tag, &cv);
if (!TIFFWriteByteArray(tif, dir, &cv))
return (0);
}
I think that the UNDEFINED case might also be incorrect, and perhaps needs to use the same code as above, but I am not sure.
Regards
Martin McBride