Author: lehmi
Date: Wed Dec 25 11:12:48 2019
New Revision: 1871960

URL: http://svn.apache.org/viewvc?rev=1871960&view=rev
Log:
PDFBOX-4720: support widely used malformed bfranges identical to an identity 
mapping

Modified:
    pdfbox/branches/issue4569/   (props changed)
    
pdfbox/branches/issue4569/fontbox/src/main/java/org/apache/fontbox/cmap/CMapParser.java

Propchange: pdfbox/branches/issue4569/
------------------------------------------------------------------------------
  Merged /pdfbox/branches/2.0:r1871957

Modified: 
pdfbox/branches/issue4569/fontbox/src/main/java/org/apache/fontbox/cmap/CMapParser.java
URL: 
http://svn.apache.org/viewvc/pdfbox/branches/issue4569/fontbox/src/main/java/org/apache/fontbox/cmap/CMapParser.java?rev=1871960&r1=1871959&r2=1871960&view=diff
==============================================================================
--- 
pdfbox/branches/issue4569/fontbox/src/main/java/org/apache/fontbox/cmap/CMapParser.java
 (original)
+++ 
pdfbox/branches/issue4569/fontbox/src/main/java/org/apache/fontbox/cmap/CMapParser.java
 Wed Dec 25 11:12:48 2019
@@ -384,10 +384,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);
+                    }
                 }
             }
         }


Reply via email to