Author: lehmi Date: Sat Jun 1 12:07:28 2024 New Revision: 1918096 URL: http://svn.apache.org/viewvc?rev=1918096&view=rev Log: PDFBOX-5675: fix error handling
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/FlateFilter.java pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/FlateFilterDecoderStream.java Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/FlateFilter.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/FlateFilter.java?rev=1918096&r1=1918095&r2=1918096&view=diff ============================================================================== --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/FlateFilter.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/FlateFilter.java Sat Jun 1 12:07:28 2024 @@ -19,12 +19,8 @@ package org.apache.pdfbox.filter; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; -import java.util.zip.DataFormatException; import java.util.zip.Deflater; import java.util.zip.DeflaterOutputStream; - -import org.apache.logging.log4j.Logger; -import org.apache.logging.log4j.LogManager; import org.apache.pdfbox.cos.COSDictionary; /** @@ -36,8 +32,6 @@ import org.apache.pdfbox.cos.COSDictiona */ final class FlateFilter extends Filter { - private static final Logger LOG = LogManager.getLogger(FlateFilter.class); - @Override public DecodeResult decode(InputStream encoded, OutputStream decoded, COSDictionary parameters, int index) throws IOException @@ -48,16 +42,6 @@ final class FlateFilter extends Filter { decoderStream.transferTo(Predictor.wrapPredictor(decoded, decodeParams)); } - catch (IOException e) - { - // if the stream is corrupt a DataFormatException may occur - if (e.getCause() instanceof DataFormatException) - { - LOG.error("FlateFilter: stop reading corrupt stream due to a DataFormatException"); - } - // re-throw the exception - throw e; - } return new DecodeResult(parameters); } Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/FlateFilterDecoderStream.java URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/FlateFilterDecoderStream.java?rev=1918096&r1=1918095&r2=1918096&view=diff ============================================================================== --- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/FlateFilterDecoderStream.java (original) +++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/FlateFilterDecoderStream.java Sat Jun 1 12:07:28 2024 @@ -45,6 +45,7 @@ public final class FlateFilterDecoderStr private byte[] decodedData = new byte[4096]; // use nowrap mode to bypass zlib-header and checksum to avoid a DataFormatException private final Inflater inflater = new Inflater(true); + private boolean dataDecoded = false; /** * Constructor. @@ -82,22 +83,23 @@ public final class FlateFilterDecoderStr return false; } } - boolean dataWritten = false; try { bytesDecoded = inflater.inflate(decodedData); + dataDecoded |= bytesDecoded > 0; } catch (DataFormatException exception) { - if (dataWritten) + isEOF = true; + if (dataDecoded) { - // some data could be read -> don't throw an exception + // some data could be decoded -> don't throw an exception LOG.warn("FlateFilter: premature end of stream due to a DataFormatException"); return false; } else { - // nothing could be read -> re-throw exception + // nothing could be read -> re-throw exception wrapped in an IOException throw new IOException(exception); } }