You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ti...@apache.org on 2020/12/16 11:24:59 UTC

svn commit: r1884497 - in /pdfbox/branches/2.0/pdfbox/src: main/java/org/apache/pdfbox/pdmodel/font/PDType1CFont.java test/java/org/apache/pdfbox/pdmodel/font/PDFontTest.java

Author: tilman
Date: Wed Dec 16 11:24:59 2020
New Revision: 1884497

URL: http://svn.apache.org/viewvc?rev=1884497&view=rev
Log:
PDFBOX-5048: avoid NullPointerException

Modified:
    pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1CFont.java
    pdfbox/branches/2.0/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/font/PDFontTest.java

Modified: pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1CFont.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1CFont.java?rev=1884497&r1=1884496&r2=1884497&view=diff
==============================================================================
--- pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1CFont.java (original)
+++ pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1CFont.java Wed Dec 16 11:24:59 2020
@@ -299,7 +299,12 @@ public class PDType1CFont extends PDSimp
         float height;
         if (!glyphHeights.containsKey(name))
         {
-            height = (float)cffFont.getType1CharString(name).getBounds().getHeight(); // todo: cffFont could be null
+            if (cffFont == null)
+            {
+                LOG.warn("No embedded CFF font, returning 0");
+                return 0;
+            }
+            height = (float) cffFont.getType1CharString(name).getBounds().getHeight();
             glyphHeights.put(name, height);
         }
         else
@@ -337,6 +342,11 @@ public class PDType1CFont extends PDSimp
     @Override
     public float getStringWidth(String string) throws IOException
     {
+        if (cffFont == null)
+        {
+            LOG.warn("No embedded CFF font, returning 0");
+            return 0;
+        }
         float width = 0;
         for (int i = 0; i < string.length(); i++)
         {

Modified: pdfbox/branches/2.0/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/font/PDFontTest.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/2.0/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/font/PDFontTest.java?rev=1884497&r1=1884496&r2=1884497&view=diff
==============================================================================
--- pdfbox/branches/2.0/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/font/PDFontTest.java (original)
+++ pdfbox/branches/2.0/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/font/PDFontTest.java Wed Dec 16 11:24:59 2020
@@ -272,6 +272,25 @@ public class PDFontTest
         Assert.fail("should have thrown IOException");
     }
 
+    /**
+     * Test using broken Type1C font.
+     *
+     * @throws IOException 
+     */
+    @Test
+    void testPDFox5048() throws IOException
+    {
+        InputStream is = new URL("https://issues.apache.org/jira/secure/attachment/13017227/stringwidth.pdf").openStream();
+        PDDocument doc = PDDocument.load(is);
+        PDPage page = doc.getPage(0);
+        PDFont font = page.getResources().getFont(COSName.getPDFName("F70"));
+        Assert.assertTrue(font.isDamaged());
+        Assert.assertEquals(0, font.getHeight(0));
+        Assert.assertEquals(0, font.getStringWidth("Pa"));
+        doc.close();
+        is.close();
+    }
+
     private void testPDFBox3826checkFonts(byte[] byteArray, File fontFile) throws IOException
     {
         PDDocument doc = PDDocument.load(byteArray);