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);
+ }
+ }
}