diff options
author | Patrick Monnerat <patrick.monnerat@dh.com> | 2016-04-11 20:03:19 +0200 |
---|---|---|
committer | Daniel Veillard <veillard@redhat.com> | 2016-05-01 18:43:40 +0800 |
commit | a1dca81df7c352cd9a14ab678750b1623f8f8ed7 (patch) | |
tree | d094d98322af738e25ccfc27581a576cf96ee1f4 | |
parent | b29377109bdfd32cfcaa278e9220c44ece2030a9 (diff) | |
download | libxml2-a1dca81df7c352cd9a14ab678750b1623f8f8ed7.tar.gz |
xmlschemastypes.c: accept endOfDayFrag Times set to "24:00:00" mean "end of day" and should not cause an error.v2.9.4-rc1
-rw-r--r-- | xmlschemastypes.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/xmlschemastypes.c b/xmlschemastypes.c index 3c9514cc..60f54142 100644 --- a/xmlschemastypes.c +++ b/xmlschemastypes.c @@ -62,7 +62,7 @@ struct _xmlSchemaValDate { long year; unsigned int mon :4; /* 1 <= mon <= 12 */ unsigned int day :5; /* 1 <= day <= 31 */ - unsigned int hour :5; /* 0 <= hour <= 23 */ + unsigned int hour :5; /* 0 <= hour <= 24 */ unsigned int min :6; /* 0 <= min <= 59 */ double sec; unsigned int tz_flag :1; /* is tzo explicitely set? */ @@ -1139,9 +1139,13 @@ static const unsigned int daysInMonthLeap[12] = #define VALID_DATE(dt) \ (VALID_YEAR(dt->year) && VALID_MONTH(dt->mon) && VALID_MDAY(dt)) +#define VALID_END_OF_DAY(dt) \ + ((dt)->hour == 24 && (dt)->min == 0 && (dt)->sec == 0) + #define VALID_TIME(dt) \ - (VALID_HOUR(dt->hour) && VALID_MIN(dt->min) && \ - VALID_SEC(dt->sec) && VALID_TZO(dt->tzo)) + (((VALID_HOUR(dt->hour) && VALID_MIN(dt->min) && \ + VALID_SEC(dt->sec)) || VALID_END_OF_DAY(dt)) && \ + VALID_TZO(dt->tzo)) #define VALID_DATETIME(dt) \ (VALID_DATE(dt) && VALID_TIME(dt)) @@ -1355,7 +1359,7 @@ _xmlSchemaParseTime (xmlSchemaValDatePtr dt, const xmlChar **str) { return ret; if (*cur != ':') return 1; - if (!VALID_HOUR(value)) + if (!VALID_HOUR(value) && value != 24 /* Allow end-of-day hour */) return 2; cur++; @@ -1377,7 +1381,7 @@ _xmlSchemaParseTime (xmlSchemaValDatePtr dt, const xmlChar **str) { if (ret != 0) return ret; - if ((!VALID_SEC(dt->sec)) || (!VALID_TZO(dt->tzo))) + if (!VALID_TIME(dt)) return 2; *str = cur; |