Author: lehmi
Date: Tue Mar 30 18:05:32 2010
New Revision: 929209

URL: http://svn.apache.org/viewvc?rev=929209&view=rev
Log:
PDFBOX-674: avoid ArrayOutOfBounds by using single rgb values for the 
DeviceGray color. Patch by Maruan Sahyoun (sahyoun at fileaffairs dot de)

Modified:
    
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColorState.java

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColorState.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColorState.java?rev=929209&r1=929208&r2=929209&view=diff
==============================================================================
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColorState.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColorState.java
 Tue Mar 30 18:05:32 2010
@@ -135,14 +135,25 @@ public class PDColorState implements Clo
             }
             else
             {
-                Color override = iccOverrideColor;
-                ColorSpace cs = colorSpace.getJavaColorSpace();
-                if (colorSpace.getName().equals(PDSeparation.NAME) && 
components.length == 1)
+                if (components.length == 1) 
                 {
-                    //Use that component as a single-integer RGB value
-                    return new Color((int)components[0]);
+                    if (colorSpace.getName().equals(PDSeparation.NAME))
+                    {
+                        //Use that component as a single-integer RGB value
+                        return new Color((int)components[0]);
+                    }
+                    if (colorSpace.getName().equals(PDDeviceGray.NAME))
+                    {
+                        // Handling DeviceGray as a special case as with JVM 
1.5.0_15 
+                        // and maybe others printing on Windows fails with an 
+                        // ArrayIndexOutOfBoundsException when selecting colors
+                        // and strokes e.g. 
sun.awt.windows.WPrinterJob.setTextColor
+                        return new 
Color(components[0],components[0],components[0]);
+                    }
                 }
-                else if (cs instanceof ICC_ColorSpace && override != null)
+                Color override = iccOverrideColor;
+                ColorSpace cs = colorSpace.getJavaColorSpace();
+                if (cs instanceof ICC_ColorSpace && override != null)
                 {
                     log.warn(
                             "Using an ICC override color to avoid a potential"


Reply via email to