Author: tilman
Date: Sun Aug 25 12:05:22 2024
New Revision: 1920177
URL: http://svn.apache.org/viewvc?rev=1920177&view=rev
Log:
PDFBOX-5872: avoid NPE on image library / allow JPEG2000 library that doesn't
support raster, by Gábor Stefanik
Modified:
pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/filter/DCTFilter.java
pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/filter/Filter.java
pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/JPEGFactory.java
Modified:
pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/filter/DCTFilter.java
URL:
http://svn.apache.org/viewvc/pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/filter/DCTFilter.java?rev=1920177&r1=1920176&r2=1920177&view=diff
==============================================================================
---
pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/filter/DCTFilter.java
(original)
+++
pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/filter/DCTFilter.java
Sun Aug 25 12:05:22 2024
@@ -59,7 +59,7 @@ final class DCTFilter extends Filter
public DecodeResult decode(InputStream encoded, OutputStream decoded,
COSDictionary
parameters, int index, DecodeOptions options) throws IOException
{
- ImageReader reader = findImageReader("JPEG", "a suitable JAI I/O image
filter is not installed");
+ ImageReader reader = findRasterReader("JPEG", "a suitable JAI I/O
image filter is not installed");
ImageInputStream iis = null;
try
{
Modified:
pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/filter/Filter.java
URL:
http://svn.apache.org/viewvc/pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/filter/Filter.java?rev=1920177&r1=1920176&r2=1920177&view=diff
==============================================================================
---
pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/filter/Filter.java
(original)
+++
pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/filter/Filter.java
Sun Aug 25 12:05:22 2024
@@ -153,12 +153,39 @@ public abstract class Filter
while (readers.hasNext())
{
reader = readers.next();
- if (reader != null && reader.canReadRaster())
+ if (reader != null)
{
return reader;
}
}
throw new MissingImageReaderException("Cannot read " + formatName + "
image: " + errorCause);
+ }
+
+ /**
+ * Finds a suitable image reader for an image format.
+ *
+ * @param formatName The image format to search for.
+ * @param errorCause The probably cause if something goes wrong.
+ * @return The image reader for the format.
+ * @throws MissingImageReaderException if no image reader is found.
+ */
+ public static final ImageReader findRasterReader(String formatName, String
errorCause)
+ throws MissingImageReaderException
+ {
+ Iterator<ImageReader> readers =
ImageIO.getImageReadersByFormatName(formatName);
+ while (readers.hasNext())
+ {
+ ImageReader reader = readers.next();
+ if (reader != null)
+ {
+ if (reader.canReadRaster())
+ {
+ return reader;
+ }
+ reader.dispose();
+ }
+ }
+ throw new MissingImageReaderException("Cannot read " + formatName + "
image: " + errorCause);
}
/**
Modified:
pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/JPEGFactory.java
URL:
http://svn.apache.org/viewvc/pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/JPEGFactory.java?rev=1920177&r1=1920176&r2=1920177&view=diff
==============================================================================
---
pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/JPEGFactory.java
(original)
+++
pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/JPEGFactory.java
Sun Aug 25 12:05:22 2024
@@ -47,6 +47,7 @@ import org.apache.commons.logging.LogFac
import org.apache.pdfbox.cos.COSArray;
import org.apache.pdfbox.cos.COSInteger;
import org.apache.pdfbox.cos.COSName;
+import org.apache.pdfbox.filter.Filter;
import org.apache.pdfbox.filter.MissingImageReaderException;
import org.apache.pdfbox.io.IOUtils;
import org.apache.pdfbox.pdmodel.PDDocument;
@@ -148,17 +149,8 @@ public final class JPEGFactory
private static Dimensions retrieveDimensions(ByteArrayInputStream stream)
throws IOException
{
- // find suitable image reader
- Iterator<ImageReader> readers =
ImageIO.getImageReadersByFormatName("JPEG");
- ImageReader reader = null;
- while (readers.hasNext())
- {
- reader = readers.next();
- if (reader.canReadRaster())
- {
- break;
- }
- }
+ ImageReader reader =
+ Filter.findRasterReader("JPEG", "a suitable JAI I/O image
filter is not installed");
if (reader == null)
{