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);


Reply via email to