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/09/22 03:27:05 UTC

svn commit: r1626656 - in /pdfbox/trunk: fontbox/src/main/java/org/apache/fontbox/type1/DamagedFontException.java fontbox/src/main/java/org/apache/fontbox/type1/Type1Lexer.java pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1Font.java

Author: jahewson
Date: Mon Sep 22 01:27:05 2014
New Revision: 1626656

URL: http://svn.apache.org/r1626656
Log:
PDFBOX-2350: Correctly handle and warn about damaged Type 1 font streams

Added:
    pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/type1/DamagedFontException.java
Modified:
    pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/type1/Type1Lexer.java
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1Font.java

Added: pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/type1/DamagedFontException.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/type1/DamagedFontException.java?rev=1626656&view=auto
==============================================================================
--- pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/type1/DamagedFontException.java (added)
+++ pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/type1/DamagedFontException.java Mon Sep 22 01:27:05 2014
@@ -0,0 +1,33 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.fontbox.type1;
+
+import java.io.IOException;
+
+/**
+ * Thrown when a font is damaged and cannot be read.
+ *
+ * @author John Hewson
+ */
+public class DamagedFontException extends IOException
+{
+    public DamagedFontException(String message)
+    {
+        super(message);
+    }
+}

Modified: pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/type1/Type1Lexer.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/type1/Type1Lexer.java?rev=1626656&r1=1626655&r2=1626656&view=diff
==============================================================================
--- pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/type1/Type1Lexer.java (original)
+++ pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/type1/Type1Lexer.java Mon Sep 22 01:27:05 2014
@@ -165,6 +165,12 @@ class Type1Lexer
                     {
                         // otherwise this must be a name
                         String name = readRegular();
+                        if (name == null)
+                        {
+                            // the stream is corrupt
+                            throw new DamagedFontException("Could not read token at position " +
+                                                           buffer.position());
+                        }
 
                         if (name.equals("RD") || name.equals("-|"))
                         {
@@ -331,7 +337,12 @@ class Type1Lexer
                 sb.append(c);
             }
         }
-        return sb.toString();
+        String regular = sb.toString();
+        if (regular.length() == 0)
+        {
+            return null;
+        }
+        return regular;
     }
 
     /**

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1Font.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1Font.java?rev=1626656&r1=1626655&r2=1626656&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1Font.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1Font.java Mon Sep 22 01:27:05 2014
@@ -30,6 +30,7 @@ import org.apache.commons.logging.LogFac
 import org.apache.fontbox.afm.AFMParser;
 import org.apache.fontbox.afm.FontMetrics;
 import org.apache.fontbox.ttf.Type1Equivalent;
+import org.apache.fontbox.type1.DamagedFontException;
 import org.apache.fontbox.type1.Type1Font;
 import org.apache.fontbox.util.BoundingBox;
 import org.apache.pdfbox.cos.COSDictionary;
@@ -221,6 +222,10 @@ public class PDType1Font extends PDSimpl
 
                     t1 =  Type1Font.createWithSegments(segment1, segment2);
                 }
+                catch (DamagedFontException e)
+                {
+                    LOG.warn("Can't read damaged embedded Type1 font " + fd.getFontName());
+                }
                 catch (IOException e)
                 {
                     LOG.error("Can't read the embedded Type1 font " + fd.getFontName(), e);