Revision: 8332
Author: r...@google.com
Date: Tue Jun 29 09:06:34 2010
Log: 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: rj...@google.com
http://code.google.com/p/google-web-toolkit/source/detail?r=8332
Modified:
/trunk/user/super/com/google/gwt/emul/java/lang/Number.java
/trunk/user/test/com/google/gwt/emultest/java/lang/DoubleTest.java
/trunk/user/test/com/google/gwt/emultest/java/lang/FloatTest.java
=======================================
--- /trunk/user/super/com/google/gwt/emul/java/lang/Number.java Mon Jun 7
09:38:44 2010
+++ /trunk/user/super/com/google/gwt/emul/java/lang/Number.java Tue Jun 29
09:06:34 2010
@@ -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);
=======================================
--- /trunk/user/test/com/google/gwt/emultest/java/lang/DoubleTest.java Fri
Jun 11 10:06:45 2010
+++ /trunk/user/test/com/google/gwt/emultest/java/lang/DoubleTest.java Tue
Jun 29 09:06:34 2010
@@ -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);
}
}
=======================================
--- /trunk/user/test/com/google/gwt/emultest/java/lang/FloatTest.java Thu
Feb 25 10:33:31 2010
+++ /trunk/user/test/com/google/gwt/emultest/java/lang/FloatTest.java Tue
Jun 29 09:06:34 2010
@@ -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
--
http://groups.google.com/group/Google-Web-Toolkit-Contributors