Author: tilman
Date: Tue Mar 11 17:52:49 2014
New Revision: 1576439

URL: http://svn.apache.org/r1576439
Log:
PDFBOX-1946: catch SecurityException and resulting null values when run in an 
applet

Modified:
    
pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/encoding/Encoding.java
    
pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/BaseParser.java
    
pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/util/PDFStreamEngine.java
    
pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/util/PDFTextStripper.java
    
pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/util/ResourceLoader.java

Modified: 
pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/encoding/Encoding.java
URL: 
http://svn.apache.org/viewvc/pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/encoding/Encoding.java?rev=1576439&r1=1576438&r2=1576439&view=diff
==============================================================================
--- 
pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/encoding/Encoding.java
 (original)
+++ 
pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/encoding/Encoding.java
 Tue Mar 11 17:52:49 2014
@@ -75,15 +75,22 @@ public abstract class Encoding implement
         loadGlyphList("org/apache/pdfbox/resources/additional_glyphlist.txt");
 
         // Load an external glyph list file that user can give as JVM property
-        String location = System.getProperty("glyphlist_ext");
-        if(location != null)
+        try
         {
-            File external = new File(location);
-            if(external.exists())
+            String location = System.getProperty("glyphlist_ext");
+            if(location != null)
             {
-                loadGlyphList(location);
+                File external = new File(location);
+                if(external.exists())
+                {
+                    loadGlyphList(location);
+                }
             }
         }
+        catch (SecurityException e)  // can occur on Sytem.getProperty
+        {
+            // PDFBOX-1946 ignore and continue
+        }
 
         NAME_TO_CHARACTER.put( NOTDEF, "" );
         NAME_TO_CHARACTER.put( "fi", "fi" );

Modified: 
pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/BaseParser.java
URL: 
http://svn.apache.org/viewvc/pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/BaseParser.java?rev=1576439&r1=1576438&r2=1576439&view=diff
==============================================================================
--- 
pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/BaseParser.java
 (original)
+++ 
pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/BaseParser.java
 Tue Mar 11 17:52:49 2014
@@ -128,9 +128,22 @@ public abstract class BaseParser
     /**
      * Default value of the {@link #forceParsing} flag.
      */
-    protected static final boolean FORCE_PARSING =
-        Boolean.getBoolean("org.apache.pdfbox.forceParsing");
+    static boolean FORCE_PARSING = true;
 
+    static
+    {
+        // get preferences value for force parsing
+        try
+        {
+            FORCE_PARSING = 
Boolean.getBoolean("org.apache.pdfbox.forceParsing");
+        }
+        catch (SecurityException e)  
+        {
+            // PDFBOX-1946 since Boolean.getBoolean calls System.getProperty, 
this can occur
+            /* ignore and use default */
+        }
+    }
+    
     /**
      * This is the stream that will be read from.
      */
@@ -166,8 +179,17 @@ public abstract class BaseParser
     public BaseParser(InputStream input, boolean forceParsingValue)
             throws IOException
     {
+       int pushbacksize = 65536;
+       try
+               {
+                       pushbacksize = Integer.getInteger( PROP_PUSHBACK_SIZE, 
65536 );
+               }
+               catch (SecurityException e)  // getInteger calls 
System.getProperties, which can get exception
+               {
+                       // ignore and use default
+               }
         this.pdfSource = new PushBackInputStream(
-                new BufferedInputStream(input, 16384),  Integer.getInteger( 
PROP_PUSHBACK_SIZE, 65536 ) );
+                       new BufferedInputStream(input, 16384), pushbacksize );
         this.forceParsing = forceParsingValue;
     }
 

Modified: 
pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/util/PDFStreamEngine.java
URL: 
http://svn.apache.org/viewvc/pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/util/PDFStreamEngine.java?rev=1576439&r1=1576438&r2=1576439&view=diff
==============================================================================
--- 
pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/util/PDFStreamEngine.java
 (original)
+++ 
pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/util/PDFStreamEngine.java
 Tue Mar 11 17:52:49 2014
@@ -348,24 +348,29 @@ public class PDFStreamEngine
             glyphSpaceToTextSpaceFactor = 1f/fontMatrix.getValue( 0, 0 );
         }
         float spaceWidthText=0;
-        try
-        {   
-            // to avoid crash as described in PDFBOX-614
-            // lets see what the space displacement should be
-            spaceWidthText = 
(font.getSpaceWidth()*glyphSpaceToTextSpaceFactor);
-        }
-        catch (Throwable exception)
+        if (font != null) // PDFBOX-1946 font might still be null if in applet
         {
-            LOG.warn( exception, exception);
+            try
+            {
+                // to avoid crash as described in PDFBOX-614
+                // lets see what the space displacement should be
+                spaceWidthText = (font.getSpaceWidth() * 
glyphSpaceToTextSpaceFactor);
+            }
+            catch (Throwable exception)
+            {
+                LOG.warn(exception, exception);
+            }
         }
         
         if( spaceWidthText == 0 )
         {
             spaceWidthText = 
(font.getAverageFontWidth()*glyphSpaceToTextSpaceFactor);
-            //The average space width appears to be higher than necessary
-            //so lets make it a little bit smaller.
+            // The average space width appears to be higher than necessary
+            // so lets make it a little bit smaller.
             spaceWidthText *= .80f;
         }
+        else 
+            spaceWidthText=1.0f; // if could not find font, use a generic value
         
         float maxVerticalDisplacementText = 0;
 

Modified: 
pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/util/PDFTextStripper.java
URL: 
http://svn.apache.org/viewvc/pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/util/PDFTextStripper.java?rev=1576439&r1=1576438&r2=1576439&view=diff
==============================================================================
--- 
pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/util/PDFTextStripper.java
 (original)
+++ 
pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/util/PDFTextStripper.java
 Tue Mar 11 17:52:49 2014
@@ -75,30 +75,39 @@ public class PDFTextStripper extends PDF
     //    pdftextstripper.drop
     static
     {
-        String prop = thisClassName+".indent";
-        String s = System.getProperty(prop);
-        if(s!=null && s.length()>0)
+        String sdrop = null, sindent = null;
+        try
+        {
+            String prop = thisClassName + ".indent";
+            sindent = System.getProperty(prop);
+            prop = thisClassName + ".drop";
+            sdrop = System.getProperty(prop);
+        }
+        catch (SecurityException e)
+        {
+            // PDFBOX-1946 when run in an applet
+            // ignore and use default
+        }
+        if (sindent != null && sindent.length() > 0)
         {
             try
             {
-                float f = Float.parseFloat(s);
+                float f = Float.parseFloat(sindent);
                 DEFAULT_INDENT_THRESHOLD = f;
             }
-            catch(NumberFormatException nfe)
+            catch (NumberFormatException nfe)
             {
-                        //ignore and use default
+                //ignore and use default
             }
         }
-        prop = thisClassName+".drop";
-        s = System.getProperty(prop);
-        if(s!=null && s.length()>0)
+        if (sdrop != null && sdrop.length() > 0)
         {
             try
             {
-                float f = Float.parseFloat(s);
+                float f = Float.parseFloat(sdrop);
                 DEFAULT_DROP_THRESHOLD = f;
             }
-            catch(NumberFormatException nfe)
+            catch (NumberFormatException nfe)
             {
                 //ignore and use default
             }

Modified: 
pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/util/ResourceLoader.java
URL: 
http://svn.apache.org/viewvc/pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/util/ResourceLoader.java?rev=1576439&r1=1576438&r2=1576439&view=diff
==============================================================================
--- 
pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/util/ResourceLoader.java
 (original)
+++ 
pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/util/ResourceLoader.java
 Tue Mar 11 17:52:49 2014
@@ -51,8 +51,16 @@ public class ResourceLoader
      */
     public static InputStream loadResource( String resourceName ) throws 
IOException
     {
-        ClassLoader loader = ResourceLoader.class.getClassLoader();
-
+        ClassLoader loader = null;
+        try
+        {
+            loader = ResourceLoader.class.getClassLoader();
+        }
+        catch (SecurityException ex)
+        {
+            // PDFBOX-1946 ignore and try other alternatives
+        }
+   
         InputStream is = null;
 
         if( loader != null )
@@ -62,24 +70,31 @@ public class ResourceLoader
 
         //see sourceforge bug 863053, this is a fix for a user that
         //needed to have PDFBox loaded by the bootstrap classloader
-        if( is == null )
+        try
         {
-            loader = ClassLoader.getSystemClassLoader();
-            if( loader != null )
+            if (is == null)
             {
-                is = loader.getResourceAsStream( resourceName );
+                loader = ClassLoader.getSystemClassLoader();
+                if( loader != null )
+                {
+                    is = loader.getResourceAsStream( resourceName );
+                }
             }
-        }
 
-        if( is == null )
-        {
-            File f = new File( resourceName );
-            if( f.exists() )
+            if( is == null )
             {
-                is = new FileInputStream( f );
+                File f = new File( resourceName );
+                if( f.exists() )
+                {
+                  is = new FileInputStream( f );
+                }
             }
         }
-
+        catch (SecurityException ex)
+        {
+            // PDFBOX-1946 ignore and continue
+        }
+ 
         return is;
     }
 


Reply via email to