[libxml2] xmlschemastypes.c: accept endOfDayFrag Times set to "24:00:00" mean "end of day" and should not caus



commit a1dca81df7c352cd9a14ab678750b1623f8f8ed7
Author: Patrick Monnerat <patrick monnerat dh com>
Date:   Mon Apr 11 20:03:19 2016 +0200

    xmlschemastypes.c: accept endOfDayFrag Times set to "24:00:00" mean "end of day" and should not cause an 
error.

 xmlschemastypes.c |   14 +++++++++-----
 1 files changed, 9 insertions(+), 5 deletions(-)
---
diff --git a/xmlschemastypes.c b/xmlschemastypes.c
index 3c9514c..60f5414 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;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]