-
Notifications
You must be signed in to change notification settings - Fork 86
TIFF hul Messages
Premature EOF
This error may be triggered by an IFD entry whose value offset is out of the file boundaries. In that case, the offset provided by JHOVE in the error report is the wrong value offset.
- Type: TiffException
- Source location:Search Source
- Examples: Needed
The TIFF may be truncated or incomplete.
Needs review
Tag
<tag-number>out of sequence
This issue may be triggered if the tags are not listed in a strict ascending order. This issue is described in the following blog post: Lindlar, Micky. “Troubles with TIFF: Tag 270 out of sequence” OPF Blogs, March 19, 2020. https://openpreservation.org/blogs/troubles-with-tiff-tag-270-out-of-sequence/.
In TIFF-hul, Rel. 1.9.5, the error might also be triggered if the number of IFD entries (i.e., fields) in the IFD header is higher than the actual number of IFD entries.
- Type: ErrorMessage
- Source location:Search Source
- Examples: 1
Low, in the case of one tag being out of sequence. It might be critical though if the error is triggered because of a wrong number of IFD entries.
One option is to rewrite the misplaced tag with exiftool. The process is described in the blog post mentioned in the Details section.
If the error is triggered by a wrong number of IFD entries in the IFD header, correcting that number in a hexadecimal editor may resolve the problem.
Unknown data type
In TIFF-hul, Rel. 1.9.5, the error might be triggered if the number of IFD entries (i.e., fields) in the IFD header is higher than the actual number of IFD entries.
- Type: ErrorMessage
- Source location:Search Source
- Examples: 1, 2
Each TIFF tag has a type (like BYTE, ASCII, SHORT, ...) that determines how its content should be interpreted. Generally, if the type of a tag is set to an unknown (i.e., not defined by any specification) value its content cannot be interpreted correctly, meaning that a viewer will not be able to read data from the tag. Depending on the significance of a tag this may or may not prevent the file from being displayed.
However, since the types of the common TIFF tags are well-known from the respective specifications (TIFF of course, but also other specifications like XMP) some viewers might just (silently) ignore unknown types in a TIFF file and use the correct types from the specifications instead, thus being able to display files despite this error. But obviously, this is nothing one should rely on in the long run ...
Options:
- In the affected IFD entry, set the type to the correct value, if necessary adapt the count value (because values of different types may differ in size), and watch out for pad bytes. This can be done in a hex editor (tedious and very error-prone) or with a script (slightly less tedious and error-prone), but is advisable only in simple cases.
- Copy the affected tag to itself with ExifTool (
exiftool '-XResolution<XResolution' a.tif); in many cases this will set the correct type. (But not in all cases: some tags are not writable by ExifTool.)
If the error is triggered by a wrong number of IFD entries in the IFD header, correcting that number in a hexadecimal editor may resolve the problem.
Value offset not word aligned:
<word-aligned-offset-value>
TIFF 6.0 Specification, page 15: value offsets are "expected" to point to values which begin on word boundaries. Page 30: "Rows must begin on byte boundaries."
Storing data at word and byte boundaries allows CPUs to more efficiently read and process the data. When it is unaligned, CPUs can require additional attempts at reading the data.
When the parameter byteoffset=true is set in Link to the jhove configuration byteoffset, this error is ignored and becomes an InfoMessage. The status also becomes "Well-Formed and valid".
- Type: ErrorMessage or InfoMessage (configurable)
- Source location:Search Source
- Examples: 1
Minor. Most viewers don't care and will happily display files despite this error. But of course, it still violates the TIFF specification. Further more, systems may suffer a performance penalty while reading or processing the TIFF. The penalty will depend on the architecture of the individual system, which data in the TIFF is unaligned, and how much of it there is.
Options:
- Add pad bytes and adapt pointers where necessary, either manually in a hex editor (tedious and very error-prone) or with a script.
- Write any metadata with ExifTool (either "really" or using some dummy operation like copying a tag to itself:
exiftool '-XResolution<XResolution' a.tif); this will silently fix this error.
Read error
Needs review
- Type: IOException
- Source location:Search Source
- Examples: Needed
Needs review
Needs review
Count mismatch for tag <tag>; expecting <minCount>, saw <count>
Needs review
- Type: TiffException
- Source location:Search Source
- Examples: Needed
Each TIFF tag has a so-called count that determines the size of its content. The counts of some tags are fixed by the TIFF specification or other specifications, so only certain numbers are allowed for these tags' counts. For example, the ImageWidth tag is required to have a count of 1 (see TIFF 6 specification, page 34) because obviously an image must have exactly one width. This error message points out a tag whose count contradicts the count that is specified for this tag.
Note that currently (~ v1.32) JHOVE only raises this error when it encounters a tag count that is lower than what is expected. So it will complain about an ImageWidth tag with a count of 0, but not about one with a count of 2 or more, although that is not valid either.
It depends; from almost no practical impact to a file that cannot be rendered.
For example, if the ImageWidth tag has a count other than 1, this clearly contradicts the specification. However, a viewer might gracefully ignore the wrong value and just assume a count of 1. As long as the actual tag value is correct (i.e., the tag contains exactly one width value), this file might thus be rendered without problems. But of course, there is no guarantee that a viewer will behave in this way, so the file might just as well not be rendered. Moreover, if the ImageWidth tag has a count of 0 because there is in fact no value (which is of course illegal) then even a robust viewer will have a hard time rendering the image correctly.
In actual practice, this random example is already a formidable mess. A TIFF file with an ImageWidth count of 1 is valid according to JHOVE and renders fine in the Windows 10 photo viewer. Setting the count to 0 results in a TIFF-HUL-6 error but still renders fine as long as there is a sensible tag value. Setting it to 2 is valid according to JHOVE 1.32 (!) but does not render in the Windows 10 photo viewer. So you see, it's complicated ...
In summary, while you might get away with this error in a robust viewer you should better try to fix it, or be confident that it really doesn't affect your file too much.
In some cases it helps to write a value (preferably the correct one) to the offending tag with ExifTool. For example, if a file has an ImageWidth value (not count) of 90, then running exiftool -ImageWidth=90 a.tif will write this value to the tag and also set the correct count of 1.
Type mismatch for tag <tag>; expecting <expected>, saw <type>
- Type: TiffException
- Source location:Search Source
- Examples: 1, 2, 3
It depends, but at least medium.
Each TIFF tag has a type (like BYTE, ASCII, SHORT, ...) that determines how its content should be interpreted. Generally, if the type of a tag is set to the wrong value its content cannot be interpreted correctly meaning that a viewer will read nonsense from the tag. Depending on the significance of a tag this may or may not prevent the file from being displayed.
However, since the types of the common TIFF tags are well-known from the respective specifications (TIFF of course, but also other specifications like XMP) some viewers might just (silently) ignore wrong types in a TIFF file and use the correct types from the specifications instead, thus being able to display files despite this error. But obviously, this is nothing one should rely on in the long run ...
Options:
- In the affected IFD entry, set the type to the correct value, if necessary adapt the count value (because values of different types may differ in size), and watch out for pad bytes. This can be done in a hex editor (tedious and very error-prone) or with a script (slightly less tedious and error-prone).
- Copy the affected tag to itself with ExifTool (
exiftool '-XResolution<XResolution' a.tif); in many cases this will set the correct type. (But not in all cases: some tags are not writable by ExifTool.)
Type mismatch for tag <tag>; expecting <type1> or ,<type2>, saw <type>
- Type: TiffException
- Source location:Search Source
- Examples: 1
Same as TIFF-HUL-7.
Same as TIFF-HUL-7.
Invalid GeoKeyDirectory tag
Needs review
- Type: TiffException
- Source location:Search Source
- Examples: Needed
Needs review
Needs review
GeoKey <key> out of sequence
Needs review
- Type: TiffException
- Source location:Search Source
- Examples: Needed
Needs review
Needs review
Undocumented TIFF tag ShadowScale (50739)
Needs review
- Type: InfoMessage
- Source location:Search Source
- Examples: Needed
Needs review
Needs review
Unknown TIFF IFD tag: <tag>
An IFD tag of the given type was found but ignored because the module is currently unaware of how to interpret the tag's data.
- Type: InfoMessage
- Source location:Search Source
- Examples: 1
The module is unable to inspect the contents of the IFD tag.
To request support for an unrecognized IFD tag, please report it to the project.
Read error for tag <tag>
Needs review
- Type: IOException
- Source location:Search Source
- Examples: Needed
Needs review
Needs review
Invalid or ill-formed XMP metadata
Needs review
- Type: TiffException
- Source location:Search Source
- Examples: Needed
Needs review
Needs review
Unknown Exif Interoperability IFD tag
Needs review
- Type: ErrorMessage
- Source location:Search Source
- Examples: Needed
Needs review
Needs review
Read error for tag <tag>
Needs review
- Type: IOException
- Source location:Search Source
- Examples: Needed
Needs review
Needs review
Unknown GPSInfo IFD tag
Needs review
- Type: ErrorMessage
- Source location:Search Source
- Examples: Needed
Needs review
Needs review
Read error for tag <tag>
Needs review
- Type: IOException
- Source location:Search Source
- Examples: Needed
Needs review
Needs review
Read error for tag <tag>
Needs review
- Type: IOException
- Source location:Search Source
- Examples: Needed
Needs review
Needs review
No TIFF header: <char0> <char1>
Needs review
- Type: TiffException
- Source location:Search Source
- Examples: Needed
Needs review
Needs review
No TIFF magic number: <magic>
The header is 8 bytes long, the magic bytes contain of the number 42 and the description of the byte order that serves to identify the format because of internal signatures. Plus, there is an offset of the first IDF (Image File Directory).
- Type: TiffException
- Source location:Search Source
- Examples: Needed
Needs review
Needs review
No TIFF header: <char0> <char1>
Needs review
- Type: TiffException
- Source location:Search Source
- Examples: Needed
Needs review
Needs review
No TIFF magic number: <magic>
Needs review
- Type: TiffException
- Source location:Search Source
- Examples: Needed
Needs review
Needs review
Strips and tiles defined together
TIFF 6.0 Specification, p. 103, chapter "Strips and tiles".
- Type: InfoMessage
- Source location:Search Source
- Examples: Needed
Needs review
Needs review
Neither strips nor tiles defined
Needs review
- Type: InfoMessage
- Source location:Search Source
- Examples: 1
Needs review
Needs review
StripOffsets not defined
- Type: InfoMessage
- Source location:Search Source
- Examples: 1
The StripOffsets tag tells viewer software where exactly the actual image data is located in a TIFF file. Without this information it is next to impossible to render the file.
In general, this error can only be fixed by manual analysis and repair - if at all.
StripByteCounts not defined
- Type: InfoMessage
- Source location:Search Source
- Examples: 1
Image data in a TIFF file can be organized in separate chunks of bytes called strips. The StripByteCounts tag records the size of each strip (i.e., the number of bytes in it). This information is required to correctly render the file, so if this tag is missing this is (apart from violating the TIFF specification, according to which this tag is required) a serious problem. However, TIFF viewer software might still be able to render the image because the missing StripByteCounts data can sometimes be calculated based on information present in other TIFF tags - this is nothing one should rely on though.
In general, this error can only be fixed by manual analysis and repair.
StripOffsets inconsistent with StripByteCounts: <len> != <stripByteCounts.length>
This error message is triggered when tags 273 (StripOffsets) and 279 (StripByteCounts) do not agree on the number of values, i.e., on the number of strips, contained in the image. Consistency and accuracy of both tags are essential to parse and display the image data.
- Type: InfoMessage
- Source location:Search Source
- Examples:
stripoffsets-short-1.tiffrom the files attached to this issue
Middle to critical, as the image may be partially or entirely unreadable. Impact is described in the following blog post: Lindlar, Micky. “Troubles with TIFF: StripOffsets Inconsistent with StripByteCounts.” OPF Blogs, April 12, 2020. https://openpreservation.org/blogs/troubles-with-tiff-stripoffsets-inconsistent-with-stripbytecounts/.
In some cases, if the image strips data is stored contiguously, it might be possible to fix the file. The fix is described in the following blog post: Caron, Bertrand. “When Stars and Strips Align: Fixing the StripOffsets TIFF Tag.” OPF Blogs, July 30, 2025. https://openpreservation.org/blogs/when-stars-and-strips-align-fixing-the-stripoffsets-tiff-tag/.
Invalid strip offset
This error is usually returned when a strip offset is invalid, e.g., because it is greater than the file's last offset.
- Type: InfoMessage
- Source location:Search Source
- Examples:
- 1
-
stripoffsets-short-1.tiffrom the files attached to this issue
Needs review
Needs review
TileWidth not defined
TIFF 6.0 Specification, p. 109: datatype "short", has to be defined with a multiple of 8.
- Type: InfoMessage
- Source location:Search Source
- Examples: Needed
Needs review
Needs review
TileLength not defined
TIFF 6.0 Specification, p. 109: datatype "short", has to be defined with a multiple of 8.
- Type: InfoMessage
- Source location:Search Source
- Examples: 1
Needs review
Needs review
TileOffsets not defined
TIFF 6.0 Specification, p. 109, data type Long, length number of tiles.
- Type: InfoMessage
- Source location:Search Source
- Examples: Needed
Needs review
Needs review
TileByteCounts not defined
TIFF 6.0 Specification, p. 109, data type Long, length number of tiles.
- Type: InfoMessage
- Source location:Search Source
- Examples: Needed
Needs review
Needs review
TileWidth not a multiple of 16: <tileWidth>
TileWidth must be a multiple of 16. This restriction improves performance in some graphics environments and enhances compatibility with compression schemes such as JPEG. TIFF 6.0 Specification, p. 67.
- Type: InfoMessage
- Source location:Search Source
- Examples: 1
Needs review
Needs review
TileLength not a multiple of 16: <tileLength>
TileLength must be a multiple of 16 for compatibility with compression schemes such as JPEG. TIFF 6.0 Specification, p. 68.
- Type: InfoMessage
- Source location:Search Source
- Examples: Needed
Needs review
Needs review
Insufficient values for TileOffsets: <tileOffsets.length> < <spp_tpi>
Needs review
- Type: InfoMessage
- Source location:Search Source
- Examples: Needed
Needs review
Needs review
Insufficient values for TileByteCountts: <tileByteCounts.length> < <spp_tpi>
Needs review
- Type: InfoMessage
- Source location:Search Source
- Examples: Needed
Needs review
Needs review
Insufficient values for TileOffsets: <tileOffsets.length> < <tilesPerImage>
Needs review
- Type: InfoMessage
- Source location:Search Source
- Examples: Needed
Needs review
Needs review
Insufficient values for TileByteCounts: <tileByteCounts.length> < <tilesPerImage>
Needs review
- Type: InfoMessage
- Source location:Search Source
- Examples: Needed
Needs review
Needs review
PhotometricInterpretation and NewSubfileType must agree on transparency mask
Needs review
- Type: InfoMessage
- Source location:Search Source
- Examples: 1
Needs review
Needs review
For transparency mask BitsPerSample must be 1
Needs review
- Type: InfoMessage
- Source location:Search Source
- Examples: Needed
Needs review
Needs review
For PhotometricInterpretation, SamplesPerPixel must be >= 1, equals <samplesPerPixel>
Needs review
- Type: InfoMessage
- Source location:Search Source
- Examples: Needed
Needs review
Needs review
For PhotometricInterpretation, SamplesPerPixel must be >= 3, equals <samplesPerPixel>
Needs review
- Type: InfoMessage
- Source location:Search Source
- Examples: Needed
Needs review
Needs review
ColorMap not defined for palette-color
Needs review
- Type: InfoMessage
- Source location:Search Source
- Examples: Needed
Needs review
Needs review
For palette-color SamplesPerPixel must be 1: <samplesPerPixel>
Needs review
- Type: InfoMessage
- Source location:Search Source
- Examples: Needed
Needs review
Needs review
Insufficient ColorMap values for palette-color: <colormapBitCodeValue.length> < <len>
Needs review
- Type: InfoMessage
- Source location:Search Source
- Examples: Needed
Needs review
Needs review
CellLength tag not permitted when Threshholding not 2
Needs review
- Type: InfoMessage
- Source location:Search Source
- Examples: Needed
Needs review
Needs review
DotRange out of range specified by BitsPerSample
Needs review
- Type: InfoMessage
- Source location:Search Source
- Examples: Needed
Needs review
Needs review
JPEGProc not defined for JPEG compression
Needs review
- Type: InfoMessage
- Source location:Search Source
- Examples: 1
Needs review
Needs review
SamplesPerPixel-ExtraSamples not 1 or 3: <samplesPerPixel> - <len>
Needs review
- Type: InfoMessage
- Source location:Search Source
- Examples: Needed
Needs review
Needs review
BitsPerSample not 8 or 16 for CIE L*a*b*
Needs review
- Type: InfoMessage
- Source location:Search Source
- Examples: Needed
Needs review
Needs review
XClipPathUnits not defined for ClipPath
Needs review
- Type: InfoMessage
- Source location:Search Source
- Examples: Needed
Needs review
Needs review
Invalid DateTime length: <dateTime>
The date and time format must be "YYYY:MM:DD HH:MM:SS", which is 20 characters long, including a final null byte. In this case, the value is not 20 ASCII characters long.
- Type: InfoMessage
- Source location:Search Source
- Examples: Needed
Minor, as far as we know. The only impact would be that some tools would not be able to parse the date and would not return it.
Needs review
Invalid DateTime separator: <dateTime>
The date-time format is incompatible with the baseline TIFF specification.
- Type: InfoMessage
- Source location:Search Source
- Examples: Needed
Needs review
TIFF date formatting could be corrected using ExifTool.
Invalid DateTime digit: <dateTime>
Needs review
- Type: InfoMessage
- Source location:Search Source
- Examples: Needed
Needs review
Needs review
Invalid DateTime digit: <dateTime>
Needs review
- Type: InfoMessage
- Source location:Search Source
- Examples: Needed
Needs review
Needs review
Premature EOF
Needs review
- Type: IOException
- Source location:Search Source
- Examples: 1
Needs review
Needs review
No IFD in file
An IFD (Image File directory) is mandatory in each TIFF file.
- Type: TiffException
- Source location:Search Source
- Examples: Needed
Needs review
Needs review
IFD offset not word-aligned: <next>
TIFF 6.0 Specification, page 13: "The [first IFD] may be at any location in the file after the header but must begin on a word boundary."
Storing data at word boundaries allows CPUs to more efficiently read and process the data. When it is unaligned, CPUs can require additional attempts at reading the data.
When the parameter byteoffset=true is set in Link to the jhove configuration byteoffset, this error is ignored and becomes an InfoMessage. The status also becomes Well-Formed and valid.
- Type: TiffException
- Source location:Search Source
- Examples: Needed
Systems may suffer a performance penalty while reading or processing the TIFF. The penalty will depend on the architecture of the individual system, which data in the TIFF is unaligned, and how much of it there is.
Needs review
More than 50 IFDs in chain, probably an infinite loop
- Type: TiffException
- Source location:Search Source
- Examples: 1
A TIFF file must have at least one IFD, or Image File Directory; this is the central data structure of every image. While many TIFF files have exactly one IFD, it is possible to include multiple IFDs in the same file. This is used for example to implement multi page TIFF files (e.g., scanned documents) where each page has its own IFD. The IFDs in this case form a linked list starting from the first IFD like this: IFD0 → IFD1 → IFD2 → ... However, if any IFD in this list does not link to its successor but to a previous IFD (e.g., IFD2 → IFD0) or to itself (e.g., IFD0 → IFD0) this creates an infinite loop of IFDs which can easily confuse TIFF viewer software, up to the point where the image(s) will not be rendered.
However, while an actual infinite loop of IFDs is definitely a problem (and also a violation of the TIFF specification because creating such a loop requires the same pointer to be used in two different places, showing utter disrespect for the "No Duplicate Pointers. No data should be referenced from more than one place." rule on page 26 of the TIFF 6.0 specification), even a very long chain of IFDs does not per se violate the TIFF specification as long as it does not include circular (and thus, duplicate) references. So this error does not necessarily indicate a problem but might only be thrown because of a long, but perfectly legal, list of IFDs in a multi page TIFF file with more than 50 pages.
It depends. None required in case of a false alarm (long multi page TIFF without actual infinite loop), manual investigation otherwise.
TIFF compression scheme 6 is deprecated
At least one IFD (image stream) inside the TIFF file has a TIFF tag 259 ("Compression value") with a value of "6" ('old-style' JPEG). This is allowed in the TIFF 6.0 specification, but a technical note published on March 17th 1995 recommends using a new design to embed JPEG image streams into TIFF files (tag 259 = "7").
A recent version of GIMP (v. 2.10.36) appears to generate TIFFs with a thumbnail image that uses 'old-style' JPEG embedding. This may trigger TIFF-hul-61.
- Type: InfoMessage
- Source location:Search Source
- Examples: 1
No impact was noticed so far. Though "old-style" JPEG embedding is deprecated, the technical note says that "Readers that need to handle existing 6.0 JPEG files may read both old and new files, using whatever interpretation of the 6.0 spec they did before."
Needs review.
ImageWidth not defined
TIFF 6.0 Specification, p. 17: datatype short or long, contains the number of columns in the image, i.e. the number of pixels per scanline.
- Type: InfoMessage
- Source location:Search Source
- Examples: 1
Needs review
Needs review
PhotometricInterpretation not defined
Needs review
- Type: InfoMessage
- Source location:Search Source
- Examples: 1
Needs review
Needs review
ImageLength not defined
Needs review
- Type: InfoMessage
- Source location:Search Source
- Examples: 1
Needs review
Needs review
Undocumented TIFF tag
Needs review
- Type: InfoMessage
- Source location:Search Source
- Examples: 1
Needs review
Needs review
<Tag> value out of range: <value>
The value found for the given tag is outside the range of expected values for that tag.
- Type: ErrorMessage
- Source location: Search Source
- Examples: 1
Needs review
Needs review
File is too short
Needs Review
- Type: ErrorMessage
- Source location: Search Source
- Examples: Needs Review
Needs review
Needs review
Unexpected Exception: {0}
Needs Review
- Type: ErrorMessage
- Source location: Search Source
- Examples: Needs Review
Needs review
Needs review
Unexpected Exception: {0}
Needs Review
- Type: ErrorMessage
- Source location: Search Source
- Examples: Needs Review
Needs review
Needs review
Embedded Exif block is too short
Needs Review
- Type: ErrorMessage
- Source location: Search Source
- Examples: Needs Review
Needs review
Needs review
Bad ICCProfile in tag {0,number,#}; message {1}
Needs Review
- Type: ErrorMessage
- Source location: Search Source
- Examples: Needs Review
Needs review
Needs review