Having looked more deeply at the code, I think I see the bug. In file
org.apache.xerces.impl.dv.xs.AbstractDateTimeDV, the 'getDate' function
improperly calculates the day of the month....
/**
* Parses date CCYY-MM-DD
*
* @param buffer
* @param start start position
* @param end end position
* @param date
* @exception RuntimeException
*/
protected int getDate (String buffer, int start, int end,
DateTimeData date) throws RuntimeException{
start = getYearMonth(buffer, start, end, date);
if (buffer.charAt(start++) !='-') {
throw new RuntimeException("CCYY-MM must be followed by '-'
sign");
}
int stop = start + 2;
date.day=parseInt(buffer, start, stop);
return stop;
}
Instead of:
date.day=parseInt(buffer, start, stop);
It should be:
date.day=parseInt(buffer, start, end);
By dictating: stop = start + 2, the code is just dropping off any
additional numbers. The only time this code is going to throw a
validation error is if the first two numbers of the day are greater than
30.
Matt Hughes wrote:
I think I may have stumbled across a bug in date time validation. The
following Java code *should* throw an InvalidDatatypeValueException
validation exception:
---------
String s = "2006-06-165555T10:19:41";
DateTimeDV db = new DateTimeDV();
db.getActualValue(s, null);
---------------
Notice the 'day' value: 165555. The allowed values should be 1-30
(for the month of June).
---------------------------------------------------------------------
To unsubscribe, e-mail: j-users-unsubscribe@xxxxxxxxxxxxxxxxx
For additional commands, e-mail: j-users-help@xxxxxxxxxxxxxxxxx
|