Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,12 @@ public void close() throws IOException {
long[] allOffsets = null;
try (RandomAccessInputStream in = new RandomAccessInputStream(id)) {
TiffParser parser = new TiffParser(in);
littleEndian = parser.checkHeader();
Boolean writtenLittleEndian = parser.checkHeader();
if (writtenLittleEndian == null) {
// this would be extremely unexpected
throw new IOException("Endian check failed on written data");
}
littleEndian = writtenLittleEndian;
allOffsets = parser.getIFDOffsets();
}

Expand Down
5 changes: 4 additions & 1 deletion components/formats-bsd/src/loci/formats/tiff/TiffParser.java
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,10 @@ public TiffParser(RandomAccessInputStream in) {
doCaching = true;
try {
long fp = in.getFilePointer();
checkHeader();
Boolean littleEndian = checkHeader();
if (littleEndian == null) {
LOGGER.error("Endian check failed, this may be an invalid file");
}
in.seek(fp);
}
catch (IOException e) { }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@ public void setUp(String mockClassName) throws Exception {
@Test
public void testHeader() throws IOException {
assertTrue(tiffParser.isValidHeader());
// isValidHeader above makes sure that checkHeader is non-null
assertTrue(tiffParser.checkHeader());
assertFalse(tiffParser.isBigTiff());
}
Expand Down Expand Up @@ -178,6 +179,8 @@ public void testGetResolutionUnit() throws IOException, FormatException {
public void testNonUniformRowsPerStrip() throws IOException, FormatException {
mock = new NonUniformRowsPerStripMock();
tiffParser = mock.getTiffParser();
assertTrue(tiffParser.isValidHeader());
// isValidHeader above makes sure that checkHeader is non-null
assertTrue(tiffParser.checkHeader());
tiffParser.getFirstIFD().getRowsPerStrip();
mock.close();
Expand All @@ -187,6 +190,8 @@ public void testNonUniformRowsPerStrip() throws IOException, FormatException {
public void testBitsPerSampleMismatch() throws IOException, FormatException {
mock = new BitsPerSampleSamplesPerPixelMismatchMock();
tiffParser = mock.getTiffParser();
assertTrue(tiffParser.isValidHeader());
// isValidHeader above makes sure that checkHeader is non-null
assertTrue(tiffParser.checkHeader());
IFD ifd = tiffParser.getFirstIFD();
int[] bitsPerSample = ifd.getBitsPerSample();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,7 @@ public void testNullBytes() throws IOException {
public void testWriteHeaderBigEndianRegularTiff() throws IOException {
tiffSaver.writeHeader();
assertTrue(tiffParser.isValidHeader());
// isValidHeader above makes sure that checkHeader is non-null
assertFalse(tiffParser.checkHeader());
assertFalse(tiffParser.isBigTiff());
}
Expand All @@ -126,6 +127,7 @@ public void testWriteHeaderLittleEndianRegularTiff() throws IOException {
tiffSaver.setLittleEndian(true);
tiffSaver.writeHeader();
assertTrue(tiffParser.isValidHeader());
// isValidHeader above makes sure that checkHeader is non-null
assertTrue(tiffParser.checkHeader());
assertFalse(tiffParser.isBigTiff());
}
Expand All @@ -136,6 +138,7 @@ public void testWriteHeaderBigEndianBigTiff() throws IOException {
tiffSaver.setBigTiff(true);
tiffSaver.writeHeader();
assertTrue(tiffParser.isValidHeader());
// isValidHeader above makes sure that checkHeader is non-null
assertFalse(tiffParser.checkHeader());
assertTrue(tiffParser.isBigTiff());
}
Expand All @@ -146,6 +149,7 @@ public void testWriteHeaderLittleEndianBigTiff() throws IOException {
tiffSaver.setBigTiff(true);
tiffSaver.writeHeader();
assertTrue(tiffParser.isValidHeader());
// isValidHeader above makes sure that checkHeader is non-null
assertTrue(tiffParser.checkHeader());
assertTrue(tiffParser.isBigTiff());
}
Expand Down
6 changes: 5 additions & 1 deletion components/formats-gpl/src/loci/formats/in/LeicaReader.java
Original file line number Diff line number Diff line change
Expand Up @@ -772,7 +772,11 @@ else if (checkSuffix(baseFile, TiffReader.TIFF_SUFFIXES) && isGroupFiles())

in = new RandomAccessInputStream(baseFile, 16);
TiffParser tp = new TiffParser(in);
in.order(tp.checkHeader().booleanValue());
Boolean littleEndian = tp.checkHeader();
if (littleEndian == null) {
throw new FormatException("Invalid TIFF file");
}
in.order(littleEndian.booleanValue());

in.seek(0);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1170,7 +1170,10 @@ else if (exposureTimes.size() == 1 && exposureTimes.size() < getEffectiveSizeC()
}
stream = new RandomAccessInputStream(file, 16);
tp = new TiffParser(stream);
tp.checkHeader();
Boolean tiffLittleEndian = tp.checkHeader();
if (tiffLittleEndian == null) {
throw new FormatException("Invalid TIFF file: " + file);
}
IFDList f = tp.getMainIFDs();
if (f.size() > 0) {
lastFile = fileIndex;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -491,6 +491,9 @@ protected void initFile(String id) throws FormatException, IOException {
int count = seriesCounts.get(lsmFilenames[i]);
TiffParser tp = new TiffParser(stream);
Boolean littleEndian = tp.checkHeader();
if (littleEndian == null) {
throw new FormatException("Invalid TIFF file: " + lsmFilenames[i]);
}
long[] ifdOffsets = tp.getIFDOffsets();
int ifdsPerSeries = (ifdOffsets.length / 2) / count;

Expand Down
Loading