Index: src/java/org/apache/fop/render/pdf/AbstractImageAdapter.java
===================================================================
--- src/java/org/apache/fop/render/pdf/AbstractImageAdapter.java	(revision 1351060)
+++ src/java/org/apache/fop/render/pdf/AbstractImageAdapter.java	(working copy)
@@ -57,6 +57,8 @@
 
     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 @@
         return pdfCS;
     }
 
+    /** {@inheritDoc} */
+    public boolean multipleFiltersAllowed() {
+        return multipleFiltersAllowed;
+    }
+
+    /**
+     * Disallows multiple filters.
+     */
+    public void disallowMultipleFilters() {
+        multipleFiltersAllowed = false;
+    }
+
 }
 
Index: src/java/org/apache/fop/render/pdf/ImageRawPNGAdapter.java
===================================================================
--- src/java/org/apache/fop/render/pdf/ImageRawPNGAdapter.java	(revision 1351060)
+++ src/java/org/apache/fop/render/pdf/ImageRawPNGAdapter.java	(working copy)
@@ -103,6 +103,7 @@
             throw new RuntimeException("FlateFilter configuration error", e);
         }
         this.pdfFilter = flate;
+        this.disallowMultipleFilters();
 
         // Handle transparency channel if applicable; note that for palette images the transparency is
         // not TRANSLUCENT
@@ -154,6 +155,7 @@
             BitmapImage alphaMask = new BitmapImage("Mask:" + this.getKey(), image.getSize().getWidthPx(),
                     image.getSize().getHeightPx(), baos.toByteArray(), null);
             alphaMask.setPDFFilter(transFlate);
+            alphaMask.disallowMultipleFilters();
             alphaMask.setColorSpace(new PDFDeviceColorSpace(PDFDeviceColorSpace.DEVICE_GRAY));
             softMask = doc.addImage(null, alphaMask).makeReference();
         }
Index: src/java/org/apache/fop/pdf/AbstractPDFStream.java
===================================================================
--- src/java/org/apache/fop/pdf/AbstractPDFStream.java	(revision 1351060)
+++ src/java/org/apache/fop/pdf/AbstractPDFStream.java	(working copy)
@@ -78,7 +78,7 @@
      * from outside.
      */
     protected void setupFilterList() {
-        if (!getFilterList().isInitialized()) {
+        if (multipleFiltersAllowed() && !getFilterList().isInitialized()) {
             getFilterList().addDefaultFilters(
                 getDocumentSafely().getFilterMap(),
                 getDefaultFilterName());
@@ -273,4 +273,11 @@
         //nop: No default implicit filters
     }
 
+    /**
+     * Whether multiple filters can be applied.
+     * @return true if multiple filters allowed
+     */
+    protected boolean multipleFiltersAllowed() {
+        return true;
+    }
 }
Index: src/java/org/apache/fop/pdf/BitmapImage.java
===================================================================
--- src/java/org/apache/fop/pdf/BitmapImage.java	(revision 1351060)
+++ src/java/org/apache/fop/pdf/BitmapImage.java	(working copy)
@@ -38,6 +38,7 @@
     private String key;
     private PDFDocument pdfDoc;
     private PDFFilter pdfFilter;
+    private boolean multipleFiltersAllowed = true;
 
     /**
      * Create a bitmap image.
@@ -215,6 +216,17 @@
     public void setPDFFilter(PDFFilter pdfFilter) {
         this.pdfFilter = pdfFilter;
     }
-}
+
+    /** {@inheritDoc} */
+    public boolean multipleFiltersAllowed() {
+        return multipleFiltersAllowed;
+    }
 
+    /**
+     * Disallows multiple filters.
+     */
+    public void disallowMultipleFilters() {
+        multipleFiltersAllowed = false;
+    }
 
+}
Index: src/java/org/apache/fop/pdf/PDFImageXObject.java
===================================================================
--- src/java/org/apache/fop/pdf/PDFImageXObject.java	(revision 1351060)
+++ src/java/org/apache/fop/pdf/PDFImageXObject.java	(working copy)
@@ -166,4 +166,9 @@
         return pdfimage.getFilterHint();
     }
 
+    /** {@inheritDoc} */
+    protected boolean multipleFiltersAllowed() {
+        return pdfimage.multipleFiltersAllowed();
+    }
+
 }
Index: src/java/org/apache/fop/pdf/AlphaRasterImage.java
===================================================================
--- src/java/org/apache/fop/pdf/AlphaRasterImage.java	(revision 1351060)
+++ src/java/org/apache/fop/pdf/AlphaRasterImage.java	(working copy)
@@ -212,6 +212,10 @@
         return null;
     }
 
+    /** {@inheritDoc} */
+    public boolean multipleFiltersAllowed() {
+        return true;
+    }
 }
 
 
Index: src/java/org/apache/fop/pdf/PDFImage.java
===================================================================
--- src/java/org/apache/fop/pdf/PDFImage.java	(revision 1351060)
+++ src/java/org/apache/fop/pdf/PDFImage.java	(working copy)
@@ -151,5 +151,13 @@
      */
     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();
+
 }
 
