mirror of
https://github.com/haraldk/TwelveMonkeys.git
synced 2025-08-03 11:35:29 -04:00
TMI-107: JPEGSegmentImageInputStream now recovers from EOFException while parsing segments.
This commit is contained in:
parent
34efe84e5a
commit
2b2dd2fb40
@ -74,7 +74,9 @@ final class JPEGSegmentImageInputStream extends ImageInputStreamImpl {
|
||||
|
||||
if (streamPos >= segment.end()) {
|
||||
// Go forward in cache
|
||||
while (++currentSegment < segments.size()) {
|
||||
int cachedSegment = currentSegment;
|
||||
while (++cachedSegment < segments.size()) {
|
||||
currentSegment = cachedSegment;
|
||||
segment = segments.get(currentSegment);
|
||||
|
||||
if (streamPos >= segment.start && streamPos < segment.end()) {
|
||||
@ -157,7 +159,9 @@ final class JPEGSegmentImageInputStream extends ImageInputStreamImpl {
|
||||
}
|
||||
else if (streamPos < segment.start) {
|
||||
// Go back in cache
|
||||
while (--currentSegment >= 0) {
|
||||
int cachedSegment = currentSegment;
|
||||
while (--cachedSegment >= 0) {
|
||||
currentSegment = cachedSegment;
|
||||
segment = segments.get(currentSegment);
|
||||
|
||||
if (streamPos >= segment.start && streamPos < segment.end()) {
|
||||
|
@ -417,19 +417,52 @@ public class JPEGImageReaderTest extends ImageReaderAbstractTestCase<JPEGImageRe
|
||||
@Ignore("Known issue in com.sun...JPEGMetadata")
|
||||
@Test
|
||||
public void testExifStandardMetadataColorSpaceTypeYCbCr() {
|
||||
// These reports RGB (by Exif non-presence?), while the data is really YCbCr
|
||||
// These reports RGB in standard metadata, while the data is really YCbCr
|
||||
fail("/jpeg/exif-jpeg-thumbnail-sony-dsc-p150-inverted-colors.jpg");
|
||||
fail("/jpeg/exif-pspro-13-inverted-colors.jpg");
|
||||
fail("/jpeg/no-jfif-ycbcr.jpg");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testBrokenReadRasterAfterGetMetadataException() throws IOException {
|
||||
// See issue 107, from PDFBox team
|
||||
JPEGImageReader reader = createReader();
|
||||
|
||||
try {
|
||||
for (TestData broken : getBrokenTestData()) {
|
||||
reader.setInput(broken.getInputStream());
|
||||
|
||||
try {
|
||||
reader.getImageMetadata(0);
|
||||
}
|
||||
catch (IOException ignore) {
|
||||
// Expected IOException here, due to broken file
|
||||
// ignore.printStackTrace();
|
||||
}
|
||||
|
||||
try {
|
||||
reader.readRaster(0, null);
|
||||
}
|
||||
catch (IOException expected) {
|
||||
// Should not throw anything other than IOException here
|
||||
if (!(expected instanceof EOFException)) {
|
||||
assertNotNull(expected.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
finally {
|
||||
reader.dispose();
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testBrokenRead() throws IOException {
|
||||
JPEGImageReader reader = createReader();
|
||||
|
||||
try {
|
||||
for (TestData broken : getBrokenTestData()) {
|
||||
reader.setInput(ImageIO.createImageInputStream(broken.getInput()));
|
||||
reader.setInput(broken.getInputStream());
|
||||
|
||||
try {
|
||||
reader.read(0);
|
||||
@ -455,7 +488,7 @@ public class JPEGImageReaderTest extends ImageReaderAbstractTestCase<JPEGImageRe
|
||||
|
||||
try {
|
||||
for (TestData broken : getBrokenTestData()) {
|
||||
reader.setInput(ImageIO.createImageInputStream(broken.getInput()));
|
||||
reader.setInput(broken.getInputStream());
|
||||
|
||||
Dimension exptectedSize = broken.getDimension(0);
|
||||
|
||||
@ -484,7 +517,7 @@ public class JPEGImageReaderTest extends ImageReaderAbstractTestCase<JPEGImageRe
|
||||
|
||||
try {
|
||||
for (TestData broken : getBrokenTestData()) {
|
||||
reader.setInput(ImageIO.createImageInputStream(broken.getInput()));
|
||||
reader.setInput(broken.getInputStream());
|
||||
|
||||
try {
|
||||
reader.getImageMetadata(0);
|
||||
|
@ -56,6 +56,7 @@ import static org.junit.Assert.*;
|
||||
public class JPEGSegmentImageInputStreamTest {
|
||||
static {
|
||||
IIORegistry.getDefaultInstance().registerServiceProvider(new URLImageInputStreamSpi());
|
||||
ImageIO.setUseCache(false);
|
||||
}
|
||||
|
||||
protected URL getClassLoaderResource(final String pName) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user