Author: nick
Date: Tue Oct 22 21:55:48 2013
New Revision: 1534816

URL: http://svn.apache.org/r1534816
Log:
Include a workaround for PDFBOX-1749 by trying to use AWT (if we have a 
TikaInputStream) to check the TTF is valid. Should mostly solve TIKA-1182 until 
the upstream fix is done

Modified:
    
tika/trunk/tika-parsers/src/main/java/org/apache/tika/parser/font/TrueTypeParser.java

Modified: 
tika/trunk/tika-parsers/src/main/java/org/apache/tika/parser/font/TrueTypeParser.java
URL: 
http://svn.apache.org/viewvc/tika/trunk/tika-parsers/src/main/java/org/apache/tika/parser/font/TrueTypeParser.java?rev=1534816&r1=1534815&r2=1534816&view=diff
==============================================================================
--- 
tika/trunk/tika-parsers/src/main/java/org/apache/tika/parser/font/TrueTypeParser.java
 (original)
+++ 
tika/trunk/tika-parsers/src/main/java/org/apache/tika/parser/font/TrueTypeParser.java
 Tue Oct 22 21:55:48 2013
@@ -16,6 +16,8 @@
  */
 package org.apache.tika.parser.font;
 
+import java.awt.Font;
+import java.awt.FontFormatException;
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.Collections;
@@ -56,15 +58,35 @@ public class TrueTypeParser extends Abst
             InputStream stream, ContentHandler handler,
             Metadata metadata, ParseContext context)
             throws IOException, SAXException, TikaException {
+        TikaInputStream tis = TikaInputStream.cast(stream);
+        
+        // Until PDFBOX-1749 is fixed, if we can, use AWT to verify
+        //  that the file is valid (otherwise FontBox could hang)
+        // See TIKA-1182 for details
+        if (tis != null) {
+            try {
+                if (tis.hasFile()) {
+                    Font.createFont(Font.TRUETYPE_FONT, tis.getFile());
+                } else {
+                    tis.mark(0);
+                    Font.createFont(Font.TRUETYPE_FONT, stream);
+                    tis.reset();
+                }
+            } catch (FontFormatException ex) {
+                throw new TikaException("Bad TrueType font.");
+            }
+        }
+        
+        // Ask FontBox to parse the file for us
         TrueTypeFont font;
         TTFParser parser = new TTFParser();
-        TikaInputStream tis = TikaInputStream.cast(stream);
         if (tis != null && tis.hasFile()) {
             font = parser.parseTTF(tis.getFile());
         } else {
             font = parser.parseTTF(stream);
         }
 
+        // Report the details of the font
         metadata.set(Metadata.CONTENT_TYPE, TYPE.toString());
         metadata.set(TikaCoreProperties.CREATED, 
font.getHeader().getCreated().getTime());
         metadata.set(


Reply via email to