[
https://issues.apache.org/jira/browse/IMAGING-134?focusedWorklogId=256367&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-256367
]
ASF GitHub Bot logged work on IMAGING-134:
------------------------------------------
Author: ASF GitHub Bot
Created on: 08/Jun/19 03:54
Start Date: 08/Jun/19 03:54
Worklog Time Spent: 10m
Work Description: kinow commented on pull request #47: IMAGING-134: Fix
JPEG handling for files encoded with RST markers
URL: https://github.com/apache/commons-imaging/pull/47#discussion_r291793193
##########
File path:
src/main/java/org/apache/commons/imaging/formats/jpeg/decoder/JpegDecoder.java
##########
@@ -393,6 +418,74 @@ private void readMCU(final JpegInputStream is, final
int[] preds, final Block[]
}
}
+ /**
+ * Returns an array of JpegInputStream where each field contains the
JpegInputStream
+ * for one interval.
+ * @param scanPayload array to read intervals from
+ * @return JpegInputStreams for all intervals, at least one stream is
always provided
+ */
+ static JpegInputStream[] splitByRstMarkers(final int[] scanPayload) {
+ final List<Integer> intervalStarts =
getIntervalStartPositions(scanPayload);
+ // get number of intervals in payload to init an array of approbiate
length
+ final int intervalCount = intervalStarts.size();
+ JpegInputStream[] streams = new JpegInputStream[intervalCount];
+ for (int i = 0; i < intervalCount; i++) {
+ int from = intervalStarts.get(i);
+ int to;
+ if (i < intervalCount - 1) {
+ // because each restart marker needs two bytes the end of
+ // this interval is two bytes before the next interval starts
+ to = intervalStarts.get(i + 1) - 2;
+ } else { // the last interval ends with the array
+ to = scanPayload.length;
+ }
+ int[] interval = Arrays.copyOfRange(scanPayload, from, to);
+ streams[i] = new JpegInputStream(interval);
+ }
+ return streams;
+ }
+
+ /**
+ * Returns the positions of where each interval in the provided array
starts.
+ * @param scanPayload array to examine
+ * @return the start positions, the number of start positions is also the
count of intervals
+ * while the number of restart markers found = number of start positions -
1
+ * because restart markers are between intervals
Review comment:
What about moving the longer text to the main body of the javadocs comment?
i.e.
```java
* Returns the positions of where each interval in the provided array
starts. The number
* of start positions is also the count of intervals while the number of
restart markers
* found is equal to the number of start positions minus one (because
restart markers
* are between intervals).
* @param scanPayload array to examine
* @return the start positions
```
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]
Issue Time Tracking
-------------------
Worklog Id: (was: 256367)
Time Spent: 2h 10m (was: 2h)
> Invalid marker found in entropy data
> ------------------------------------
>
> Key: IMAGING-134
> URL: https://issues.apache.org/jira/browse/IMAGING-134
> Project: Commons Imaging
> Issue Type: Bug
> Components: Format: JPEG
> Affects Versions: 1.0-alpha1
> Reporter: John Hewson
> Assignee: Bruno P. Kinoshita
> Priority: Major
> Fix For: Patch Needed
>
> Attachments: image.jpeg
>
> Time Spent: 2h 10m
> Remaining Estimate: 0h
>
> I'm getting the following exception when trying to read a JPEG:
> Exception in thread "main" org.apache.commons.imaging.ImageReadException:
> Invalid marker found in entropy data
> at
> org.apache.commons.imaging.formats.jpeg.decoder.JpegInputStream.nextBit(JpegInputStream.java:50)
> at
> org.apache.commons.imaging.formats.jpeg.decoder.JpegDecoder.decode(JpegDecoder.java:426)
> at
> org.apache.commons.imaging.formats.jpeg.decoder.JpegDecoder.readMCU(JpegDecoder.java:320)
> at
> org.apache.commons.imaging.formats.jpeg.decoder.JpegDecoder.visitSOS(JpegDecoder.java:124)
> at
> org.apache.commons.imaging.formats.jpeg.JpegUtils.traverseJFIF(JpegUtils.java:80)
> at
> org.apache.commons.imaging.formats.jpeg.decoder.JpegDecoder.decode(JpegDecoder.java:436)
> at
> org.apache.commons.imaging.formats.jpeg.JpegImageParser.getBufferedImage(JpegImageParser.java:98)
> at
> org.apache.commons.imaging.Imaging.getBufferedImage(Imaging.java:1378)
> at
> org.apache.commons.imaging.Imaging.getBufferedImage(Imaging.java:1341)
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)