]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
Bugzilla #40676: Fix interoperability issue with Adobe reader regarding use of multip...
authorGlenn Adams <gadams@apache.org>
Sun, 24 Jun 2012 17:53:17 +0000 (17:53 +0000)
committerGlenn Adams <gadams@apache.org>
Sun, 24 Jun 2012 17:53:17 +0000 (17:53 +0000)
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@1353303 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/fop/pdf/AbstractPDFStream.java
src/java/org/apache/fop/pdf/AlphaRasterImage.java
src/java/org/apache/fop/pdf/BitmapImage.java
src/java/org/apache/fop/pdf/PDFImage.java
src/java/org/apache/fop/pdf/PDFImageXObject.java
src/java/org/apache/fop/render/pdf/AbstractImageAdapter.java
src/java/org/apache/fop/render/pdf/ImageRawPNGAdapter.java
status.xml

index 0181728b8ba0bcd107d9d7cdf37a4002be0088f9..0948a7d2b8e30ae9e198f7d843872ccabd0971be 100644 (file)
@@ -78,7 +78,7 @@ public abstract class AbstractPDFStream extends PDFObject {
      * from outside.
      */
     protected void setupFilterList() {
-        if (!getFilterList().isInitialized()) {
+        if (multipleFiltersAllowed() && !getFilterList().isInitialized()) {
             getFilterList().addDefaultFilters(
                 getDocumentSafely().getFilterMap(),
                 getDefaultFilterName());
@@ -273,4 +273,11 @@ public abstract class AbstractPDFStream extends PDFObject {
         //nop: No default implicit filters
     }
 
+    /**
+     * Whether multiple filters can be applied.
+     * @return true if multiple filters allowed
+     */
+    protected boolean multipleFiltersAllowed() {
+        return true;
+    }
 }
index 7272c5eddb0fda112ea4c33fc128c205a1de0876..250b5daa21832a85862dc873177b391b1c951bb5 100644 (file)
@@ -212,6 +212,10 @@ public class AlphaRasterImage implements PDFImage {
         return null;
     }
 
+    /** {@inheritDoc} */
+    public boolean multipleFiltersAllowed() {
+        return true;
+    }
 }
 
 
index 0979ddf9a2d87dc38441a402ed9a0c213c7c9b98..ac7af1dbdc89958d69907f342e1aad803c610259 100644 (file)
@@ -38,6 +38,7 @@ public class BitmapImage implements PDFImage {
     private String key;
     private PDFDocument pdfDoc;
     private PDFFilter pdfFilter;
+    private boolean multipleFiltersAllowed = true;
 
     /**
      * Create a bitmap image.
@@ -215,6 +216,17 @@ public class BitmapImage implements PDFImage {
     public void setPDFFilter(PDFFilter pdfFilter) {
         this.pdfFilter = pdfFilter;
     }
-}
 
+    /** {@inheritDoc} */
+    public boolean multipleFiltersAllowed() {
+        return multipleFiltersAllowed;
+    }
+
+    /**
+     * Disallows multiple filters.
+     */
+    public void disallowMultipleFilters() {
+        multipleFiltersAllowed = false;
+    }
 
+}
index e2b9e521c85b3953f1d4db7070156535fd9153e3..38da60e7b652ae14300ab42af83b20a116c16d2f 100644 (file)
@@ -151,5 +151,13 @@ public interface PDFImage {
      */
     String getFilterHint();
 
+    /**
+     * Indicates whether multiple image filters are allowed; this is implemented because Adobe
+     * Reader does not like multiple FlateDecode filters applied to an image even though that
+     * allowed by the PDF spec; this is probable due to security concerns since many PDF malware
+     * exploits, like zip bombs, make use of a chain of FlateDecode filters.
+     */
+    boolean multipleFiltersAllowed();
+
 }
 
index acab4c19c3d5e0d076967f44be5e7ad22d935bb6..1c28cb2a75ae173fdf6ffee07f756aff169ec43f 100644 (file)
@@ -166,4 +166,9 @@ public class PDFImageXObject extends PDFXObject {
         return pdfimage.getFilterHint();
     }
 
+    /** {@inheritDoc} */
+    protected boolean multipleFiltersAllowed() {
+        return pdfimage.multipleFiltersAllowed();
+    }
+
 }
index 36d58246f813ebd5e0c221d267c13ee7a9c9b572..46e8ebe9554db77fd085d56c52026742aa7d2f30 100644 (file)
@@ -57,6 +57,8 @@ public abstract class AbstractImageAdapter implements PDFImage {
 
     private static final int MAX_HIVAL = 255;
 
+    private boolean multipleFiltersAllowed = true;
+
     /**
      * Creates a new PDFImage from an Image instance.
      * @param image the image
@@ -293,5 +295,17 @@ public abstract class AbstractImageAdapter implements PDFImage {
         return pdfCS;
     }
 
+    /** {@inheritDoc} */
+    public boolean multipleFiltersAllowed() {
+        return multipleFiltersAllowed;
+    }
+
+    /**
+     * Disallows multiple filters.
+     */
+    public void disallowMultipleFilters() {
+        multipleFiltersAllowed = false;
+    }
+
 }
 
index 55264e2fe8b439b95874d8d86a608be0c6cfae3c..b9f5e1d28d6c5a1a8e6d90b20107da61ac3e132a 100644 (file)
@@ -103,6 +103,7 @@ public class ImageRawPNGAdapter extends AbstractImageAdapter {
             throw new RuntimeException("FlateFilter configuration error", e);\r
         }\r
         this.pdfFilter = flate;\r
+        this.disallowMultipleFilters();\r
 \r
         // Handle transparency channel if applicable; note that for palette images the transparency is\r
         // not TRANSLUCENT\r
@@ -154,6 +155,7 @@ public class ImageRawPNGAdapter extends AbstractImageAdapter {
             BitmapImage alphaMask = new BitmapImage("Mask:" + this.getKey(), image.getSize().getWidthPx(),\r
                     image.getSize().getHeightPx(), baos.toByteArray(), null);\r
             alphaMask.setPDFFilter(transFlate);\r
+            alphaMask.disallowMultipleFilters();\r
             alphaMask.setColorSpace(new PDFDeviceColorSpace(PDFDeviceColorSpace.DEVICE_GRAY));\r
             softMask = doc.addImage(null, alphaMask).makeReference();\r
         }\r
index 4046f9ec310b0126406afc4e27a941801e826250..fb5330ca3abcfef00ffcf007bc6c670ef9e3339a 100644 (file)
@@ -63,6 +63,9 @@
       documents. Example: the fix of marks layering will be such a case when it's done.
     -->
     <release version="FOP Trunk" date="TBD">
+      <action context="Images" dev="GA" type="update" fixes-bug="40676" due-to="Luis Bernardo">
+        Fix interoperability issue with Adobe reader regarding use of multiple filters.
+      </action>
       <action context="Code" dev="GA" type="fix">
         Eliminate javadocs warnings.
       </action>