mirror of
https://github.com/haraldk/TwelveMonkeys.git
synced 2025-08-02 19:15:29 -04:00
TMI-22: Cleaned up reading of ICC profile, trying to be more lenient about chunk count/chunk index.
This commit is contained in:
parent
92690e1644
commit
6c082353d6
@ -731,7 +731,7 @@ public class JPEGImageReader extends ImageReaderBase {
|
|||||||
int chunkCount = stream.readUnsignedByte();
|
int chunkCount = stream.readUnsignedByte();
|
||||||
|
|
||||||
if (chunkNumber != 1 && chunkCount != 1) {
|
if (chunkNumber != 1 && chunkCount != 1) {
|
||||||
processWarningOccurred(String.format("Bad number of 'ICC_PROFILE' chunks: %d of %d.", chunkNumber, chunkCount));
|
processWarningOccurred(String.format("Bad number of 'ICC_PROFILE' chunks: %d of %d. Assuming single chunk.", chunkNumber, chunkCount));
|
||||||
}
|
}
|
||||||
|
|
||||||
return readICCProfileSafe(stream);
|
return readICCProfileSafe(stream);
|
||||||
@ -742,20 +742,21 @@ public class JPEGImageReader extends ImageReaderBase {
|
|||||||
int chunkNumber = stream.readUnsignedByte();
|
int chunkNumber = stream.readUnsignedByte();
|
||||||
int chunkCount = stream.readUnsignedByte();
|
int chunkCount = stream.readUnsignedByte();
|
||||||
|
|
||||||
if (chunkNumber < 1) {
|
|
||||||
// Some weird JPEGs use 0-based indexes... count == 0 and all numbers == 0. Ignore these profiles
|
|
||||||
processWarningOccurred(String.format("Invalid 'ICC_PROFILE' chunk index: %d. Ignoring ICC profile.", chunkNumber));
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
boolean badICC = false;
|
boolean badICC = false;
|
||||||
if (chunkCount != segments.size()) {
|
if (chunkCount != segments.size()) {
|
||||||
|
// Some weird JPEGs use 0-based indexes... count == 0 and all numbers == 0.
|
||||||
// Others use count == 1, and all numbers == 1.
|
// Others use count == 1, and all numbers == 1.
|
||||||
// Handle these by issuing warning
|
// Handle these by issuing warning
|
||||||
badICC = true;
|
badICC = true;
|
||||||
processWarningOccurred(String.format("Unexpected 'ICC_PROFILE' chunk count: %d. Ignoring count, assuming %d chunks in sequence.", chunkCount, segments.size()));
|
processWarningOccurred(String.format("Unexpected 'ICC_PROFILE' chunk count: %d. Ignoring count, assuming %d chunks in sequence.", chunkCount, segments.size()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!badICC && chunkNumber < 1) {
|
||||||
|
// Anything else is just ignored
|
||||||
|
processWarningOccurred(String.format("Invalid 'ICC_PROFILE' chunk index: %d. Ignoring ICC profile.", chunkNumber));
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
int count = badICC ? segments.size() : chunkCount;
|
int count = badICC ? segments.size() : chunkCount;
|
||||||
InputStream[] streams = new InputStream[count];
|
InputStream[] streams = new InputStream[count];
|
||||||
streams[badICC ? 0 : chunkNumber - 1] = stream;
|
streams[badICC ? 0 : chunkNumber - 1] = stream;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user