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 13:17:55 UTC
svn commit: r1726482 - in
/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos: COSFloat.java
COSNumber.java
Author: lehmi
Date: Sun Jan 24 12:17:53 2016
New Revision: 1726482
URL: http://svn.apache.org/viewvc?rev=1726482&view=rev
Log:
PDFBOX-3116: check MIN/MAX values of the given number and replace them if to out of bounds
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSFloat.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSNumber.java
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSFloat.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSFloat.java?rev=1726482&r1=1726481&r2=1726482&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSFloat.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSFloat.java Sun Jan 24 12:17:53 2016
@@ -57,6 +57,7 @@ public class COSFloat extends COSNumber
{
valueAsString = aFloat;
value = new BigDecimal( valueAsString );
+ checkMinMaxValues();
}
catch( NumberFormatException e )
{
@@ -68,6 +69,7 @@ public class COSFloat extends COSNumber
{
valueAsString = "-0.00000" + aFloat.substring(8);
value = new BigDecimal(valueAsString);
+ checkMinMaxValues();
}
catch (NumberFormatException e2)
{
@@ -80,7 +82,39 @@ public class COSFloat extends COSNumber
}
}
}
-
+
+ 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 *= 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_NORMAL )
+ {
+ floatValue = Float.MIN_NORMAL;
+ floatValue *= doubleValue >= 0 ? 1 : -1;
+ valueReplaced = true;
+ }
+ }
+ if (valueReplaced)
+ {
+ value = new BigDecimal(floatValue);
+ valueAsString = removeNullDigits(value.toPlainString());
+ }
+ }
+
private String removeNullDigits(String plainStringValue)
{
// remove fraction digit "0" only
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSNumber.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSNumber.java?rev=1726482&r1=1726481&r2=1726482&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSNumber.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSNumber.java Sun Jan 24 12:17:53 2016
@@ -107,14 +107,7 @@ public abstract class COSNumber extends
catch( NumberFormatException e )
{
// might be a huge number, see PDFBOX-3116
- try
- {
- return new COSFloat(number);
- }
- catch (NumberFormatException e2)
- {
- throw new IOException("Not a number: " + number, e2);
- }
+ return new COSFloat(number);
}
}
else