You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by le...@apache.org on 2016/01/24 19:38:37 UTC
svn commit: r1726531 - in
/pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/cos:
COSFloat.java COSNumber.java
Author: lehmi
Date: Sun Jan 24 18:38:37 2016
New Revision: 1726531
URL: http://svn.apache.org/viewvc?rev=1726531&view=rev
Log:
PDFBOX-3116: check MIN/MAX values of the given number and replace them if to out of bounds
Modified:
pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/cos/COSFloat.java
pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/cos/COSNumber.java
Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/cos/COSFloat.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/cos/COSFloat.java?rev=1726531&r1=1726530&r2=1726531&view=diff
==============================================================================
--- pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/cos/COSFloat.java (original)
+++ pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/cos/COSFloat.java Sun Jan 24 18:38:37 2016
@@ -56,6 +56,7 @@ public class COSFloat extends COSNumber
{
valueAsString = aFloat;
value = new BigDecimal( valueAsString );
+ checkMinMaxValues();
}
catch( NumberFormatException e )
{
@@ -67,6 +68,7 @@ public class COSFloat extends COSNumber
{
valueAsString = "-0.00000" + aFloat.substring(8);
value = new BigDecimal(valueAsString);
+ checkMinMaxValues();
}
catch (NumberFormatException e2)
{
@@ -93,6 +95,38 @@ public class COSFloat extends COSNumber
valueAsString = removeNullDigits(value.toPlainString());
}
+ private void checkMinMaxValues()
+ {
+ float floatValue = value.floatValue();
+ double doubleValue = value.doubleValue();
+ boolean valueReplaced = false;
+ // check for huge values
+ if (floatValue == Float.NEGATIVE_INFINITY || floatValue == Float.POSITIVE_INFINITY )
+ {
+
+ if (Math.abs(doubleValue) > Float.MAX_VALUE)
+ {
+ floatValue = Float.MAX_VALUE * (floatValue == Float.POSITIVE_INFINITY ? 1 : -1);
+ valueReplaced = true;
+ }
+ }
+ // check for very small values
+ else if (floatValue == 0 && doubleValue != 0)
+ {
+ if (Math.abs(doubleValue) < Float.MIN_VALUE )
+ {
+ floatValue = Float.MIN_VALUE;
+ floatValue *= doubleValue >= 0 ? 1 : -1;
+ valueReplaced = true;
+ }
+ }
+ if (valueReplaced)
+ {
+ value = new BigDecimal(floatValue);
+ valueAsString = removeNullDigits(value.toPlainString());
+ }
+ }
+
private String removeNullDigits(String value)
{
// remove fraction digit "0" only
Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/cos/COSNumber.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/cos/COSNumber.java?rev=1726531&r1=1726530&r2=1726531&view=diff
==============================================================================
--- pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/cos/COSNumber.java (original)
+++ pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/cos/COSNumber.java Sun Jan 24 18:38:37 2016
@@ -108,7 +108,8 @@ public abstract class COSNumber extends
}
catch( NumberFormatException e )
{
- throw new IOException( "Value is not an integer: " + number );
+ // might be a huge number, see PDFBOX-3116
+ return new COSFloat(number);
}
}
else