You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ja...@apache.org on 2014/08/19 00:40:05 UTC

svn commit: r1618762 - in /pdfbox/branches/no-awt: fontbox/src/main/java/org/apache/fontbox/cmap/CodespaceRange.java pdfbox/src/main/java/org/apache/pdfbox/util/PDFStreamEngine.java

Author: jahewson
Date: Mon Aug 18 22:40:05 2014
New Revision: 1618762

URL: http://svn.apache.org/r1618762
Log:
PDFBOX-2262: Added TODOs for variable-byte CMap encodings

Modified:
    pdfbox/branches/no-awt/fontbox/src/main/java/org/apache/fontbox/cmap/CodespaceRange.java
    pdfbox/branches/no-awt/pdfbox/src/main/java/org/apache/pdfbox/util/PDFStreamEngine.java

Modified: pdfbox/branches/no-awt/fontbox/src/main/java/org/apache/fontbox/cmap/CodespaceRange.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/no-awt/fontbox/src/main/java/org/apache/fontbox/cmap/CodespaceRange.java?rev=1618762&r1=1618761&r2=1618762&view=diff
==============================================================================
--- pdfbox/branches/no-awt/fontbox/src/main/java/org/apache/fontbox/cmap/CodespaceRange.java (original)
+++ pdfbox/branches/no-awt/fontbox/src/main/java/org/apache/fontbox/cmap/CodespaceRange.java Mon Aug 18 22:40:05 2014
@@ -90,8 +90,8 @@ public class CodespaceRange
         {
             for ( int i = 0; i < end.length; i++ ) 
             {
-                int endInt = ((int)end[i]) & 0xFF;
-                int codeInt = ((int)code[offset + i]) & 0xFF;
+                int endInt = (int)end[i] & 0xFF;
+                int codeInt = (int)code[offset + i] & 0xFF;
                 if ( endInt < codeInt )
                 {
                     return false;
@@ -102,8 +102,8 @@ public class CodespaceRange
         {
             for ( int i = 0; i < end.length; i++ ) 
             {
-                int startInt = ((int)start[i]) & 0xFF;
-                int codeInt = ((int)code[offset + i]) & 0xFF;
+                int startInt = (int)start[i] & 0xFF;
+                int codeInt = (int)code[offset + i] & 0xFF;
                 if ( startInt > codeInt )
                 {
                     return false;

Modified: pdfbox/branches/no-awt/pdfbox/src/main/java/org/apache/pdfbox/util/PDFStreamEngine.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/no-awt/pdfbox/src/main/java/org/apache/pdfbox/util/PDFStreamEngine.java?rev=1618762&r1=1618761&r2=1618762&view=diff
==============================================================================
--- pdfbox/branches/no-awt/pdfbox/src/main/java/org/apache/pdfbox/util/PDFStreamEngine.java (original)
+++ pdfbox/branches/no-awt/pdfbox/src/main/java/org/apache/pdfbox/util/PDFStreamEngine.java Mon Aug 18 22:40:05 2014
@@ -417,6 +417,13 @@ public class PDFStreamEngine
             // "When the current font is a CIDFont, the string to be shown shall contain pairs of
             // bytes representing CIDs, high-order byte first."
 
+            // fixme: sanity check
+            if (!font.getCMap().getName().equals("Identity-H") &&
+                !font.getCMap().getName().equals("Identity-V"))
+            {
+                throw new UnsupportedOperationException("CMap Not implemented: " + font.getCMap().getName());
+            }
+
             // todo: ((PDType0Font)font).getCMap().hasTwoByteMappings() ???
             codeLength = 2; // todo: HACK, see "9.7.6.2 CMap Mapping" (also p275 for Identity-H or Identity-V,)
         }
@@ -427,6 +434,12 @@ public class PDFStreamEngine
 
         for (int i = 0; i < string.length; i += codeLength)
         {
+            // fixme: sanity check
+            if (i + codeLength > string.length)
+            {
+                throw new UnsupportedOperationException("Not enough data: " + string.length + " < " + (i + codeLength));
+            }
+
             // Decode the value to a Unicode character
             String unicode = font.encode(string, i, codeLength);
             int[] charCodes;