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 2015/10/29 21:26:18 UTC
svn commit: r1711357 - in
/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel:
PDResources.java graphics/color/PDColorSpace.java
Author: tilman
Date: Thu Oct 29 20:26:18 2015
New Revision: 1711357
URL: http://svn.apache.org/viewvc?rev=1711357&view=rev
Log:
PDFBOX-3070: avoid endless recursion for DefaultRGB color space, as suggested by Evgeniy Muravitskiy
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDResources.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColorSpace.java
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDResources.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDResources.java?rev=1711357&r1=1711356&r2=1711357&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDResources.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDResources.java Thu Oct 29 20:26:18 2015
@@ -134,10 +134,26 @@ public final class PDResources implement
* Returns the color space resource with the given name, or null if none exists.
*
* @param name Name of the color space resource.
- * @throws java.io.IOException if something went wrong.
+ * @return a new color space.
+ * @throws IOException if something went wrong.
*/
public PDColorSpace getColorSpace(COSName name) throws IOException
{
+ return getColorSpace(name, false);
+ }
+
+ /**
+ * Returns the color space resource with the given name, or null if none exists. This method is
+ * for PDFBox internal use only, others should use {@link getColorSpace(COSName)}.
+ *
+ * @param name Name of the color space resource.
+ * @param wasDefault if current color space was used by a default color space. This parameter is
+ * to
+ * @return a new color space.
+ * @throws IOException if something went wrong.
+ */
+ public PDColorSpace getColorSpace(COSName name, boolean wasDefault) throws IOException
+ {
COSObject indirect = getIndirect(COSName.COLORSPACE, name);
if (cache != null && indirect != null)
{
@@ -153,11 +169,11 @@ public final class PDResources implement
COSBase object = get(COSName.COLORSPACE, name);
if (object != null)
{
- colorSpace = PDColorSpace.create(object, this);
+ colorSpace = PDColorSpace.create(object, this, wasDefault);
}
else
{
- colorSpace = PDColorSpace.create(name, this);
+ colorSpace = PDColorSpace.create(name, this, wasDefault);
}
// we can't cache PDPattern, because it holds page resources, see PDFBOX-2370
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColorSpace.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColorSpace.java?rev=1711357&r1=1711356&r2=1711357&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColorSpace.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDColorSpace.java Thu Oct 29 20:26:18 2015
@@ -66,6 +66,26 @@ public abstract class PDColorSpace imple
PDResources resources)
throws IOException
{
+ return create(colorSpace, resources, false);
+ }
+
+ /**
+ * Creates a color space given a name or array. Abbreviated device color names are not supported
+ * here, please replace them first. This method is for PDFBox internal use only, others should
+ * use {@link create(COSBase, PDResources)}.
+ *
+ * @param colorSpace the color space COS object
+ * @param resources the current resources.
+ * @param wasDefault if current color space was used by a default color space.
+ * @return a new color space.
+ * @throws MissingResourceException if the color space is missing in the resources dictionary
+ * @throws IOException if the color space is unknown or cannot be created.
+ */
+ public static PDColorSpace create(COSBase colorSpace,
+ PDResources resources,
+ boolean wasDefault)
+ throws IOException
+ {
if (colorSpace instanceof COSObject)
{
return create(((COSObject) colorSpace).getObject(), resources);
@@ -94,9 +114,9 @@ public abstract class PDColorSpace imple
defaultName = COSName.DEFAULT_GRAY;
}
- if (resources.hasColorSpace(defaultName))
+ if (resources.hasColorSpace(defaultName) && !wasDefault)
{
- return resources.getColorSpace(defaultName);
+ return resources.getColorSpace(defaultName, true);
}
}
@@ -181,7 +201,7 @@ public abstract class PDColorSpace imple
name == COSName.DEVICEGRAY)
{
// not allowed in an array, but we sometimes encounter these regardless
- return create(name, resources);
+ return create(name, resources, wasDefault);
}
else
{