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 2023/06/03 08:57:06 UTC

svn commit: r1910196 - in /pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdfparser: InputStreamSource.java PDFStreamParser.java RandomAccessSource.java SequentialSource.java

Author: tilman
Date: Sat Jun  3 08:57:06 2023
New Revision: 1910196

URL: http://svn.apache.org/viewvc?rev=1910196&view=rev
Log:
PDFBOX-5606: avoid parser access on closed stream; add isClosed() method

Modified:
    pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/InputStreamSource.java
    pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFStreamParser.java
    pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/RandomAccessSource.java
    pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/SequentialSource.java

Modified: pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/InputStreamSource.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/InputStreamSource.java?rev=1910196&r1=1910195&r2=1910196&view=diff
==============================================================================
--- pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/InputStreamSource.java (original)
+++ pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/InputStreamSource.java Sat Jun  3 08:57:06 2023
@@ -29,6 +29,7 @@ final class InputStreamSource implements
 {
     private final PushbackInputStream input;
     private int position;
+    private boolean isOpen = true;
 
     /**
      * Constructor.
@@ -144,5 +145,12 @@ final class InputStreamSource implements
     public void close() throws IOException
     {
         input.close();
+        isOpen = false;
+    }
+    
+    @Override
+    public boolean isClosed() throws IOException
+    {
+        return !isOpen;
     }
 }

Modified: pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFStreamParser.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFStreamParser.java?rev=1910196&r1=1910195&r2=1910196&view=diff
==============================================================================
--- pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFStreamParser.java (original)
+++ pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/PDFStreamParser.java Sat Jun  3 08:57:06 2023
@@ -135,6 +135,10 @@ public class PDFStreamParser extends Bas
      */
     public Object parseNextToken() throws IOException
     {
+        if (seqSource.isClosed())
+        {
+            return null;
+        }
         skipSpaces();
         if (seqSource.isEOF())
         {
@@ -272,7 +276,7 @@ public class PDFStreamParser extends Bas
                         if (!(value instanceof COSBase))
                         {
                             LOG.warn("Unexpected token in inline image dictionary at offset " +
-                                    seqSource.getPosition());
+                                    (seqSource.isClosed() ? "EOF" : seqSource.getPosition()));
                             break;
                         }
                         imageParams.setItem((COSName) nextToken, (COSBase) value);

Modified: pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/RandomAccessSource.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/RandomAccessSource.java?rev=1910196&r1=1910195&r2=1910196&view=diff
==============================================================================
--- pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/RandomAccessSource.java (original)
+++ pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/RandomAccessSource.java Sat Jun  3 08:57:06 2023
@@ -26,6 +26,7 @@ import org.apache.pdfbox.io.RandomAccess
 final class RandomAccessSource implements SequentialSource
 {
     private final RandomAccessRead reader;
+    private boolean isOpen = true;
 
     /**
      * Constructor.
@@ -101,5 +102,12 @@ final class RandomAccessSource implement
     public void close() throws IOException
     {
         reader.close();
+        isOpen = false;
+    }
+    
+    @Override
+    public boolean isClosed() throws IOException
+    {
+        return !isOpen;
     }
 }

Modified: pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/SequentialSource.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/SequentialSource.java?rev=1910196&r1=1910195&r2=1910196&view=diff
==============================================================================
--- pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/SequentialSource.java (original)
+++ pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/SequentialSource.java Sat Jun  3 08:57:06 2023
@@ -112,4 +112,11 @@ interface SequentialSource extends Close
      * @throws IOException If there is an error reading the next byte.
      */
     boolean isEOF() throws IOException;
+
+    /**
+     * Returns true if this source has been closed.
+     *
+     * @return true if the source has been closed
+     */
+    boolean isClosed() throws IOException;
 }