Author: tilman
Date: Fri Apr  4 13:22:32 2025
New Revision: 1924772

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

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

Modified: 
pdfbox/trunk/io/src/main/java/org/apache/pdfbox/io/SequenceRandomAccessRead.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/io/src/main/java/org/apache/pdfbox/io/SequenceRandomAccessRead.java?rev=1924772&r1=1924771&r2=1924772&view=diff
==============================================================================
--- 
pdfbox/trunk/io/src/main/java/org/apache/pdfbox/io/SequenceRandomAccessRead.java
 (original)
+++ 
pdfbox/trunk/io/src/main/java/org/apache/pdfbox/io/SequenceRandomAccessRead.java
 Fri Apr  4 13:22:32 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/trunk/io/src/test/java/org/apache/pdfbox/io/SequenceRandomAccessReadTest.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/io/src/test/java/org/apache/pdfbox/io/SequenceRandomAccessReadTest.java?rev=1924772&r1=1924771&r2=1924772&view=diff
==============================================================================
--- 
pdfbox/trunk/io/src/test/java/org/apache/pdfbox/io/SequenceRandomAccessReadTest.java
 (original)
+++ 
pdfbox/trunk/io/src/test/java/org/apache/pdfbox/io/SequenceRandomAccessReadTest.java
 Fri Apr  4 13:22:32 2025
@@ -240,4 +240,27 @@ 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]);
+
+        try (SequenceRandomAccessRead srar = new 
SequenceRandomAccessRead(List.of(r1, r2, r3, r4, r5, r6, r7, r8));
+             RandomAccessInputStream rais = new RandomAccessInputStream(srar))
+        {
+            int rc = rais.read(new byte[0], 0, 0);
+            assertEquals(0, rc);
+            byte[] result = rais.readAllBytes();
+            assertEquals(19241, result.length);
+            assertEquals(srar.length(), result.length);
+        }
+    }
 }


Reply via email to