diff --git a/.gitignore b/.gitignore index 8b3e0fb..e2fa658 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ SOURCES/javazic-1.8-37392f2f5d59.tar.xz SOURCES/javazic.tar.gz -SOURCES/tzcode2024a.tar.gz -SOURCES/tzdata2024a.tar.gz +SOURCES/tzcode2024b.tar.gz +SOURCES/tzdata2024b.tar.gz diff --git a/.tzdata.metadata b/.tzdata.metadata index b4c6e03..082ae9d 100644 --- a/.tzdata.metadata +++ b/.tzdata.metadata @@ -1,4 +1,4 @@ 77292e1839952807567570118e01405b405af80c SOURCES/javazic-1.8-37392f2f5d59.tar.xz ee8ad215161cd132e65e2be447b279457158b540 SOURCES/javazic.tar.gz -96c682391618d0f053d70ccb98cd65d969d014cd SOURCES/tzcode2024a.tar.gz -310a281e4551e4e9a11db4f9ceea85a6529af4af SOURCES/tzdata2024a.tar.gz +95cfb1106f60e925f0255d340350ba4be51b9b29 SOURCES/tzcode2024b.tar.gz +52adf39a4b3c29502866167e78b89b20fd08dc3e SOURCES/tzdata2024b.tar.gz diff --git a/SOURCES/0004-Fix-Apr-vs-April-2024b.patch b/SOURCES/0004-Fix-Apr-vs-April-2024b.patch new file mode 100644 index 0000000..7c3d161 --- /dev/null +++ b/SOURCES/0004-Fix-Apr-vs-April-2024b.patch @@ -0,0 +1,23 @@ +commit 926b507fa5c3192b1b68fab5910cbd3ba9377c97 +Author: Paul Eggert +Date: Thu Sep 5 14:36:02 2024 -0700 + + "Apr", not "April", in IN column + + * northamerica (Rule): Use "Apr", not "April", in the IN column. + Both forms are valid, but "Apr" is more consistent. + Problem reported by Howard Hinnant. + +diff --git a/northamerica b/northamerica +index 01f392e0..1af874b6 100644 +--- a/northamerica ++++ b/northamerica +@@ -2631,7 +2631,7 @@ Zone America/Dawson -9:17:40 - LMT 1900 Aug 20 + # http://puentelibre.mx/noticia/ciudad_juarez_cambio_horario_noviembre_2022/ + + # Rule NAME FROM TO - IN ON AT SAVE LETTER/S +-Rule Mexico 1931 only - April 30 0:00 1:00 D ++Rule Mexico 1931 only - Apr 30 0:00 1:00 D + Rule Mexico 1931 only - Oct 1 0:00 0 S + Rule Mexico 1939 only - Feb 5 0:00 1:00 D + Rule Mexico 1939 only - Jun 25 0:00 0 S diff --git a/SOURCES/0005-Improve-style-checks-for-months-2024b.patch b/SOURCES/0005-Improve-style-checks-for-months-2024b.patch new file mode 100644 index 0000000..b02b882 --- /dev/null +++ b/SOURCES/0005-Improve-style-checks-for-months-2024b.patch @@ -0,0 +1,77 @@ +commit 7b6fb155cadd5e5ee70b55c2770e1bdd2f5d2a38 +Author: Paul Eggert +Date: Thu Sep 5 14:38:35 2024 -0700 + + Improve style checks for months + + * checktab.awk: Check style of STDOFF and month names. + +diff --git a/checktab.awk b/checktab.awk +index 9a26e465..15a3a697 100644 +--- a/checktab.awk ++++ b/checktab.awk +@@ -9,6 +9,19 @@ BEGIN { + if (!zone_table) zone_table = "zone1970.tab" + if (!want_warnings) want_warnings = -1 + ++ monthabbr["Jan"] = 1 ++ monthabbr["Feb"] = 1 ++ monthabbr["Mar"] = 1 ++ monthabbr["Apr"] = 1 ++ monthabbr["May"] = 1 ++ monthabbr["Jun"] = 1 ++ monthabbr["Jul"] = 1 ++ monthabbr["Aug"] = 1 ++ monthabbr["Sep"] = 1 ++ monthabbr["Oct"] = 1 ++ monthabbr["Nov"] = 1 ++ monthabbr["Dec"] = 1 ++ + while (getline >"/dev/stderr" ++ status = 1 ++ } + } else { ++ stdoff = $1 + ruleUsed[$2] = 1 + if ($3 ~ /%/) rulePercentUsed[$2] = 1 + } ++ ++ if (stdoff && stdoff !~ /^\-?1?[0-9](:[0-5][0-9](:[0-5][0-9])?)?$/) { ++ printf "%s:%d: unlikely STDOFF: %s\n", FILENAME, FNR, stdoff \ ++ >>"/dev/stderr" ++ status = 1 ++ } ++ + if (tz && tz ~ /\// && tz !~ /^Etc\//) { + if (!tztab[tz] && FILENAME != "backward" \ + && zone_table != "zonenow.tab") { diff --git a/SOURCES/8051641.patch b/SOURCES/8051641.patch new file mode 100644 index 0000000..4f5be47 --- /dev/null +++ b/SOURCES/8051641.patch @@ -0,0 +1,17 @@ +diff -r c8a71253d6e2 -r 189490f29d1e make/src/classes/build/tools/tzdb/ZoneRulesBuilder.java +--- javazic-1.8/build/tools/tzdb/ZoneRulesBuilder.java Thu Oct 23 11:42:20 2014 +0200 ++++ javazic-1.8/build/tools/tzdb/ZoneRulesBuilder.java Mon Dec 29 21:42:22 2014 +0300 +@@ -491,10 +491,10 @@ + TZRule rule = new TZRule(year, month, dayOfMonthIndicator, dayOfWeek, time, timeEndOfDay, timeDefinition, savingAmountSecs); + if (lastRule) { + lastRuleList.add(rule); +- maxLastRuleStartYear = Math.max(startYear, maxLastRuleStartYear); + } else { + ruleList.add(rule); + } ++ maxLastRuleStartYear = Math.max(startYear, maxLastRuleStartYear); + year++; + } + } +-- +cgit v0.9.2 diff --git a/SOURCES/ZoneTest.java b/SOURCES/ZoneTest.java new file mode 100644 index 0000000..e690728 --- /dev/null +++ b/SOURCES/ZoneTest.java @@ -0,0 +1,42 @@ +/* Smoke test to ensure that tzdb.data can be loaded. + Copyright (c) 2024 Red Hat, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . */ + + +import java.time.zone.ZoneRulesProvider; +import java.util.Calendar; +import java.util.GregorianCalendar; +import java.util.Locale; +import java.util.Set; +import java.util.TimeZone; + +public class ZoneTest { + public static void main(String[] args) { + // This is what failed in OpenJDK's build.tools.cldrconverter. + new GregorianCalendar(TimeZone.getTimeZone("America/Los_Angeles"), + Locale.US).get(Calendar.YEAR); + + // In some OpenJDK versions, this exercises a different parser. + Set available = ZoneRulesProvider.getAvailableZoneIds(); + boolean errors = false; + if (available.contains("ROC")) + System.out.println("error: ROC zone is present"); + if (!available.contains("America/New_York")) + System.out.println("error: America/New_York is missing"); + if (errors) + System.exit(1); + } +} + diff --git a/SOURCES/javazic-harden-links.patch b/SOURCES/javazic-harden-links.patch new file mode 100644 index 0000000..0d8d76b --- /dev/null +++ b/SOURCES/javazic-harden-links.patch @@ -0,0 +1,86 @@ +Modified for downstream inclusion in tzdata-java. + +commit 1bc13a1c10a580f84f1b7686c95344ec2633f611 +Author: Florian Weimer +Date: Thu Sep 26 22:37:45 2024 +0000 + + 8340552: Harden TzdbZoneRulesCompiler against missing zone names + + Reviewed-by: andrew, jlu, naoto + +diff -ur tzdata-2024b.orig/javazic-1.8/build/tools/tzdb/TzdbZoneRulesCompiler.java tzdata-2024b/javazic-1.8/build/tools/tzdb/TzdbZoneRulesCompiler.java +--- tzdata-2024b.orig/javazic-1.8/build/tools/tzdb/TzdbZoneRulesCompiler.java 2014-04-22 19:46:49.000000000 +0200 ++++ tzdata-2024b/javazic-1.8/build/tools/tzdb/TzdbZoneRulesCompiler.java 2024-09-20 21:10:12.748483767 +0200 +@@ -248,7 +248,7 @@ + // link version-region-rules + out.writeShort(builtZones.size()); + for (Map.Entry entry : builtZones.entrySet()) { +- int regionIndex = Arrays.binarySearch(regionArray, entry.getKey()); ++ int regionIndex = findRegionIndex(regionArray, entry.getKey()); + int rulesIndex = rulesList.indexOf(entry.getValue()); + out.writeShort(regionIndex); + out.writeShort(rulesIndex); +@@ -256,8 +256,8 @@ + // alias-region + out.writeShort(links.size()); + for (Map.Entry entry : links.entrySet()) { +- int aliasIndex = Arrays.binarySearch(regionArray, entry.getKey()); +- int regionIndex = Arrays.binarySearch(regionArray, entry.getValue()); ++ int aliasIndex = findRegionIndex(regionArray, entry.getKey()); ++ int regionIndex = findRegionIndex(regionArray, entry.getValue()); + out.writeShort(aliasIndex); + out.writeShort(regionIndex); + } +@@ -269,6 +269,14 @@ + } + } + ++ private static int findRegionIndex(String[] regionArray, String region) { ++ int index = Arrays.binarySearch(regionArray, region); ++ if (index < 0) { ++ throw new IllegalArgumentException("Unknown region: " + region); ++ } ++ return index; ++ } ++ + private static final Pattern YEAR = Pattern.compile("(?i)(?min)|(?max)|(?only)|(?[0-9]+)"); + private static final Pattern MONTH = Pattern.compile("(?i)(jan)|(feb)|(mar)|(apr)|(may)|(jun)|(jul)|(aug)|(sep)|(oct)|(nov)|(dec)"); + private static final Matcher DOW = Pattern.compile("(?i)(mon)|(tue)|(wed)|(thu)|(fri)|(sat)|(sun)").matcher(""); +@@ -607,22 +615,20 @@ + } + builtZones.put(aliasId, realRules); + } +- // remove UTC and GMT +- // builtZones.remove("UTC"); +- // builtZones.remove("GMT"); +- // builtZones.remove("GMT0"); +- builtZones.remove("GMT+0"); +- builtZones.remove("GMT-0"); +- links.remove("GMT+0"); +- links.remove("GMT-0"); +- // remove ROC, which is not supported in j.u.tz +- builtZones.remove("ROC"); +- links.remove("ROC"); +- // remove EST, HST and MST. They are supported via +- // the short-id mapping +- builtZones.remove("EST"); +- builtZones.remove("HST"); +- builtZones.remove("MST"); ++ ++ List zonesToRemove = Arrays.asList( ++ // remove UTC and GMT ++ "GMT+0", ++ "GMT-0", ++ // remove ROC, which is not supported in j.u.tz ++ "ROC", ++ // remove EST, HST and MST. They are supported via ++ // the short-id mapping ++ "EST", ++ "HST", ++ "MST"); ++ builtZones.keySet().removeAll(zonesToRemove); ++ links.keySet().removeAll(zonesToRemove); + } + + /** + diff --git a/SPECS/tzdata.spec b/SPECS/tzdata.spec index 692f61a..d7574f4 100644 --- a/SPECS/tzdata.spec +++ b/SPECS/tzdata.spec @@ -1,9 +1,9 @@ Summary: Timezone data Name: tzdata -Version: 2024a -%define tzdata_version 2024a -%define tzcode_version 2024a -Release: 1%{?dist} +Version: 2024b +%define tzdata_version 2024b +%define tzcode_version 2024b +Release: 2%{?dist} License: Public Domain URL: https://www.iana.org/time-zones Source0: ftp://ftp.iana.org/tz/releases/tzdata%{tzdata_version}.tar.gz @@ -13,8 +13,11 @@ Patch002: 0002-Fix-have-snprintf.patch %if 0%{?rhel} || 0%{?eln} Patch003: 0003-continue-to-ship-posixrules.patch %endif +Patch004: 0004-Fix-Apr-vs-April-2024b.patch +Patch005: 0005-Improve-style-checks-for-months-2024b.patch BuildRequires: make +BuildRequires: gcc BuildRequires: gawk, glibc, perl-interpreter BuildRequires: java-devel BuildRequires: glibc-common >= 2.5.90-7 @@ -29,11 +32,14 @@ the world. Summary: Timezone data for Java Source3: javazic.tar.gz Source4: javazic-1.8-37392f2f5d59.tar.xz +Source5: ZoneTest.java Patch100: javazic-fixup.patch Patch101: rebase-01.patch Patch102: rebase-02.patch Patch103: 7090844.patch Patch104: 7133138.patch +Patch105: 8051641.patch +Patch106: javazic-harden-links.patch %description java This package contains timezone information for use by Java runtimes. @@ -45,6 +51,8 @@ This package contains timezone information for use by Java runtimes. %if 0%{?rhel} || 0%{?eln} %patch003 -p1 %endif +%patch004 -p1 +%patch005 -p1 # tzdata-2018g introduced 25:00 transition times. This breaks OpenJDK. # Use rearguard for java @@ -82,6 +90,8 @@ find . -type f -name '*.java' -print0 \ popd tar xf %{SOURCE4} +%patch105 +%patch106 -p1 echo "%{name}%{tzdata_version}" >> VERSION @@ -138,6 +148,25 @@ cp -prd javazi $RPM_BUILD_ROOT%{_datadir}/javazi mkdir -p $RPM_BUILD_ROOT%{_datadir}/javazi-1.8 install -p -m 644 tzdb.dat $RPM_BUILD_ROOT%{_datadir}/javazi-1.8/ +%check +echo ============TESTING=============== +/usr/bin/env LANG=C make -k VALIDATE=':' check && true + +# Create a custom JAVA_HOME, where we can replace tzdb.dat with the +# one just built, for testing. +system_java_home=$(dirname $(readlink -f $(which java)))/.. +mkdir -p java_home +cp -Lr $system_java_home/* java_home/. +for tzdb in $(find java_home -name tzdb.dat) ; do + rm $tzdb + cp $RPM_BUILD_ROOT%{_datadir}/javazi-1.8/tzdb.dat $tzdb +done +# Compile the smoke test and run it. +cp %{SOURCE5} . +javac ZoneTest.java +java_home/bin/java ZoneTest +echo ============END TESTING=========== + %files %{_datadir}/zoneinfo %license LICENSE @@ -151,6 +180,24 @@ install -p -m 644 tzdb.dat $RPM_BUILD_ROOT%{_datadir}/javazi-1.8/ %{_datadir}/javazi-1.8 %changelog +* Fri Sep 27 2024 Patsy Griffin - 2024b-2 +- Harden against links to removed zones (RHEL-60063) + +* Wed Sep 11 2024 Patsy Griffin - 2024b-1 +- Update to tzdata-2024b + - Improve historical data for Mexico, Mongolia, and Portugal. + - System V names are now obsolescent. + - The main data form now uses %z. + - The code now conforms to RFC 8536 for early timestamps. + - Support POSIX.1-2024, which removes asctime_r and ctime_r. + - Assume POSIX.2-1992 or later for shell scripts. + - SUPPORT_C89 now defaults to 1. + - Include two upstream patches for month names as in April vs Apr. + +* Thu Mar 14 2024 Patsy Griffin - 2024a-2 +- Add java patch to fix incorrect calculations for + Africa/Casablanca starting in 2027. (RHEL-26860) + * Thu Feb 01 2024 Patsy Griffin - 2024a-1 - Rebase to tzdata-2024a - Kazakhstan will transition from UTC+6 to UTC+5 on 2024-03-01.