aboutsummaryrefslogtreecommitdiff
path: root/src/share/classes/java/sql
diff options
context:
space:
mode:
authorlancea <none@none>2010-08-10 10:07:33 -0400
committerlancea <none@none>2010-08-10 10:07:33 -0400
commit995026ee6af4f43112e175aa70ea4679a606f127 (patch)
tree884f9ed1d70c0648b0b28cc3351cd160573aa7a9 /src/share/classes/java/sql
parenta04eba6a0ddaac1c8b14ac3892cfe091f3fb7338 (diff)
downloadjdk8u_jdk-995026ee6af4f43112e175aa70ea4679a606f127.tar.gz
6898593: java.sql.Date.valueOf no exception if date given is not in the JDBC date escape syntax
Reviewed-by: minqi
Diffstat (limited to 'src/share/classes/java/sql')
-rw-r--r--src/share/classes/java/sql/Date.java41
1 files changed, 30 insertions, 11 deletions
diff --git a/src/share/classes/java/sql/Date.java b/src/share/classes/java/sql/Date.java
index 39cf98ce93..7c2356e75c 100644
--- a/src/share/classes/java/sql/Date.java
+++ b/src/share/classes/java/sql/Date.java
@@ -103,27 +103,46 @@ public class Date extends java.util.Date {
* JDBC date escape format (yyyy-mm-dd)
*/
public static Date valueOf(String s) {
- int year;
- int month;
- int day;
+ final int YEAR_LENGTH = 4;
+ final int MONTH_LENGTH = 2;
+ final int DAY_LENGTH = 2;
+ final int MAX_MONTH = 12;
+ final int MAX_DAY = 31;
int firstDash;
int secondDash;
+ Date d = null;
- if (s == null) throw new java.lang.IllegalArgumentException();
+ if (s == null) {
+ throw new java.lang.IllegalArgumentException();
+ }
firstDash = s.indexOf('-');
- secondDash = s.indexOf('-', firstDash+1);
- if ((firstDash > 0) & (secondDash > 0) & (secondDash < s.length()-1)) {
- year = Integer.parseInt(s.substring(0, firstDash)) - 1900;
- month = Integer.parseInt(s.substring(firstDash+1, secondDash)) - 1;
- day = Integer.parseInt(s.substring(secondDash+1));
- } else {
+ secondDash = s.indexOf('-', firstDash + 1);
+
+ if ((firstDash > 0) && (secondDash > 0) && (secondDash < s.length() - 1)) {
+ String yyyy = s.substring(0, firstDash);
+ String mm = s.substring(firstDash + 1, secondDash);
+ String dd = s.substring(secondDash + 1);
+ if (yyyy.length() == YEAR_LENGTH && mm.length() == MONTH_LENGTH &&
+ dd.length() == DAY_LENGTH) {
+ int year = Integer.parseInt(yyyy);
+ int month = Integer.parseInt(mm);
+ int day = Integer.parseInt(dd);
+
+ if ((month >= 1 && month <= MAX_MONTH) && (day >= 1 && day <= MAX_DAY)) {
+ d = new Date(year - 1900, month - 1, day);
+ }
+ }
+ }
+ if (d == null) {
throw new java.lang.IllegalArgumentException();
}
- return new Date(year, month, day);
+ return d;
+
}
+
/**
* Formats a date in the date escape format yyyy-mm-dd.
* <P>