Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Stop trimming "redundant" trailing transitions. #281

Merged
merged 1 commit into from
Dec 26, 2023
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Stop trimming "redundant" trailing transitions.
Even when the last two transitions share a type, we should not
discard the last transition as that might change the point at
which we start to apply the POSIX spec for future transitions.

This will start to make a difference in zoneinfo files compiled
using the 2023d zic for Antarctica/Macquarie, Europe/Riga,
Europe/Tallinn, Europe/Vilnius, and Pacific/Norfolk, where we
previously would have added daylight-time transitions in years
where they did not really apply.
devbww committed Dec 23, 2023
commit 8f49733480271ced5987b678fd82b8d52a939c7b
13 changes: 0 additions & 13 deletions src/time_zone_info.cc
Original file line number Diff line number Diff line change
@@ -765,19 +765,6 @@ bool TimeZoneInfo::Load(ZoneInfoSource* zip) {
version_ = zip->Version();
}

// Trim redundant transitions. zic may have added these to work around
// differences between the glibc and reference implementations (see
// zic.c:dontmerge) or to avoid bugs in old readers. For us, they just
// get in the way when we do future_spec_ extension.
while (hdr.timecnt > 1) {
if (!EquivTransitions(transitions_[hdr.timecnt - 1].type_index,
transitions_[hdr.timecnt - 2].type_index)) {
break;
}
hdr.timecnt -= 1;
}
transitions_.resize(hdr.timecnt);

// Ensure that there is always a transition in the first half of the
// time line (the second half is handled below) so that the signed
// difference between a civil_second and the civil_second of its