Author: ssteiner Date: Tue Sep 27 07:04:02 2022 New Revision: 1904293 URL: http://svn.apache.org/viewvc?rev=1904293&view=rev Log: FOP-3093: Stop reading ttf if we hit last offset
Modified: xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/fonts/truetype/TTFFile.java xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/fonts/truetype/TTFFileTestCase.java Modified: xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/fonts/truetype/TTFFile.java URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/fonts/truetype/TTFFile.java?rev=1904293&r1=1904292&r2=1904293&view=diff ============================================================================== --- xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/fonts/truetype/TTFFile.java (original) +++ xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/fonts/truetype/TTFFile.java Tue Sep 27 07:04:02 2022 @@ -139,6 +139,9 @@ public class TTFFile extends OpenFont { for (int i = 0; i < numberOfGlyphs; i++) { if ((i + 1) >= mtxTab.length || mtxTab[i].getOffset() != mtxTab[i + 1].getOffset()) { + if (lastLoca != 0 && lastLoca == mtxTab[i].getOffset()) { + break; + } fontFile.seekSet(n + mtxTab[i].getOffset()); fontFile.skip(2); final int[] bbox = { @@ -148,15 +151,9 @@ public class TTFFile extends OpenFont { fontFile.readTTFShort()}; mtxTab[i].setBoundingBox(bbox); } else { - /**@todo Verify that this is correct, looks like a copy/paste bug (jm)*/ final int bbox0 = mtxTab[0].getBoundingBox()[0]; final int[] bbox = {bbox0, bbox0, bbox0, bbox0}; mtxTab[i].setBoundingBox(bbox); - /* Original code - mtxTab[i].bbox[0] = mtxTab[0].bbox[0]; - mtxTab[i].bbox[1] = mtxTab[0].bbox[0]; - mtxTab[i].bbox[2] = mtxTab[0].bbox[0]; - mtxTab[i].bbox[3] = mtxTab[0].bbox[0]; */ } if (log.isTraceEnabled()) { log.trace(mtxTab[i].toString(this)); Modified: xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/fonts/truetype/TTFFileTestCase.java URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/fonts/truetype/TTFFileTestCase.java?rev=1904293&r1=1904292&r2=1904293&view=diff ============================================================================== --- xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/fonts/truetype/TTFFileTestCase.java (original) +++ xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/fonts/truetype/TTFFileTestCase.java Tue Sep 27 07:04:02 2022 @@ -29,6 +29,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import org.junit.Assert; import org.junit.Test; import static org.junit.Assert.assertEquals; @@ -595,4 +596,25 @@ public class TTFFileTestCase { ttfFile.mtxTab[0] = new OFMtxEntry(); ttfFile.readPostScript(); } + + @Test + public void testStopReadAtLastOffset() throws IOException { + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + DataOutputStream dos = new DataOutputStream(bos); + dos.writeShort(0); + dos.writeShort(4); + dos.writeShort(4); + dos.writeLong(0); + TTFFile ttfFile = new TTFFile(); + ttfFile.dirTabs = new HashMap<>(); + ttfFile.dirTabs.put(OFTableName.LOCA, new OFDirTabEntry()); + ttfFile.dirTabs.put(OFTableName.GLYF, new OFDirTabEntry()); + ttfFile.fontFile = new FontFileReader(new ByteArrayInputStream(bos.toByteArray())); + ttfFile.numberOfGlyphs = 2; + ttfFile.mtxTab = new OFMtxEntry[2]; + ttfFile.mtxTab[0] = new OFMtxEntry(); + ttfFile.mtxTab[1] = new OFMtxEntry(); + ttfFile.updateBBoxAndOffset(); + Assert.assertEquals(ttfFile.mtxTab[0].getBoundingBox()[0], 4); + } } --------------------------------------------------------------------- To unsubscribe, e-mail: fop-commits-unsubscr...@xmlgraphics.apache.org For additional commands, e-mail: fop-commits-h...@xmlgraphics.apache.org