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/11/19 20:04:50 UTC
svn commit: r1715241 -
/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/state/SetLineDashPattern.java
Author: tilman
Date: Thu Nov 19 19:04:50 2015
New Revision: 1715241
URL: http://svn.apache.org/viewvc?rev=1715241&view=rev
Log:
PDFBOX-3122: avoid IllegalArgumentException if dash lengths all zero
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/state/SetLineDashPattern.java
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/state/SetLineDashPattern.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/state/SetLineDashPattern.java?rev=1715241&r1=1715240&r2=1715241&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/state/SetLineDashPattern.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/contentstream/operator/state/SetLineDashPattern.java Thu Nov 19 19:04:50 2015
@@ -18,11 +18,15 @@ package org.apache.pdfbox.contentstream.
import java.util.List;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import org.apache.pdfbox.contentstream.operator.MissingOperandException;
+import org.apache.pdfbox.contentstream.operator.Operator;
+import org.apache.pdfbox.contentstream.operator.OperatorProcessor;
import org.apache.pdfbox.cos.COSArray;
import org.apache.pdfbox.cos.COSBase;
import org.apache.pdfbox.cos.COSNumber;
-import org.apache.pdfbox.contentstream.operator.Operator;
-import org.apache.pdfbox.contentstream.operator.OperatorProcessor;
/**
* d: Set the line dash pattern.
@@ -31,11 +35,52 @@ import org.apache.pdfbox.contentstream.o
*/
public class SetLineDashPattern extends OperatorProcessor
{
+ private static final Log LOG = LogFactory.getLog(SetLineDashPattern.class);
+
@Override
- public void process(Operator operator, List<COSBase> arguments)
+ public void process(Operator operator, List<COSBase> arguments) throws MissingOperandException
{
- COSArray dashArray = (COSArray) arguments.get(0);
- int dashPhase = ((COSNumber) arguments.get(1)).intValue();
+ if (arguments.size() < 2)
+ {
+ throw new MissingOperandException(operator, arguments);
+ }
+ COSBase base0 = arguments.get(0);
+ if (!(base0 instanceof COSArray))
+ {
+ return;
+ }
+ COSBase base1 = arguments.get(1);
+ if (!(base1 instanceof COSNumber))
+ {
+ return;
+ }
+ COSArray dashArray = (COSArray) base0;
+ int dashPhase = ((COSNumber) base1).intValue();
+
+ boolean allZero = true;
+ for (COSBase base : dashArray)
+ {
+ if (base instanceof COSNumber)
+ {
+ COSNumber num = (COSNumber) base;
+ if (num.floatValue() != 0)
+ {
+ allZero = false;
+ break;
+ }
+ }
+ else
+ {
+ LOG.error("dash array has non number element " + base + ", ignored");
+ dashArray = new COSArray();
+ break;
+ }
+ }
+ if (dashArray.size() > 0 && allZero)
+ {
+ LOG.error("dash lengths all zero, ignored");
+ dashArray = new COSArray();
+ }
context.setLineDashPattern(dashArray, dashPhase);
}