Patch by T. Broyer - Fix issue 5065: Float.parseFloat and Double.parseDouble are too strict validating input (issue647802)
Review at http://gwt-code-reviews.appspot.com/661802
Review by: rjrjr@google.com
git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@8332 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/super/com/google/gwt/emul/java/lang/Number.java b/user/super/com/google/gwt/emul/java/lang/Number.java
index 32ada57..04a85e1 100644
--- a/user/super/com/google/gwt/emul/java/lang/Number.java
+++ b/user/super/com/google/gwt/emul/java/lang/Number.java
@@ -345,7 +345,7 @@
var floatRegex = @java.lang.Number::floatRegex;
if (!floatRegex) {
// Disallow '.' with no digits on either side
- floatRegex = @java.lang.Number::floatRegex = /^\s*[+-]?((\d+\.?\d*)|(\.\d+))([eE][+-]?\d+)?\s*$/i;
+ floatRegex = @java.lang.Number::floatRegex = /^\s*[+-]?((\d+\.?\d*)|(\.\d+))([eE][+-]?\d+)?[dDfF]?\s*$/i;
}
if (floatRegex.test(str)) {
return parseFloat(str);
diff --git a/user/test/com/google/gwt/emultest/java/lang/DoubleTest.java b/user/test/com/google/gwt/emultest/java/lang/DoubleTest.java
index f61a4ab..00520ed 100644
--- a/user/test/com/google/gwt/emultest/java/lang/DoubleTest.java
+++ b/user/test/com/google/gwt/emultest/java/lang/DoubleTest.java
@@ -151,5 +151,11 @@
assertTrue(-2.56789e1 == Double.parseDouble(" -2.56789E1"));
assertTrue(-2.56789e1 == Double.parseDouble("-2.56789e+01 "));
assertTrue(-2.56789e1 == Double.parseDouble(" -2.56789E1 "));
+
+ // Test that a float/double type suffix is allowed
+ assertEquals(1.0d, Double.parseDouble("1.0f"), 0.0);
+ assertEquals(1.0d, Double.parseDouble("1.0F"), 0.0);
+ assertEquals(1.0d, Double.parseDouble("1.0d"), 0.0);
+ assertEquals(1.0d, Double.parseDouble("1.0D"), 0.0);
}
}
diff --git a/user/test/com/google/gwt/emultest/java/lang/FloatTest.java b/user/test/com/google/gwt/emultest/java/lang/FloatTest.java
index 3254e20..2afc944 100644
--- a/user/test/com/google/gwt/emultest/java/lang/FloatTest.java
+++ b/user/test/com/google/gwt/emultest/java/lang/FloatTest.java
@@ -78,6 +78,13 @@
assertEquals(-1.5f, Float.parseFloat("-1.5"), 0.0);
assertEquals(3.0f, Float.parseFloat("3."), 0.0);
assertEquals(0.5f, Float.parseFloat(".5"), 0.0);
+
+ // Test that a float/double type suffix is allowed
+ assertEquals(1.0f, Float.parseFloat("1.0f"), 0.0);
+ assertEquals(1.0f, Float.parseFloat("1.0F"), 0.0);
+ assertEquals(1.0f, Float.parseFloat("1.0d"), 0.0);
+ assertEquals(1.0f, Float.parseFloat("1.0D"), 0.0);
+
// TODO(jat): it isn't safe to parse MAX/MIN_VALUE because we also want to
// be able to get POSITIVE/NEGATIVE_INFINITY for out-of-range values, and
// since all math in JS is done in double we can't rely on getting the