]> granicus.if.org Git - php/commitdiff
Upgrade timelib to 2017.08, to fix bug #77007
authorDerick Rethans <github@derickrethans.nl>
Fri, 12 Oct 2018 10:41:05 +0000 (11:41 +0100)
committerDerick Rethans <github@derickrethans.nl>
Fri, 12 Oct 2018 10:41:05 +0000 (11:41 +0100)
NEWS
ext/date/lib/parse_date.c
ext/date/lib/parse_iso_intervals.c
ext/date/lib/timelib.h
ext/date/lib/tm2unixtime.c

diff --git a/NEWS b/NEWS
index f3cff388ab4ff9763cbc0f73fc5b20130ff2b81d..779ba6be5d85e4cac64523089e5abdb37f2154c3 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -8,8 +8,11 @@ PHP                                                                        NEWS
   . Fixed bug #76946 (Cyclic reference in generator not detected). (Nikita)
 
 - Date:
+  . Upgraded timelib to 2017.08. (Derick)
   . Fixed bug #75851 (Year component overflow with date formats "c", "o", "r"
     and "y"). (Adam Saponara)
+  . Fixed bug #77007 (fractions in `diff()` are not correctly normalized).
+    (Derick)
 
 - FCGI:
   . Fixed #76948 (Failed shutdown/reboot or end session in Windows). (Anatol)
index c0f6b96d9cca9bb106cc1fea91ae47295085bc48..e2f9cb822f8f512a3598dbade9f7fdb320beee3e 100644 (file)
@@ -1,5 +1,5 @@
-/* Generated by re2c 0.15.3 on Wed Jan 31 11:51:51 2018 */
-#line 1 "ext/date/lib/parse_date.re"
+/* Generated by re2c 0.15.3 on Fri Oct 12 10:49:04 2018 */
+#line 1 "parse_date.re"
 /*
  * The MIT License (MIT)
  *
@@ -854,7 +854,7 @@ static int scan(Scanner *s, timelib_tz_get_wrapper tz_get_wrapper)
 std:
        s->tok = cursor;
        s->len = 0;
-#line 981 "ext/date/lib/parse_date.re"
+#line 981 "parse_date.re"
 
 
 
@@ -996,7 +996,7 @@ yy2:
        }
 yy3:
        YYDEBUG(3, *YYCURSOR);
-#line 1689 "ext/date/lib/parse_date.re"
+#line 1689 "parse_date.re"
        {
                int tz_not_found;
                DEBUG_OUTPUT("tzcorrection | tz");
@@ -1318,7 +1318,7 @@ yy11:
        if (yych <= '9') goto yy1377;
 yy12:
        YYDEBUG(12, *YYCURSOR);
-#line 1784 "ext/date/lib/parse_date.re"
+#line 1784 "parse_date.re"
        {
                add_error(s, TIMELIB_ERR_UNEXPECTED_CHARACTER, "Unexpected character");
                goto std;
@@ -2567,7 +2567,7 @@ yy48:
        if (yych <= '9') goto yy54;
 yy49:
        YYDEBUG(49, *YYCURSOR);
-#line 1773 "ext/date/lib/parse_date.re"
+#line 1773 "parse_date.re"
        {
                goto std;
        }
@@ -2580,7 +2580,7 @@ yy51:
        YYDEBUG(51, *YYCURSOR);
        ++YYCURSOR;
        YYDEBUG(52, *YYCURSOR);
-#line 1778 "ext/date/lib/parse_date.re"
+#line 1778 "parse_date.re"
        {
                s->pos = cursor; s->line++;
                goto std;
@@ -3021,7 +3021,7 @@ yy73:
        if (yych == 's') goto yy75;
 yy74:
        YYDEBUG(74, *YYCURSOR);
-#line 1757 "ext/date/lib/parse_date.re"
+#line 1757 "parse_date.re"
        {
                timelib_ull i;
                DEBUG_OUTPUT("relative");
@@ -3939,7 +3939,7 @@ yy190:
        }
 yy191:
        YYDEBUG(191, *YYCURSOR);
-#line 1620 "ext/date/lib/parse_date.re"
+#line 1620 "parse_date.re"
        {
                const timelib_relunit* relunit;
                DEBUG_OUTPUT("daytext");
@@ -4476,7 +4476,7 @@ yy217:
        }
 yy218:
        YYDEBUG(218, *YYCURSOR);
-#line 1679 "ext/date/lib/parse_date.re"
+#line 1679 "parse_date.re"
        {
                DEBUG_OUTPUT("monthtext");
                TIMELIB_INIT;
@@ -4734,7 +4734,7 @@ yy231:
        goto yy237;
 yy232:
        YYDEBUG(232, *YYCURSOR);
-#line 1425 "ext/date/lib/parse_date.re"
+#line 1425 "parse_date.re"
        {
                int length = 0;
                DEBUG_OUTPUT("datetextual | datenoyear");
@@ -4874,7 +4874,7 @@ yy245:
        }
 yy246:
        YYDEBUG(246, *YYCURSOR);
-#line 1727 "ext/date/lib/parse_date.re"
+#line 1727 "parse_date.re"
        {
                int tz_not_found;
                DEBUG_OUTPUT("dateshortwithtimeshort | dateshortwithtimelong | dateshortwithtimelongtz");
@@ -5201,7 +5201,7 @@ yy270:
        YYDEBUG(270, *YYCURSOR);
        ++YYCURSOR;
        YYDEBUG(271, *YYCURSOR);
-#line 1703 "ext/date/lib/parse_date.re"
+#line 1703 "parse_date.re"
        {
                DEBUG_OUTPUT("dateshortwithtimeshort12 | dateshortwithtimelong12");
                TIMELIB_INIT;
@@ -5831,7 +5831,7 @@ yy320:
        YYDEBUG(321, *YYCURSOR);
        ++YYCURSOR;
        YYDEBUG(322, *YYCURSOR);
-#line 1397 "ext/date/lib/parse_date.re"
+#line 1397 "parse_date.re"
        {
                int length = 0;
                DEBUG_OUTPUT("datenoday");
@@ -6075,7 +6075,7 @@ yy327:
        if (yych <= '9') goto yy331;
 yy330:
        YYDEBUG(330, *YYCURSOR);
-#line 1541 "ext/date/lib/parse_date.re"
+#line 1541 "parse_date.re"
        {
                int length = 0;
                DEBUG_OUTPUT("pgtextshort");
@@ -6670,7 +6670,7 @@ yy356:
        }
 yy357:
        YYDEBUG(357, *YYCURSOR);
-#line 1599 "ext/date/lib/parse_date.re"
+#line 1599 "parse_date.re"
        {
                DEBUG_OUTPUT("ago");
                TIMELIB_INIT;
@@ -8473,7 +8473,7 @@ yy418:
        ++YYCURSOR;
 yy419:
        YYDEBUG(419, *YYCURSOR);
-#line 1302 "ext/date/lib/parse_date.re"
+#line 1302 "parse_date.re"
        {
                DEBUG_OUTPUT("iso8601date4 | iso8601date2 | iso8601dateslash | dateslash");
                TIMELIB_INIT;
@@ -9128,7 +9128,7 @@ yy439:
        }
 yy440:
        YYDEBUG(440, *YYCURSOR);
-#line 1439 "ext/date/lib/parse_date.re"
+#line 1439 "parse_date.re"
        {
                DEBUG_OUTPUT("datenoyearrev");
                TIMELIB_INIT;
@@ -9280,7 +9280,7 @@ yy452:
        YYDEBUG(452, *YYCURSOR);
        ++YYCURSOR;
        YYDEBUG(453, *YYCURSOR);
-#line 1157 "ext/date/lib/parse_date.re"
+#line 1157 "parse_date.re"
        {
                DEBUG_OUTPUT("timetiny12 | timeshort12 | timelong12");
                TIMELIB_INIT;
@@ -9309,7 +9309,7 @@ yy454:
        }
 yy455:
        YYDEBUG(455, *YYCURSOR);
-#line 1194 "ext/date/lib/parse_date.re"
+#line 1194 "parse_date.re"
        {
                int tz_not_found;
                DEBUG_OUTPUT("timeshort24 | timelong24 | iso8601long");
@@ -9644,7 +9644,7 @@ yy487:
        YYDEBUG(487, *YYCURSOR);
        ++YYCURSOR;
        YYDEBUG(488, *YYCURSOR);
-#line 1174 "ext/date/lib/parse_date.re"
+#line 1174 "parse_date.re"
        {
                DEBUG_OUTPUT("mssqltime");
                TIMELIB_INIT;
@@ -9769,7 +9769,7 @@ yy498:
        if (yych <= '9') goto yy505;
 yy499:
        YYDEBUG(499, *YYCURSOR);
-#line 1356 "ext/date/lib/parse_date.re"
+#line 1356 "parse_date.re"
        {
                int length = 0;
                DEBUG_OUTPUT("datefull");
@@ -10519,7 +10519,7 @@ yy569:
        YYDEBUG(570, *YYCURSOR);
        ++YYCURSOR;
        YYDEBUG(571, *YYCURSOR);
-#line 1371 "ext/date/lib/parse_date.re"
+#line 1371 "parse_date.re"
        {
                DEBUG_OUTPUT("pointed date YYYY");
                TIMELIB_INIT;
@@ -10566,7 +10566,7 @@ yy575:
        if (yych <= '9') goto yy569;
 yy576:
        YYDEBUG(576, *YYCURSOR);
-#line 1383 "ext/date/lib/parse_date.re"
+#line 1383 "parse_date.re"
        {
                int length = 0;
                DEBUG_OUTPUT("pointed date YY");
@@ -11220,7 +11220,7 @@ yy620:
        }
 yy621:
        YYDEBUG(621, *YYCURSOR);
-#line 1342 "ext/date/lib/parse_date.re"
+#line 1342 "parse_date.re"
        {
                int length = 0;
                DEBUG_OUTPUT("gnudateshort");
@@ -11339,7 +11339,7 @@ yy630:
        }
 yy631:
        YYDEBUG(631, *YYCURSOR);
-#line 1286 "ext/date/lib/parse_date.re"
+#line 1286 "parse_date.re"
        {
                int length = 0;
                DEBUG_OUTPUT("americanshort | american");
@@ -11587,7 +11587,7 @@ yy664:
        if (yych <= ':') goto yy668;
 yy665:
        YYDEBUG(665, *YYCURSOR);
-#line 1569 "ext/date/lib/parse_date.re"
+#line 1569 "parse_date.re"
        {
                int tz_not_found;
                DEBUG_OUTPUT("clf");
@@ -12157,7 +12157,7 @@ yy727:
        }
 yy728:
        YYDEBUG(728, *YYCURSOR);
-#line 1314 "ext/date/lib/parse_date.re"
+#line 1314 "parse_date.re"
        {
                int length = 0;
                DEBUG_OUTPUT("iso8601date2");
@@ -12209,7 +12209,7 @@ yy735:
        YYDEBUG(735, *YYCURSOR);
        ++YYCURSOR;
        YYDEBUG(736, *YYCURSOR);
-#line 1555 "ext/date/lib/parse_date.re"
+#line 1555 "parse_date.re"
        {
                int length = 0;
                DEBUG_OUTPUT("pgtextreverse");
@@ -12387,7 +12387,7 @@ yy747:
        }
 yy748:
        YYDEBUG(748, *YYCURSOR);
-#line 1590 "ext/date/lib/parse_date.re"
+#line 1590 "parse_date.re"
        {
                DEBUG_OUTPUT("year4");
                TIMELIB_INIT;
@@ -12600,7 +12600,7 @@ yy757:
        }
 yy758:
        YYDEBUG(758, *YYCURSOR);
-#line 1411 "ext/date/lib/parse_date.re"
+#line 1411 "parse_date.re"
        {
                int length = 0;
                DEBUG_OUTPUT("datenodayrev");
@@ -12834,7 +12834,7 @@ yy778:
        if (yych <= '7') goto yy781;
 yy779:
        YYDEBUG(779, *YYCURSOR);
-#line 1522 "ext/date/lib/parse_date.re"
+#line 1522 "parse_date.re"
        {
                timelib_sll w, d;
                DEBUG_OUTPUT("isoweek");
@@ -12862,7 +12862,7 @@ yy781:
        YYDEBUG(781, *YYCURSOR);
        ++YYCURSOR;
        YYDEBUG(782, *YYCURSOR);
-#line 1503 "ext/date/lib/parse_date.re"
+#line 1503 "parse_date.re"
        {
                timelib_sll w, d;
                DEBUG_OUTPUT("isoweekday");
@@ -12950,7 +12950,7 @@ yy785:
        }
 yy786:
        YYDEBUG(786, *YYCURSOR);
-#line 1489 "ext/date/lib/parse_date.re"
+#line 1489 "parse_date.re"
        {
                int length = 0;
                DEBUG_OUTPUT("pgydotd");
@@ -13066,7 +13066,7 @@ yy806:
        ++YYCURSOR;
 yy807:
        YYDEBUG(807, *YYCURSOR);
-#line 1463 "ext/date/lib/parse_date.re"
+#line 1463 "parse_date.re"
        {
                int tz_not_found;
                DEBUG_OUTPUT("xmlrpc | xmlrpcnocolon | soap | wddx | exif");
@@ -13386,7 +13386,7 @@ yy812:
        }
 yy813:
        YYDEBUG(813, *YYCURSOR);
-#line 1451 "ext/date/lib/parse_date.re"
+#line 1451 "parse_date.re"
        {
                DEBUG_OUTPUT("datenocolon");
                TIMELIB_INIT;
@@ -14316,7 +14316,7 @@ yy937:
        if (yych <= '9') goto yy960;
 yy938:
        YYDEBUG(938, *YYCURSOR);
-#line 1328 "ext/date/lib/parse_date.re"
+#line 1328 "parse_date.re"
        {
                int length = 0;
                DEBUG_OUTPUT("gnudateshorter");
@@ -15422,7 +15422,7 @@ yy1030:
        }
 yy1032:
        YYDEBUG(1032, *YYCURSOR);
-#line 1220 "ext/date/lib/parse_date.re"
+#line 1220 "parse_date.re"
        {
                DEBUG_OUTPUT("gnunocolon");
                TIMELIB_INIT;
@@ -15542,7 +15542,7 @@ yy1039:
        }
 yy1040:
        YYDEBUG(1040, *YYCURSOR);
-#line 1266 "ext/date/lib/parse_date.re"
+#line 1266 "parse_date.re"
        {
                int tz_not_found;
                DEBUG_OUTPUT("iso8601nocolon");
@@ -16537,7 +16537,7 @@ yy1083:
        }
 yy1084:
        YYDEBUG(1084, *YYCURSOR);
-#line 1662 "ext/date/lib/parse_date.re"
+#line 1662 "parse_date.re"
        {
                timelib_sll i;
                int         behavior = 0;
@@ -16604,7 +16604,7 @@ yy1092:
        YYDEBUG(1092, *YYCURSOR);
        ++YYCURSOR;
        YYDEBUG(1093, *YYCURSOR);
-#line 1135 "ext/date/lib/parse_date.re"
+#line 1135 "parse_date.re"
        {
                timelib_sll i;
                int         behavior = 0;
@@ -16733,7 +16733,7 @@ yy1107:
        }
 yy1108:
        YYDEBUG(1108, *YYCURSOR);
-#line 1638 "ext/date/lib/parse_date.re"
+#line 1638 "parse_date.re"
        {
                timelib_sll i;
                int         behavior = 0;
@@ -19605,7 +19605,7 @@ yy1283:
        }
 yy1284:
        YYDEBUG(1284, *YYCURSOR);
-#line 1112 "ext/date/lib/parse_date.re"
+#line 1112 "parse_date.re"
        {
                DEBUG_OUTPUT("backof | frontof");
                TIMELIB_INIT;
@@ -19926,7 +19926,7 @@ yy1306:
        YYDEBUG(1306, *YYCURSOR);
        ++YYCURSOR;
        YYDEBUG(1307, *YYCURSOR);
-#line 1095 "ext/date/lib/parse_date.re"
+#line 1095 "parse_date.re"
        {
                DEBUG_OUTPUT("firstdayof | lastdayof");
                TIMELIB_INIT;
@@ -21431,7 +21431,7 @@ yy1377:
        if (yych <= '9') goto yy1377;
 yy1379:
        YYDEBUG(1379, *YYCURSOR);
-#line 1041 "ext/date/lib/parse_date.re"
+#line 1041 "parse_date.re"
        {
                timelib_ull i;
 
@@ -21485,7 +21485,7 @@ yy1380:
        YYDEBUG(1386, *YYCURSOR);
        ++YYCURSOR;
        YYDEBUG(1387, *YYCURSOR);
-#line 1067 "ext/date/lib/parse_date.re"
+#line 1067 "parse_date.re"
        {
                timelib_ull i, us;
 
@@ -21948,7 +21948,7 @@ yy1416:
        ++YYCURSOR;
 yy1417:
        YYDEBUG(1417, *YYCURSOR);
-#line 1029 "ext/date/lib/parse_date.re"
+#line 1029 "parse_date.re"
        {
                DEBUG_OUTPUT("tomorrow");
                TIMELIB_INIT;
@@ -21994,7 +21994,7 @@ yy1419:
        }
 yy1420:
        YYDEBUG(1420, *YYCURSOR);
-#line 1019 "ext/date/lib/parse_date.re"
+#line 1019 "parse_date.re"
        {
                DEBUG_OUTPUT("midnight | today");
                TIMELIB_INIT;
@@ -24015,7 +24015,7 @@ yy1499:
        }
 yy1500:
        YYDEBUG(1500, *YYCURSOR);
-#line 998 "ext/date/lib/parse_date.re"
+#line 998 "parse_date.re"
        {
                DEBUG_OUTPUT("now");
                TIMELIB_INIT;
@@ -24162,7 +24162,7 @@ yy1507:
        }
 yy1508:
        YYDEBUG(1508, *YYCURSOR);
-#line 1007 "ext/date/lib/parse_date.re"
+#line 1007 "parse_date.re"
        {
                DEBUG_OUTPUT("noon");
                TIMELIB_INIT;
@@ -24706,7 +24706,7 @@ yy1530:
        ++YYCURSOR;
 yy1531:
        YYDEBUG(1531, *YYCURSOR);
-#line 986 "ext/date/lib/parse_date.re"
+#line 986 "parse_date.re"
        {
                DEBUG_OUTPUT("yesterday");
                TIMELIB_INIT;
@@ -24890,7 +24890,7 @@ yy1537:
                goto yy1531;
        }
 }
-#line 1788 "ext/date/lib/parse_date.re"
+#line 1788 "parse_date.re"
 
 }
 
index 17d09c17ffd5c4740510e19eff050264df91569f..7b55ce78d797620f03f37d503b892edb73f64112 100644 (file)
@@ -1,5 +1,5 @@
-/* Generated by re2c 0.15.3 on Wed Jan 31 11:51:44 2018 */
-#line 1 "ext/date/lib/parse_iso_intervals.re"
+/* Generated by re2c 0.15.3 on Tue Oct  9 11:04:12 2018 */
+#line 1 "parse_iso_intervals.re"
 /*
  * The MIT License (MIT)
  *
@@ -176,7 +176,7 @@ static int scan(Scanner *s)
 std:
        s->tok = cursor;
        s->len = 0;
-#line 204 "ext/date/lib/parse_iso_intervals.re"
+#line 204 "parse_iso_intervals.re"
 
 
 
@@ -249,7 +249,7 @@ std:
        if (yych <= '9') goto yy98;
 yy3:
        YYDEBUG(3, *YYCURSOR);
-#line 317 "ext/date/lib/parse_iso_intervals.re"
+#line 317 "parse_iso_intervals.re"
        {
                add_error(s, "Unexpected character");
                goto std;
@@ -271,7 +271,7 @@ yy5:
        if (yych == 'T') goto yy14;
 yy6:
        YYDEBUG(6, *YYCURSOR);
-#line 244 "ext/date/lib/parse_iso_intervals.re"
+#line 244 "parse_iso_intervals.re"
        {
                timelib_sll nr;
                int         in_time = 0;
@@ -317,7 +317,7 @@ yy7:
        YYDEBUG(7, *YYCURSOR);
        ++YYCURSOR;
        YYDEBUG(8, *YYCURSOR);
-#line 306 "ext/date/lib/parse_iso_intervals.re"
+#line 306 "parse_iso_intervals.re"
        {
                goto std;
        }
@@ -326,7 +326,7 @@ yy9:
        YYDEBUG(9, *YYCURSOR);
        ++YYCURSOR;
        YYDEBUG(10, *YYCURSOR);
-#line 311 "ext/date/lib/parse_iso_intervals.re"
+#line 311 "parse_iso_intervals.re"
        {
                s->pos = cursor; s->line++;
                goto std;
@@ -661,7 +661,7 @@ yy51:
        YYDEBUG(57, *YYCURSOR);
        ++YYCURSOR;
        YYDEBUG(58, *YYCURSOR);
-#line 286 "ext/date/lib/parse_iso_intervals.re"
+#line 286 "parse_iso_intervals.re"
        {
                DEBUG_OUTPUT("combinedrep");
                TIMELIB_INIT;
@@ -809,7 +809,7 @@ yy83:
        YYDEBUG(83, *YYCURSOR);
        ++YYCURSOR;
        YYDEBUG(84, *YYCURSOR);
-#line 220 "ext/date/lib/parse_iso_intervals.re"
+#line 220 "parse_iso_intervals.re"
        {
                timelib_time *current;
 
@@ -910,7 +910,7 @@ yy98:
        if (yych <= '9') goto yy98;
 yy100:
        YYDEBUG(100, *YYCURSOR);
-#line 209 "ext/date/lib/parse_iso_intervals.re"
+#line 209 "parse_iso_intervals.re"
        {
                DEBUG_OUTPUT("recurrences");
                TIMELIB_INIT;
@@ -922,7 +922,7 @@ yy100:
        }
 #line 924 "<stdout>"
 }
-#line 321 "ext/date/lib/parse_iso_intervals.re"
+#line 321 "parse_iso_intervals.re"
 
 }
 #ifdef PHP_WIN32
index 3eb39a55693ec653735d96cb71163240ad79550c..20fbb7cb140f07a03aa1b451a41d06318a5c6e14 100644 (file)
@@ -310,9 +310,9 @@ typedef struct _timelib_tzdb {
 # define timelib_free    free
 #endif
 
-#define TIMELIB_VERSION 201706
-#define TIMELIB_EXTENDED_VERSION 20170600
-#define TIMELIB_ASCII_VERSION "2017.06"
+#define TIMELIB_VERSION 201708
+#define TIMELIB_EXTENDED_VERSION 20170800
+#define TIMELIB_ASCII_VERSION "2017.08"
 
 #define TIMELIB_NONE             0x00
 #define TIMELIB_OVERRIDE_TIME    0x01
index 42a59cfaa65538aa30f57a126bdbceee1fe66fe8..bfb9ba1d2be4bca19a5f79e1ead4f3108ff24665 100644 (file)
@@ -39,7 +39,7 @@ static void do_range_limit_fraction(timelib_sll *fraction, timelib_sll *seconds)
                *fraction += 1000000;
                *seconds -= 1;
        }
-       if (*fraction > 1000000) {
+       if (*fraction >= 1000000) {
                *fraction -= 1000000;
                *seconds += 1;
        }
@@ -194,6 +194,7 @@ static void do_adjust_for_weekday(timelib_time* time)
 
 void timelib_do_rel_normalize(timelib_time *base, timelib_rel_time *rt)
 {
+       do_range_limit_fraction(&rt->us, &rt->s);
        do_range_limit(0, 60, 60, &rt->s, &rt->i);
        do_range_limit(0, 60, 60, &rt->i, &rt->h);
        do_range_limit(0, 24, 24, &rt->h, &rt->d);