Fix incorrect parsing in java.sql.Date, where leading zeros triggered octal
parsing (so 08 was not valid) and 0xA was considered a valid component.
Patch by: jat
Review by: jgw (TBR)
Issue: 3731
git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@5616 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/super/com/google/gwt/emul/java/sql/Date.java b/user/super/com/google/gwt/emul/java/sql/Date.java
index 36f3d96..29674a1 100644
--- a/user/super/com/google/gwt/emul/java/sql/Date.java
+++ b/user/super/com/google/gwt/emul/java/sql/Date.java
@@ -28,10 +28,10 @@
try {
// Years are relative to 1900
- int y = Integer.decode(split[0]) - 1900;
+ int y = Integer.parseInt(split[0]) - 1900;
// Months are internally 0-based
- int m = Integer.decode(split[1]) - 1;
- int d = Integer.decode(split[2]);
+ int m = Integer.parseInt(split[1]) - 1;
+ int d = Integer.parseInt(split[2]);
return new Date(y, m, d);
} catch (NumberFormatException e) {
diff --git a/user/test/com/google/gwt/emultest/java/sql/SqlDateTest.java b/user/test/com/google/gwt/emultest/java/sql/SqlDateTest.java
index e05e19f..4401b79 100644
--- a/user/test/com/google/gwt/emultest/java/sql/SqlDateTest.java
+++ b/user/test/com/google/gwt/emultest/java/sql/SqlDateTest.java
@@ -30,6 +30,7 @@
/**
* Sets module name so that javascript compiler can operate.
*/
+ @Override
public String getModuleName() {
return "com.google.gwt.emultest.EmulSuite";
}
@@ -116,5 +117,18 @@
Date d2 = Date.valueOf(d.toString());
assertEquals(d, d2);
+
+ // validate that leading zero's don't trigger octal eval
+ d = Date.valueOf("2009-08-08");
+ assertEquals(109, d.getYear());
+ assertEquals(7, d.getMonth());
+ assertEquals(8, d.getDate());
+
+ // validate 0x isn't a valid prefix
+ try {
+ d = Date.valueOf("2009-0xA-0xB");
+ fail("Should have thrown IllegalArgumentException");
+ } catch (IllegalArgumentException expected) {
+ }
}
}