Author: tilman Date: Wed Mar 10 03:57:41 2021 New Revision: 1887405 URL: http://svn.apache.org/viewvc?rev=1887405&view=rev Log: PDFBOX-5123, PDFBOX-5124: gracefully recover from EOF
Modified: pdfbox/branches/2.0/fontbox/src/main/java/org/apache/fontbox/ttf/OS2WindowsMetricsTable.java Modified: pdfbox/branches/2.0/fontbox/src/main/java/org/apache/fontbox/ttf/OS2WindowsMetricsTable.java URL: http://svn.apache.org/viewvc/pdfbox/branches/2.0/fontbox/src/main/java/org/apache/fontbox/ttf/OS2WindowsMetricsTable.java?rev=1887405&r1=1887404&r2=1887405&view=diff ============================================================================== --- pdfbox/branches/2.0/fontbox/src/main/java/org/apache/fontbox/ttf/OS2WindowsMetricsTable.java (original) +++ pdfbox/branches/2.0/fontbox/src/main/java/org/apache/fontbox/ttf/OS2WindowsMetricsTable.java Wed Mar 10 03:57:41 2021 @@ -16,18 +16,28 @@ */ package org.apache.fontbox.ttf; +import java.io.EOFException; import java.io.IOException; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + /** - * A table in a true type font. - * + * The OS/2 and Windows Metrics Table in a TrueType font, see + * <a href="https://docs.microsoft.com/en-us/typography/opentype/spec/os2">here</a>. + * * @author Ben Litchfield - * + * */ public class OS2WindowsMetricsTable extends TTFTable { /** + * Log instance. + */ + private static final Log LOG = LogFactory.getLog(OS2WindowsMetricsTable.class); + + /** * Weight class constant. */ public static final int WEIGHT_CLASS_THIN = 100; @@ -819,16 +829,36 @@ public class OS2WindowsMetricsTable exte winDescent = data.readUnsignedShort(); if (version >= 1) { - codePageRange1 = data.readUnsignedInt(); - codePageRange2 = data.readUnsignedInt(); + try + { + codePageRange1 = data.readUnsignedInt(); + codePageRange2 = data.readUnsignedInt(); + } + catch (EOFException ex) + { + version = 0; + LOG.warn("Could not read all expected parts of version >= 1, setting version to 0", ex); + initialized = true; + return; + } } - if (version >= 1.2) + if (version >= 2) { - sxHeight = data.readSignedShort(); - sCapHeight = data.readSignedShort(); - usDefaultChar = data.readUnsignedShort(); - usBreakChar = data.readUnsignedShort(); - usMaxContext = data.readUnsignedShort(); + try + { + sxHeight = data.readSignedShort(); + sCapHeight = data.readSignedShort(); + usDefaultChar = data.readUnsignedShort(); + usBreakChar = data.readUnsignedShort(); + usMaxContext = data.readUnsignedShort(); + } + catch (EOFException ex) + { + version = 1; + LOG.warn("Could not read all expected parts of version >= 2, setting version to 1", ex); + initialized = true; + return; + } } initialized = true; }