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


Reply via email to