You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@pdfbox.apache.org by "Tilman Hausherr (Jira)" <ji...@apache.org> on 2021/03/08 18:59:00 UTC

[jira] [Commented] (PDFBOX-5123) OS2WindowsMetricsTable "version" variable confused with OpenType specification version

    [ https://issues.apache.org/jira/browse/PDFBOX-5123?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17297646#comment-17297646 ] 

Tilman Hausherr commented on PDFBOX-5123:
-----------------------------------------

The 1.2 should be 2, correct?
https://docs.microsoft.com/en-us/typography/opentype/spec/os2

> OS2WindowsMetricsTable "version" variable confused with OpenType specification version
> --------------------------------------------------------------------------------------
>
>                 Key: PDFBOX-5123
>                 URL: https://issues.apache.org/jira/browse/PDFBOX-5123
>             Project: PDFBox
>          Issue Type: Bug
>          Components: FontBox
>    Affects Versions: 2.0.22
>            Reporter: Gábor Stefanik
>            Priority: Minor
>         Attachments: SZAMLA-20190417-20190012706-ININET-BroadBitHungary-11646-HUF.pdf
>
>
> OS2WindowsMetricsTable contains the following code:
> {code:java}
>     /**
>      * This will read the required data from the stream.
>      * 
>      * @param ttf The font that is being read.
>      * @param data The stream to read the data from.
>      * @throws IOException If there is an error reading the data.
>      */
>     @Override
>     void read(TrueTypeFont ttf, TTFDataStream data) throws IOException
>     {
>         version = data.readUnsignedShort();
>         averageCharWidth = data.readSignedShort();
>         weightClass = data.readUnsignedShort();
>         widthClass = data.readUnsignedShort();
>         fsType = data.readSignedShort();
>         subscriptXSize = data.readSignedShort();
>         subscriptYSize = data.readSignedShort();
>         subscriptXOffset = data.readSignedShort();
>         subscriptYOffset = data.readSignedShort();
>         superscriptXSize = data.readSignedShort();
>         superscriptYSize = data.readSignedShort();
>         superscriptXOffset = data.readSignedShort();
>         superscriptYOffset = data.readSignedShort();
>         strikeoutSize = data.readSignedShort();
>         strikeoutPosition = data.readSignedShort();
>         familyClass = data.readSignedShort();
>         panose = data.read(10);
>         unicodeRange1 = data.readUnsignedInt();
>         unicodeRange2 = data.readUnsignedInt();
>         unicodeRange3 = data.readUnsignedInt();
>         unicodeRange4 = data.readUnsignedInt();
>         achVendId = data.readString(4);
>         fsSelection = data.readUnsignedShort();
>         firstCharIndex = data.readUnsignedShort();
>         lastCharIndex = data.readUnsignedShort();
>         typoAscender = data.readSignedShort();
>         typoDescender = data.readSignedShort();
>         typoLineGap = data.readSignedShort();
>         winAscent = data.readUnsignedShort();
>         winDescent = data.readUnsignedShort();
>         if (version >= 1)
>         {
>             codePageRange1 = data.readUnsignedInt();
>             codePageRange2 = data.readUnsignedInt();
>         }
>         if (version >= 1.2)
>         {
>             sxHeight = data.readSignedShort();
>             sCapHeight = data.readSignedShort();
>             usDefaultChar = data.readUnsignedShort();
>             usBreakChar = data.readUnsignedShort();
>             usMaxContext = data.readUnsignedShort();
>         }
>         initialized = true;
>     }
> {code}
> Here, "version" is an integer, local to this class, which is supposed to represent the version number of the metrics table itself (not the whole font). In the case of the first font in the attached PDF, this has a value of 3. (Note that this PDF is itself buggy, declaring a table version of 3 for what's clearly a version 0 table, but that's PDFBOX-5124.)
> However, at the end of the code, this is seemingly confused with the font version number, and is compared against the float value 1.2. Java allows comparison between int and float, so no compile-time error or warning is raised.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@pdfbox.apache.org
For additional commands, e-mail: dev-help@pdfbox.apache.org