You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by le...@apache.org on 2020/08/04 15:45:48 UTC

svn commit: r1880571 - in /pdfbox/trunk/pdfbox/src: main/java/org/apache/pdfbox/io/RandomAccessReadBuffer.java test/java/org/apache/pdfbox/io/RandomAccessReadBufferTest.java

Author: lehmi
Date: Tue Aug  4 15:45:48 2020
New Revision: 1880571

URL: http://svn.apache.org/viewvc?rev=1880571&view=rev
Log:
PDFBOX-4836: support RandomAccessRead for empty buffers

Modified:
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/io/RandomAccessReadBuffer.java
    pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/io/RandomAccessReadBufferTest.java

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/io/RandomAccessReadBuffer.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/io/RandomAccessReadBuffer.java?rev=1880571&r1=1880570&r2=1880571&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/io/RandomAccessReadBuffer.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/io/RandomAccessReadBuffer.java Tue Aug  4 15:45:48 2020
@@ -188,8 +188,8 @@ public class RandomAccessReadBuffer impl
         if (pointer < size)
         {
             // calculate the chunk list index
-            bufferListIndex = (int) (pointer / chunkSize);
-            currentBufferPointer = (int) (pointer % chunkSize);
+            bufferListIndex = chunkSize > 0 ? (int) (pointer / chunkSize) : 0;
+            currentBufferPointer = chunkSize > 0 ? (int) (pointer % chunkSize) : 0;
             currentBuffer = bufferList.get(bufferListIndex);
         }
         else
@@ -198,7 +198,7 @@ public class RandomAccessReadBuffer impl
             // jump to the end of the buffer
             bufferListIndex = bufferListMaxIndex;
             currentBuffer = bufferList.get(bufferListIndex);
-            currentBufferPointer = (int) (size % chunkSize);
+            currentBufferPointer = chunkSize > 0 ? (int) (size % chunkSize) : 0;
         }
     }
 

Modified: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/io/RandomAccessReadBufferTest.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/io/RandomAccessReadBufferTest.java?rev=1880571&r1=1880570&r2=1880571&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/io/RandomAccessReadBufferTest.java (original)
+++ pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/io/RandomAccessReadBufferTest.java Tue Aug  4 15:45:48 2020
@@ -16,7 +16,10 @@
 
 package org.apache.pdfbox.io;
 
+import static org.junit.Assert.assertEquals;
+
 import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 
 import org.junit.Assert;
@@ -121,4 +124,23 @@ public class RandomAccessReadBufferTest
 
         randomAccessSource.close();
     }
+
+    @Test
+    public void testEmptyBuffer() throws IOException
+    {
+        RandomAccessReadBuffer randomAccessSource = new RandomAccessReadBuffer(
+                new ByteArrayOutputStream().toByteArray());
+
+        assertEquals(-1, randomAccessSource.read());
+        assertEquals(-1, randomAccessSource.peek());
+        byte[] readBytes = new byte[6];
+        assertEquals(0, randomAccessSource.read(readBytes));
+        randomAccessSource.seek(0);
+        assertEquals(0, randomAccessSource.getPosition());
+        randomAccessSource.seek(6);
+        assertEquals(6, randomAccessSource.getPosition());
+        randomAccessSource.rewind(3);
+        assertEquals(3, randomAccessSource.getPosition());
+        randomAccessSource.close();
+    }
 }