You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ti...@apache.org on 2020/06/21 04:34:45 UTC
svn commit: r1879056 - in
/pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf:
BufferedRandomAccessFile.java TTFDataStream.java
Author: tilman
Date: Sun Jun 21 04:34:45 2020
New Revision: 1879056
URL: http://svn.apache.org/viewvc?rev=1879056&view=rev
Log:
PDFBOX-4890: remove recursion
Modified:
pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/BufferedRandomAccessFile.java
pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/TTFDataStream.java
Modified: pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/BufferedRandomAccessFile.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/BufferedRandomAccessFile.java?rev=1879056&r1=1879055&r2=1879056&view=diff
==============================================================================
--- pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/BufferedRandomAccessFile.java (original)
+++ pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/BufferedRandomAccessFile.java Sun Jun 21 04:34:45 2020
@@ -148,25 +148,37 @@ public class BufferedRandomAccessFile ex
@Override
public int read(byte[] b, int off, int len) throws IOException
{
- int leftover = bufend - bufpos;
- if (len <= leftover)
- {
- System.arraycopy(buffer, bufpos, b, off, len);
- bufpos += len;
- return len;
- }
- System.arraycopy(buffer, bufpos, b, off, leftover);
- bufpos += leftover;
- if (fillBuffer() > 0)
+ int curLen = len; // length of what is left to read (shrinks)
+ int curOff = off; // offset where to put read data (grows)
+ int totalRead = 0;
+
+ while (true)
{
- //TODO PDFBOX-4890 remove recursive call. When done, remove Math.min() in TTFDataStream.read()
- int bytesRead = read(b, off + leftover, len - leftover);
- if (bytesRead > 0)
+ int leftover = bufend - bufpos;
+ if (curLen <= leftover)
+ {
+ System.arraycopy(buffer, bufpos, b, curOff, curLen);
+ bufpos += curLen;
+ return totalRead + curLen;
+ }
+ // curLen > leftover, we need to read more than what remains in buffer
+ System.arraycopy(buffer, bufpos, b, curOff, leftover);
+ totalRead += leftover;
+ bufpos += leftover;
+ if (fillBuffer() > 0)
+ {
+ curOff += leftover;
+ curLen -= leftover;
+ }
+ else
{
- leftover += bytesRead;
+ if (totalRead == 0)
+ {
+ return -1;
+ }
+ return totalRead;
}
}
- return leftover > 0 ? leftover : -1;
}
/**
Modified: pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/TTFDataStream.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/TTFDataStream.java?rev=1879056&r1=1879055&r2=1879056&view=diff
==============================================================================
--- pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/TTFDataStream.java (original)
+++ pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/TTFDataStream.java Sun Jun 21 04:34:45 2020
@@ -251,8 +251,7 @@ abstract class TTFDataStream implements
int totalAmountRead = 0;
// read at most numberOfBytes bytes from the stream.
while (totalAmountRead < numberOfBytes
- //TODO PDFBOX-4890: remove Math.min() after removing recursive call from BufferedRandomAccessFile.read
- && (amountRead = read(data, totalAmountRead, Math.min(numberOfBytes - totalAmountRead, 65536))) != -1)
+ && (amountRead = read(data, totalAmountRead, numberOfBytes - totalAmountRead)) != -1)
{
totalAmountRead += amountRead;
}