You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ti...@apache.org on 2015/02/27 19:46:30 UTC

svn commit: r1662787 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/DCTFilter.java

Author: tilman
Date: Fri Feb 27 18:46:30 2015
New Revision: 1662787

URL: http://svn.apache.org/r1662787
Log:
PDFBOX-2128: no need to "throws" unchecked exception; avoid IndexOutOfBoundsException on item(0) call

Modified:
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/DCTFilter.java

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/DCTFilter.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/DCTFilter.java?rev=1662787&r1=1662786&r2=1662787&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/DCTFilter.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/DCTFilter.java Fri Feb 27 18:46:30 2015
@@ -33,8 +33,8 @@ import javax.imageio.stream.ImageInputSt
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.pdfbox.cos.COSDictionary;
-import org.w3c.dom.DOMException;
 import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
 
 /**
  * Decompresses data encoded using a DCT (discrete cosine transform)
@@ -148,9 +148,16 @@ final class DCTFilter extends Filter
                 // 0 = Unknown (RGB or CMYK), 1 = YCbCr, 2 = YCCK
                 switch (colorTransform)
                 {
-                    case 0: break; // already CMYK
-                    case 1: LOG.warn("YCbCr JPEGs not implemented"); break; // TODO YCbCr
-                    case 2: raster = fromYCCKtoCMYK(raster); break;
+                    case 0:
+                        // already CMYK
+                        break;
+                    case 1:
+                        // TODO YCbCr
+                        LOG.warn("YCbCr JPEGs not implemented");
+                        break;
+                    case 2:
+                        raster = fromYCCKtoCMYK(raster);
+                        break;
                 }
             }
             else if (raster.getNumBands() == 3)
@@ -173,18 +180,18 @@ final class DCTFilter extends Filter
         return new DecodeResult(parameters);
     }
 
-    // reads the APP14 Adobe transform tag
+    // reads the APP14 Adobe transform tag and returns its value, or 0 if unknown
     private Integer getAdobeTransform(IIOMetadata metadata)
     {
         Element tree = (Element)metadata.getAsTree("javax_imageio_jpeg_image_1.0");
         Element markerSequence = (Element)tree.getElementsByTagName("markerSequence").item(0);
-
-        if (markerSequence.getElementsByTagName("app14Adobe") != null)
+        NodeList app14AdobeNodeList = markerSequence.getElementsByTagName("app14Adobe");
+        if (app14AdobeNodeList != null && app14AdobeNodeList.getLength() > 0)
         {
-            Element adobe = (Element)markerSequence.getElementsByTagName("app14Adobe").item(0);
+            Element adobe = (Element) app14AdobeNodeList.item(0);
             return Integer.parseInt(adobe.getAttribute("transform"));
         }
-        return 0; // Unknown
+        return 0;
     }
 
     // converts YCCK image to CMYK. YCCK is an equivalent encoding for
@@ -253,7 +260,7 @@ final class DCTFilter extends Filter
     }
     
     // returns the number of channels as a string, or an empty string if there is an error getting the meta data
-    private String getNumChannels(ImageReader reader) throws DOMException, IOException
+    private String getNumChannels(ImageReader reader) throws IOException
     {
         try
         {