You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by le...@apache.org on 2022/07/18 06:29:44 UTC
svn commit: r1902832 - in /pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf: RandomAccessReadDataStream.java TTFParser.java
Author: lehmi
Date: Mon Jul 18 06:29:44 2022
New Revision: 1902832
URL: http://svn.apache.org/viewvc?rev=1902832&view=rev
Log:
PDFBOX-5435: reduce memory footprint
Modified:
pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/RandomAccessReadDataStream.java
pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/TTFParser.java
Modified: pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/RandomAccessReadDataStream.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/RandomAccessReadDataStream.java?rev=1902832&r1=1902831&r2=1902832&view=diff
==============================================================================
--- pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/RandomAccessReadDataStream.java (original)
+++ pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/RandomAccessReadDataStream.java Mon Jul 18 06:29:44 2022
@@ -20,7 +20,9 @@ import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
+import org.apache.pdfbox.io.IOUtils;
import org.apache.pdfbox.io.RandomAccessRead;
+import org.apache.pdfbox.io.RandomAccessReadBuffer;
/**
* An implementation of the TTFDataStream using RandomAccessRead as source.
@@ -35,13 +37,12 @@ class RandomAccessReadDataStream extends
/**
* Constructor.
*
- * @param randomAccessRead
+ * @param randomAccessRead source to be read from
*
- * @throws IOException If there is a problem creating the RandomAccessReadBufferedFile.
+ * @throws IOException If there is a problem reading the source data.
*/
RandomAccessReadDataStream(RandomAccessRead randomAccessRead) throws IOException
{
- this.randomAccessRead = randomAccessRead;
length = randomAccessRead.length();
data = new byte[(int) length];
int remainingBytes = data.length;
@@ -51,10 +52,24 @@ class RandomAccessReadDataStream extends
{
remainingBytes -= amountRead;
}
- randomAccessRead.seek(0);
+ this.randomAccessRead = new RandomAccessReadBuffer(data);
}
/**
+ * Constructor.
+ *
+ * @param inputStream source to be read from
+ *
+ * @throws IOException If there is a problem reading the source data.
+ */
+ RandomAccessReadDataStream(InputStream inputStream) throws IOException
+ {
+ data = IOUtils.toByteArray(inputStream);
+ length = data.length;
+ this.randomAccessRead = new RandomAccessReadBuffer(data);
+ }
+
+ /**
* Get the current position in the stream.
* @return The current position in the stream.
* @throws IOException If an error occurs while reading the stream.
Modified: pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/TTFParser.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/TTFParser.java?rev=1902832&r1=1902831&r2=1902832&view=diff
==============================================================================
--- pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/TTFParser.java (original)
+++ pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/TTFParser.java Mon Jul 18 06:29:44 2022
@@ -21,7 +21,6 @@ import java.io.InputStream;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.pdfbox.io.RandomAccessRead;
-import org.apache.pdfbox.io.RandomAccessReadBuffer;
/**
* TrueType font file parser.
@@ -72,6 +71,10 @@ public class TTFParser
dataStream.close();
throw ex;
}
+ finally
+ {
+ randomAccessRead.close();
+ }
}
/**
@@ -84,7 +87,21 @@ public class TTFParser
public TrueTypeFont parseEmbedded(InputStream inputStream) throws IOException
{
this.isEmbedded = true;
- return parse(new RandomAccessReadBuffer(inputStream));
+ RandomAccessReadDataStream dataStream = new RandomAccessReadDataStream(inputStream);
+ try
+ {
+ return parse(dataStream);
+ }
+ catch (IOException ex)
+ {
+ // close only on error (source is still being accessed later)
+ dataStream.close();
+ throw ex;
+ }
+ finally
+ {
+ inputStream.close();
+ }
}
/**