Author: tilman
Date: Mon Apr 23 17:39:33 2018
New Revision: 1829911

URL: http://svn.apache.org/viewvc?rev=1829911&view=rev
Log:
PDFBOX-4200: catch IOException if ICC profile cannot be read and use alternate 
colorspace

Modified:
    
pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDICCBased.java

Modified: 
pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDICCBased.java
URL: 
http://svn.apache.org/viewvc/pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDICCBased.java?rev=1829911&r1=1829910&r2=1829911&view=diff
==============================================================================
--- 
pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDICCBased.java
 (original)
+++ 
pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDICCBased.java
 Mon Apr 23 17:39:33 2018
@@ -161,28 +161,25 @@ public final class PDICCBased extends PD
                                         Transparency.OPAQUE, 
DataBuffer.TYPE_BYTE);
             }
         }
-        catch (RuntimeException e)
+        catch (ProfileDataException e)
         {
-            if (e instanceof ProfileDataException ||
-                e instanceof CMMException ||
-                e instanceof IllegalArgumentException ||
-                e instanceof ArrayIndexOutOfBoundsException)
-            {
-                // fall back to alternateColorSpace color space
-                awtColorSpace = null;
-                alternateColorSpace = getAlternateColorSpace();
-                if (alternateColorSpace.equals(PDDeviceRGB.INSTANCE))
-                {
-                    isRGB = true;
-                }
-                LOG.warn("Can't read embedded ICC profile (" + 
e.getLocalizedMessage() + 
-                         "), using alternate color space: " + 
alternateColorSpace.getName());
-                initialColor = alternateColorSpace.getInitialColor();
-            }
-            else
-            {
-                throw e;
-            }
+            fallbackToAlternateColorSpace(e);
+        }
+        catch (CMMException e)
+        {
+            fallbackToAlternateColorSpace(e);
+        }
+        catch (IllegalArgumentException e)
+        {
+            fallbackToAlternateColorSpace(e);
+        }
+        catch (ArrayIndexOutOfBoundsException e)
+        {
+            fallbackToAlternateColorSpace(e);
+        }
+        catch (IOException e)
+        {
+            fallbackToAlternateColorSpace(e);
         }
         finally
         {
@@ -190,6 +187,19 @@ public final class PDICCBased extends PD
         }
     }
 
+    private void fallbackToAlternateColorSpace(Exception e) throws IOException
+    {
+        awtColorSpace = null;
+        alternateColorSpace = getAlternateColorSpace();
+        if (alternateColorSpace.equals(PDDeviceRGB.INSTANCE))
+        {
+            isRGB = true;
+        }
+        LOG.warn("Can't read embedded ICC profile (" + e.getLocalizedMessage() 
+
+                "), using alternate color space: " + 
alternateColorSpace.getName());
+        initialColor = alternateColorSpace.getInitialColor();
+    }
+
     /**
      * Returns true if the given profile is represents sRGB.
      */


Reply via email to