Author: tilman
Date: Fri Apr  4 13:22:26 2025
New Revision: 1924771

URL: http://svn.apache.org/viewvc?rev=1924771&view=rev
Log:
PDFBOX-5981: don't return -1 for length 0

Modified:
    
pdfbox/branches/3.0/io/src/main/java/org/apache/pdfbox/io/SequenceRandomAccessRead.java
    
pdfbox/branches/3.0/io/src/test/java/org/apache/pdfbox/io/SequenceRandomAccessReadTest.java

Modified: 
pdfbox/branches/3.0/io/src/main/java/org/apache/pdfbox/io/SequenceRandomAccessRead.java
URL: 
http://svn.apache.org/viewvc/pdfbox/branches/3.0/io/src/main/java/org/apache/pdfbox/io/SequenceRandomAccessRead.java?rev=1924771&r1=1924770&r2=1924771&view=diff
==============================================================================
--- 
pdfbox/branches/3.0/io/src/main/java/org/apache/pdfbox/io/SequenceRandomAccessRead.java
 (original)
+++ 
pdfbox/branches/3.0/io/src/main/java/org/apache/pdfbox/io/SequenceRandomAccessRead.java
 Fri Apr  4 13:22:26 2025
@@ -115,6 +115,10 @@ public class SequenceRandomAccessRead im
     public int read(byte[] b, int offset, int length) throws IOException
     {
         checkClosed();
+        if (length == 0)
+        {
+            return 0;
+        }
         int maxAvailBytes = Math.min(available(), length);
         if (maxAvailBytes == 0)
         {

Modified: 
pdfbox/branches/3.0/io/src/test/java/org/apache/pdfbox/io/SequenceRandomAccessReadTest.java
URL: 
http://svn.apache.org/viewvc/pdfbox/branches/3.0/io/src/test/java/org/apache/pdfbox/io/SequenceRandomAccessReadTest.java?rev=1924771&r1=1924770&r2=1924771&view=diff
==============================================================================
--- 
pdfbox/branches/3.0/io/src/test/java/org/apache/pdfbox/io/SequenceRandomAccessReadTest.java
 (original)
+++ 
pdfbox/branches/3.0/io/src/test/java/org/apache/pdfbox/io/SequenceRandomAccessReadTest.java
 Fri Apr  4 13:22:26 2025
@@ -18,6 +18,7 @@
 package org.apache.pdfbox.io;
 
 import java.io.IOException;
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
@@ -240,4 +241,38 @@ class SequenceRandomAccessReadTest
             assertTrue(sequenceRandomAccessRead.isEOF());
         }
     }
+
+    @Test
+    void testPDFBox5981() throws IOException
+    {
+        RandomAccessReadBuffer r1 = new RandomAccessReadBuffer(new byte[2448]);
+        RandomAccessReadBuffer r2 = new RandomAccessReadBuffer(new byte[2412]);
+        RandomAccessReadBuffer r3 = new RandomAccessReadBuffer(new byte[2417]);
+        RandomAccessReadBuffer r4 = new RandomAccessReadBuffer(new byte[2433]);
+        RandomAccessReadBuffer r5 = new RandomAccessReadBuffer(new byte[2432]);
+        RandomAccessReadBuffer r6 = new RandomAccessReadBuffer(new byte[2416]);
+        RandomAccessReadBuffer r7 = new RandomAccessReadBuffer(new byte[2417]);
+        RandomAccessReadBuffer r8 = new RandomAccessReadBuffer(new byte[2266]);
+        List<RandomAccessRead> list = new ArrayList<>();
+        list.add(r1);
+        list.add(r2);
+        list.add(r3);
+        list.add(r4);
+        list.add(r5);
+        list.add(r6);
+        list.add(r7);
+        list.add(r8);
+
+        try (SequenceRandomAccessRead srar = new 
SequenceRandomAccessRead(list);
+             RandomAccessInputStream rais = new RandomAccessInputStream(srar))
+        {
+            int rc = rais.read(new byte[0], 0, 0);
+            assertEquals(0, rc);
+
+            // this part of test didn't fail before the fix when using jdk8
+            byte[] result = IOUtils.toByteArray(rais);
+            assertEquals(19241, result.length);
+            assertEquals(srar.length(), result.length);
+        }
+    }
 }


Reply via email to