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 2023/05/05 06:13:26 UTC

svn commit: r1909621 - in /pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf: RandomAccessReadDataStream.java TrueTypeFont.java

Author: lehmi
Date: Fri May  5 06:13:25 2023
New Revision: 1909621

URL: http://svn.apache.org/viewvc?rev=1909621&view=rev
Log:
PDFBOX-5594: remove the usage of RandomAccessReadBuffer from RandomAccessReadDataStream so that it is save to remove the finalize override from rueTypeFont

Modified:
    pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/RandomAccessReadDataStream.java
    pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/TrueTypeFont.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=1909621&r1=1909620&r2=1909621&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 Fri May  5 06:13:25 2023
@@ -22,7 +22,6 @@ 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.
@@ -30,10 +29,10 @@ import org.apache.pdfbox.io.RandomAccess
  */
 class RandomAccessReadDataStream extends TTFDataStream
 {
-    private final RandomAccessRead randomAccessRead;
     private final long length;
     private final byte[] data;
-    
+    private int currentPosition = 0;
+
     /**
      * Constructor.
      * 
@@ -52,7 +51,6 @@ class RandomAccessReadDataStream extends
         {
             remainingBytes -= amountRead;
         }
-        this.randomAccessRead = new RandomAccessReadBuffer(data);
     }
     
     /**
@@ -66,7 +64,6 @@ class RandomAccessReadDataStream extends
     {
         data = IOUtils.toByteArray(inputStream);
         length = data.length;
-        this.randomAccessRead = new RandomAccessReadBuffer(data);
     }
 
     /**
@@ -77,7 +74,7 @@ class RandomAccessReadDataStream extends
     @Override
     public long getCurrentPosition() throws IOException
     {
-        return randomAccessRead.getPosition();
+        return currentPosition;
     }
     
     /**
@@ -88,7 +85,7 @@ class RandomAccessReadDataStream extends
     @Override
     public void close() throws IOException
     {
-        randomAccessRead.close();
+        // nothing to do
     }
     
     /**
@@ -99,7 +96,11 @@ class RandomAccessReadDataStream extends
     @Override
     public int read() throws IOException
     {
-        return randomAccessRead.read();
+        if (currentPosition >= length)
+        {
+            return -1;
+        }
+        return data[currentPosition++] & 0xff;
     }
     
     /**
@@ -137,7 +138,11 @@ class RandomAccessReadDataStream extends
     @Override
     public void seek(long pos) throws IOException
     {
-        randomAccessRead.seek(pos);
+        if (pos < 0)
+        {
+            throw new IOException("Invalid position " + pos);
+        }
+        currentPosition = pos < length ? (int) pos : (int) length;
     }
     
     /**
@@ -154,7 +159,15 @@ class RandomAccessReadDataStream extends
     @Override
     public int read(byte[] b, int off, int len) throws IOException
     {
-        return randomAccessRead.read(b, off, len);
+        if (currentPosition >= length)
+        {
+            return -1;
+        }
+        int remainingBytes = (int) (length - currentPosition);
+        int bytesToRead = Math.min(remainingBytes, len);
+        System.arraycopy(data, currentPosition, b, off, bytesToRead);
+        currentPosition += bytesToRead;
+        return bytesToRead;
     }
     
     /**

Modified: pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/TrueTypeFont.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/TrueTypeFont.java?rev=1909621&r1=1909620&r2=1909621&view=diff
==============================================================================
--- pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/TrueTypeFont.java (original)
+++ pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/TrueTypeFont.java Fri May  5 06:13:25 2023
@@ -71,14 +71,6 @@ public class TrueTypeFont implements Fon
         data.close();
     }
 
-    @Override
-    protected void finalize() throws Throwable
-    {
-        super.finalize();
-        // PDFBOX-4963: risk of memory leaks due to SoftReference in FontCache 
-        close();
-    }
-
     /**
      * @return Returns the version.
      */