Author: leleueri
Date: Mon Aug  6 20:50:34 2012
New Revision: 1370007

URL: http://svn.apache.org/viewvc?rev=1370007&view=rev
Log:
[https://issues.apache.org/jira/browse/PDFBOX-1371] Fix for Type1 validation

Modified:
    
pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/descriptor/Type1DescriptorHelper.java
    
pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/util/FontMetaDataValidation.java
    
pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/util/GlyphDescription.java
    
pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/util/Type1.java
    
pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/util/Type1Parser.java

Modified: 
pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/descriptor/Type1DescriptorHelper.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/descriptor/Type1DescriptorHelper.java?rev=1370007&r1=1370006&r2=1370007&view=diff
==============================================================================
--- 
pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/descriptor/Type1DescriptorHelper.java
 (original)
+++ 
pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/descriptor/Type1DescriptorHelper.java
 Mon Aug  6 20:50:34 2012
@@ -89,7 +89,7 @@ public class Type1DescriptorHelper exten
 
                        boolean hasLength1 = stream.getInt(COSName.LENGTH1) > 0;
                        boolean hasLength2 = 
stream.getInt(COSName.getPDFName(FONT_DICTIONARY_KEY_LENGTH2)) > 0;
-                       boolean hasLength3 = 
stream.getInt(COSName.getPDFName(FONT_DICTIONARY_KEY_LENGTH3)) > 0;
+                       boolean hasLength3 = 
stream.getInt(COSName.getPDFName(FONT_DICTIONARY_KEY_LENGTH3)) >= 0;
                        if (!(hasLength1 && hasLength2 && hasLength3)) {
                                this.fContainer.push(new 
ValidationError(ERROR_FONTS_FONT_FILEX_INVALID, "The FontFile is invalid"));
                                return null;
@@ -126,10 +126,10 @@ public class Type1DescriptorHelper exten
                        IOUtils.closeQuietly(bis);
 
                        // Parse the Type1 Font program in order to extract 
Glyph Width
-                       bis = new ByteArrayInputStream(fontFile.getByteArray());
                        COSStream streamObj = fontFile.getStream();
                        int length1 = streamObj.getInt(COSName.LENGTH1);
                        int length2 = streamObj.getInt(COSName.LENGTH2);
+                       bis = new ByteArrayInputStream(fontFile.getByteArray());
                        Type1Parser parserForMetrics = 
Type1Parser.createParserWithEncodingObject(bis, length1, length2, 
font.getFontEncoding());
                        Type1 parsedData = parserForMetrics.parse();
 

Modified: 
pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/util/FontMetaDataValidation.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/util/FontMetaDataValidation.java?rev=1370007&r1=1370006&r2=1370007&view=diff
==============================================================================
--- 
pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/util/FontMetaDataValidation.java
 (original)
+++ 
pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/util/FontMetaDataValidation.java
 Mon Aug  6 20:50:34 2012
@@ -25,7 +25,6 @@ import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
 
-
 import org.apache.padaf.xmpbox.XMPMetadata;
 import org.apache.padaf.xmpbox.schema.DublinCoreSchema;
 import org.apache.padaf.xmpbox.schema.XMPRightsManagementSchema;

Modified: 
pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/util/GlyphDescription.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/util/GlyphDescription.java?rev=1370007&r1=1370006&r2=1370007&view=diff
==============================================================================
--- 
pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/util/GlyphDescription.java
 (original)
+++ 
pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/util/GlyphDescription.java
 Mon Aug  6 20:50:34 2012
@@ -49,7 +49,16 @@ public class GlyphDescription {
                        if (obj instanceof CharStringCommand) {
                                CharStringCommand csCmd = (CharStringCommand) 
obj;
                                if 
("hsbw".equals(CharStringCommand.TYPE1_VOCABULARY.get(csCmd.getKey()))) {
-                                       return (Integer) operations.get(i - 1);
+                                       // Numbers with absolute values greater 
than 32,000 must be followed
+                                       // by a div operator such that the 
result of the div is less than 32,000.
+                                       if (operations.get(i - 1) instanceof 
CharStringCommand) {
+                                               CharStringCommand div = 
(CharStringCommand) operations.get(i - 1);
+                                               if 
("div".equals(CharStringCommand.TYPE1_VOCABULARY.get(div.getKey()))) {
+                                                       return 
((Integer)operations.get(i - 3) / (Integer)operations.get(i - 2));
+                                               }
+                                       } else {
+                                               return (Integer) 
operations.get(i - 1);
+                                       }
                                }
                        }
                }

Modified: 
pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/util/Type1.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/util/Type1.java?rev=1370007&r1=1370006&r2=1370007&view=diff
==============================================================================
--- 
pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/util/Type1.java
 (original)
+++ 
pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/util/Type1.java
 Mon Aug  6 20:50:34 2012
@@ -26,7 +26,6 @@ import java.util.HashMap;
 import java.util.Map;
 import java.util.Map.Entry;
 
-
 import org.apache.pdfbox.encoding.Encoding;
 import org.apache.pdfbox.preflight.PreflightConstants;
 

Modified: 
pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/util/Type1Parser.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/util/Type1Parser.java?rev=1370007&r1=1370006&r2=1370007&view=diff
==============================================================================
--- 
pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/util/Type1Parser.java
 (original)
+++ 
pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/font/util/Type1Parser.java
 Mon Aug  6 20:50:34 2012
@@ -565,7 +565,7 @@ public final class Type1Parser {
 
        private boolean isDupKeyWord(byte[] token) throws IOException {
                String word = new String(token, TOKEN_ENCODING);
-               return "/Encoding".equals(word);
+               return "dup".equals(word);
        }
 
        private boolean isStartOfEExecReached() {


Reply via email to