From: Derick Rethans Date: Fri, 12 Oct 2018 10:41:05 +0000 (+0100) Subject: Upgrade timelib to 2017.08, to fix bug #77007 X-Git-Tag: php-7.3.0RC4~32^2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=94a98f2c63926c5eafe12a717f3eef38f05fe99e;p=php Upgrade timelib to 2017.08, to fix bug #77007 --- diff --git a/NEWS b/NEWS index f3cff388ab..779ba6be5d 100644 --- 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) diff --git a/ext/date/lib/parse_date.c b/ext/date/lib/parse_date.c index c0f6b96d9c..e2f9cb822f 100644 --- a/ext/date/lib/parse_date.c +++ b/ext/date/lib/parse_date.c @@ -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" } diff --git a/ext/date/lib/parse_iso_intervals.c b/ext/date/lib/parse_iso_intervals.c index 17d09c17ff..7b55ce78d7 100644 --- a/ext/date/lib/parse_iso_intervals.c +++ b/ext/date/lib/parse_iso_intervals.c @@ -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 "" } -#line 321 "ext/date/lib/parse_iso_intervals.re" +#line 321 "parse_iso_intervals.re" } #ifdef PHP_WIN32 diff --git a/ext/date/lib/timelib.h b/ext/date/lib/timelib.h index 3eb39a5569..20fbb7cb14 100644 --- a/ext/date/lib/timelib.h +++ b/ext/date/lib/timelib.h @@ -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 diff --git a/ext/date/lib/tm2unixtime.c b/ext/date/lib/tm2unixtime.c index 42a59cfaa6..bfb9ba1d2b 100644 --- a/ext/date/lib/tm2unixtime.c +++ b/ext/date/lib/tm2unixtime.c @@ -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);