Skip to content

Commit 5823cb0

Browse files
committed
PDFBOX-5981: don't return -1 for length 0
git-svn-id: https://svn.apache.org/repos/asf/pdfbox/trunk@1924772 13f79535-47bb-0310-9956-ffa450edef68
1 parent 3c2cf3e commit 5823cb0

File tree

2 files changed

+27
-0
lines changed

2 files changed

+27
-0
lines changed

io/src/main/java/org/apache/pdfbox/io/SequenceRandomAccessRead.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,10 @@ public int read() throws IOException
115115
public int read(byte[] b, int offset, int length) throws IOException
116116
{
117117
checkClosed();
118+
if (length == 0)
119+
{
120+
return 0;
121+
}
118122
int maxAvailBytes = Math.min(available(), length);
119123
if (maxAvailBytes == 0)
120124
{

io/src/test/java/org/apache/pdfbox/io/SequenceRandomAccessReadTest.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -240,4 +240,27 @@ void TestEmptyStream() throws IOException
240240
assertTrue(sequenceRandomAccessRead.isEOF());
241241
}
242242
}
243+
244+
@Test
245+
void testPDFBox5981() throws IOException
246+
{
247+
RandomAccessReadBuffer r1 = new RandomAccessReadBuffer(new byte[2448]);
248+
RandomAccessReadBuffer r2 = new RandomAccessReadBuffer(new byte[2412]);
249+
RandomAccessReadBuffer r3 = new RandomAccessReadBuffer(new byte[2417]);
250+
RandomAccessReadBuffer r4 = new RandomAccessReadBuffer(new byte[2433]);
251+
RandomAccessReadBuffer r5 = new RandomAccessReadBuffer(new byte[2432]);
252+
RandomAccessReadBuffer r6 = new RandomAccessReadBuffer(new byte[2416]);
253+
RandomAccessReadBuffer r7 = new RandomAccessReadBuffer(new byte[2417]);
254+
RandomAccessReadBuffer r8 = new RandomAccessReadBuffer(new byte[2266]);
255+
256+
try (SequenceRandomAccessRead srar = new SequenceRandomAccessRead(List.of(r1, r2, r3, r4, r5, r6, r7, r8));
257+
RandomAccessInputStream rais = new RandomAccessInputStream(srar))
258+
{
259+
int rc = rais.read(new byte[0], 0, 0);
260+
assertEquals(0, rc);
261+
byte[] result = rais.readAllBytes();
262+
assertEquals(19241, result.length);
263+
assertEquals(srar.length(), result.length);
264+
}
265+
}
243266
}

0 commit comments

Comments
 (0)