From 21ee3f8e3fe2eb274f575c3817d6a95b823fe378 Mon Sep 17 00:00:00 2001 From: Patrick Liu Date: Fri, 8 Jan 2021 16:34:41 -0800 Subject: [PATCH] bump up parser version from v1 to v2 Summary: Only bump up parser version from v1 to v2. No change on tzdata and we still use 2020a tzdata. parser version change of timelib was done in D25191333 Let us roll out timelib update in 3 phases: phase 1: coordinate with www to run some test for D25338654. The diff it does not include all the changes to make timelib up to date with the github source repo. It only includes the minimal changes required to change parser version from v1 to v2. After www tests pass, we can land D25338654. phase 2: Make timelib entirely up to date with the source repo. The diff is D25352772. phase 3: update the tzdata. Why we have phase 1? -> Phase 2 is still not completed and phase 1 is done. We can check in phase 1 first. This allows us to use any new tzdata releases from IANA directly. And in the meantime, we can develop phase 2. If we do not have phase 1, phase 2 is blocker for phase 3: phase 2 -> phase 3 Now we have phase 1, phase 2 is not a blocker: phase 1 -> phase 3 Implementation work in phase 1 has been completed. I have tested it using admon, adEventJoiner, adFinder canaries, and HACK unit tests. phase 2 requires longer period for development. Without phase 1, we cannot use the newly released tzdata from IANA until phase 2 is done. Reviewed By: jaimedp Differential Revision: D25338654 fbshipit-source-id: c8609f69afbf117177ec65eaf43ef987939091c9 --- hphp/runtime/base/timezone.cpp | 7 ++++--- hphp/test/zend/good/ext/date/tests/bug74652.php | 19 +++++++++++++++++++ .../zend/good/ext/date/tests/bug74652.php.expectf | 7 +++++++ .../tests/date_sunrise_variation9.php.expectregex | 2 +- .../date/tests/date_sunset_variation9.php.expectregex | 2 +- 5 files changed, 32 insertions(+), 5 deletions(-) create mode 100644 hphp/test/zend/good/ext/date/tests/bug74652.php create mode 100644 hphp/test/zend/good/ext/date/tests/bug74652.php.expectf diff --git a/hphp/runtime/base/timezone.cpp b/hphp/runtime/base/timezone.cpp index 88e068d4cde..74a048dd08d 100644 --- a/hphp/runtime/base/timezone.cpp +++ b/hphp/runtime/base/timezone.cpp @@ -403,8 +403,8 @@ Array TimeZone::transitions(int64_t timestamp_begin, /* = k_PHP_INT_MIN */ return null_array; } - uint32_t timecnt; - timecnt = m_tzi->bit32.timecnt; + uint64_t timecnt; + timecnt = m_tzi->bit64.timecnt; uint32_t lastBefore = 0; for (uint32_t i = 0; i < timecnt && m_tzi->trans && m_tzi->trans[i] <= timestamp_begin; @@ -430,10 +430,11 @@ Array TimeZone::transitions(int64_t timestamp_begin, /* = k_PHP_INT_MIN */ s_abbr, String(abbr, CopyString) )); } + for (uint32_t i = lastBefore; i < timecnt && m_tzi->trans && m_tzi->trans[i] < timestamp_end; ++i) { - int timestamp = m_tzi->trans[i]; + int64_t timestamp = m_tzi->trans[i]; if (timestamp_begin <= timestamp) { int index = m_tzi->trans_idx[i]; auto dt = req::make(timestamp, req::make("UTC")); diff --git a/hphp/test/zend/good/ext/date/tests/bug74652.php b/hphp/test/zend/good/ext/date/tests/bug74652.php new file mode 100644 index 00000000000..d292aac60f1 --- /dev/null +++ b/hphp/test/zend/good/ext/date/tests/bug74652.php @@ -0,0 +1,19 @@ +> function main(): void { +date_default_timezone_set('UTC'); +$formats = varray[ + '2017-03-25 10:52:09', + '2017-03-25 10:52', + '2017-03-25 10am', + '2017-03-25', + '2017-03', + '2017.042', + '2017043', +]; + +foreach ( $formats as $format ) +{ + $dt = new DateTimeImmutable( $format ); + echo $dt->format( 'Y-m-d H:i:s' ), "\n"; +} +} diff --git a/hphp/test/zend/good/ext/date/tests/bug74652.php.expectf b/hphp/test/zend/good/ext/date/tests/bug74652.php.expectf new file mode 100644 index 00000000000..29ccc965a35 --- /dev/null +++ b/hphp/test/zend/good/ext/date/tests/bug74652.php.expectf @@ -0,0 +1,7 @@ +2017-03-25 10:52:09 +2017-03-25 10:52:00 +2017-03-25 10:00:00 +2017-03-25 00:00:00 +2017-03-01 00:00:00 +2017-02-11 00:00:00 +2017-02-12 00:00:00 diff --git a/hphp/test/zend/good/ext/date/tests/date_sunrise_variation9.php.expectregex b/hphp/test/zend/good/ext/date/tests/date_sunrise_variation9.php.expectregex index d98b26d2d86..8f99234b381 100644 --- a/hphp/test/zend/good/ext/date/tests/date_sunrise_variation9.php.expectregex +++ b/hphp/test/zend/good/ext/date/tests/date_sunrise_variation9.php.expectregex @@ -8,5 +8,5 @@ int\((-1097256359|123456811756)\) -- Testing date_sunrise\(\) function by passing int -123456789000 value to time -- string\(5\) "(07:42|08:48|08:04)" float\((7.713[0-9]*|8.810[0-9]*|8.074[0-9]*)\) -int\((1097304168|-2147443882|-123456761730)\) +int\((1097304168|-2147443882|-123456761730|-123456761731)\) ===DONE=== diff --git a/hphp/test/zend/good/ext/date/tests/date_sunset_variation9.php.expectregex b/hphp/test/zend/good/ext/date/tests/date_sunset_variation9.php.expectregex index 087d430bebe..81286045fa4 100644 --- a/hphp/test/zend/good/ext/date/tests/date_sunset_variation9.php.expectregex +++ b/hphp/test/zend/good/ext/date/tests/date_sunset_variation9.php.expectregex @@ -8,5 +8,5 @@ int\((-1097212211|123456853728)\) -- Testing date_sunset\(\) function by passing int -123456789000 value to time -- string\(5\) "(19:03|18:12|18:48)" float\((19.056[0-9]*|18.213[0-9]*|18.80[7-8][0-9]*)\) -int\((1097345002|-2147410031|-123456723092)\) +int\((1097345002|-2147410031|-123456723092|-123456723090)\) ===DONE=== -- 2.11.4.GIT