Author: tilman
Date: Sun Aug 25 11:05:23 2024
New Revision: 1920176
URL: http://svn.apache.org/viewvc?rev=1920176&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/3.0/pdfbox/src/main/java/org/apache/pdfbox/filter/DCTFilter.java
pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/filter/Filter.java
pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/JPEGFactory.java
Modified:
pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/filter/DCTFilter.java
URL:
http://svn.apache.org/viewvc/pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/filter/DCTFilter.java?rev=1920176&r1=1920175&r2=1920176&view=diff
==============================================================================
---
pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/filter/DCTFilter.java
(original)
+++
pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/filter/DCTFilter.java
Sun Aug 25 11:05:23 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");
try (ImageInputStream iis = ImageIO.createImageInputStream(encoded))
{
Modified:
pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/filter/Filter.java
URL:
http://svn.apache.org/viewvc/pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/filter/Filter.java?rev=1920176&r1=1920175&r2=1920176&view=diff
==============================================================================
---
pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/filter/Filter.java
(original)
+++
pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/filter/Filter.java
Sun Aug 25 11:05:23 2024
@@ -149,7 +149,7 @@ public abstract class Filter
}
/**
- * Finds a suitable image raster reader for an image format.
+ * 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.
@@ -163,11 +163,37 @@ public abstract class Filter
while (readers.hasNext())
{
ImageReader reader = readers.next();
- if (reader.canReadRaster())
+ if (reader != null)
{
return reader;
}
- reader.dispose();
+ }
+ throw new MissingImageReaderException("Cannot read " + formatName + "
image: " + errorCause);
+ }
+
+ /**
+ * Finds a suitable image raster 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/3.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/JPEGFactory.java
URL:
http://svn.apache.org/viewvc/pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/JPEGFactory.java?rev=1920176&r1=1920175&r2=1920176&view=diff
==============================================================================
---
pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/JPEGFactory.java
(original)
+++
pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/JPEGFactory.java
Sun Aug 25 11:05:23 2024
@@ -149,7 +149,7 @@ public final class JPEGFactory
private static Dimensions retrieveDimensions(ByteArrayInputStream stream)
throws IOException
{
ImageReader reader =
- Filter.findImageReader("JPEG", "a suitable JAI I/O image
filter is not installed");
+ Filter.findRasterReader("JPEG", "a suitable JAI I/O image
filter is not installed");
try (ImageInputStream iis = ImageIO.createImageInputStream(stream))
{
reader.setInput(iis);
@@ -170,7 +170,7 @@ public final class JPEGFactory
catch (IOException ex)
{
LOG.warn("Error reading image metadata, will decode image and
use raster size");
- }
+ }
// Old method: get from raster (slower)
ImageIO.setUseCache(false);