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 2016/03/01 18:40:49 UTC
svn commit: r1733115 -
/pdfbox/branches/1.8/fontbox/src/main/java/org/apache/fontbox/ttf/HorizontalMetricsTable.java
Author: tilman
Date: Tue Mar 1 17:40:48 2016
New Revision: 1733115
URL: http://svn.apache.org/viewvc?rev=1733115&view=rev
Log:
PDFBOX-2428: apply 2.0 change to avoid EOException
Modified:
pdfbox/branches/1.8/fontbox/src/main/java/org/apache/fontbox/ttf/HorizontalMetricsTable.java
Modified: pdfbox/branches/1.8/fontbox/src/main/java/org/apache/fontbox/ttf/HorizontalMetricsTable.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/1.8/fontbox/src/main/java/org/apache/fontbox/ttf/HorizontalMetricsTable.java?rev=1733115&r1=1733114&r2=1733115&view=diff
==============================================================================
--- pdfbox/branches/1.8/fontbox/src/main/java/org/apache/fontbox/ttf/HorizontalMetricsTable.java (original)
+++ pdfbox/branches/1.8/fontbox/src/main/java/org/apache/fontbox/ttf/HorizontalMetricsTable.java Tue Mar 1 17:40:48 2016
@@ -47,22 +47,39 @@ public class HorizontalMetricsTable exte
int numHMetrics = hHeader.getNumberOfHMetrics();
int numGlyphs = ttf.getNumberOfGlyphs();
+ int bytesRead = 0;
advanceWidth = new int[ numHMetrics ];
leftSideBearing = new short[ numHMetrics ];
for( int i=0; i<numHMetrics; i++ )
{
advanceWidth[i] = data.readUnsignedShort();
leftSideBearing[i] = data.readSignedShort();
+ bytesRead += 4;
}
- int numberNonHorizontal = numGlyphs - numHMetrics;
- nonHorizontalLeftSideBearing = new short[ numberNonHorizontal ];
- for( int i=0; i<numberNonHorizontal; i++ )
+ if (bytesRead < getLength())
{
- nonHorizontalLeftSideBearing[i] = data.readSignedShort();
+ int numberNonHorizontal = numGlyphs - numHMetrics;
+
+ // handle bad fonts with too many hmetrics
+ if (numberNonHorizontal < 0)
+ {
+ numberNonHorizontal = numGlyphs;
+ }
+
+ nonHorizontalLeftSideBearing = new short[numberNonHorizontal];
+ for (int i = 0; i < numberNonHorizontal; i++)
+ {
+ if (bytesRead < getLength())
+ {
+ nonHorizontalLeftSideBearing[i] = data.readSignedShort();
+ bytesRead += 2;
+ }
+ }
}
initialized = true;
}
+
/**
* @return Returns the advanceWidth.
*/