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 2019/12/25 11:11:58 UTC
svn commit: r1871958 - in /pdfbox/branches/issue45: ./
fontbox/src/main/java/org/apache/fontbox/cmap/CMapParser.java
Author: lehmi
Date: Wed Dec 25 11:11:58 2019
New Revision: 1871958
URL: http://svn.apache.org/viewvc?rev=1871958&view=rev
Log:
PDFBOX-4720: support widely used malformed bfranges identical to an identity mapping
Modified:
pdfbox/branches/issue45/ (props changed)
pdfbox/branches/issue45/fontbox/src/main/java/org/apache/fontbox/cmap/CMapParser.java
Propchange: pdfbox/branches/issue45/
------------------------------------------------------------------------------
Merged /pdfbox/branches/2.0:r1871957
Modified: pdfbox/branches/issue45/fontbox/src/main/java/org/apache/fontbox/cmap/CMapParser.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/issue45/fontbox/src/main/java/org/apache/fontbox/cmap/CMapParser.java?rev=1871958&r1=1871957&r2=1871958&view=diff
==============================================================================
--- pdfbox/branches/issue45/fontbox/src/main/java/org/apache/fontbox/cmap/CMapParser.java (original)
+++ pdfbox/branches/issue45/fontbox/src/main/java/org/apache/fontbox/cmap/CMapParser.java Wed Dec 25 11:11:58 2019
@@ -391,10 +391,28 @@ public class CMapParser
// PDFBOX-3450: ignore <>
if (tokenBytes.length > 0)
{
- // PDFBOX-4661: avoid overflow of the last byte, all following values are undefined
- int values = Math.min(end - start,
- 255 - (tokenBytes[tokenBytes.length - 1] & 0xFF)) + 1;
- addMappingFrombfrange(result, startCode, values, tokenBytes);
+ // PDFBOX-4720:
+ // some pdfs use the malformed bfrange <0000> <FFFF> <0000>. Add support by adding a identity
+ // mapping for the whole range instead of cutting it after 255 entries
+ // TODO find a more efficient method to represent all values for a identity mapping
+ if (tokenBytes.length == 2 && start == 0 && end == 0xffff
+ && tokenBytes[0] == 0 && tokenBytes[1] == 0)
+ {
+ for (int i = 0; i < 256; i++)
+ {
+ startCode[1] = (byte) i;
+ tokenBytes[1] = (byte) i;
+ addMappingFrombfrange(result, startCode, 0xff, tokenBytes);
+
+ }
+ }
+ else
+ {
+ // PDFBOX-4661: avoid overflow of the last byte, all following values are undefined
+ int values = Math.min(end - start,
+ 255 - (tokenBytes[tokenBytes.length - 1] & 0xFF)) + 1;
+ addMappingFrombfrange(result, startCode, values, tokenBytes);
+ }
}
}
}