mirror of
https://github.com/freebsd/freebsd-src.git
synced 2026-10-30 12:25:10 +01:00
Compare commits
77
Commits
stable/13
...
releng/13.4
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3bc5467e7f | ||
|
|
e8e9cb97d0 | ||
|
|
a1f4a530de | ||
|
|
e3fd273431 | ||
|
|
f8c2bedb03 | ||
|
|
27f132c05c | ||
|
|
14c733f254 | ||
|
|
469f61e89f | ||
|
|
c57fcc2d53 | ||
|
|
aef6b5321e | ||
|
|
c1c180910d | ||
|
|
0365b776f1 | ||
|
|
bb48aba624 | ||
|
|
eb9d8bafa4 | ||
|
|
e2bb7b33da | ||
|
|
f7b9cd733c | ||
|
|
3f40d5821e | ||
|
|
51f6c450d9 | ||
|
|
e389eb99fb | ||
|
|
5d07a7e902 | ||
|
|
cfcbeed4c7 | ||
|
|
798030a4e8 | ||
|
|
1c48a9b478 | ||
|
|
088b759baa | ||
|
|
bc3877972e | ||
|
|
2cffa6354d | ||
|
|
5f035df278 | ||
|
|
58066db597 | ||
|
|
5096328dd7 | ||
|
|
087b246271 | ||
|
|
e893ec49af | ||
|
|
13bf8945c9 | ||
|
|
183076d244 | ||
|
|
d3ee218868 | ||
|
|
1d75ce8356 | ||
|
|
21576f6396 | ||
|
|
7739dab974 | ||
|
|
6000de0966 | ||
|
|
abb0a18b69 | ||
|
|
a667c04946 | ||
|
|
b3f0e55578 | ||
|
|
0042987920 | ||
|
|
98e8cb3d94 | ||
|
|
29fbeb5c59 | ||
|
|
3aa9be7e33 | ||
|
|
a8d0ba4833 | ||
|
|
73da0e55aa | ||
|
|
faf94e22a3 | ||
|
|
27777283da | ||
|
|
e381992365 | ||
|
|
700ff8f05f | ||
|
|
3b8f0ffc0f | ||
|
|
2006e3634b | ||
|
|
7bcf0d3320 | ||
|
|
7847d5e56c | ||
|
|
eb7bf0d071 | ||
|
|
0ebe6df086 | ||
|
|
9b945635c1 | ||
|
|
9c67287ccf | ||
|
|
6a7bac2ae7 | ||
|
|
7d3a0370c8 | ||
|
|
abf370e400 | ||
|
|
d5c1fa0ec0 | ||
|
|
e664cd1dc5 | ||
|
|
7088bf662d | ||
|
|
140f361aa6 | ||
|
|
1b30c5d3a5 | ||
|
|
8807350405 | ||
|
|
246e27fa98 | ||
|
|
6a0215b2e3 | ||
|
|
30b27afe3b | ||
|
|
751c889691 | ||
|
|
4bf6ca0e71 | ||
|
|
a87a597313 | ||
|
|
bd3aa40e0a | ||
|
|
9badd542e7 | ||
|
|
e192230d0d |
No files matched your search
@@ -51,6 +51,26 @@
|
||||
# xargs -n1 | sort | uniq -d;
|
||||
# done
|
||||
|
||||
# 20250310: caroot bundle updated
|
||||
OLD_FILES+=usr/share/certs/trusted/Entrust_Root_Certification_Authority_-_G4.pem
|
||||
OLD_FILES+=usr/share/certs/trusted/SecureSign_RootCA11.pem
|
||||
OLD_FILES+=usr/share/certs/trusted/Security_Communication_RootCA3.pem
|
||||
OLD_FILES+=usr/share/certs/trusted/SwissSign_Silver_CA_-_G2.pem
|
||||
OLD_FILES+=usr/share/certs/blacklisted/AddTrust_External_Root.pem
|
||||
OLD_FILES+=usr/share/certs/blacklisted/AddTrust_Low-Value_Services_Root.pem
|
||||
OLD_FILES+=usr/share/certs/blacklisted/Staat_der_Nederlanden_Root_CA_-_G2.pem
|
||||
OLD_FILES+=usr/share/certs/blacklisted/Cybertrust_Global_Root.pem
|
||||
OLD_FILES+=usr/share/certs/blacklisted/DST_Root_CA_X3.pem
|
||||
OLD_FILES+=usr/share/certs/blacklisted/GlobalSign_Root_CA_-_R2.pem
|
||||
OLD_FILES+=usr/share/certs/blacklisted/QuoVadis_Root_CA.pem
|
||||
OLD_FILES+=usr/share/certs/blacklisted/Sonera_Class_2_Root_CA.pem
|
||||
OLD_FILES+=usr/share/certs/blacklisted/GeoTrust_Global_CA.pem
|
||||
OLD_FILES+=usr/share/certs/blacklisted/Staat_der_Nederlanden_EV_Root_CA.pem
|
||||
OLD_FILES+=usr/share/certs/blacklisted/E-Tugra_Certification_Authority.pem
|
||||
OLD_FILES+=usr/share/certs/blacklisted/Hongkong_Post_Root_CA_1.pem
|
||||
OLD_FILES+=usr/share/certs/blacklisted/Security_Communication_Root_CA.pem
|
||||
OLD_FILES+=usr/share/certs/blacklisted/Trustis_FPS_Root_CA.pem
|
||||
|
||||
# 20240419: new clang import which bumps version from 17 to 18
|
||||
OLD_FILES+=usr/lib/clang/17/include/__clang_cuda_builtin_vars.h
|
||||
OLD_FILES+=usr/lib/clang/17/include/__clang_cuda_cmath.h
|
||||
|
||||
@@ -12,6 +12,82 @@ Items affecting the ports and packages system can be found in
|
||||
/usr/ports/UPDATING. Please read that file before updating system packages
|
||||
and/or ports.
|
||||
|
||||
20250410:
|
||||
13.4-RELEASE-p5 EN-25:04.tzdata
|
||||
EN-25:05.expat
|
||||
EN-25:06.daemon
|
||||
EN-25:08.caroot
|
||||
|
||||
Timezone database information update [EN-25:04.tzdata]
|
||||
|
||||
Update expat to 2.7.1 [EN-25:05.expat]
|
||||
|
||||
daemon(8) missing signals [EN-25:06.daemon]
|
||||
|
||||
Root certificate bundle update [EN-25:08.caroot]
|
||||
|
||||
20250221:
|
||||
13.4-RELEASE-p4 SA-25:05.openssh
|
||||
|
||||
Multiple vulnerabilities in OpenSSH [SA-25:05.openssh]
|
||||
|
||||
20250129:
|
||||
13.4-RELEASE-p3 SA-25:02.fs
|
||||
SA-25:03.etcupdate
|
||||
EN-25:02.audit
|
||||
EN-25:03.tzdata
|
||||
|
||||
Buffer overflow in some filesystems via NFS [SA-25:02.fs]
|
||||
|
||||
Unprivileged access to system files [SA-25:03.etcupdate]
|
||||
|
||||
System call auditing disabled by DTrace [EN-25:02.audit]
|
||||
|
||||
Timezone database information update [EN-25:03.tzdata]
|
||||
|
||||
20241029:
|
||||
13.4-RELEASE-p2 SA-24:17.bhyve
|
||||
SA-24:18.ctl
|
||||
SA-24.19.fetch
|
||||
|
||||
Multiple issues in the bhyve hypervisor [SA-24:17.bhyve]
|
||||
|
||||
Unbounded allocation in ctl(4) CAM Target Layer [SA-24:18.ctl]
|
||||
|
||||
Certificate revocation list fetch(1) option fails [SA-24:19.fetch]
|
||||
|
||||
20240919:
|
||||
13.4-RELEASE-p1 SA-24:15.bhyve
|
||||
SA-24:16.libnv
|
||||
|
||||
Fix bhyve(8) out-of-bounds read access via XHCI emulation [SA-24:15.bhyve]
|
||||
|
||||
Fix integer overflow in libnv [SA-24:16.libnv]
|
||||
|
||||
20240917:
|
||||
13.4-RELEASE.
|
||||
|
||||
20240904:
|
||||
13.4-RC2-p1 SA-24:09.libnv
|
||||
SA-24:11.ctl
|
||||
SA-24:12.bhyve
|
||||
SA-24:14.umtx
|
||||
|
||||
Multiple vulnerabilities in libnv [SA-24:09.libnv]
|
||||
|
||||
Multiple issues in ctl(4) CAM Target Layer [SA-24:11.ctl]
|
||||
|
||||
bhyve(8) privileged guest escape via USB controller [SA-24:12.bhyve]
|
||||
|
||||
umtx Kernel panic or Use-After-Free [SA-24:14.umtx]
|
||||
|
||||
20240419:
|
||||
Clang, llvm, lld, lldb, compiler-rt, libc++, libunwind and openmp have
|
||||
been upgraded to 18.1.6. It is important that you run `make delete-old`
|
||||
as described in the COMMON ITEMS section, otherwise several libc++
|
||||
headers that are obsolete and need to be removed can cause compilation
|
||||
errors in C++ programs.
|
||||
|
||||
20240218:
|
||||
MFC of 713db49d06de changed 'struct ieee80211vap' internals in net80211.
|
||||
Given we do not have enough spares and the struct is allocated by
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
Copyright (c) 1998-2000 Thai Open Source Software Center Ltd and Clark Cooper
|
||||
Copyright (c) 2001-2022 Expat maintainers
|
||||
Copyright (c) 2001-2025 Expat maintainers
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
|
||||
+283
-3
@@ -1,6 +1,286 @@
|
||||
NOTE: We are looking for help with a few things:
|
||||
https://github.com/libexpat/libexpat/labels/help%20wanted
|
||||
If you can help, please get in touch. Thanks!
|
||||
__ __ _
|
||||
___\ \/ /_ __ __ _| |_
|
||||
/ _ \\ /| '_ \ / _` | __|
|
||||
| __// \| |_) | (_| | |_
|
||||
\___/_/\_\ .__/ \__,_|\__|
|
||||
|_| XML parser
|
||||
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
!! <blink>Expat is UNDERSTAFFED and WITHOUT FUNDING.</blink> !!
|
||||
!! ~~~~~~~~~~~~ !!
|
||||
!! The following topics need *additional skilled C developers* to progress !!
|
||||
!! in a timely manner or at all (loosely ordered by descending priority): !!
|
||||
!! !!
|
||||
!! - teaming up on researching and fixing future security reports and !!
|
||||
!! ClusterFuzz findings with few-days-max response times in communication !!
|
||||
!! in order to (1) have a sound fix ready before the end of a 90 days !!
|
||||
!! grace period and (2) in a sustainable manner, !!
|
||||
!! - helping CPython Expat bindings with supporting Expat's billion laughs !!
|
||||
!! attack protection API (https://github.com/python/cpython/issues/90949): !!
|
||||
!! - XML_SetBillionLaughsAttackProtectionActivationThreshold !!
|
||||
!! - XML_SetBillionLaughsAttackProtectionMaximumAmplification !!
|
||||
!! - helping Perl's XML::Parser Expat bindings with supporting Expat's !!
|
||||
!! security API (https://github.com/cpan-authors/XML-Parser/issues/102): !!
|
||||
!! - XML_SetBillionLaughsAttackProtectionActivationThreshold !!
|
||||
!! - XML_SetBillionLaughsAttackProtectionMaximumAmplification !!
|
||||
!! - XML_SetReparseDeferralEnabled !!
|
||||
!! - implementing and auto-testing XML 1.0r5 support !!
|
||||
!! (needs discussion before pull requests), !!
|
||||
!! - smart ideas on fixing the Autotools CMake files generation issue !!
|
||||
!! without breaking CI (needs discussion before pull requests), !!
|
||||
!! - pushing migration from `int` to `size_t` further !!
|
||||
!! including edge-cases test coverage (needs discussion before anything). !!
|
||||
!! !!
|
||||
!! For details, please reach out via e-mail to [email protected] so we !!
|
||||
!! can schedule a voice call on the topic, in English or German. !!
|
||||
!! !!
|
||||
!! THANK YOU! Sebastian Pipping -- Berlin, 2024-03-09 !!
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
||||
Release 2.7.1 Thu March 27 2025
|
||||
Bug fixes:
|
||||
#980 #989 Restore event pointer behavior from Expat 2.6.4
|
||||
(that the fix to CVE-2024-8176 changed in 2.7.0);
|
||||
affected API functions are:
|
||||
- XML_GetCurrentByteCount
|
||||
- XML_GetCurrentByteIndex
|
||||
- XML_GetCurrentColumnNumber
|
||||
- XML_GetCurrentLineNumber
|
||||
- XML_GetInputContext
|
||||
|
||||
Other changes:
|
||||
#976 #977 Autotools: Integrate files "fuzz/xml_lpm_fuzzer.{cpp,proto}"
|
||||
with Automake that were missing from 2.7.0 release tarballs
|
||||
#983 #984 Fix printf format specifiers for 32bit Emscripten
|
||||
#992 docs: Promote OpenSSF Best Practices self-certification
|
||||
#978 tests/benchmark: Resolve mistaken double close
|
||||
#986 Address compiler warnings
|
||||
#990 #993 Version info bumped from 11:1:10 (libexpat*.so.1.10.1)
|
||||
to 11:2:10 (libexpat*.so.1.10.2); see https://verbump.de/
|
||||
for what these numbers do
|
||||
|
||||
Infrastructure:
|
||||
#982 CI: Start running Perl XML::Parser integration tests
|
||||
#987 CI: Enforce Clang Static Analyzer clean code
|
||||
#991 CI: Re-enable warning clang-analyzer-valist.Uninitialized
|
||||
for clang-tidy
|
||||
#981 CI: Cover compilation with musl
|
||||
#983 #984 CI: Cover compilation with 32bit Emscripten
|
||||
#976 #977 CI: Protect against fuzzer files missing from future
|
||||
release archives
|
||||
|
||||
Special thanks to:
|
||||
Berkay Eren Ürün
|
||||
Matthew Fernandez
|
||||
and
|
||||
Perl XML::Parser
|
||||
|
||||
Release 2.7.0 Thu March 13 2025
|
||||
Security fixes:
|
||||
#893 #973 CVE-2024-8176 -- Fix crash from chaining a large number
|
||||
of entities caused by stack overflow by resolving use of
|
||||
recursion, for all three uses of entities:
|
||||
- general entities in character data ("<e>&g1;</e>")
|
||||
- general entities in attribute values ("<e k1='&g1;'/>")
|
||||
- parameter entities ("%p1;")
|
||||
Known impact is (reliable and easy) denial of service:
|
||||
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H/E:H/RL:O/RC:C
|
||||
(Base Score: 7.5, Temporal Score: 7.2)
|
||||
Please note that a layer of compression around XML can
|
||||
significantly reduce the minimum attack payload size.
|
||||
|
||||
Other changes:
|
||||
#935 #937 Autotools: Make generated CMake files look for
|
||||
libexpat.@[email protected] on macOS
|
||||
#925 Autotools: Sync CMake templates with CMake 3.29
|
||||
#945 #962 #966 CMake: Drop support for CMake <3.13
|
||||
#942 CMake: Small fuzzing related improvements
|
||||
#921 docs: Add missing documentation of error code
|
||||
XML_ERROR_NOT_STARTED that was introduced with 2.6.4
|
||||
#941 docs: Document need for C++11 compiler for use from C++
|
||||
#959 tests/benchmark: Fix a (harmless) TOCTTOU
|
||||
#944 Windows: Fix installer target location of file xmlwf.xml
|
||||
for CMake
|
||||
#953 Windows: Address warning -Wunknown-warning-option
|
||||
about -Wno-pedantic-ms-format from LLVM MinGW
|
||||
#971 Address Cppcheck warnings
|
||||
#969 #970 Mass-migrate links from http:// to https://
|
||||
#947 #958 ..
|
||||
#974 #975 Document changes since the previous release
|
||||
#974 #975 Version info bumped from 11:0:10 (libexpat*.so.1.10.0)
|
||||
to 11:1:10 (libexpat*.so.1.10.1); see https://verbump.de/
|
||||
for what these numbers do
|
||||
|
||||
Infrastructure:
|
||||
#926 tests: Increase robustness
|
||||
#927 #932 ..
|
||||
#930 #933 tests: Increase test coverage
|
||||
#617 #950 ..
|
||||
#951 #952 ..
|
||||
#954 #955 .. Fuzzing: Add new fuzzer "xml_lpm_fuzzer" based on
|
||||
#961 Google's libprotobuf-mutator ("LPM")
|
||||
#957 Fuzzing|CI: Start producing fuzzing code coverage reports
|
||||
#936 CI: Pass -q -q for LCOV >=2.1 in coverage.sh
|
||||
#942 CI: Small fuzzing related improvements
|
||||
#139 #203 ..
|
||||
#791 #946 CI: Make GitHub Actions build using MSVC on Windows and
|
||||
produce 32bit and 64bit Windows binaries
|
||||
#956 CI: Get off of about-to-be-removed Ubuntu 20.04
|
||||
#960 #964 CI: Start uploading to Coverity Scan for static analysis
|
||||
#972 CI: Stop loading DTD from the internet to address flaky CI
|
||||
#971 CI: Adapt to breaking changes in Cppcheck
|
||||
|
||||
Special thanks to:
|
||||
Alexander Gieringer
|
||||
Berkay Eren Ürün
|
||||
Hanno Böck
|
||||
Jann Horn
|
||||
Mark Brand
|
||||
Sebastian Andrzej Siewior
|
||||
Snild Dolkow
|
||||
Thomas Pröll
|
||||
Tomas Korbar
|
||||
valord577
|
||||
and
|
||||
Google Project Zero
|
||||
Linutronix
|
||||
Red Hat
|
||||
Siemens
|
||||
|
||||
Release 2.6.4 Wed November 6 2024
|
||||
Security fixes:
|
||||
#915 CVE-2024-50602 -- Fix crash within function XML_ResumeParser
|
||||
from a NULL pointer dereference by disallowing function
|
||||
XML_StopParser to (stop or) suspend an unstarted parser.
|
||||
A new error code XML_ERROR_NOT_STARTED was introduced to
|
||||
properly communicate this situation. // CWE-476 CWE-754
|
||||
|
||||
Other changes:
|
||||
#903 CMake: Add alias target "expat::expat"
|
||||
#905 docs: Document use via CMake >=3.18 with FetchContent
|
||||
and SOURCE_SUBDIR and its consequences
|
||||
#902 tests: Reduce use of global parser instance
|
||||
#904 tests: Resolve duplicate handler
|
||||
#317 #918 tests: Improve tests on doctype closing (ex CVE-2019-15903)
|
||||
#914 Fix signedness of format strings
|
||||
#915 For use from C++, expat.h started requiring C++11 due to
|
||||
use of C99 features
|
||||
#919 #920 Version info bumped from 10:3:9 (libexpat*.so.1.9.3)
|
||||
to 11:0:10 (libexpat*.so.1.10.0); see https://verbump.de/
|
||||
for what these numbers do
|
||||
|
||||
Infrastructure:
|
||||
#907 CI: Upgrade Clang from 18 to 19
|
||||
#913 CI: Drop macos-12 and add macos-15
|
||||
#910 CI: Adapt to breaking changes in GitHub Actions
|
||||
#898 Add missing entries to .gitignore
|
||||
|
||||
Special thanks to:
|
||||
Hanno Böck
|
||||
José Eduardo Gutiérrez Conejo
|
||||
José Ricardo Cardona Quesada
|
||||
|
||||
Release 2.6.3 Wed September 4 2024
|
||||
Security fixes:
|
||||
#887 #890 CVE-2024-45490 -- Calling function XML_ParseBuffer with
|
||||
len < 0 without noticing and then calling XML_GetBuffer
|
||||
will have XML_ParseBuffer fail to recognize the problem
|
||||
and XML_GetBuffer corrupt memory.
|
||||
With the fix, XML_ParseBuffer now complains with error
|
||||
XML_ERROR_INVALID_ARGUMENT just like sibling XML_Parse
|
||||
has been doing since Expat 2.2.1, and now documented.
|
||||
Impact is denial of service to potentially artitrary code
|
||||
execution.
|
||||
#888 #891 CVE-2024-45491 -- Internal function dtdCopy can have an
|
||||
integer overflow for nDefaultAtts on 32-bit platforms
|
||||
(where UINT_MAX equals SIZE_MAX).
|
||||
Impact is denial of service to potentially artitrary code
|
||||
execution.
|
||||
#889 #892 CVE-2024-45492 -- Internal function nextScaffoldPart can
|
||||
have an integer overflow for m_groupSize on 32-bit
|
||||
platforms (where UINT_MAX equals SIZE_MAX).
|
||||
Impact is denial of service to potentially artitrary code
|
||||
execution.
|
||||
|
||||
Other changes:
|
||||
#851 #879 Autotools: Sync CMake templates with CMake 3.28
|
||||
#853 Autotools: Always provide path to find(1) for portability
|
||||
#861 Autotools: Ensure that the m4 directory always exists.
|
||||
#870 Autotools: Simplify handling of SIZEOF_VOID_P
|
||||
#869 Autotools: Support non-GNU sed
|
||||
#856 Autotools|CMake: Fix main() to main(void)
|
||||
#865 Autotools|CMake: Fix compile tests for HAVE_SYSCALL_GETRANDOM
|
||||
#863 Autotools|CMake: Stop requiring dos2unix
|
||||
#854 #855 CMake: Fix check for symbols size_t and off_t
|
||||
#864 docs|tests: Convert README to Markdown and update
|
||||
#741 Windows: Drop support for Visual Studio <=15.0/2017
|
||||
#886 Drop needless XML_DTD guards around is_param access
|
||||
#885 Fix typo in a code comment
|
||||
#894 #896 Version info bumped from 10:2:9 (libexpat*.so.1.9.2)
|
||||
to 10:3:9 (libexpat*.so.1.9.3); see https://verbump.de/
|
||||
for what these numbers do
|
||||
|
||||
Infrastructure:
|
||||
#880 Readme: Promote the call for help
|
||||
#868 CI: Fix various issues
|
||||
#849 CI: Allow triggering GitHub Actions workflows manually
|
||||
#851 #872 ..
|
||||
#873 #879 CI: Adapt to breaking changes in GitHub Actions
|
||||
|
||||
Special thanks to:
|
||||
Alexander Bluhm
|
||||
Berkay Eren Ürün
|
||||
Dag-Erling Smørgrav
|
||||
Ferenc Géczi
|
||||
TaiYou
|
||||
|
||||
Release 2.6.2 Wed March 13 2024
|
||||
Security fixes:
|
||||
#839 #842 CVE-2024-28757 -- Prevent billion laughs attacks with
|
||||
isolated use of external parsers. Please see the commit
|
||||
message of commit 1d50b80cf31de87750103656f6eb693746854aa8
|
||||
for details.
|
||||
|
||||
Bug fixes:
|
||||
#839 #841 Reject direct parameter entity recursion
|
||||
and avoid the related undefined behavior
|
||||
|
||||
Other changes:
|
||||
#847 Autotools: Fix build for DOCBOOK_TO_MAN containing spaces
|
||||
#837 Add missing #821 and #824 to 2.6.1 change log
|
||||
#838 #843 Version info bumped from 10:1:9 (libexpat*.so.1.9.1)
|
||||
to 10:2:9 (libexpat*.so.1.9.2); see https://verbump.de/
|
||||
for what these numbers do
|
||||
|
||||
Special thanks to:
|
||||
Philippe Antoine
|
||||
Tomas Korbar
|
||||
and
|
||||
Clang UndefinedBehaviorSanitizer
|
||||
OSS-Fuzz / ClusterFuzz
|
||||
|
||||
Release 2.6.1 Thu February 29 2024
|
||||
Bug fixes:
|
||||
#817 Make tests independent of CPU speed, and thus more robust
|
||||
#828 #836 Expose billion laughs API with XML_DTD defined and
|
||||
XML_GE undefined, regression from 2.6.0
|
||||
|
||||
Other changes:
|
||||
#829 Hide test-only code behind new internal macro
|
||||
#833 Autotools: Reject expat_config.h.in defining SIZEOF_VOID_P
|
||||
#821 #824 Autotools: Fix "make clean" for case:
|
||||
./configure --without-docbook && make clean all
|
||||
#819 Address compiler warnings
|
||||
#832 #834 Version info bumped from 10:0:9 (libexpat*.so.1.9.0)
|
||||
to 10:1:9 (libexpat*.so.1.9.1); see https://verbump.de/
|
||||
for what these numbers do
|
||||
|
||||
Infrastructure:
|
||||
#818 CI: Adapt to breaking changes in clang-format
|
||||
|
||||
Special thanks to:
|
||||
David Hall
|
||||
Snild Dolkow
|
||||
|
||||
Release 2.6.0 Tue February 6 2024
|
||||
Security fixes:
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
# $FreeBSD$
|
||||
*.MPW
|
||||
*.cmake
|
||||
*.def
|
||||
|
||||
@@ -6,10 +6,12 @@
|
||||
# \___/_/\_\ .__/ \__,_|\__|
|
||||
# |_| XML parser
|
||||
#
|
||||
# Copyright (c) 2017-2023 Sebastian Pipping <[email protected]>
|
||||
# Copyright (c) 2017-2025 Sebastian Pipping <[email protected]>
|
||||
# Copyright (c) 2018 KangLin <[email protected]>
|
||||
# Copyright (c) 2022 Johnny Jazeix <[email protected]>
|
||||
# Copyright (c) 2023 Sony Corporation / Snild Dolkow <[email protected]>
|
||||
# Copyright (c) 2024 Alexander Bluhm <[email protected]>
|
||||
# Copyright (c) 2024 Dag-Erling Smørgrav <[email protected]>
|
||||
# Licensed under the MIT license:
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining
|
||||
@@ -94,6 +96,8 @@ EXTRA_DIST = \
|
||||
conftools/expat.m4 \
|
||||
conftools/get-version.sh \
|
||||
\
|
||||
fuzz/xml_lpm_fuzzer.cpp \
|
||||
fuzz/xml_lpm_fuzzer.proto \
|
||||
fuzz/xml_parsebuffer_fuzzer.c \
|
||||
fuzz/xml_parse_fuzzer.c \
|
||||
\
|
||||
@@ -114,10 +118,10 @@ buildlib:
|
||||
@echo 'ERROR: is no longer supported. INSTEAD please:' >&2
|
||||
@echo 'ERROR:' >&2
|
||||
@echo 'ERROR: * Mass-patch Makefile.am, e.g.' >&2
|
||||
@echo 'ERROR: # find -name Makefile.am -exec sed \' >&2
|
||||
@echo 'ERROR: # find . -name Makefile.am -exec sed \' >&2
|
||||
@echo 'ERROR: -e "s,libexpat\.la,libexpatw.la," \' >&2
|
||||
@echo 'ERROR: -e "s,libexpat_la,libexpatw_la," \' >&2
|
||||
@echo 'ERROR: -i {} +' >&2
|
||||
@echo 'ERROR: -i.bak {} +' >&2
|
||||
@echo 'ERROR:' >&2
|
||||
@echo 'ERROR: * Run automake to re-generate Makefile.in files' >&2
|
||||
@echo 'ERROR:' >&2
|
||||
|
||||
@@ -22,10 +22,12 @@
|
||||
# \___/_/\_\ .__/ \__,_|\__|
|
||||
# |_| XML parser
|
||||
#
|
||||
# Copyright (c) 2017-2023 Sebastian Pipping <[email protected]>
|
||||
# Copyright (c) 2017-2025 Sebastian Pipping <[email protected]>
|
||||
# Copyright (c) 2018 KangLin <[email protected]>
|
||||
# Copyright (c) 2022 Johnny Jazeix <[email protected]>
|
||||
# Copyright (c) 2023 Sony Corporation / Snild Dolkow <[email protected]>
|
||||
# Copyright (c) 2024 Alexander Bluhm <[email protected]>
|
||||
# Copyright (c) 2024 Dag-Erling Smørgrav <[email protected]>
|
||||
# Licensed under the MIT license:
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining
|
||||
@@ -384,6 +386,7 @@ RANLIB = @RANLIB@
|
||||
SED = @SED@
|
||||
SET_MAKE = @SET_MAKE@
|
||||
SHELL = @SHELL@
|
||||
SIZEOF_VOID_P = @SIZEOF_VOID_P@
|
||||
SO_MAJOR = @SO_MAJOR@
|
||||
SO_MINOR = @SO_MINOR@
|
||||
SO_PATCH = @SO_PATCH@
|
||||
@@ -397,7 +400,6 @@ ac_ct_AR = @ac_ct_AR@
|
||||
ac_ct_CC = @ac_ct_CC@
|
||||
ac_ct_CXX = @ac_ct_CXX@
|
||||
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
|
||||
ac_cv_sizeof_void_p = @ac_cv_sizeof_void_p@
|
||||
am__include = @am__include@
|
||||
am__leading_dot = @am__leading_dot@
|
||||
am__quote = @am__quote@
|
||||
@@ -492,6 +494,8 @@ EXTRA_DIST = \
|
||||
conftools/expat.m4 \
|
||||
conftools/get-version.sh \
|
||||
\
|
||||
fuzz/xml_lpm_fuzzer.cpp \
|
||||
fuzz/xml_lpm_fuzzer.proto \
|
||||
fuzz/xml_parsebuffer_fuzzer.c \
|
||||
fuzz/xml_parse_fuzzer.c \
|
||||
\
|
||||
@@ -1080,10 +1084,10 @@ buildlib:
|
||||
@echo 'ERROR: is no longer supported. INSTEAD please:' >&2
|
||||
@echo 'ERROR:' >&2
|
||||
@echo 'ERROR: * Mass-patch Makefile.am, e.g.' >&2
|
||||
@echo 'ERROR: # find -name Makefile.am -exec sed \' >&2
|
||||
@echo 'ERROR: # find . -name Makefile.am -exec sed \' >&2
|
||||
@echo 'ERROR: -e "s,libexpat\.la,libexpatw.la," \' >&2
|
||||
@echo 'ERROR: -e "s,libexpat_la,libexpatw_la," \' >&2
|
||||
@echo 'ERROR: -i {} +' >&2
|
||||
@echo 'ERROR: -i.bak {} +' >&2
|
||||
@echo 'ERROR:' >&2
|
||||
@echo 'ERROR: * Run automake to re-generate Makefile.in files' >&2
|
||||
@echo 'ERROR:' >&2
|
||||
|
||||
+58
-17
@@ -3,9 +3,16 @@
|
||||
[](https://repology.org/metapackage/expat/versions)
|
||||
[](https://sourceforge.net/projects/expat/files/)
|
||||
[](https://github.com/libexpat/libexpat/releases)
|
||||
[](https://www.bestpractices.dev/projects/10205)
|
||||
|
||||
> [!CAUTION]
|
||||
>
|
||||
> Expat is **understaffed** and without funding.
|
||||
> There is a [call for help with details](https://github.com/libexpat/libexpat/blob/master/expat/Changes)
|
||||
> at the top of the `Changes` file.
|
||||
|
||||
|
||||
# Expat, Release 2.6.0
|
||||
# Expat, Release 2.7.1
|
||||
|
||||
This is Expat, a C99 library for parsing
|
||||
[XML 1.0 Fourth Edition](https://www.w3.org/TR/2006/REC-xml-20060816/), started by
|
||||
@@ -16,11 +23,11 @@ are called when the parser discovers the associated structures in the
|
||||
document being parsed. A start tag is an example of the kind of
|
||||
structures for which you may register handlers.
|
||||
|
||||
Expat supports the following compilers:
|
||||
Expat supports the following C99 compilers:
|
||||
|
||||
- GNU GCC >=4.5
|
||||
- GNU GCC >=4.5 (for use from C) or GNU GCC >=4.8.1 (for use from C++)
|
||||
- LLVM Clang >=3.5
|
||||
- Microsoft Visual Studio >=15.0/2017 (rolling `${today} minus 5 years`)
|
||||
- Microsoft Visual Studio >=16.0/2019 (rolling `${today} minus 5 years`)
|
||||
|
||||
Windows users can use the
|
||||
[`expat-win32bin-*.*.*.{exe,zip}` download](https://github.com/libexpat/libexpat/releases),
|
||||
@@ -37,16 +44,16 @@ This license is the same as the MIT/X Consortium license.
|
||||
|
||||
## Using libexpat in your CMake-Based Project
|
||||
|
||||
There are two ways of using libexpat with CMake:
|
||||
There are three documented ways of using libexpat with CMake:
|
||||
|
||||
### a) Module Mode
|
||||
### a) `find_package` with Module Mode
|
||||
|
||||
This approach leverages CMake's own [module `FindEXPAT`](https://cmake.org/cmake/help/latest/module/FindEXPAT.html).
|
||||
|
||||
Notice the *uppercase* `EXPAT` in the following example:
|
||||
|
||||
```cmake
|
||||
cmake_minimum_required(VERSION 3.0) # or 3.10, see below
|
||||
cmake_minimum_required(VERSION 3.10)
|
||||
|
||||
project(hello VERSION 1.0.0)
|
||||
|
||||
@@ -56,15 +63,10 @@ add_executable(hello
|
||||
hello.c
|
||||
)
|
||||
|
||||
# a) for CMake >=3.10 (see CMake's FindEXPAT docs)
|
||||
target_link_libraries(hello PUBLIC EXPAT::EXPAT)
|
||||
|
||||
# b) for CMake >=3.0
|
||||
target_include_directories(hello PRIVATE ${EXPAT_INCLUDE_DIRS})
|
||||
target_link_libraries(hello PUBLIC ${EXPAT_LIBRARIES})
|
||||
```
|
||||
|
||||
### b) Config Mode
|
||||
### b) `find_package` with Config Mode
|
||||
|
||||
This approach requires files from…
|
||||
|
||||
@@ -79,7 +81,7 @@ or
|
||||
Notice the *lowercase* `expat` in the following example:
|
||||
|
||||
```cmake
|
||||
cmake_minimum_required(VERSION 3.0)
|
||||
cmake_minimum_required(VERSION 3.10)
|
||||
|
||||
project(hello VERSION 1.0.0)
|
||||
|
||||
@@ -92,6 +94,45 @@ add_executable(hello
|
||||
target_link_libraries(hello PUBLIC expat::expat)
|
||||
```
|
||||
|
||||
### c) The `FetchContent` module
|
||||
|
||||
This approach — as demonstrated below — requires CMake >=3.18 for both the
|
||||
[`FetchContent` module](https://cmake.org/cmake/help/latest/module/FetchContent.html)
|
||||
and its support for the `SOURCE_SUBDIR` option to be available.
|
||||
|
||||
Please note that:
|
||||
- Use of the `FetchContent` module with *non-release* SHA1s or `master`
|
||||
of libexpat is neither advised nor considered officially supported.
|
||||
- Pinning to a specific commit is great for robust CI.
|
||||
- Pinning to a specific commit needs updating every time there is a new
|
||||
release of libexpat — either manually or through automation —,
|
||||
to not miss out on libexpat security updates.
|
||||
|
||||
For an example that pulls in libexpat via Git:
|
||||
|
||||
```cmake
|
||||
cmake_minimum_required(VERSION 3.18)
|
||||
|
||||
include(FetchContent)
|
||||
|
||||
project(hello VERSION 1.0.0)
|
||||
|
||||
FetchContent_Declare(
|
||||
expat
|
||||
GIT_REPOSITORY https://github.com/libexpat/libexpat/
|
||||
GIT_TAG 000000000_GIT_COMMIT_SHA1_HERE_000000000 # i.e. Git tag R_0_Y_Z
|
||||
SOURCE_SUBDIR expat/
|
||||
)
|
||||
|
||||
FetchContent_MakeAvailable(expat)
|
||||
|
||||
add_executable(hello
|
||||
hello.c
|
||||
)
|
||||
|
||||
target_link_libraries(hello PUBLIC expat)
|
||||
```
|
||||
|
||||
|
||||
## Building from a Git Clone
|
||||
|
||||
@@ -158,10 +199,10 @@ support this mode of compilation (yet):
|
||||
|
||||
1. Mass-patch `Makefile.am` files to use `libexpatw.la` for a library name:
|
||||
<br/>
|
||||
`find -name Makefile.am -exec sed
|
||||
`find . -name Makefile.am -exec sed
|
||||
-e 's,libexpat\.la,libexpatw.la,'
|
||||
-e 's,libexpat_la,libexpatw_la,'
|
||||
-i {} +`
|
||||
-i.bak {} +`
|
||||
|
||||
1. Run `automake` to re-write `Makefile.in` files:<br/>
|
||||
`automake`
|
||||
@@ -250,7 +291,7 @@ EXPAT_ENABLE_INSTALL:BOOL=ON
|
||||
// Use /MT flag (static CRT) when compiling in MSVC
|
||||
EXPAT_MSVC_STATIC_CRT:BOOL=OFF
|
||||
|
||||
// Build fuzzers via ossfuzz for the expat library
|
||||
// Build fuzzers via OSS-Fuzz for the expat library
|
||||
EXPAT_OSSFUZZ_BUILD:BOOL=OFF
|
||||
|
||||
// Build a shared expat library
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
#
|
||||
# Copyright (c) 2017-2022 Sebastian Pipping <[email protected]>
|
||||
# Copyright (c) 2018 Marco Maggi <[email protected]>
|
||||
# Copyright (c) 2024 Dag-Erling Smørgrav <[email protected]>
|
||||
# Licensed under the MIT license:
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining
|
||||
@@ -31,25 +32,4 @@
|
||||
|
||||
set -e
|
||||
|
||||
# File expat_config.h.in (as generated by autoheader by autoreconf) contains
|
||||
# macro SIZEOF_VOID_P which is (1) not really needed by Expat as of today and
|
||||
# (2) a problem to "multilib" systems with one shared installed
|
||||
# /usr/include/expat_config.h for two Expats with different "void *" sizes
|
||||
# installed in e.g. /usr/lib32 and /usr/lib64. Hence we patch macro
|
||||
# SIZEOF_VOID_P out of template expat_config.h.in so that configure will
|
||||
# not put SIZEOF_VOID_P in the eventual expat_config.h.
|
||||
patch_expat_config_h_in() {
|
||||
local filename="$1"
|
||||
local sizeof_void_p_line_number="$(grep -F -n SIZEOF_VOID_P "${filename}" | awk -F: '{print $1}')"
|
||||
[[ ${sizeof_void_p_line_number} =~ ^[0-9]+$ ]] # cheap assert
|
||||
local first_line_to_delete=$(( sizeof_void_p_line_number - 1 ))
|
||||
local last_line_to_delete=$(( sizeof_void_p_line_number + 1 ))
|
||||
# Note: Avoiding "sed -i" only for macOS portability.
|
||||
local tempfile="$(mktemp)"
|
||||
sed "${first_line_to_delete},${last_line_to_delete}d" "${filename}" > "${tempfile}"
|
||||
mv "${tempfile}" "${filename}"
|
||||
}
|
||||
|
||||
autoreconf --warnings=all --install --verbose "$@"
|
||||
|
||||
patch_expat_config_h_in expat_config.h.in
|
||||
exec autoreconf --warnings=all --install --verbose "$@"
|
||||
+31
-14
@@ -11,7 +11,7 @@ dnl Copyright (c) 2000 Clark Cooper <[email protected]>
|
||||
dnl Copyright (c) 2000-2005 Fred L. Drake, Jr. <[email protected]>
|
||||
dnl Copyright (c) 2001-2003 Greg Stein <[email protected]>
|
||||
dnl Copyright (c) 2006-2012 Karl Waclawek <[email protected]>
|
||||
dnl Copyright (c) 2016-2024 Sebastian Pipping <[email protected]>
|
||||
dnl Copyright (c) 2016-2025 Sebastian Pipping <[email protected]>
|
||||
dnl Copyright (c) 2017 S. P. Zeidler <[email protected]>
|
||||
dnl Copyright (c) 2017 Stephen Groat <[email protected]>
|
||||
dnl Copyright (c) 2017-2020 Joe Orton <[email protected]>
|
||||
@@ -22,6 +22,8 @@ dnl Copyright (c) 2018 KangLin <[email protected]>
|
||||
dnl Copyright (c) 2019 Mohammed Khajapasha <[email protected]>
|
||||
dnl Copyright (c) 2019 Kishore Kunche <[email protected]>
|
||||
dnl Copyright (c) 2020 Jeffrey Walton <[email protected]>
|
||||
dnl Copyright (c) 2024 Ferenc Géczi <[email protected]>
|
||||
dnl Copyright (c) 2024 Dag-Erling Smørgrav <[email protected]>
|
||||
dnl Licensed under the MIT license:
|
||||
dnl
|
||||
dnl Permission is hereby granted, free of charge, to any person obtaining
|
||||
@@ -82,9 +84,9 @@ dnl
|
||||
dnl If the API changes incompatibly set LIBAGE back to 0
|
||||
dnl
|
||||
|
||||
LIBCURRENT=10 # sync
|
||||
LIBREVISION=0 # with
|
||||
LIBAGE=9 # CMakeLists.txt!
|
||||
LIBCURRENT=11 # sync
|
||||
LIBREVISION=2 # with
|
||||
LIBAGE=10 # CMakeLists.txt!
|
||||
|
||||
AC_CONFIG_HEADERS([expat_config.h])
|
||||
AH_TOP([#ifndef EXPAT_CONFIG_H
|
||||
@@ -160,7 +162,6 @@ AC_C_BIGENDIAN([AC_DEFINE([WORDS_BIGENDIAN], 1)
|
||||
AC_DEFINE_UNQUOTED([BYTEORDER], $BYTEORDER, [1234 = LILENDIAN, 4321 = BIGENDIAN])
|
||||
|
||||
AC_C_CONST
|
||||
AC_TYPE_SIZE_T
|
||||
|
||||
AC_ARG_WITH([xmlwf],
|
||||
[AS_HELP_STRING([--without-xmlwf], [do not build xmlwf])],
|
||||
@@ -215,7 +216,7 @@ AC_LINK_IFELSE([AC_LANG_SOURCE([
|
||||
#else
|
||||
# include <stdlib.h> /* for arc4random_buf on BSD */
|
||||
#endif
|
||||
int main() {
|
||||
int main(void) {
|
||||
char dummy[[123]]; // double brackets for m4
|
||||
arc4random_buf(dummy, 0U);
|
||||
return 0;
|
||||
@@ -232,7 +233,7 @@ AC_LINK_IFELSE([AC_LANG_SOURCE([
|
||||
#else
|
||||
# include <stdlib.h>
|
||||
#endif
|
||||
int main() {
|
||||
int main(void) {
|
||||
arc4random();
|
||||
return 0;
|
||||
}
|
||||
@@ -254,7 +255,7 @@ AS_IF([test "x$with_getrandom" != xno],
|
||||
AC_LINK_IFELSE([AC_LANG_SOURCE([
|
||||
#include <stdlib.h> /* for NULL */
|
||||
#include <sys/random.h>
|
||||
int main() {
|
||||
int main(void) {
|
||||
return getrandom(NULL, 0U, 0U);
|
||||
}
|
||||
])],
|
||||
@@ -275,10 +276,11 @@ AS_HELP_STRING([--without-sys-getrandom],
|
||||
AS_IF([test "x$with_sys_getrandom" != xno],
|
||||
[AC_MSG_CHECKING([for syscall SYS_getrandom (Linux 3.17+)])
|
||||
AC_LINK_IFELSE([AC_LANG_SOURCE([
|
||||
#define _GNU_SOURCE
|
||||
#include <stdlib.h> /* for NULL */
|
||||
#include <unistd.h> /* for syscall */
|
||||
#include <sys/syscall.h> /* for SYS_getrandom */
|
||||
int main() {
|
||||
int main(void) {
|
||||
syscall(SYS_getrandom, NULL, 0, 0);
|
||||
return 0;
|
||||
}
|
||||
@@ -357,11 +359,22 @@ AS_IF([test "x${DOCBOOK_TO_MAN}" != x -a "x$with_docbook" != xno],
|
||||
page for xmlwf.])])])
|
||||
|
||||
dnl This will make sure that a release tarball shipping a pre-rendered xmlwf man page will
|
||||
dnl get it installed, independent of whether some flavor of docbook2man is available.
|
||||
dnl get it installed, when no working flavor of docbook2man is available (or wanted).
|
||||
dnl This relies on file xmlwf.1 being at least as recent as its source file xmlwf.xml.
|
||||
AS_IF([test -f "${srcdir}"/doc/xmlwf.1],
|
||||
[AM_CONDITIONAL(WITH_DOCBOOK, [true])],
|
||||
[AM_CONDITIONAL(WITH_DOCBOOK, [test "x${DOCBOOK_TO_MAN}" != x])])
|
||||
[AM_CONDITIONAL(WITH_MANPAGE, [true])
|
||||
AS_IF([test "x$with_docbook" = xno -o "x${DOCBOOK_TO_MAN}" = x],
|
||||
[AM_CONDITIONAL(WITH_PREBUILT_MANPAGE, [true])
|
||||
AM_CONDITIONAL(WITH_DISTRIBUTABLE_MANPAGE, [false])],
|
||||
[AM_CONDITIONAL(WITH_PREBUILT_MANPAGE, [false])
|
||||
AM_CONDITIONAL(WITH_DISTRIBUTABLE_MANPAGE, [true])])
|
||||
],
|
||||
[AS_IF([test "x$with_docbook" != xno -a "x${DOCBOOK_TO_MAN}" != x],
|
||||
[AM_CONDITIONAL(WITH_MANPAGE, [true])
|
||||
AM_CONDITIONAL(WITH_DISTRIBUTABLE_MANPAGE, [true])],
|
||||
[AM_CONDITIONAL(WITH_MANPAGE, [false])
|
||||
AM_CONDITIONAL(WITH_DISTRIBUTABLE_MANPAGE, [false])])
|
||||
AM_CONDITIONAL(WITH_PREBUILT_MANPAGE, [false])])
|
||||
|
||||
dnl Configure CMake file templates
|
||||
dnl NOTE: The *_TRUE variables read here are Automake conditionals
|
||||
@@ -392,7 +405,6 @@ LIBDIR_BASENAME="$(basename "${libdir}")"
|
||||
SO_MAJOR="$(expr "${LIBCURRENT}" - "${LIBAGE}")"
|
||||
SO_MINOR="${LIBAGE}"
|
||||
SO_PATCH="${LIBREVISION}"
|
||||
AC_CHECK_SIZEOF([void *]) # sets ac_cv_sizeof_void_p
|
||||
AC_SUBST([EXPAT_ATTR_INFO])
|
||||
AC_SUBST([EXPAT_DTD])
|
||||
AC_SUBST([EXPAT_LARGE_SIZE])
|
||||
@@ -405,8 +417,13 @@ AC_SUBST([LIBDIR_BASENAME])
|
||||
AC_SUBST([SO_MAJOR])
|
||||
AC_SUBST([SO_MINOR])
|
||||
AC_SUBST([SO_PATCH])
|
||||
AC_SUBST([ac_cv_sizeof_void_p])
|
||||
|
||||
dnl The canonical way of doing this is AC_CHECK_SIZEOF(void *), but
|
||||
dnl that adds SIZEOF_VOID_P to expat_config.h.in, making it difficult
|
||||
dnl to have 32-bit and 64-bit versions of libexpat installed on the
|
||||
dnl same system with a single, shared copy of the header.
|
||||
AC_COMPUTE_INT(SIZEOF_VOID_P, [sizeof(void *)])
|
||||
AC_SUBST([SIZEOF_VOID_P])
|
||||
|
||||
dnl write the Automake flags we set
|
||||
AC_SUBST([AM_CPPFLAGS])
|
||||
|
||||
@@ -6,9 +6,10 @@
|
||||
# \___/_/\_\ .__/ \__,_|\__|
|
||||
# |_| XML parser
|
||||
#
|
||||
# Copyright (c) 2017-2022 Sebastian Pipping <[email protected]>
|
||||
# Copyright (c) 2017-2024 Sebastian Pipping <[email protected]>
|
||||
# Copyright (c) 2017 Stephen Groat <[email protected]>
|
||||
# Copyright (c) 2017 Joe Orton <[email protected]>
|
||||
# Copyright (c) 2024 Tomas Korbar <[email protected]>
|
||||
# Licensed under the MIT license:
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining
|
||||
@@ -32,26 +33,24 @@
|
||||
|
||||
.PHONY: dist-hook # not inside conditional to avoid automake warning
|
||||
|
||||
if WITH_DOCBOOK
|
||||
if WITH_MANPAGE
|
||||
dist_man_MANS = xmlwf.1
|
||||
|
||||
xmlwf.1: xmlwf.xml
|
||||
-rm -f $@
|
||||
$(DOCBOOK_TO_MAN) $<
|
||||
test "x$(DOCBOOK_TO_MAN)" != x && $(DOCBOOK_TO_MAN) $<
|
||||
test -f $@ || mv XMLWF.1 $@
|
||||
else
|
||||
endif
|
||||
|
||||
if !WITH_DISTRIBUTABLE_MANPAGE
|
||||
dist-hook:
|
||||
@echo 'ERROR: Configure with --with-docbook for "make dist".' 1>&2
|
||||
@false
|
||||
endif
|
||||
|
||||
# https://www.gnu.org/software/automake/manual/automake.html#What-Gets-Cleaned
|
||||
.PHONY: clean-local
|
||||
clean-local: clean-local-check
|
||||
|
||||
.PHONY: clean-local-check
|
||||
clean-local-check:
|
||||
$(RM) xmlwf.1
|
||||
if !WITH_PREBUILT_MANPAGE
|
||||
CLEANFILES = xmlwf.1
|
||||
endif
|
||||
|
||||
EXTRA_DIST = \
|
||||
ok.min.css \
|
||||
|
||||
@@ -22,9 +22,10 @@
|
||||
# \___/_/\_\ .__/ \__,_|\__|
|
||||
# |_| XML parser
|
||||
#
|
||||
# Copyright (c) 2017-2022 Sebastian Pipping <[email protected]>
|
||||
# Copyright (c) 2017-2024 Sebastian Pipping <[email protected]>
|
||||
# Copyright (c) 2017 Stephen Groat <[email protected]>
|
||||
# Copyright (c) 2017 Joe Orton <[email protected]>
|
||||
# Copyright (c) 2024 Tomas Korbar <[email protected]>
|
||||
# Licensed under the MIT license:
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining
|
||||
@@ -285,6 +286,7 @@ RANLIB = @RANLIB@
|
||||
SED = @SED@
|
||||
SET_MAKE = @SET_MAKE@
|
||||
SHELL = @SHELL@
|
||||
SIZEOF_VOID_P = @SIZEOF_VOID_P@
|
||||
SO_MAJOR = @SO_MAJOR@
|
||||
SO_MINOR = @SO_MINOR@
|
||||
SO_PATCH = @SO_PATCH@
|
||||
@@ -298,7 +300,6 @@ ac_ct_AR = @ac_ct_AR@
|
||||
ac_ct_CC = @ac_ct_CC@
|
||||
ac_ct_CXX = @ac_ct_CXX@
|
||||
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
|
||||
ac_cv_sizeof_void_p = @ac_cv_sizeof_void_p@
|
||||
am__include = @am__include@
|
||||
am__leading_dot = @am__leading_dot@
|
||||
am__quote = @am__quote@
|
||||
@@ -345,7 +346,8 @@ target_alias = @target_alias@
|
||||
top_build_prefix = @top_build_prefix@
|
||||
top_builddir = @top_builddir@
|
||||
top_srcdir = @top_srcdir@
|
||||
@WITH_DOCBOOK_TRUE@dist_man_MANS = xmlwf.1
|
||||
@WITH_MANPAGE_TRUE@dist_man_MANS = xmlwf.1
|
||||
@WITH_PREBUILT_MANPAGE_FALSE@CLEANFILES = xmlwf.1
|
||||
EXTRA_DIST = \
|
||||
ok.min.css \
|
||||
reference.html \
|
||||
@@ -439,7 +441,7 @@ ctags CTAGS:
|
||||
|
||||
cscope cscopelist:
|
||||
|
||||
@WITH_DOCBOOK_TRUE@dist-hook:
|
||||
@WITH_DISTRIBUTABLE_MANPAGE_TRUE@dist-hook:
|
||||
distdir: $(BUILT_SOURCES)
|
||||
$(MAKE) $(AM_MAKEFLAGS) distdir-am
|
||||
|
||||
@@ -505,6 +507,7 @@ install-strip:
|
||||
mostlyclean-generic:
|
||||
|
||||
clean-generic:
|
||||
-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
|
||||
|
||||
distclean-generic:
|
||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||
@@ -515,7 +518,7 @@ maintainer-clean-generic:
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
clean: clean-am
|
||||
|
||||
clean-am: clean-generic clean-libtool clean-local mostlyclean-am
|
||||
clean-am: clean-generic clean-libtool mostlyclean-am
|
||||
|
||||
distclean: distclean-am
|
||||
-rm -f Makefile
|
||||
@@ -584,38 +587,31 @@ uninstall-man: uninstall-man1
|
||||
.MAKE: install-am install-strip
|
||||
|
||||
.PHONY: all all-am check check-am clean clean-generic clean-libtool \
|
||||
clean-local cscopelist-am ctags-am dist-hook distclean \
|
||||
distclean-generic distclean-libtool distdir dvi dvi-am html \
|
||||
html-am info info-am install install-am install-data \
|
||||
install-data-am install-dvi install-dvi-am install-exec \
|
||||
install-exec-am install-html install-html-am install-info \
|
||||
install-info-am install-man install-man1 install-pdf \
|
||||
install-pdf-am install-ps install-ps-am install-strip \
|
||||
installcheck installcheck-am installdirs maintainer-clean \
|
||||
maintainer-clean-generic mostlyclean mostlyclean-generic \
|
||||
mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \
|
||||
uninstall-am uninstall-man uninstall-man1
|
||||
cscopelist-am ctags-am dist-hook distclean distclean-generic \
|
||||
distclean-libtool distdir dvi dvi-am html html-am info info-am \
|
||||
install install-am install-data install-data-am install-dvi \
|
||||
install-dvi-am install-exec install-exec-am install-html \
|
||||
install-html-am install-info install-info-am install-man \
|
||||
install-man1 install-pdf install-pdf-am install-ps \
|
||||
install-ps-am install-strip installcheck installcheck-am \
|
||||
installdirs maintainer-clean maintainer-clean-generic \
|
||||
mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
|
||||
ps ps-am tags-am uninstall uninstall-am uninstall-man \
|
||||
uninstall-man1
|
||||
|
||||
.PRECIOUS: Makefile
|
||||
|
||||
|
||||
.PHONY: dist-hook # not inside conditional to avoid automake warning
|
||||
|
||||
@WITH_DOCBOOK[email protected]: xmlwf.xml
|
||||
@WITH_DOCBOOK_TRUE@ -rm -f $@
|
||||
@WITH_DOCBOOK_TRUE@ $(DOCBOOK_TO_MAN) $<
|
||||
@WITH_DOCBOOK_TRUE@ test -f $@ || mv XMLWF.1 $@
|
||||
@WITH_DOCBOOK_FALSE@dist-hook:
|
||||
@WITH_DOCBOOK_FALSE@ @echo 'ERROR: Configure with --with-docbook for "make dist".' 1>&2
|
||||
@WITH_DOCBOOK_FALSE@ @false
|
||||
@WITH_MANPAGE[email protected]: xmlwf.xml
|
||||
@WITH_MANPAGE_TRUE@ -rm -f $@
|
||||
@WITH_MANPAGE_TRUE@ test "x$(DOCBOOK_TO_MAN)" != x && $(DOCBOOK_TO_MAN) $<
|
||||
@WITH_MANPAGE_TRUE@ test -f $@ || mv XMLWF.1 $@
|
||||
|
||||
# https://www.gnu.org/software/automake/manual/automake.html#What-Gets-Cleaned
|
||||
.PHONY: clean-local
|
||||
clean-local: clean-local-check
|
||||
|
||||
.PHONY: clean-local-check
|
||||
clean-local-check:
|
||||
$(RM) xmlwf.1
|
||||
@WITH_DISTRIBUTABLE_MANPAGE_FALSE@dist-hook:
|
||||
@WITH_DISTRIBUTABLE_MANPAGE_FALSE@ @echo 'ERROR: Configure with --with-docbook for "make dist".' 1>&2
|
||||
@WITH_DISTRIBUTABLE_MANPAGE_FALSE@ @false
|
||||
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
Copyright (c) 2000 Clark Cooper <[email protected]>
|
||||
Copyright (c) 2000-2004 Fred L. Drake, Jr. <[email protected]>
|
||||
Copyright (c) 2002-2012 Karl Waclawek <[email protected]>
|
||||
Copyright (c) 2017-2024 Sebastian Pipping <[email protected]>
|
||||
Copyright (c) 2017-2025 Sebastian Pipping <[email protected]>
|
||||
Copyright (c) 2017 Jakub Wilk <[email protected]>
|
||||
Copyright (c) 2021 Tomas Korbar <[email protected]>
|
||||
Copyright (c) 2021 Nicolas Cavallari <nicolas.cavallari@green-communications.fr>
|
||||
@@ -52,7 +52,7 @@
|
||||
<div>
|
||||
<h1>
|
||||
The Expat XML Parser
|
||||
<small>Release 2.6.0</small>
|
||||
<small>Release 2.7.1</small>
|
||||
</h1>
|
||||
</div>
|
||||
<div class="content">
|
||||
@@ -319,7 +319,7 @@ directions in the next section. Otherwise if you have Microsoft's
|
||||
Developer Studio installed,
|
||||
you can use CMake to generate a <code>.sln</code> file, e.g.
|
||||
<code>
|
||||
cmake -G"Visual Studio 15 2017" -DCMAKE_BUILD_TYPE=RelWithDebInfo .
|
||||
cmake -G"Visual Studio 16 2019" -DCMAKE_BUILD_TYPE=RelWithDebInfo .
|
||||
</code>, and build Expat using <code>msbuild /m expat.sln</code> after.</p>
|
||||
|
||||
<p>Alternatively, you may download the Win32 binary package that
|
||||
@@ -356,10 +356,7 @@ library and header would get installed in
|
||||
<h3>Configuring Expat Using the Pre-Processor</h3>
|
||||
|
||||
<p>Expat's feature set can be configured using a small number of
|
||||
pre-processor definitions. The definition of this symbols does not
|
||||
affect the set of entry points for Expat, only the behavior of the API
|
||||
and the definition of character types in the case of
|
||||
<code>XML_UNICODE_WCHAR_T</code>. The symbols are:</p>
|
||||
pre-processor definitions. The symbols are:</p>
|
||||
|
||||
<dl class="cpp-symbols">
|
||||
<dt><a name="XML_GE">XML_GE</a></dt>
|
||||
@@ -1138,7 +1135,9 @@ containing part (or perhaps all) of the document. The number of bytes of s
|
||||
that are part of the document is indicated by <code>len</code>. This means
|
||||
that <code>s</code> doesn't have to be null-terminated. It also means that
|
||||
if <code>len</code> is larger than the number of bytes in the block of
|
||||
memory that <code>s</code> points at, then a memory fault is likely. The
|
||||
memory that <code>s</code> points at, then a memory fault is likely.
|
||||
Negative values for <code>len</code> are rejected since Expat 2.2.1.
|
||||
The
|
||||
<code>isFinal</code> parameter informs the parser that this is the last
|
||||
piece of the document. Frequently, the last piece is empty (i.e.
|
||||
<code>len</code> is zero.)
|
||||
@@ -1186,11 +1185,17 @@ XML_ParseBuffer(XML_Parser p,
|
||||
int isFinal);
|
||||
</pre>
|
||||
<div class="fcndef">
|
||||
<p>
|
||||
This is just like <code><a href= "#XML_Parse" >XML_Parse</a></code>,
|
||||
except in this case Expat provides the buffer. By obtaining the
|
||||
buffer from Expat with the <code><a href= "#XML_GetBuffer"
|
||||
>XML_GetBuffer</a></code> function, the application can avoid double
|
||||
copying of the input.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Negative values for <code>len</code> are rejected since Expat 2.6.3.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<h4 id="XML_GetBuffer">XML_GetBuffer</h4>
|
||||
@@ -1262,6 +1267,11 @@ call-backs, except when parsing an external parameter entity and
|
||||
<code>XML_STATUS_ERROR</code> otherwise. The possible error codes
|
||||
are:</p>
|
||||
<dl>
|
||||
<dt><code>XML_ERROR_NOT_STARTED</code></dt>
|
||||
<dd>
|
||||
when stopping or suspending a parser before it has started,
|
||||
added in Expat 2.6.4.
|
||||
</dd>
|
||||
<dt><code>XML_ERROR_SUSPENDED</code></dt>
|
||||
<dd>when suspending an already suspended parser.</dd>
|
||||
<dt><code>XML_ERROR_FINISHED</code></dt>
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
\\$2 \(la\\$1\(ra\\$3
|
||||
..
|
||||
.if \n(.g .mso www.tmac
|
||||
.TH XMLWF 1 "February 6, 2024" "" ""
|
||||
.TH XMLWF 1 "March 27, 2025" "" ""
|
||||
.SH NAME
|
||||
xmlwf \- Determines if an XML document is well-formed
|
||||
.SH SYNOPSIS
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
Copyright (c) 2001 Scott Bronson <[email protected]>
|
||||
Copyright (c) 2002-2003 Fred L. Drake, Jr. <[email protected]>
|
||||
Copyright (c) 2009 Karl Waclawek <[email protected]>
|
||||
Copyright (c) 2016-2024 Sebastian Pipping <[email protected]>
|
||||
Copyright (c) 2016-2025 Sebastian Pipping <[email protected]>
|
||||
Copyright (c) 2016 Ardo van Rangelrooij <[email protected]>
|
||||
Copyright (c) 2017 Rhodri James <[email protected]>
|
||||
Copyright (c) 2020 Joe Orton <[email protected]>
|
||||
@@ -21,7 +21,7 @@
|
||||
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [
|
||||
<!ENTITY dhfirstname "<firstname>Scott</firstname>">
|
||||
<!ENTITY dhsurname "<surname>Bronson</surname>">
|
||||
<!ENTITY dhdate "<date>February 6, 2024</date>">
|
||||
<!ENTITY dhdate "<date>March 27, 2025</date>">
|
||||
<!-- Please adjust this^^ date whenever cutting a new release. -->
|
||||
<!ENTITY dhsection "<manvolnum>1</manvolnum>">
|
||||
<!ENTITY dhemail "<email>[email protected]</email>">
|
||||
|
||||
@@ -313,6 +313,7 @@ RANLIB = @RANLIB@
|
||||
SED = @SED@
|
||||
SET_MAKE = @SET_MAKE@
|
||||
SHELL = @SHELL@
|
||||
SIZEOF_VOID_P = @SIZEOF_VOID_P@
|
||||
SO_MAJOR = @SO_MAJOR@
|
||||
SO_MINOR = @SO_MINOR@
|
||||
SO_PATCH = @SO_PATCH@
|
||||
@@ -326,7 +327,6 @@ ac_ct_AR = @ac_ct_AR@
|
||||
ac_ct_CC = @ac_ct_CC@
|
||||
ac_ct_CXX = @ac_ct_CXX@
|
||||
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
|
||||
ac_cv_sizeof_void_p = @ac_cv_sizeof_void_p@
|
||||
am__include = @am__include@
|
||||
am__leading_dot = @am__leading_dot@
|
||||
am__quote = @am__quote@
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
Copyright (c) 2016-2024 Sebastian Pipping <sebastian@pipping.org>
|
||||
Copyright (c) 2017 Rhodri James <rhodri@wildebeest.org.uk>
|
||||
Copyright (c) 2019 Zhongyuan Zhou <zhouzhongyuan@huawei.com>
|
||||
Copyright (c) 2024 Hanno Böck <hanno@gentoo.org>
|
||||
Licensed under the MIT license:
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
@@ -127,15 +128,15 @@ dumpContentModelElement(const XML_Content *model, unsigned level,
|
||||
}
|
||||
|
||||
// Node
|
||||
printf("[%u] type=%s(%d), quant=%s(%d)", (unsigned)(model - root),
|
||||
contentTypeName(model->type), model->type,
|
||||
contentQuantName(model->quant), model->quant);
|
||||
printf("[%u] type=%s(%u), quant=%s(%u)", (unsigned)(model - root),
|
||||
contentTypeName(model->type), (unsigned int)model->type,
|
||||
contentQuantName(model->quant), (unsigned int)model->quant);
|
||||
if (model->name) {
|
||||
printf(", name=\"%" XML_FMT_STR "\"", model->name);
|
||||
} else {
|
||||
printf(", name=NULL");
|
||||
}
|
||||
printf(", numchildren=%d", model->numchildren);
|
||||
printf(", numchildren=%u", model->numchildren);
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
|
||||
@@ -139,7 +139,4 @@
|
||||
/* Define to `long int' if <sys/types.h> does not define. */
|
||||
#undef off_t
|
||||
|
||||
/* Define to `unsigned int' if <sys/types.h> does not define. */
|
||||
#undef size_t
|
||||
|
||||
#endif // ndef EXPAT_CONFIG_H
|
||||
@@ -7,6 +7,7 @@
|
||||
# |_| XML parser
|
||||
#
|
||||
# Copyright (c) 2019-2022 Sebastian Pipping <[email protected]>
|
||||
# Copyright (c) 2024 Dag-Erling Smørgrav <[email protected]>
|
||||
# Licensed under the MIT license:
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining
|
||||
@@ -32,10 +33,10 @@ set -e
|
||||
|
||||
filename="${1:-tests/xmltest.log}"
|
||||
|
||||
dos2unix "${filename}"
|
||||
|
||||
tempfile="$(mktemp)"
|
||||
sed \
|
||||
sed -i.bak \
|
||||
-e '# convert DOS line endings to Unix without resorting to dos2unix' \
|
||||
-e $'s/\r//' \
|
||||
\
|
||||
-e 's/^wine: Call .* msvcrt\.dll\._wperror, aborting$/ibm49i02.dtd: No such file or directory/' \
|
||||
\
|
||||
-e '/^wine: /d' \
|
||||
@@ -46,5 +47,4 @@ sed \
|
||||
-e '/^wine client error:/d' \
|
||||
-e '/^In ibm\/invalid\/P49\/: Unhandled exception: unimplemented .\+/d' \
|
||||
\
|
||||
"${filename}" > "${tempfile}"
|
||||
mv "${tempfile}" "${filename}"
|
||||
"${filename}"
|
||||
@@ -0,0 +1,464 @@
|
||||
/*
|
||||
__ __ _
|
||||
___\ \/ /_ __ __ _| |_
|
||||
/ _ \\ /| '_ \ / _` | __|
|
||||
| __// \| |_) | (_| | |_
|
||||
\___/_/\_\ .__/ \__,_|\__|
|
||||
|_| XML parser
|
||||
|
||||
Copyright (c) 2022 Mark Brand <markbrand@google.com>
|
||||
Copyright (c) 2025 Sebastian Pipping <sebastian@pipping.org>
|
||||
Licensed under the MIT license:
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to permit
|
||||
persons to whom the Software is furnished to do so, subject to the
|
||||
following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included
|
||||
in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
|
||||
NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
||||
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||||
OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
||||
USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#if defined(NDEBUG)
|
||||
# undef NDEBUG // because checks below rely on assert(...)
|
||||
#endif
|
||||
|
||||
#include <assert.h>
|
||||
#include <stdint.h>
|
||||
#include <vector>
|
||||
|
||||
#include "expat.h"
|
||||
#include "xml_lpm_fuzzer.pb.h"
|
||||
#include "src/libfuzzer/libfuzzer_macro.h"
|
||||
|
||||
static const char *g_encoding = nullptr;
|
||||
static const char *g_external_entity = nullptr;
|
||||
static size_t g_external_entity_size = 0;
|
||||
|
||||
void
|
||||
SetEncoding(const xml_lpm_fuzzer::Encoding &e) {
|
||||
switch (e) {
|
||||
case xml_lpm_fuzzer::Encoding::UTF8:
|
||||
g_encoding = "UTF-8";
|
||||
break;
|
||||
|
||||
case xml_lpm_fuzzer::Encoding::UTF16:
|
||||
g_encoding = "UTF-16";
|
||||
break;
|
||||
|
||||
case xml_lpm_fuzzer::Encoding::ISO88591:
|
||||
g_encoding = "ISO-8859-1";
|
||||
break;
|
||||
|
||||
case xml_lpm_fuzzer::Encoding::ASCII:
|
||||
g_encoding = "US-ASCII";
|
||||
break;
|
||||
|
||||
case xml_lpm_fuzzer::Encoding::NONE:
|
||||
g_encoding = NULL;
|
||||
break;
|
||||
|
||||
default:
|
||||
g_encoding = "UNKNOWN";
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static int g_allocation_count = 0;
|
||||
static std::vector<int> g_fail_allocations = {};
|
||||
|
||||
void *
|
||||
MallocHook(size_t size) {
|
||||
g_allocation_count += 1;
|
||||
for (auto index : g_fail_allocations) {
|
||||
if (index == g_allocation_count) {
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
return malloc(size);
|
||||
}
|
||||
|
||||
void *
|
||||
ReallocHook(void *ptr, size_t size) {
|
||||
g_allocation_count += 1;
|
||||
for (auto index : g_fail_allocations) {
|
||||
if (index == g_allocation_count) {
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
return realloc(ptr, size);
|
||||
}
|
||||
|
||||
void
|
||||
FreeHook(void *ptr) {
|
||||
free(ptr);
|
||||
}
|
||||
|
||||
XML_Memory_Handling_Suite memory_handling_suite
|
||||
= {MallocHook, ReallocHook, FreeHook};
|
||||
|
||||
void InitializeParser(XML_Parser parser);
|
||||
|
||||
// We want a parse function that supports resumption, so that we can cover the
|
||||
// suspend/resume code.
|
||||
enum XML_Status
|
||||
Parse(XML_Parser parser, const char *input, int input_len, int is_final) {
|
||||
enum XML_Status status = XML_Parse(parser, input, input_len, is_final);
|
||||
while (status == XML_STATUS_SUSPENDED) {
|
||||
status = XML_ResumeParser(parser);
|
||||
}
|
||||
return status;
|
||||
}
|
||||
|
||||
// When the fuzzer is compiled with instrumentation such as ASan, then the
|
||||
// accesses in TouchString will fault if they access invalid memory (ie. detect
|
||||
// either a use-after-free or buffer-overflow). By calling TouchString in each
|
||||
// of the callbacks, we can check that the arguments meet the API specifications
|
||||
// in terms of length/null-termination. no_optimize is used to ensure that the
|
||||
// compiler has to emit actual memory reads, instead of removing them.
|
||||
static volatile size_t no_optimize = 0;
|
||||
static void
|
||||
TouchString(const XML_Char *ptr, int len = -1) {
|
||||
if (! ptr) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (len == -1) {
|
||||
for (XML_Char value = *ptr++; value; value = *ptr++) {
|
||||
no_optimize += value;
|
||||
}
|
||||
} else {
|
||||
for (int i = 0; i < len; ++i) {
|
||||
no_optimize += ptr[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
TouchNodeAndRecurse(XML_Content *content) {
|
||||
switch (content->type) {
|
||||
case XML_CTYPE_EMPTY:
|
||||
case XML_CTYPE_ANY:
|
||||
assert(content->quant == XML_CQUANT_NONE);
|
||||
assert(content->name == NULL);
|
||||
assert(content->numchildren == 0);
|
||||
assert(content->children == NULL);
|
||||
break;
|
||||
|
||||
case XML_CTYPE_MIXED:
|
||||
assert(content->quant == XML_CQUANT_NONE
|
||||
|| content->quant == XML_CQUANT_REP);
|
||||
assert(content->name == NULL);
|
||||
for (unsigned int i = 0; i < content->numchildren; ++i) {
|
||||
assert(content->children[i].type == XML_CTYPE_NAME);
|
||||
assert(content->children[i].quant == XML_CQUANT_NONE);
|
||||
assert(content->children[i].numchildren == 0);
|
||||
assert(content->children[i].children == NULL);
|
||||
TouchString(content->children[i].name);
|
||||
}
|
||||
break;
|
||||
|
||||
case XML_CTYPE_NAME:
|
||||
assert((content->quant == XML_CQUANT_NONE)
|
||||
|| (content->quant == XML_CQUANT_OPT)
|
||||
|| (content->quant == XML_CQUANT_REP)
|
||||
|| (content->quant == XML_CQUANT_PLUS));
|
||||
assert(content->numchildren == 0);
|
||||
assert(content->children == NULL);
|
||||
TouchString(content->name);
|
||||
break;
|
||||
|
||||
case XML_CTYPE_CHOICE:
|
||||
case XML_CTYPE_SEQ:
|
||||
assert((content->quant == XML_CQUANT_NONE)
|
||||
|| (content->quant == XML_CQUANT_OPT)
|
||||
|| (content->quant == XML_CQUANT_REP)
|
||||
|| (content->quant == XML_CQUANT_PLUS));
|
||||
assert(content->name == NULL);
|
||||
for (unsigned int i = 0; i < content->numchildren; ++i) {
|
||||
TouchNodeAndRecurse(&content->children[i]);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
assert(false);
|
||||
}
|
||||
}
|
||||
|
||||
static void XMLCALL
|
||||
ElementDeclHandler(void *userData, const XML_Char *name, XML_Content *model) {
|
||||
TouchString(name);
|
||||
TouchNodeAndRecurse(model);
|
||||
XML_FreeContentModel((XML_Parser)userData, model);
|
||||
}
|
||||
|
||||
static void XMLCALL
|
||||
AttlistDeclHandler(void *userData, const XML_Char *elname,
|
||||
const XML_Char *attname, const XML_Char *atttype,
|
||||
const XML_Char *dflt, int isrequired) {
|
||||
(void)userData;
|
||||
TouchString(elname);
|
||||
TouchString(attname);
|
||||
TouchString(atttype);
|
||||
TouchString(dflt);
|
||||
(void)isrequired;
|
||||
}
|
||||
|
||||
static void XMLCALL
|
||||
XmlDeclHandler(void *userData, const XML_Char *version,
|
||||
const XML_Char *encoding, int standalone) {
|
||||
(void)userData;
|
||||
TouchString(version);
|
||||
TouchString(encoding);
|
||||
(void)standalone;
|
||||
}
|
||||
|
||||
static void XMLCALL
|
||||
StartElementHandler(void *userData, const XML_Char *name,
|
||||
const XML_Char **atts) {
|
||||
(void)userData;
|
||||
TouchString(name);
|
||||
for (size_t i = 0; atts[i] != NULL; ++i) {
|
||||
TouchString(atts[i]);
|
||||
}
|
||||
}
|
||||
|
||||
static void XMLCALL
|
||||
EndElementHandler(void *userData, const XML_Char *name) {
|
||||
(void)userData;
|
||||
TouchString(name);
|
||||
}
|
||||
|
||||
static void XMLCALL
|
||||
CharacterDataHandler(void *userData, const XML_Char *s, int len) {
|
||||
(void)userData;
|
||||
TouchString(s, len);
|
||||
}
|
||||
|
||||
static void XMLCALL
|
||||
ProcessingInstructionHandler(void *userData, const XML_Char *target,
|
||||
const XML_Char *data) {
|
||||
(void)userData;
|
||||
TouchString(target);
|
||||
TouchString(data);
|
||||
}
|
||||
|
||||
static void XMLCALL
|
||||
CommentHandler(void *userData, const XML_Char *data) {
|
||||
TouchString(data);
|
||||
// Use the comment handler to trigger parser suspend, so that we can get
|
||||
// coverage of that code.
|
||||
XML_StopParser((XML_Parser)userData, XML_TRUE);
|
||||
}
|
||||
|
||||
static void XMLCALL
|
||||
StartCdataSectionHandler(void *userData) {
|
||||
(void)userData;
|
||||
}
|
||||
|
||||
static void XMLCALL
|
||||
EndCdataSectionHandler(void *userData) {
|
||||
(void)userData;
|
||||
}
|
||||
|
||||
static void XMLCALL
|
||||
DefaultHandler(void *userData, const XML_Char *s, int len) {
|
||||
(void)userData;
|
||||
TouchString(s, len);
|
||||
}
|
||||
|
||||
static void XMLCALL
|
||||
StartDoctypeDeclHandler(void *userData, const XML_Char *doctypeName,
|
||||
const XML_Char *sysid, const XML_Char *pubid,
|
||||
int has_internal_subset) {
|
||||
(void)userData;
|
||||
TouchString(doctypeName);
|
||||
TouchString(sysid);
|
||||
TouchString(pubid);
|
||||
(void)has_internal_subset;
|
||||
}
|
||||
|
||||
static void XMLCALL
|
||||
EndDoctypeDeclHandler(void *userData) {
|
||||
(void)userData;
|
||||
}
|
||||
|
||||
static void XMLCALL
|
||||
EntityDeclHandler(void *userData, const XML_Char *entityName,
|
||||
int is_parameter_entity, const XML_Char *value,
|
||||
int value_length, const XML_Char *base,
|
||||
const XML_Char *systemId, const XML_Char *publicId,
|
||||
const XML_Char *notationName) {
|
||||
(void)userData;
|
||||
TouchString(entityName);
|
||||
(void)is_parameter_entity;
|
||||
TouchString(value, value_length);
|
||||
TouchString(base);
|
||||
TouchString(systemId);
|
||||
TouchString(publicId);
|
||||
TouchString(notationName);
|
||||
}
|
||||
|
||||
static void XMLCALL
|
||||
NotationDeclHandler(void *userData, const XML_Char *notationName,
|
||||
const XML_Char *base, const XML_Char *systemId,
|
||||
const XML_Char *publicId) {
|
||||
(void)userData;
|
||||
TouchString(notationName);
|
||||
TouchString(base);
|
||||
TouchString(systemId);
|
||||
TouchString(publicId);
|
||||
}
|
||||
|
||||
static void XMLCALL
|
||||
StartNamespaceDeclHandler(void *userData, const XML_Char *prefix,
|
||||
const XML_Char *uri) {
|
||||
(void)userData;
|
||||
TouchString(prefix);
|
||||
TouchString(uri);
|
||||
}
|
||||
|
||||
static void XMLCALL
|
||||
EndNamespaceDeclHandler(void *userData, const XML_Char *prefix) {
|
||||
(void)userData;
|
||||
TouchString(prefix);
|
||||
}
|
||||
|
||||
static int XMLCALL
|
||||
NotStandaloneHandler(void *userData) {
|
||||
(void)userData;
|
||||
return XML_STATUS_OK;
|
||||
}
|
||||
|
||||
static int XMLCALL
|
||||
ExternalEntityRefHandler(XML_Parser parser, const XML_Char *context,
|
||||
const XML_Char *base, const XML_Char *systemId,
|
||||
const XML_Char *publicId) {
|
||||
int rc = XML_STATUS_ERROR;
|
||||
TouchString(context);
|
||||
TouchString(base);
|
||||
TouchString(systemId);
|
||||
TouchString(publicId);
|
||||
|
||||
if (g_external_entity) {
|
||||
XML_Parser ext_parser
|
||||
= XML_ExternalEntityParserCreate(parser, context, g_encoding);
|
||||
rc = Parse(ext_parser, g_external_entity, g_external_entity_size, 1);
|
||||
XML_ParserFree(ext_parser);
|
||||
}
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
static void XMLCALL
|
||||
SkippedEntityHandler(void *userData, const XML_Char *entityName,
|
||||
int is_parameter_entity) {
|
||||
(void)userData;
|
||||
TouchString(entityName);
|
||||
(void)is_parameter_entity;
|
||||
}
|
||||
|
||||
static int XMLCALL
|
||||
UnknownEncodingHandler(void *encodingHandlerData, const XML_Char *name,
|
||||
XML_Encoding *info) {
|
||||
(void)encodingHandlerData;
|
||||
TouchString(name);
|
||||
(void)info;
|
||||
return XML_STATUS_ERROR;
|
||||
}
|
||||
|
||||
void
|
||||
InitializeParser(XML_Parser parser) {
|
||||
XML_SetUserData(parser, (void *)parser);
|
||||
XML_SetHashSalt(parser, 0x41414141);
|
||||
XML_SetParamEntityParsing(parser, XML_PARAM_ENTITY_PARSING_ALWAYS);
|
||||
|
||||
XML_SetElementDeclHandler(parser, ElementDeclHandler);
|
||||
XML_SetAttlistDeclHandler(parser, AttlistDeclHandler);
|
||||
XML_SetXmlDeclHandler(parser, XmlDeclHandler);
|
||||
XML_SetElementHandler(parser, StartElementHandler, EndElementHandler);
|
||||
XML_SetCharacterDataHandler(parser, CharacterDataHandler);
|
||||
XML_SetProcessingInstructionHandler(parser, ProcessingInstructionHandler);
|
||||
XML_SetCommentHandler(parser, CommentHandler);
|
||||
XML_SetCdataSectionHandler(parser, StartCdataSectionHandler,
|
||||
EndCdataSectionHandler);
|
||||
// XML_SetDefaultHandler disables entity expansion
|
||||
XML_SetDefaultHandlerExpand(parser, DefaultHandler);
|
||||
XML_SetDoctypeDeclHandler(parser, StartDoctypeDeclHandler,
|
||||
EndDoctypeDeclHandler);
|
||||
// Note: This is mutually exclusive with XML_SetUnparsedEntityDeclHandler,
|
||||
// and there isn't any significant code change between the two.
|
||||
XML_SetEntityDeclHandler(parser, EntityDeclHandler);
|
||||
XML_SetNotationDeclHandler(parser, NotationDeclHandler);
|
||||
XML_SetNamespaceDeclHandler(parser, StartNamespaceDeclHandler,
|
||||
EndNamespaceDeclHandler);
|
||||
XML_SetNotStandaloneHandler(parser, NotStandaloneHandler);
|
||||
XML_SetExternalEntityRefHandler(parser, ExternalEntityRefHandler);
|
||||
XML_SetSkippedEntityHandler(parser, SkippedEntityHandler);
|
||||
XML_SetUnknownEncodingHandler(parser, UnknownEncodingHandler, (void *)parser);
|
||||
}
|
||||
|
||||
DEFINE_TEXT_PROTO_FUZZER(const xml_lpm_fuzzer::Testcase &testcase) {
|
||||
g_external_entity = nullptr;
|
||||
|
||||
if (! testcase.actions_size()) {
|
||||
return;
|
||||
}
|
||||
|
||||
g_allocation_count = 0;
|
||||
g_fail_allocations.clear();
|
||||
for (int i = 0; i < testcase.fail_allocations_size(); ++i) {
|
||||
g_fail_allocations.push_back(testcase.fail_allocations(i));
|
||||
}
|
||||
|
||||
SetEncoding(testcase.encoding());
|
||||
XML_Parser parser
|
||||
= XML_ParserCreate_MM(g_encoding, &memory_handling_suite, "|");
|
||||
InitializeParser(parser);
|
||||
|
||||
for (int i = 0; i < testcase.actions_size(); ++i) {
|
||||
const auto &action = testcase.actions(i);
|
||||
switch (action.action_case()) {
|
||||
case xml_lpm_fuzzer::Action::kChunk:
|
||||
if (XML_STATUS_ERROR
|
||||
== Parse(parser, action.chunk().data(), action.chunk().size(), 0)) {
|
||||
// Force a reset after parse error.
|
||||
XML_ParserReset(parser, g_encoding);
|
||||
InitializeParser(parser);
|
||||
}
|
||||
break;
|
||||
|
||||
case xml_lpm_fuzzer::Action::kLastChunk:
|
||||
Parse(parser, action.last_chunk().data(), action.last_chunk().size(), 1);
|
||||
XML_ParserReset(parser, g_encoding);
|
||||
InitializeParser(parser);
|
||||
break;
|
||||
|
||||
case xml_lpm_fuzzer::Action::kReset:
|
||||
XML_ParserReset(parser, g_encoding);
|
||||
InitializeParser(parser);
|
||||
break;
|
||||
|
||||
case xml_lpm_fuzzer::Action::kExternalEntity:
|
||||
g_external_entity = action.external_entity().data();
|
||||
g_external_entity_size = action.external_entity().size();
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
XML_ParserFree(parser);
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
/*
|
||||
__ __ _
|
||||
___\ \/ /_ __ __ _| |_
|
||||
/ _ \\ /| '_ \ / _` | __|
|
||||
| __// \| |_) | (_| | |_
|
||||
\___/_/\_\ .__/ \__,_|\__|
|
||||
|_| XML parser
|
||||
|
||||
Copyright (c) 2022 Mark Brand <[email protected]>
|
||||
Copyright (c) 2025 Sebastian Pipping <[email protected]>
|
||||
Licensed under the MIT license:
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to permit
|
||||
persons to whom the Software is furnished to do so, subject to the
|
||||
following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included
|
||||
in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
|
||||
NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
||||
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||||
OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
||||
USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
syntax = "proto2";
|
||||
package xml_lpm_fuzzer;
|
||||
|
||||
enum Encoding {
|
||||
UTF8 = 0;
|
||||
UTF16 = 1;
|
||||
ISO88591 = 2;
|
||||
ASCII = 3;
|
||||
UNKNOWN = 4;
|
||||
NONE = 5;
|
||||
}
|
||||
|
||||
message Action {
|
||||
oneof action {
|
||||
string chunk = 1;
|
||||
string last_chunk = 2;
|
||||
bool reset = 3;
|
||||
string external_entity = 4;
|
||||
}
|
||||
}
|
||||
|
||||
message Testcase {
|
||||
required Encoding encoding = 1;
|
||||
repeated Action actions = 2;
|
||||
repeated int32 fail_allocations = 3;
|
||||
}
|
||||
@@ -5,7 +5,7 @@
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
# \___/_/\_\ .__/ \__,_|\__|
|
||||
# |_| XML parser
|
||||
#
|
||||
# Copyright (c) 2017-2022 Sebastian Pipping <[email protected]>
|
||||
# Copyright (c) 2017-2024 Sebastian Pipping <[email protected]>
|
||||
# Copyright (c) 2017 Tomasz Kłoczko <[email protected]>
|
||||
# Copyright (c) 2019 David Loffredo <[email protected]>
|
||||
# Licensed under the MIT license:
|
||||
@@ -36,7 +36,9 @@ include_HEADERS = \
|
||||
expat_external.h
|
||||
|
||||
lib_LTLIBRARIES = libexpat.la
|
||||
noinst_LTLIBRARIES = libexpatinternal.la
|
||||
if WITH_TESTS
|
||||
noinst_LTLIBRARIES = libtestpat.la
|
||||
endif
|
||||
|
||||
libexpat_la_LDFLAGS = \
|
||||
@AM_LDFLAGS@ \
|
||||
@@ -44,17 +46,16 @@ libexpat_la_LDFLAGS = \
|
||||
-no-undefined \
|
||||
-version-info @LIBCURRENT@:@LIBREVISION@:@LIBAGE@
|
||||
|
||||
libexpat_la_SOURCES =
|
||||
|
||||
# This layer of indirection allows
|
||||
# the test suite to access internal symbols
|
||||
# despite compiling with -fvisibility=hidden
|
||||
libexpatinternal_la_SOURCES = \
|
||||
libexpat_la_SOURCES = \
|
||||
xmlparse.c \
|
||||
xmltok.c \
|
||||
xmlrole.c
|
||||
|
||||
libexpat_la_LIBADD = libexpatinternal.la
|
||||
if WITH_TESTS
|
||||
libtestpat_la_CPPFLAGS = -DXML_TESTING
|
||||
|
||||
libtestpat_la_SOURCES = $(libexpat_la_SOURCES)
|
||||
endif
|
||||
|
||||
doc_DATA = \
|
||||
../AUTHORS \
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
# \___/_/\_\ .__/ \__,_|\__|
|
||||
# |_| XML parser
|
||||
#
|
||||
# Copyright (c) 2017-2022 Sebastian Pipping <[email protected]>
|
||||
# Copyright (c) 2017-2024 Sebastian Pipping <[email protected]>
|
||||
# Copyright (c) 2017 Tomasz Kłoczko <[email protected]>
|
||||
# Copyright (c) 2019 David Loffredo <[email protected]>
|
||||
# Licensed under the MIT license:
|
||||
@@ -176,8 +176,8 @@ am__uninstall_files_from_dir = { \
|
||||
am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(docdir)" \
|
||||
"$(DESTDIR)$(includedir)"
|
||||
LTLIBRARIES = $(lib_LTLIBRARIES) $(noinst_LTLIBRARIES)
|
||||
libexpat_la_DEPENDENCIES = libexpatinternal.la
|
||||
am_libexpat_la_OBJECTS =
|
||||
libexpat_la_LIBADD =
|
||||
am_libexpat_la_OBJECTS = xmlparse.lo xmltok.lo xmlrole.lo
|
||||
libexpat_la_OBJECTS = $(am_libexpat_la_OBJECTS)
|
||||
AM_V_lt = $(am__v_lt_@AM_V@)
|
||||
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
|
||||
@@ -186,9 +186,13 @@ am__v_lt_1 =
|
||||
libexpat_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
|
||||
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
|
||||
$(libexpat_la_LDFLAGS) $(LDFLAGS) -o $@
|
||||
libexpatinternal_la_LIBADD =
|
||||
am_libexpatinternal_la_OBJECTS = xmlparse.lo xmltok.lo xmlrole.lo
|
||||
libexpatinternal_la_OBJECTS = $(am_libexpatinternal_la_OBJECTS)
|
||||
libtestpat_la_LIBADD =
|
||||
am__libtestpat_la_SOURCES_DIST = xmlparse.c xmltok.c xmlrole.c
|
||||
am__objects_1 = libtestpat_la-xmlparse.lo libtestpat_la-xmltok.lo \
|
||||
libtestpat_la-xmlrole.lo
|
||||
@WITH_TESTS_TRUE@am_libtestpat_la_OBJECTS = $(am__objects_1)
|
||||
libtestpat_la_OBJECTS = $(am_libtestpat_la_OBJECTS)
|
||||
@WITH_TESTS_TRUE@am_libtestpat_la_rpath =
|
||||
AM_V_P = $(am__v_P_@AM_V@)
|
||||
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
|
||||
am__v_P_0 = false
|
||||
@@ -204,8 +208,10 @@ am__v_at_1 =
|
||||
DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
|
||||
depcomp = $(SHELL) $(top_srcdir)/conftools/depcomp
|
||||
am__maybe_remake_depfiles = depfiles
|
||||
am__depfiles_remade = ./$(DEPDIR)/xmlparse.Plo ./$(DEPDIR)/xmlrole.Plo \
|
||||
./$(DEPDIR)/xmltok.Plo
|
||||
am__depfiles_remade = ./$(DEPDIR)/libtestpat_la-xmlparse.Plo \
|
||||
./$(DEPDIR)/libtestpat_la-xmlrole.Plo \
|
||||
./$(DEPDIR)/libtestpat_la-xmltok.Plo ./$(DEPDIR)/xmlparse.Plo \
|
||||
./$(DEPDIR)/xmlrole.Plo ./$(DEPDIR)/xmltok.Plo
|
||||
am__mv = mv -f
|
||||
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
|
||||
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
||||
@@ -225,8 +231,9 @@ AM_V_CCLD = $(am__v_CCLD_@AM_V@)
|
||||
am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
|
||||
am__v_CCLD_0 = @echo " CCLD " $@;
|
||||
am__v_CCLD_1 =
|
||||
SOURCES = $(libexpat_la_SOURCES) $(libexpatinternal_la_SOURCES)
|
||||
DIST_SOURCES = $(libexpat_la_SOURCES) $(libexpatinternal_la_SOURCES)
|
||||
SOURCES = $(libexpat_la_SOURCES) $(libtestpat_la_SOURCES)
|
||||
DIST_SOURCES = $(libexpat_la_SOURCES) \
|
||||
$(am__libtestpat_la_SOURCES_DIST)
|
||||
am__can_run_installinfo = \
|
||||
case $$AM_UPDATE_INFO_DIR in \
|
||||
n|no|NO) false;; \
|
||||
@@ -344,6 +351,7 @@ RANLIB = @RANLIB@
|
||||
SED = @SED@
|
||||
SET_MAKE = @SET_MAKE@
|
||||
SHELL = @SHELL@
|
||||
SIZEOF_VOID_P = @SIZEOF_VOID_P@
|
||||
SO_MAJOR = @SO_MAJOR@
|
||||
SO_MINOR = @SO_MINOR@
|
||||
SO_PATCH = @SO_PATCH@
|
||||
@@ -357,7 +365,6 @@ ac_ct_AR = @ac_ct_AR@
|
||||
ac_ct_CC = @ac_ct_CC@
|
||||
ac_ct_CXX = @ac_ct_CXX@
|
||||
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
|
||||
ac_cv_sizeof_void_p = @ac_cv_sizeof_void_p@
|
||||
am__include = @am__include@
|
||||
am__leading_dot = @am__leading_dot@
|
||||
am__quote = @am__quote@
|
||||
@@ -410,24 +417,20 @@ include_HEADERS = \
|
||||
expat_external.h
|
||||
|
||||
lib_LTLIBRARIES = libexpat.la
|
||||
noinst_LTLIBRARIES = libexpatinternal.la
|
||||
@WITH_TESTS_TRUE@noinst_LTLIBRARIES = libtestpat.la
|
||||
libexpat_la_LDFLAGS = \
|
||||
@AM_LDFLAGS@ \
|
||||
@LIBM@ \
|
||||
-no-undefined \
|
||||
-version-info @LIBCURRENT@:@LIBREVISION@:@LIBAGE@
|
||||
|
||||
libexpat_la_SOURCES =
|
||||
|
||||
# This layer of indirection allows
|
||||
# the test suite to access internal symbols
|
||||
# despite compiling with -fvisibility=hidden
|
||||
libexpatinternal_la_SOURCES = \
|
||||
libexpat_la_SOURCES = \
|
||||
xmlparse.c \
|
||||
xmltok.c \
|
||||
xmlrole.c
|
||||
|
||||
libexpat_la_LIBADD = libexpatinternal.la
|
||||
@WITH_TESTS_TRUE@libtestpat_la_CPPFLAGS = -DXML_TESTING
|
||||
@WITH_TESTS_TRUE@libtestpat_la_SOURCES = $(libexpat_la_SOURCES)
|
||||
doc_DATA = \
|
||||
../AUTHORS \
|
||||
../Changes
|
||||
@@ -534,8 +537,8 @@ clean-noinstLTLIBRARIES:
|
||||
libexpat.la: $(libexpat_la_OBJECTS) $(libexpat_la_DEPENDENCIES) $(EXTRA_libexpat_la_DEPENDENCIES)
|
||||
$(AM_V_CCLD)$(libexpat_la_LINK) -rpath $(libdir) $(libexpat_la_OBJECTS) $(libexpat_la_LIBADD) $(LIBS)
|
||||
|
||||
libexpatinternal.la: $(libexpatinternal_la_OBJECTS) $(libexpatinternal_la_DEPENDENCIES) $(EXTRA_libexpatinternal_la_DEPENDENCIES)
|
||||
$(AM_V_CCLD)$(LINK) $(libexpatinternal_la_OBJECTS) $(libexpatinternal_la_LIBADD) $(LIBS)
|
||||
libtestpat.la: $(libtestpat_la_OBJECTS) $(libtestpat_la_DEPENDENCIES) $(EXTRA_libtestpat_la_DEPENDENCIES)
|
||||
$(AM_V_CCLD)$(LINK) $(am_libtestpat_la_rpath) $(libtestpat_la_OBJECTS) $(libtestpat_la_LIBADD) $(LIBS)
|
||||
|
||||
mostlyclean-compile:
|
||||
-rm -f *.$(OBJEXT)
|
||||
@@ -543,6 +546,9 @@ mostlyclean-compile:
|
||||
distclean-compile:
|
||||
-rm -f *.tab.c
|
||||
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtestpat_la-xmlparse.Plo@am__quote@ # am--include-marker
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtestpat_la-xmlrole.Plo@am__quote@ # am--include-marker
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtestpat_la-xmltok.Plo@am__quote@ # am--include-marker
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xmlparse.Plo@am__quote@ # am--include-marker
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xmlrole.Plo@am__quote@ # am--include-marker
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xmltok.Plo@am__quote@ # am--include-marker
|
||||
@@ -574,6 +580,27 @@ am--depfiles: $(am__depfiles_remade)
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
|
||||
|
||||
libtestpat_la-xmlparse.lo: xmlparse.c
|
||||
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtestpat_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libtestpat_la-xmlparse.lo -MD -MP -MF $(DEPDIR)/libtestpat_la-xmlparse.Tpo -c -o libtestpat_la-xmlparse.lo `test -f 'xmlparse.c' || echo '$(srcdir)/'`xmlparse.c
|
||||
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libtestpat_la-xmlparse.Tpo $(DEPDIR)/libtestpat_la-xmlparse.Plo
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xmlparse.c' object='libtestpat_la-xmlparse.lo' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtestpat_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libtestpat_la-xmlparse.lo `test -f 'xmlparse.c' || echo '$(srcdir)/'`xmlparse.c
|
||||
|
||||
libtestpat_la-xmltok.lo: xmltok.c
|
||||
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtestpat_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libtestpat_la-xmltok.lo -MD -MP -MF $(DEPDIR)/libtestpat_la-xmltok.Tpo -c -o libtestpat_la-xmltok.lo `test -f 'xmltok.c' || echo '$(srcdir)/'`xmltok.c
|
||||
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libtestpat_la-xmltok.Tpo $(DEPDIR)/libtestpat_la-xmltok.Plo
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xmltok.c' object='libtestpat_la-xmltok.lo' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtestpat_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libtestpat_la-xmltok.lo `test -f 'xmltok.c' || echo '$(srcdir)/'`xmltok.c
|
||||
|
||||
libtestpat_la-xmlrole.lo: xmlrole.c
|
||||
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtestpat_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libtestpat_la-xmlrole.lo -MD -MP -MF $(DEPDIR)/libtestpat_la-xmlrole.Tpo -c -o libtestpat_la-xmlrole.lo `test -f 'xmlrole.c' || echo '$(srcdir)/'`xmlrole.c
|
||||
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libtestpat_la-xmlrole.Tpo $(DEPDIR)/libtestpat_la-xmlrole.Plo
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xmlrole.c' object='libtestpat_la-xmlrole.lo' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libtestpat_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libtestpat_la-xmlrole.lo `test -f 'xmlrole.c' || echo '$(srcdir)/'`xmlrole.c
|
||||
|
||||
mostlyclean-libtool:
|
||||
-rm -f *.lo
|
||||
|
||||
@@ -749,7 +776,10 @@ clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
|
||||
clean-noinstLTLIBRARIES mostlyclean-am
|
||||
|
||||
distclean: distclean-am
|
||||
-rm -f ./$(DEPDIR)/xmlparse.Plo
|
||||
-rm -f ./$(DEPDIR)/libtestpat_la-xmlparse.Plo
|
||||
-rm -f ./$(DEPDIR)/libtestpat_la-xmlrole.Plo
|
||||
-rm -f ./$(DEPDIR)/libtestpat_la-xmltok.Plo
|
||||
-rm -f ./$(DEPDIR)/xmlparse.Plo
|
||||
-rm -f ./$(DEPDIR)/xmlrole.Plo
|
||||
-rm -f ./$(DEPDIR)/xmltok.Plo
|
||||
-rm -f Makefile
|
||||
@@ -798,7 +828,10 @@ install-ps-am:
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-am
|
||||
-rm -f ./$(DEPDIR)/xmlparse.Plo
|
||||
-rm -f ./$(DEPDIR)/libtestpat_la-xmlparse.Plo
|
||||
-rm -f ./$(DEPDIR)/libtestpat_la-xmlrole.Plo
|
||||
-rm -f ./$(DEPDIR)/libtestpat_la-xmltok.Plo
|
||||
-rm -f ./$(DEPDIR)/xmlparse.Plo
|
||||
-rm -f ./$(DEPDIR)/xmlrole.Plo
|
||||
-rm -f ./$(DEPDIR)/xmltok.Plo
|
||||
-rm -f Makefile
|
||||
|
||||
@@ -11,13 +11,14 @@
|
||||
Copyright (c) 2000-2005 Fred L. Drake, Jr. <fdrake@users.sourceforge.net>
|
||||
Copyright (c) 2001-2002 Greg Stein <gstein@users.sourceforge.net>
|
||||
Copyright (c) 2002-2016 Karl Waclawek <karl@waclawek.net>
|
||||
Copyright (c) 2016-2024 Sebastian Pipping <sebastian@pipping.org>
|
||||
Copyright (c) 2016-2025 Sebastian Pipping <sebastian@pipping.org>
|
||||
Copyright (c) 2016 Cristian Rodríguez <crrodriguez@opensuse.org>
|
||||
Copyright (c) 2016 Thomas Beutlich <tc@tbeu.de>
|
||||
Copyright (c) 2017 Rhodri James <rhodri@wildebeest.org.uk>
|
||||
Copyright (c) 2022 Thijs Schreijer <thijs@thijsschreijer.nl>
|
||||
Copyright (c) 2023 Hanno Böck <hanno@gentoo.org>
|
||||
Copyright (c) 2023 Sony Corporation / Snild Dolkow <snild@sony.com>
|
||||
Copyright (c) 2024 Taichi Haradaguchi <20001722@ymail.ne.jp>
|
||||
Licensed under the MIT license:
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
@@ -129,7 +130,9 @@ enum XML_Error {
|
||||
/* Added in 2.3.0. */
|
||||
XML_ERROR_NO_BUFFER,
|
||||
/* Added in 2.4.0. */
|
||||
XML_ERROR_AMPLIFICATION_LIMIT_BREACH
|
||||
XML_ERROR_AMPLIFICATION_LIMIT_BREACH,
|
||||
/* Added in 2.6.4. */
|
||||
XML_ERROR_NOT_STARTED,
|
||||
};
|
||||
|
||||
enum XML_Content_Type {
|
||||
@@ -1042,7 +1045,7 @@ typedef struct {
|
||||
XMLPARSEAPI(const XML_Feature *)
|
||||
XML_GetFeatureList(void);
|
||||
|
||||
#if XML_GE == 1
|
||||
#if defined(XML_DTD) || (defined(XML_GE) && XML_GE == 1)
|
||||
/* Added in Expat 2.4.0 for XML_DTD defined and
|
||||
* added in Expat 2.6.0 for XML_GE == 1. */
|
||||
XMLPARSEAPI(XML_Bool)
|
||||
@@ -1064,8 +1067,8 @@ XML_SetReparseDeferralEnabled(XML_Parser parser, XML_Bool enabled);
|
||||
See https://semver.org
|
||||
*/
|
||||
#define XML_MAJOR_VERSION 2
|
||||
#define XML_MINOR_VERSION 6
|
||||
#define XML_MICRO_VERSION 0
|
||||
#define XML_MINOR_VERSION 7
|
||||
#define XML_MICRO_VERSION 1
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
@@ -28,10 +28,11 @@
|
||||
Copyright (c) 2002-2003 Fred L. Drake, Jr. <fdrake@users.sourceforge.net>
|
||||
Copyright (c) 2002-2006 Karl Waclawek <karl@waclawek.net>
|
||||
Copyright (c) 2003 Greg Stein <gstein@users.sourceforge.net>
|
||||
Copyright (c) 2016-2023 Sebastian Pipping <sebastian@pipping.org>
|
||||
Copyright (c) 2016-2025 Sebastian Pipping <sebastian@pipping.org>
|
||||
Copyright (c) 2018 Yury Gribov <tetra2005@gmail.com>
|
||||
Copyright (c) 2019 David Loffredo <loffredo@steptools.com>
|
||||
Copyright (c) 2023 Sony Corporation / Snild Dolkow <snild@sony.com>
|
||||
Copyright (c) 2023-2024 Sony Corporation / Snild Dolkow <snild@sony.com>
|
||||
Copyright (c) 2024 Taichi Haradaguchi <20001722@ymail.ne.jp>
|
||||
Licensed under the MIT license:
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
@@ -126,6 +127,9 @@
|
||||
# elif ULONG_MAX == 18446744073709551615u // 2^64-1
|
||||
# define EXPAT_FMT_PTRDIFF_T(midpart) "%" midpart "ld"
|
||||
# define EXPAT_FMT_SIZE_T(midpart) "%" midpart "lu"
|
||||
# elif defined(EMSCRIPTEN) // 32bit mode Emscripten
|
||||
# define EXPAT_FMT_PTRDIFF_T(midpart) "%" midpart "ld"
|
||||
# define EXPAT_FMT_SIZE_T(midpart) "%" midpart "zu"
|
||||
# else
|
||||
# define EXPAT_FMT_PTRDIFF_T(midpart) "%" midpart "d"
|
||||
# define EXPAT_FMT_SIZE_T(midpart) "%" midpart "u"
|
||||
@@ -155,14 +159,20 @@ extern "C" {
|
||||
void _INTERNAL_trim_to_complete_utf8_characters(const char *from,
|
||||
const char **fromLimRef);
|
||||
|
||||
#if XML_GE == 1
|
||||
#if defined(XML_GE) && XML_GE == 1
|
||||
unsigned long long testingAccountingGetCountBytesDirect(XML_Parser parser);
|
||||
unsigned long long testingAccountingGetCountBytesIndirect(XML_Parser parser);
|
||||
const char *unsignedCharToPrintable(unsigned char c);
|
||||
#endif
|
||||
|
||||
extern XML_Bool g_reparseDeferralEnabledDefault; // written ONLY in runtests.c
|
||||
extern unsigned int g_parseAttempts; // used for testing only
|
||||
extern
|
||||
#if ! defined(XML_TESTING)
|
||||
const
|
||||
#endif
|
||||
XML_Bool g_reparseDeferralEnabledDefault; // written ONLY in runtests.c
|
||||
#if defined(XML_TESTING)
|
||||
extern unsigned int g_bytesScanned; // used for testing only
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
@@ -126,8 +126,7 @@
|
||||
| ((uint64_t)((p)[4]) << 32) | ((uint64_t)((p)[5]) << 40) \
|
||||
| ((uint64_t)((p)[6]) << 48) | ((uint64_t)((p)[7]) << 56))
|
||||
|
||||
#define SIPHASH_INITIALIZER \
|
||||
{ 0, 0, 0, 0, {0}, 0, 0 }
|
||||
#define SIPHASH_INITIALIZER {0, 0, 0, 0, {0}, 0, 0}
|
||||
|
||||
struct siphash {
|
||||
uint64_t v0, v1, v2, v3;
|
||||
|
||||
+487
-174
File diff suppressed because it is too large.
Load diff
@@ -6,9 +6,10 @@
|
||||
# \___/_/\_\ .__/ \__,_|\__|
|
||||
# |_| XML parser
|
||||
#
|
||||
# Copyright (c) 2017-2023 Sebastian Pipping <[email protected]>
|
||||
# Copyright (c) 2017-2024 Sebastian Pipping <[email protected]>
|
||||
# Copyright (c) 2017-2022 Rhodri James <[email protected]>
|
||||
# Copyright (c) 2020 Jeffrey Walton <[email protected]>
|
||||
# Copyright (c) 2024 Dag-Erling Smørgrav <[email protected]>
|
||||
# Licensed under the MIT license:
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining
|
||||
@@ -32,7 +33,7 @@
|
||||
|
||||
SUBDIRS = . benchmark
|
||||
|
||||
AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(srcdir)/../lib
|
||||
AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(srcdir)/../lib -DXML_TESTING
|
||||
|
||||
check_PROGRAMS = runtests runtests_cxx
|
||||
TESTS = runtests runtests_cxx
|
||||
@@ -72,8 +73,8 @@ runtests_cxx_SOURCES = \
|
||||
runtests_cxx.cpp \
|
||||
structdata_cxx.cpp
|
||||
|
||||
runtests_LDADD = ../lib/libexpatinternal.la
|
||||
runtests_cxx_LDADD = ../lib/libexpatinternal.la
|
||||
runtests_LDADD = ../lib/libtestpat.la
|
||||
runtests_cxx_LDADD = ../lib/libtestpat.la
|
||||
|
||||
runtests_LDFLAGS = @AM_LDFLAGS@ @LIBM@
|
||||
runtests_cxx_LDFLAGS = @AM_LDFLAGS@ @LIBM@
|
||||
@@ -92,7 +93,7 @@ EXTRA_DIST = \
|
||||
structdata.h \
|
||||
minicheck.h \
|
||||
memcheck.h \
|
||||
README.txt \
|
||||
README.md \
|
||||
udiffer.py \
|
||||
xmltest.log.expected \
|
||||
xmltest.sh
|
||||
@@ -22,9 +22,10 @@
|
||||
# \___/_/\_\ .__/ \__,_|\__|
|
||||
# |_| XML parser
|
||||
#
|
||||
# Copyright (c) 2017-2023 Sebastian Pipping <[email protected]>
|
||||
# Copyright (c) 2017-2024 Sebastian Pipping <[email protected]>
|
||||
# Copyright (c) 2017-2022 Rhodri James <[email protected]>
|
||||
# Copyright (c) 2020 Jeffrey Walton <[email protected]>
|
||||
# Copyright (c) 2024 Dag-Erling Smørgrav <[email protected]>
|
||||
# Licensed under the MIT license:
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining
|
||||
@@ -151,7 +152,7 @@ am_runtests_OBJECTS = acc_tests.$(OBJEXT) alloc_tests.$(OBJEXT) \
|
||||
nsalloc_tests.$(OBJEXT) runtests.$(OBJEXT) \
|
||||
structdata.$(OBJEXT)
|
||||
runtests_OBJECTS = $(am_runtests_OBJECTS)
|
||||
runtests_DEPENDENCIES = ../lib/libexpatinternal.la
|
||||
runtests_DEPENDENCIES = ../lib/libtestpat.la
|
||||
AM_V_lt = $(am__v_lt_@AM_V@)
|
||||
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
|
||||
am__v_lt_0 = --silent
|
||||
@@ -168,7 +169,7 @@ am_runtests_cxx_OBJECTS = acc_tests_cxx.$(OBJEXT) \
|
||||
ns_tests_cxx.$(OBJEXT) runtests_cxx.$(OBJEXT) \
|
||||
structdata_cxx.$(OBJEXT)
|
||||
runtests_cxx_OBJECTS = $(am_runtests_cxx_OBJECTS)
|
||||
runtests_cxx_DEPENDENCIES = ../lib/libexpatinternal.la
|
||||
runtests_cxx_DEPENDENCIES = ../lib/libtestpat.la
|
||||
runtests_cxx_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
|
||||
$(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
|
||||
$(CXXFLAGS) $(runtests_cxx_LDFLAGS) $(LDFLAGS) -o $@
|
||||
@@ -485,7 +486,7 @@ TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \
|
||||
DIST_SUBDIRS = $(SUBDIRS)
|
||||
am__DIST_COMMON = $(srcdir)/Makefile.in \
|
||||
$(top_srcdir)/conftools/depcomp \
|
||||
$(top_srcdir)/conftools/test-driver
|
||||
$(top_srcdir)/conftools/test-driver README.md
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
am__relativize = \
|
||||
dir0=`pwd`; \
|
||||
@@ -515,7 +516,7 @@ am__relativize = \
|
||||
ACLOCAL = @ACLOCAL@
|
||||
AMTAR = @AMTAR@
|
||||
AM_CFLAGS = @AM_CFLAGS@
|
||||
AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(srcdir)/../lib
|
||||
AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(srcdir)/../lib -DXML_TESTING
|
||||
AM_CXXFLAGS = @AM_CXXFLAGS@
|
||||
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
|
||||
AM_LDFLAGS = @AM_LDFLAGS@
|
||||
@@ -602,6 +603,7 @@ RANLIB = @RANLIB@
|
||||
SED = @SED@
|
||||
SET_MAKE = @SET_MAKE@
|
||||
SHELL = @SHELL@
|
||||
SIZEOF_VOID_P = @SIZEOF_VOID_P@
|
||||
SO_MAJOR = @SO_MAJOR@
|
||||
SO_MINOR = @SO_MINOR@
|
||||
SO_PATCH = @SO_PATCH@
|
||||
@@ -615,7 +617,6 @@ ac_ct_AR = @ac_ct_AR@
|
||||
ac_ct_CC = @ac_ct_CC@
|
||||
ac_ct_CXX = @ac_ct_CXX@
|
||||
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
|
||||
ac_cv_sizeof_void_p = @ac_cv_sizeof_void_p@
|
||||
am__include = @am__include@
|
||||
am__leading_dot = @am__leading_dot@
|
||||
am__quote = @am__quote@
|
||||
@@ -698,8 +699,8 @@ runtests_cxx_SOURCES = \
|
||||
runtests_cxx.cpp \
|
||||
structdata_cxx.cpp
|
||||
|
||||
runtests_LDADD = ../lib/libexpatinternal.la
|
||||
runtests_cxx_LDADD = ../lib/libexpatinternal.la
|
||||
runtests_LDADD = ../lib/libtestpat.la
|
||||
runtests_cxx_LDADD = ../lib/libtestpat.la
|
||||
runtests_LDFLAGS = @AM_LDFLAGS@ @LIBM@
|
||||
runtests_cxx_LDFLAGS = @AM_LDFLAGS@ @LIBM@
|
||||
EXTRA_DIST = \
|
||||
@@ -716,7 +717,7 @@ EXTRA_DIST = \
|
||||
structdata.h \
|
||||
minicheck.h \
|
||||
memcheck.h \
|
||||
README.txt \
|
||||
README.md \
|
||||
udiffer.py \
|
||||
xmltest.log.expected \
|
||||
xmltest.sh
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
This directory contains the test suite for Expat. The tests provide
|
||||
general unit testing and regression coverage. The tests are not
|
||||
expected to be useful examples of Expat usage; see the
|
||||
[examples](../examples) directory for that.
|
||||
|
||||
The Expat tests use a partial internal implementation of the
|
||||
[Check](https://libcheck.github.io/check/) unit testing framework for
|
||||
C.
|
||||
|
||||
Expat must be built and, on some platforms, installed, before the
|
||||
tests can be run.
|
||||
@@ -1,13 +0,0 @@
|
||||
This directory contains the (fledgling) test suite for Expat. The
|
||||
tests provide general unit testing and regression coverage. The tests
|
||||
are not expected to be useful examples of Expat usage; see the
|
||||
examples/ directory for that.
|
||||
|
||||
The Expat tests use a partial internal implementation of the "Check"
|
||||
unit testing framework for C. More information on Check can be found at:
|
||||
|
||||
http://check.sourceforge.net/
|
||||
|
||||
Expat must be built and, depending on platform, must be installed, before "make check" can be executed.
|
||||
|
||||
This test suite can all change in a later version.
|
||||
@@ -360,13 +360,16 @@ END_TEST
|
||||
START_TEST(test_helper_unsigned_char_to_printable) {
|
||||
// Smoke test
|
||||
unsigned char uc = 0;
|
||||
for (; uc < (unsigned char)-1; uc++) {
|
||||
for (;; uc++) {
|
||||
set_subtest("char %u", (unsigned)uc);
|
||||
const char *const printable = unsignedCharToPrintable(uc);
|
||||
if (printable == NULL)
|
||||
fail("unsignedCharToPrintable returned NULL");
|
||||
else if (strlen(printable) < (size_t)1)
|
||||
fail("unsignedCharToPrintable returned empty string");
|
||||
if (uc == (unsigned char)-1) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Two concrete samples
|
||||
@@ -378,6 +381,63 @@ START_TEST(test_helper_unsigned_char_to_printable) {
|
||||
fail("unsignedCharToPrintable result mistaken");
|
||||
}
|
||||
END_TEST
|
||||
|
||||
START_TEST(test_amplification_isolated_external_parser) {
|
||||
// NOTE: Length 44 is precisely twice the length of "<!ENTITY a SYSTEM 'b'>"
|
||||
// (22) that is used in function accountingGetCurrentAmplification in
|
||||
// xmlparse.c.
|
||||
// 1.........1.........1.........1.........1..4 => 44
|
||||
const char doc[] = "<!ENTITY % p1 '123456789_123456789_1234567'>";
|
||||
const int docLen = (int)sizeof(doc) - 1;
|
||||
const float maximumToleratedAmplification = 2.0f;
|
||||
|
||||
struct TestCase {
|
||||
int offsetOfThreshold;
|
||||
enum XML_Status expectedStatus;
|
||||
};
|
||||
|
||||
struct TestCase cases[] = {
|
||||
{-2, XML_STATUS_ERROR}, {-1, XML_STATUS_ERROR}, {0, XML_STATUS_ERROR},
|
||||
{+1, XML_STATUS_OK}, {+2, XML_STATUS_OK},
|
||||
};
|
||||
|
||||
for (size_t i = 0; i < sizeof(cases) / sizeof(cases[0]); i++) {
|
||||
const int offsetOfThreshold = cases[i].offsetOfThreshold;
|
||||
const enum XML_Status expectedStatus = cases[i].expectedStatus;
|
||||
const unsigned long long activationThresholdBytes
|
||||
= docLen + offsetOfThreshold;
|
||||
|
||||
set_subtest("offsetOfThreshold=%d, expectedStatus=%d", offsetOfThreshold,
|
||||
expectedStatus);
|
||||
|
||||
XML_Parser parser = XML_ParserCreate(NULL);
|
||||
assert_true(parser != NULL);
|
||||
|
||||
assert_true(XML_SetBillionLaughsAttackProtectionMaximumAmplification(
|
||||
parser, maximumToleratedAmplification)
|
||||
== XML_TRUE);
|
||||
assert_true(XML_SetBillionLaughsAttackProtectionActivationThreshold(
|
||||
parser, activationThresholdBytes)
|
||||
== XML_TRUE);
|
||||
|
||||
XML_Parser ext_parser = XML_ExternalEntityParserCreate(parser, NULL, NULL);
|
||||
assert_true(ext_parser != NULL);
|
||||
|
||||
const enum XML_Status actualStatus
|
||||
= _XML_Parse_SINGLE_BYTES(ext_parser, doc, docLen, XML_TRUE);
|
||||
|
||||
assert_true(actualStatus == expectedStatus);
|
||||
if (actualStatus != XML_STATUS_OK) {
|
||||
assert_true(XML_GetErrorCode(ext_parser)
|
||||
== XML_ERROR_AMPLIFICATION_LIMIT_BREACH);
|
||||
}
|
||||
|
||||
XML_ParserFree(ext_parser);
|
||||
XML_ParserFree(parser);
|
||||
}
|
||||
}
|
||||
END_TEST
|
||||
|
||||
#endif // XML_GE == 1
|
||||
|
||||
void
|
||||
@@ -390,6 +450,8 @@ make_accounting_test_case(Suite *s) {
|
||||
tcase_add_test(tc_accounting, test_accounting_precision);
|
||||
tcase_add_test(tc_accounting, test_billion_laughs_attack_protection_api);
|
||||
tcase_add_test(tc_accounting, test_helper_unsigned_char_to_printable);
|
||||
tcase_add_test__ifdef_xml_dtd(tc_accounting,
|
||||
test_amplification_isolated_external_parser);
|
||||
#else
|
||||
UNUSED_P(s);
|
||||
#endif /* XML_GE == 1 */
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
Copyright (c) 2020 Tim Gates <tim.gates@iress.com>
|
||||
Copyright (c) 2021 Donghee Na <donghee.na@python.org>
|
||||
Copyright (c) 2023 Sony Corporation / Snild Dolkow <snild@sony.com>
|
||||
Copyright (c) 2025 Berkay Eren Ürün <berkay.ueruen@siemens.com>
|
||||
Licensed under the MIT license:
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
@@ -450,6 +451,31 @@ START_TEST(test_alloc_internal_entity) {
|
||||
}
|
||||
END_TEST
|
||||
|
||||
START_TEST(test_alloc_parameter_entity) {
|
||||
const char *text = "<!DOCTYPE foo ["
|
||||
"<!ENTITY % param1 \"<!ENTITY internal 'some_text'>\">"
|
||||
"%param1;"
|
||||
"]> <foo>&internal;content</foo>";
|
||||
int i;
|
||||
const int alloc_test_max_repeats = 30;
|
||||
|
||||
for (i = 0; i < alloc_test_max_repeats; i++) {
|
||||
g_allocation_count = i;
|
||||
XML_SetParamEntityParsing(g_parser, XML_PARAM_ENTITY_PARSING_ALWAYS);
|
||||
if (_XML_Parse_SINGLE_BYTES(g_parser, text, (int)strlen(text), XML_TRUE)
|
||||
!= XML_STATUS_ERROR)
|
||||
break;
|
||||
alloc_teardown();
|
||||
alloc_setup();
|
||||
}
|
||||
g_allocation_count = -1;
|
||||
if (i == 0)
|
||||
fail("Parameter entity processed despite duff allocator");
|
||||
if (i == alloc_test_max_repeats)
|
||||
fail("Parameter entity not processed at max allocation count");
|
||||
}
|
||||
END_TEST
|
||||
|
||||
/* Test the robustness against allocation failure of element handling
|
||||
* Based on test_dtd_default_handling().
|
||||
*/
|
||||
@@ -2079,6 +2105,7 @@ make_alloc_test_case(Suite *s) {
|
||||
tcase_add_test__ifdef_xml_dtd(tc_alloc, test_alloc_external_entity);
|
||||
tcase_add_test__ifdef_xml_dtd(tc_alloc, test_alloc_ext_entity_set_encoding);
|
||||
tcase_add_test__ifdef_xml_dtd(tc_alloc, test_alloc_internal_entity);
|
||||
tcase_add_test__ifdef_xml_dtd(tc_alloc, test_alloc_parameter_entity);
|
||||
tcase_add_test__ifdef_xml_dtd(tc_alloc, test_alloc_dtd_default_handling);
|
||||
tcase_add_test(tc_alloc, test_alloc_explicit_encoding);
|
||||
tcase_add_test(tc_alloc, test_alloc_set_base);
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
Copyright (c) 2003 Greg Stein <gstein@users.sourceforge.net>
|
||||
Copyright (c) 2005-2007 Steven Solie <steven@solie.ca>
|
||||
Copyright (c) 2005-2012 Karl Waclawek <karl@waclawek.net>
|
||||
Copyright (c) 2016-2024 Sebastian Pipping <sebastian@pipping.org>
|
||||
Copyright (c) 2016-2025 Sebastian Pipping <sebastian@pipping.org>
|
||||
Copyright (c) 2017-2022 Rhodri James <rhodri@wildebeest.org.uk>
|
||||
Copyright (c) 2017 Joe Orton <jorton@redhat.com>
|
||||
Copyright (c) 2017 José Gutiérrez de la Concha <jose@zeroc.com>
|
||||
@@ -19,6 +19,7 @@
|
||||
Copyright (c) 2020 Tim Gates <tim.gates@iress.com>
|
||||
Copyright (c) 2021 Donghee Na <donghee.na@python.org>
|
||||
Copyright (c) 2023-2024 Sony Corporation / Snild Dolkow <snild@sony.com>
|
||||
Copyright (c) 2024-2025 Berkay Eren Ürün <berkay.ueruen@siemens.com>
|
||||
Licensed under the MIT license:
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
@@ -1191,6 +1192,22 @@ START_TEST(test_not_standalone_handler_accept) {
|
||||
}
|
||||
END_TEST
|
||||
|
||||
START_TEST(test_entity_start_tag_level_greater_than_one) {
|
||||
const char *const text = "<!DOCTYPE t1 [\n"
|
||||
" <!ENTITY e1 'hello'>\n"
|
||||
"]>\n"
|
||||
"<t1>\n"
|
||||
" <t2>&e1;</t2>\n"
|
||||
"</t1>\n";
|
||||
|
||||
XML_Parser parser = XML_ParserCreate(NULL);
|
||||
assert_true(_XML_Parse_SINGLE_BYTES(parser, text, (int)strlen(text),
|
||||
/*isFinal*/ XML_TRUE)
|
||||
== XML_STATUS_OK);
|
||||
XML_ParserFree(parser);
|
||||
}
|
||||
END_TEST
|
||||
|
||||
START_TEST(test_wfc_no_recursive_entity_refs) {
|
||||
const char *text = "<!DOCTYPE doc [\n"
|
||||
" <!ENTITY entity '&entity;'>\n"
|
||||
@@ -1202,6 +1219,136 @@ START_TEST(test_wfc_no_recursive_entity_refs) {
|
||||
}
|
||||
END_TEST
|
||||
|
||||
START_TEST(test_no_indirectly_recursive_entity_refs) {
|
||||
struct TestCase {
|
||||
const char *doc;
|
||||
bool usesParameterEntities;
|
||||
};
|
||||
|
||||
const struct TestCase cases[] = {
|
||||
// general entity + character data
|
||||
{"<!DOCTYPE a [\n"
|
||||
" <!ENTITY e1 '&e2;'>\n"
|
||||
" <!ENTITY e2 '&e1;'>\n"
|
||||
"]><a>&e2;</a>\n",
|
||||
false},
|
||||
|
||||
// general entity + attribute value
|
||||
{"<!DOCTYPE a [\n"
|
||||
" <!ENTITY e1 '&e2;'>\n"
|
||||
" <!ENTITY e2 '&e1;'>\n"
|
||||
"]><a k1='&e2;' />\n",
|
||||
false},
|
||||
|
||||
// parameter entity
|
||||
{"<!DOCTYPE doc [\n"
|
||||
" <!ENTITY % p1 '%p2;'>\n"
|
||||
" <!ENTITY % p2 '%p1;'>\n"
|
||||
" <!ENTITY % define_g \"<!ENTITY g '%p2;'>\">\n"
|
||||
" %define_g;\n"
|
||||
"]>\n"
|
||||
"<doc/>\n",
|
||||
true},
|
||||
};
|
||||
const XML_Bool reset_or_not[] = {XML_TRUE, XML_FALSE};
|
||||
|
||||
for (size_t i = 0; i < sizeof(cases) / sizeof(cases[0]); i++) {
|
||||
for (size_t j = 0; j < sizeof(reset_or_not) / sizeof(reset_or_not[0]);
|
||||
j++) {
|
||||
const XML_Bool reset_wanted = reset_or_not[j];
|
||||
const char *const doc = cases[i].doc;
|
||||
const bool usesParameterEntities = cases[i].usesParameterEntities;
|
||||
|
||||
set_subtest("[%i,reset=%i] %s", (int)i, (int)j, doc);
|
||||
|
||||
#ifdef XML_DTD // both GE and DTD
|
||||
const bool rejection_expected = true;
|
||||
#elif XML_GE == 1 // GE but not DTD
|
||||
const bool rejection_expected = ! usesParameterEntities;
|
||||
#else // neither DTD nor GE
|
||||
const bool rejection_expected = false;
|
||||
#endif
|
||||
|
||||
XML_Parser parser = XML_ParserCreate(NULL);
|
||||
|
||||
#ifdef XML_DTD
|
||||
if (usesParameterEntities) {
|
||||
assert_true(
|
||||
XML_SetParamEntityParsing(parser, XML_PARAM_ENTITY_PARSING_ALWAYS)
|
||||
== 1);
|
||||
}
|
||||
#else
|
||||
UNUSED_P(usesParameterEntities);
|
||||
#endif // XML_DTD
|
||||
|
||||
const enum XML_Status status
|
||||
= _XML_Parse_SINGLE_BYTES(parser, doc, (int)strlen(doc),
|
||||
/*isFinal*/ XML_TRUE);
|
||||
|
||||
if (rejection_expected) {
|
||||
assert_true(status == XML_STATUS_ERROR);
|
||||
assert_true(XML_GetErrorCode(parser) == XML_ERROR_RECURSIVE_ENTITY_REF);
|
||||
} else {
|
||||
assert_true(status == XML_STATUS_OK);
|
||||
}
|
||||
|
||||
if (reset_wanted) {
|
||||
// This covers free'ing of (eventually) all three open entity lists by
|
||||
// XML_ParserReset.
|
||||
XML_ParserReset(parser, NULL);
|
||||
}
|
||||
|
||||
// This covers free'ing of (eventually) all three open entity lists by
|
||||
// XML_ParserFree (unless XML_ParserReset has already done that above).
|
||||
XML_ParserFree(parser);
|
||||
}
|
||||
}
|
||||
}
|
||||
END_TEST
|
||||
|
||||
START_TEST(test_recursive_external_parameter_entity_2) {
|
||||
struct TestCase {
|
||||
const char *doc;
|
||||
enum XML_Status expectedStatus;
|
||||
};
|
||||
|
||||
struct TestCase cases[] = {
|
||||
{"<!ENTITY % p1 '%p1;'>", XML_STATUS_ERROR},
|
||||
{"<!ENTITY % p1 '%p1;'>"
|
||||
"<!ENTITY % p1 'first declaration wins'>",
|
||||
XML_STATUS_ERROR},
|
||||
{"<!ENTITY % p1 'first declaration wins'>"
|
||||
"<!ENTITY % p1 '%p1;'>",
|
||||
XML_STATUS_OK},
|
||||
{"<!ENTITY % p1 '%p1;'>", XML_STATUS_OK},
|
||||
};
|
||||
|
||||
for (size_t i = 0; i < sizeof(cases) / sizeof(cases[0]); i++) {
|
||||
const char *const doc = cases[i].doc;
|
||||
const enum XML_Status expectedStatus = cases[i].expectedStatus;
|
||||
set_subtest("%s", doc);
|
||||
|
||||
XML_Parser parser = XML_ParserCreate(NULL);
|
||||
assert_true(parser != NULL);
|
||||
|
||||
XML_Parser ext_parser = XML_ExternalEntityParserCreate(parser, NULL, NULL);
|
||||
assert_true(ext_parser != NULL);
|
||||
|
||||
const enum XML_Status actualStatus
|
||||
= _XML_Parse_SINGLE_BYTES(ext_parser, doc, (int)strlen(doc), XML_TRUE);
|
||||
|
||||
assert_true(actualStatus == expectedStatus);
|
||||
if (actualStatus != XML_STATUS_OK) {
|
||||
assert_true(XML_GetErrorCode(ext_parser)
|
||||
== XML_ERROR_RECURSIVE_ENTITY_REF);
|
||||
}
|
||||
|
||||
XML_ParserFree(ext_parser);
|
||||
XML_ParserFree(parser);
|
||||
}
|
||||
}
|
||||
END_TEST
|
||||
|
||||
/* Test incomplete external entities are faulted */
|
||||
START_TEST(test_ext_entity_invalid_parse) {
|
||||
const char *text = "<!DOCTYPE doc [\n"
|
||||
@@ -1374,7 +1521,9 @@ START_TEST(test_suspend_parser_between_char_data_calls) {
|
||||
|
||||
XML_SetCharacterDataHandler(g_parser, clearing_aborting_character_handler);
|
||||
g_resumable = XML_TRUE;
|
||||
if (_XML_Parse_SINGLE_BYTES(g_parser, text, (int)strlen(text), XML_TRUE)
|
||||
// can't use SINGLE_BYTES here, because it'll return early on suspension, and
|
||||
// we won't know exactly how much input we actually managed to give Expat.
|
||||
if (XML_Parse(g_parser, text, (int)strlen(text), XML_TRUE)
|
||||
!= XML_STATUS_SUSPENDED)
|
||||
xml_failure(g_parser);
|
||||
if (XML_GetErrorCode(g_parser) != XML_ERROR_NONE)
|
||||
@@ -1403,7 +1552,9 @@ START_TEST(test_repeated_stop_parser_between_char_data_calls) {
|
||||
XML_SetCharacterDataHandler(g_parser, parser_stop_character_handler);
|
||||
g_resumable = XML_TRUE;
|
||||
g_abortable = XML_FALSE;
|
||||
if (_XML_Parse_SINGLE_BYTES(g_parser, text, (int)strlen(text), XML_TRUE)
|
||||
// can't use SINGLE_BYTES here, because it'll return early on suspension, and
|
||||
// we won't know exactly how much input we actually managed to give Expat.
|
||||
if (XML_Parse(g_parser, text, (int)strlen(text), XML_TRUE)
|
||||
!= XML_STATUS_SUSPENDED)
|
||||
fail("Failed to double-suspend parser");
|
||||
|
||||
@@ -1787,12 +1938,19 @@ END_TEST
|
||||
|
||||
/* Test suspending the parser in cdata handler */
|
||||
START_TEST(test_suspend_parser_between_cdata_calls) {
|
||||
if (g_chunkSize != 0) {
|
||||
// this test does not use SINGLE_BYTES, because of suspension
|
||||
return;
|
||||
}
|
||||
|
||||
const char *text = long_cdata_text;
|
||||
enum XML_Status result;
|
||||
|
||||
XML_SetCharacterDataHandler(g_parser, clearing_aborting_character_handler);
|
||||
g_resumable = XML_TRUE;
|
||||
result = _XML_Parse_SINGLE_BYTES(g_parser, text, (int)strlen(text), XML_TRUE);
|
||||
// can't use SINGLE_BYTES here, because it'll return early on suspension, and
|
||||
// we won't know exactly how much input we actually managed to give Expat.
|
||||
result = XML_Parse(g_parser, text, (int)strlen(text), XML_TRUE);
|
||||
if (result != XML_STATUS_SUSPENDED) {
|
||||
if (result == XML_STATUS_ERROR)
|
||||
xml_failure(g_parser);
|
||||
@@ -2314,11 +2472,20 @@ START_TEST(test_attributes) {
|
||||
info[0].attributes = doc_info;
|
||||
info[1].attributes = tag_info;
|
||||
|
||||
XML_SetStartElementHandler(g_parser, counting_start_element_handler);
|
||||
XML_SetUserData(g_parser, info);
|
||||
if (_XML_Parse_SINGLE_BYTES(g_parser, text, (int)strlen(text), XML_TRUE)
|
||||
XML_Parser parser = XML_ParserCreate(NULL);
|
||||
assert_true(parser != NULL);
|
||||
ParserAndElementInfo parserAndElementInfos = {
|
||||
parser,
|
||||
info,
|
||||
};
|
||||
|
||||
XML_SetStartElementHandler(parser, counting_start_element_handler);
|
||||
XML_SetUserData(parser, &parserAndElementInfos);
|
||||
if (_XML_Parse_SINGLE_BYTES(parser, text, (int)strlen(text), XML_TRUE)
|
||||
== XML_STATUS_ERROR)
|
||||
xml_failure(g_parser);
|
||||
xml_failure(parser);
|
||||
|
||||
XML_ParserFree(parser);
|
||||
}
|
||||
END_TEST
|
||||
|
||||
@@ -2326,6 +2493,11 @@ END_TEST
|
||||
* entity. Exercises some obscure code in XML_ParserReset().
|
||||
*/
|
||||
START_TEST(test_reset_in_entity) {
|
||||
if (g_chunkSize != 0) {
|
||||
// this test does not use SINGLE_BYTES, because of suspension
|
||||
return;
|
||||
}
|
||||
|
||||
const char *text = "<!DOCTYPE doc [\n"
|
||||
"<!ENTITY wombat 'wom'>\n"
|
||||
"<!ENTITY entity 'hi &wom; there'>\n"
|
||||
@@ -2335,7 +2507,9 @@ START_TEST(test_reset_in_entity) {
|
||||
|
||||
g_resumable = XML_TRUE;
|
||||
XML_SetCharacterDataHandler(g_parser, clearing_aborting_character_handler);
|
||||
if (_XML_Parse_SINGLE_BYTES(g_parser, text, (int)strlen(text), XML_TRUE)
|
||||
// can't use SINGLE_BYTES here, because it'll return early on suspension, and
|
||||
// we won't know exactly how much input we actually managed to give Expat.
|
||||
if (XML_Parse(g_parser, text, (int)strlen(text), XML_TRUE)
|
||||
== XML_STATUS_ERROR)
|
||||
xml_failure(g_parser);
|
||||
XML_GetParsingStatus(g_parser, &status);
|
||||
@@ -2761,6 +2935,61 @@ START_TEST(test_empty_parse) {
|
||||
}
|
||||
END_TEST
|
||||
|
||||
/* Test XML_Parse for len < 0 */
|
||||
START_TEST(test_negative_len_parse) {
|
||||
const char *const doc = "<root/>";
|
||||
for (int isFinal = 0; isFinal < 2; isFinal++) {
|
||||
set_subtest("isFinal=%d", isFinal);
|
||||
|
||||
XML_Parser parser = XML_ParserCreate(NULL);
|
||||
|
||||
if (XML_GetErrorCode(parser) != XML_ERROR_NONE)
|
||||
fail("There was not supposed to be any initial parse error.");
|
||||
|
||||
const enum XML_Status status = XML_Parse(parser, doc, -1, isFinal);
|
||||
|
||||
if (status != XML_STATUS_ERROR)
|
||||
fail("Negative len was expected to fail the parse but did not.");
|
||||
|
||||
if (XML_GetErrorCode(parser) != XML_ERROR_INVALID_ARGUMENT)
|
||||
fail("Parse error does not match XML_ERROR_INVALID_ARGUMENT.");
|
||||
|
||||
XML_ParserFree(parser);
|
||||
}
|
||||
}
|
||||
END_TEST
|
||||
|
||||
/* Test XML_ParseBuffer for len < 0 */
|
||||
START_TEST(test_negative_len_parse_buffer) {
|
||||
const char *const doc = "<root/>";
|
||||
for (int isFinal = 0; isFinal < 2; isFinal++) {
|
||||
set_subtest("isFinal=%d", isFinal);
|
||||
|
||||
XML_Parser parser = XML_ParserCreate(NULL);
|
||||
|
||||
if (XML_GetErrorCode(parser) != XML_ERROR_NONE)
|
||||
fail("There was not supposed to be any initial parse error.");
|
||||
|
||||
void *const buffer = XML_GetBuffer(parser, (int)strlen(doc));
|
||||
|
||||
if (buffer == NULL)
|
||||
fail("XML_GetBuffer failed.");
|
||||
|
||||
memcpy(buffer, doc, strlen(doc));
|
||||
|
||||
const enum XML_Status status = XML_ParseBuffer(parser, -1, isFinal);
|
||||
|
||||
if (status != XML_STATUS_ERROR)
|
||||
fail("Negative len was expected to fail the parse but did not.");
|
||||
|
||||
if (XML_GetErrorCode(parser) != XML_ERROR_INVALID_ARGUMENT)
|
||||
fail("Parse error does not match XML_ERROR_INVALID_ARGUMENT.");
|
||||
|
||||
XML_ParserFree(parser);
|
||||
}
|
||||
}
|
||||
END_TEST
|
||||
|
||||
/* Test odd corners of the XML_GetBuffer interface */
|
||||
static enum XML_Status
|
||||
get_feature(enum XML_FeatureEnum feature_id, long *presult) {
|
||||
@@ -3527,7 +3756,9 @@ START_TEST(test_suspend_xdecl) {
|
||||
XML_SetXmlDeclHandler(g_parser, entity_suspending_xdecl_handler);
|
||||
XML_SetUserData(g_parser, g_parser);
|
||||
g_resumable = XML_TRUE;
|
||||
if (_XML_Parse_SINGLE_BYTES(g_parser, text, (int)strlen(text), XML_TRUE)
|
||||
// can't use SINGLE_BYTES here, because it'll return early on suspension, and
|
||||
// we won't know exactly how much input we actually managed to give Expat.
|
||||
if (XML_Parse(g_parser, text, (int)strlen(text), XML_TRUE)
|
||||
!= XML_STATUS_SUSPENDED)
|
||||
xml_failure(g_parser);
|
||||
if (XML_GetErrorCode(g_parser) != XML_ERROR_NONE)
|
||||
@@ -3723,13 +3954,20 @@ END_TEST
|
||||
|
||||
/* Test syntax error is caught at parse resumption */
|
||||
START_TEST(test_resume_entity_with_syntax_error) {
|
||||
if (g_chunkSize != 0) {
|
||||
// this test does not use SINGLE_BYTES, because of suspension
|
||||
return;
|
||||
}
|
||||
|
||||
const char *text = "<!DOCTYPE doc [\n"
|
||||
"<!ENTITY foo '<suspend>Hi</wombat>'>\n"
|
||||
"]>\n"
|
||||
"<doc>&foo;</doc>\n";
|
||||
|
||||
XML_SetStartElementHandler(g_parser, start_element_suspender);
|
||||
if (_XML_Parse_SINGLE_BYTES(g_parser, text, (int)strlen(text), XML_TRUE)
|
||||
// can't use SINGLE_BYTES here, because it'll return early on suspension, and
|
||||
// we won't know exactly how much input we actually managed to give Expat.
|
||||
if (XML_Parse(g_parser, text, (int)strlen(text), XML_TRUE)
|
||||
!= XML_STATUS_SUSPENDED)
|
||||
xml_failure(g_parser);
|
||||
if (XML_ResumeParser(g_parser) != XML_STATUS_ERROR)
|
||||
@@ -3853,7 +4091,7 @@ START_TEST(test_skipped_null_loaded_ext_entity) {
|
||||
= {"<!ENTITY % pe1 SYSTEM 'http://example.org/two.ent'>\n"
|
||||
"<!ENTITY % pe2 '%pe1;'>\n"
|
||||
"%pe2;\n",
|
||||
external_entity_null_loader};
|
||||
external_entity_null_loader, NULL};
|
||||
|
||||
XML_SetUserData(g_parser, &test_data);
|
||||
XML_SetParamEntityParsing(g_parser, XML_PARAM_ENTITY_PARSING_ALWAYS);
|
||||
@@ -3871,7 +4109,7 @@ START_TEST(test_skipped_unloaded_ext_entity) {
|
||||
= {"<!ENTITY % pe1 SYSTEM 'http://example.org/two.ent'>\n"
|
||||
"<!ENTITY % pe2 '%pe1;'>\n"
|
||||
"%pe2;\n",
|
||||
NULL};
|
||||
NULL, NULL};
|
||||
|
||||
XML_SetUserData(g_parser, &test_data);
|
||||
XML_SetParamEntityParsing(g_parser, XML_PARAM_ENTITY_PARSING_ALWAYS);
|
||||
@@ -5171,6 +5409,151 @@ START_TEST(test_pool_integrity_with_unfinished_attr) {
|
||||
}
|
||||
END_TEST
|
||||
|
||||
/* Test a possible early return location in internalEntityProcessor */
|
||||
START_TEST(test_entity_ref_no_elements) {
|
||||
const char *const text = "<!DOCTYPE foo [\n"
|
||||
"<!ENTITY e1 \"test\">\n"
|
||||
"]> <foo>&e1;"; // intentionally missing newline
|
||||
|
||||
XML_Parser parser = XML_ParserCreate(NULL);
|
||||
assert_true(_XML_Parse_SINGLE_BYTES(parser, text, (int)strlen(text), XML_TRUE)
|
||||
== XML_STATUS_ERROR);
|
||||
assert_true(XML_GetErrorCode(parser) == XML_ERROR_NO_ELEMENTS);
|
||||
XML_ParserFree(parser);
|
||||
}
|
||||
END_TEST
|
||||
|
||||
/* Tests if chained entity references lead to unbounded recursion */
|
||||
START_TEST(test_deep_nested_entity) {
|
||||
const size_t N_LINES = 60000;
|
||||
const size_t SIZE_PER_LINE = 50;
|
||||
|
||||
char *const text = (char *)malloc((N_LINES + 4) * SIZE_PER_LINE);
|
||||
if (text == NULL) {
|
||||
fail("malloc failed");
|
||||
}
|
||||
|
||||
char *textPtr = text;
|
||||
|
||||
// Create the XML
|
||||
textPtr += snprintf(textPtr, SIZE_PER_LINE,
|
||||
"<!DOCTYPE foo [\n"
|
||||
" <!ENTITY s0 'deepText'>\n");
|
||||
|
||||
for (size_t i = 1; i < N_LINES; ++i) {
|
||||
textPtr += snprintf(textPtr, SIZE_PER_LINE, " <!ENTITY s%lu '&s%lu;'>\n",
|
||||
(long unsigned)i, (long unsigned)(i - 1));
|
||||
}
|
||||
|
||||
snprintf(textPtr, SIZE_PER_LINE, "]> <foo>&s%lu;</foo>\n",
|
||||
(long unsigned)(N_LINES - 1));
|
||||
|
||||
const XML_Char *const expected = XCS("deepText");
|
||||
|
||||
CharData storage;
|
||||
CharData_Init(&storage);
|
||||
|
||||
XML_Parser parser = XML_ParserCreate(NULL);
|
||||
|
||||
XML_SetCharacterDataHandler(parser, accumulate_characters);
|
||||
XML_SetUserData(parser, &storage);
|
||||
|
||||
if (_XML_Parse_SINGLE_BYTES(parser, text, (int)strlen(text), XML_TRUE)
|
||||
== XML_STATUS_ERROR)
|
||||
xml_failure(parser);
|
||||
|
||||
CharData_CheckXMLChars(&storage, expected);
|
||||
XML_ParserFree(parser);
|
||||
free(text);
|
||||
}
|
||||
END_TEST
|
||||
|
||||
/* Tests if chained entity references in attributes
|
||||
lead to unbounded recursion */
|
||||
START_TEST(test_deep_nested_attribute_entity) {
|
||||
const size_t N_LINES = 60000;
|
||||
const size_t SIZE_PER_LINE = 100;
|
||||
|
||||
char *const text = (char *)malloc((N_LINES + 4) * SIZE_PER_LINE);
|
||||
if (text == NULL) {
|
||||
fail("malloc failed");
|
||||
}
|
||||
|
||||
char *textPtr = text;
|
||||
|
||||
// Create the XML
|
||||
textPtr += snprintf(textPtr, SIZE_PER_LINE,
|
||||
"<!DOCTYPE foo [\n"
|
||||
" <!ENTITY s0 'deepText'>\n");
|
||||
|
||||
for (size_t i = 1; i < N_LINES; ++i) {
|
||||
textPtr += snprintf(textPtr, SIZE_PER_LINE, " <!ENTITY s%lu '&s%lu;'>\n",
|
||||
(long unsigned)i, (long unsigned)(i - 1));
|
||||
}
|
||||
|
||||
snprintf(textPtr, SIZE_PER_LINE, "]> <foo name='&s%lu;'>mainText</foo>\n",
|
||||
(long unsigned)(N_LINES - 1));
|
||||
|
||||
AttrInfo doc_info[] = {{XCS("name"), XCS("deepText")}, {NULL, NULL}};
|
||||
ElementInfo info[] = {{XCS("foo"), 1, NULL, NULL}, {NULL, 0, NULL, NULL}};
|
||||
info[0].attributes = doc_info;
|
||||
|
||||
XML_Parser parser = XML_ParserCreate(NULL);
|
||||
ParserAndElementInfo parserPlusElemenInfo = {parser, info};
|
||||
|
||||
XML_SetStartElementHandler(parser, counting_start_element_handler);
|
||||
XML_SetUserData(parser, &parserPlusElemenInfo);
|
||||
|
||||
if (_XML_Parse_SINGLE_BYTES(parser, text, (int)strlen(text), XML_TRUE)
|
||||
== XML_STATUS_ERROR)
|
||||
xml_failure(parser);
|
||||
|
||||
XML_ParserFree(parser);
|
||||
free(text);
|
||||
}
|
||||
END_TEST
|
||||
|
||||
START_TEST(test_deep_nested_entity_delayed_interpretation) {
|
||||
const size_t N_LINES = 70000;
|
||||
const size_t SIZE_PER_LINE = 100;
|
||||
|
||||
char *const text = (char *)malloc((N_LINES + 4) * SIZE_PER_LINE);
|
||||
if (text == NULL) {
|
||||
fail("malloc failed");
|
||||
}
|
||||
|
||||
char *textPtr = text;
|
||||
|
||||
// Create the XML
|
||||
textPtr += snprintf(textPtr, SIZE_PER_LINE,
|
||||
"<!DOCTYPE foo [\n"
|
||||
" <!ENTITY %% s0 'deepText'>\n");
|
||||
|
||||
for (size_t i = 1; i < N_LINES; ++i) {
|
||||
textPtr += snprintf(textPtr, SIZE_PER_LINE,
|
||||
" <!ENTITY %% s%lu '%s%lu;'>\n", (long unsigned)i,
|
||||
(long unsigned)(i - 1));
|
||||
}
|
||||
|
||||
snprintf(textPtr, SIZE_PER_LINE,
|
||||
" <!ENTITY %% define_g \"<!ENTITY g '%s%lu;'>\">\n"
|
||||
" %%define_g;\n"
|
||||
"]>\n"
|
||||
"<foo/>\n",
|
||||
(long unsigned)(N_LINES - 1));
|
||||
|
||||
XML_Parser parser = XML_ParserCreate(NULL);
|
||||
|
||||
XML_SetParamEntityParsing(parser, XML_PARAM_ENTITY_PARSING_ALWAYS);
|
||||
if (_XML_Parse_SINGLE_BYTES(parser, text, (int)strlen(text), XML_TRUE)
|
||||
== XML_STATUS_ERROR)
|
||||
xml_failure(parser);
|
||||
|
||||
XML_ParserFree(parser);
|
||||
free(text);
|
||||
}
|
||||
END_TEST
|
||||
|
||||
START_TEST(test_nested_entity_suspend) {
|
||||
const char *const text = "<!DOCTYPE a [\n"
|
||||
" <!ENTITY e1 '<!--e1-->'>\n"
|
||||
@@ -5201,14 +5584,37 @@ START_TEST(test_nested_entity_suspend) {
|
||||
}
|
||||
END_TEST
|
||||
|
||||
START_TEST(test_nested_entity_suspend_2) {
|
||||
const char *const text = "<!DOCTYPE doc [\n"
|
||||
" <!ENTITY ge1 'head1Ztail1'>\n"
|
||||
" <!ENTITY ge2 'head2&ge1;tail2'>\n"
|
||||
" <!ENTITY ge3 'head3&ge2;tail3'>\n"
|
||||
"]>\n"
|
||||
"<doc>&ge3;</doc>";
|
||||
const XML_Char *const expected = XCS("head3") XCS("head2") XCS("head1")
|
||||
XCS("Z") XCS("tail1") XCS("tail2") XCS("tail3");
|
||||
CharData storage;
|
||||
CharData_Init(&storage);
|
||||
XML_Parser parser = XML_ParserCreate(NULL);
|
||||
ParserPlusStorage parserPlusStorage = {parser, &storage};
|
||||
|
||||
XML_SetCharacterDataHandler(parser, accumulate_char_data_and_suspend);
|
||||
XML_SetUserData(parser, &parserPlusStorage);
|
||||
|
||||
enum XML_Status status = XML_Parse(parser, text, (int)strlen(text), XML_TRUE);
|
||||
while (status == XML_STATUS_SUSPENDED) {
|
||||
status = XML_ResumeParser(parser);
|
||||
}
|
||||
if (status != XML_STATUS_OK)
|
||||
xml_failure(parser);
|
||||
|
||||
CharData_CheckXMLChars(&storage, expected);
|
||||
XML_ParserFree(parser);
|
||||
}
|
||||
END_TEST
|
||||
|
||||
/* Regression test for quadratic parsing on large tokens */
|
||||
START_TEST(test_big_tokens_take_linear_time) {
|
||||
const char *const too_slow_failure_message
|
||||
= "Compared to the baseline runtime of the first test, this test has a "
|
||||
"slowdown of more than <max_slowdown>. "
|
||||
"Please keep increasing the value by 1 until it reliably passes the "
|
||||
"test on your hardware and open a bug sharing that number with us. "
|
||||
"Thanks in advance!";
|
||||
START_TEST(test_big_tokens_scale_linearly) {
|
||||
const struct {
|
||||
const char *pre;
|
||||
const char *post;
|
||||
@@ -5220,65 +5626,57 @@ START_TEST(test_big_tokens_take_linear_time) {
|
||||
{"<e><", "/></e>"}, // big elem name, used to be O(N²)
|
||||
};
|
||||
const int num_cases = sizeof(text) / sizeof(text[0]);
|
||||
// For the test we need a <max_slowdown> value that is:
|
||||
// (1) big enough that the test passes reliably (avoiding flaky tests), and
|
||||
// (2) small enough that the test actually catches regressions.
|
||||
const int max_slowdown = 15;
|
||||
char aaaaaa[4096];
|
||||
const int fillsize = (int)sizeof(aaaaaa);
|
||||
const int fillcount = 100;
|
||||
const unsigned approx_bytes = fillsize * fillcount; // ignore pre/post.
|
||||
const unsigned max_factor = 4;
|
||||
const unsigned max_scanned = max_factor * approx_bytes;
|
||||
|
||||
memset(aaaaaa, 'a', fillsize);
|
||||
|
||||
if (! g_reparseDeferralEnabledDefault) {
|
||||
return; // heuristic is disabled; we would get O(n^2) and fail.
|
||||
}
|
||||
#if ! defined(__linux__)
|
||||
if (CLOCKS_PER_SEC < 100000) {
|
||||
// Skip this test if clock() doesn't have reasonably good resolution.
|
||||
// This workaround is primarily targeting Windows and FreeBSD, since
|
||||
// XSI requires the value to be 1.000.000 (10x the condition here), and
|
||||
// we want to be very sure that at least one platform in CI can catch
|
||||
// regressions (through a failing test).
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
clock_t baseline = 0;
|
||||
for (int i = 0; i < num_cases; ++i) {
|
||||
XML_Parser parser = XML_ParserCreate(NULL);
|
||||
assert_true(parser != NULL);
|
||||
enum XML_Status status;
|
||||
set_subtest("max_slowdown=%d text=\"%saaaaaa%s\"", max_slowdown,
|
||||
text[i].pre, text[i].post);
|
||||
const clock_t start = clock();
|
||||
set_subtest("text=\"%saaaaaa%s\"", text[i].pre, text[i].post);
|
||||
|
||||
// parse the start text
|
||||
g_bytesScanned = 0;
|
||||
status = _XML_Parse_SINGLE_BYTES(parser, text[i].pre,
|
||||
(int)strlen(text[i].pre), XML_FALSE);
|
||||
if (status != XML_STATUS_OK) {
|
||||
xml_failure(parser);
|
||||
}
|
||||
|
||||
// parse lots of 'a', failing the test early if it takes too long
|
||||
unsigned past_max_count = 0;
|
||||
for (int f = 0; f < fillcount; ++f) {
|
||||
status = _XML_Parse_SINGLE_BYTES(parser, aaaaaa, fillsize, XML_FALSE);
|
||||
if (status != XML_STATUS_OK) {
|
||||
xml_failure(parser);
|
||||
}
|
||||
// i == 0 means we're still calculating the baseline value
|
||||
if (i > 0) {
|
||||
const clock_t now = clock();
|
||||
const clock_t clocks_so_far = now - start;
|
||||
const int slowdown = clocks_so_far / baseline;
|
||||
if (slowdown >= max_slowdown) {
|
||||
fprintf(
|
||||
stderr,
|
||||
"fill#%d: clocks_so_far=%d baseline=%d slowdown=%d max_slowdown=%d\n",
|
||||
f, (int)clocks_so_far, (int)baseline, slowdown, max_slowdown);
|
||||
fail(too_slow_failure_message);
|
||||
}
|
||||
if (g_bytesScanned > max_scanned) {
|
||||
// We're not done, and have already passed the limit -- the test will
|
||||
// definitely fail. This block allows us to save time by failing early.
|
||||
const unsigned pushed
|
||||
= (unsigned)strlen(text[i].pre) + (f + 1) * fillsize;
|
||||
fprintf(
|
||||
stderr,
|
||||
"after %d/%d loops: pushed=%u scanned=%u (factor ~%.2f) max_scanned: %u (factor ~%u)\n",
|
||||
f + 1, fillcount, pushed, g_bytesScanned,
|
||||
g_bytesScanned / (double)pushed, max_scanned, max_factor);
|
||||
past_max_count++;
|
||||
// We are failing, but allow a few log prints first. If we don't reach
|
||||
// a count of five, the test will fail after the loop instead.
|
||||
assert_true(past_max_count < 5);
|
||||
}
|
||||
}
|
||||
|
||||
// parse the end text
|
||||
status = _XML_Parse_SINGLE_BYTES(parser, text[i].post,
|
||||
(int)strlen(text[i].post), XML_TRUE);
|
||||
@@ -5286,18 +5684,14 @@ START_TEST(test_big_tokens_take_linear_time) {
|
||||
xml_failure(parser);
|
||||
}
|
||||
|
||||
// how long did it take in total?
|
||||
const clock_t end = clock();
|
||||
const clock_t taken = end - start;
|
||||
if (i == 0) {
|
||||
assert_true(taken > 0); // just to make sure we don't div-by-0 later
|
||||
baseline = taken;
|
||||
}
|
||||
const int slowdown = taken / baseline;
|
||||
if (slowdown >= max_slowdown) {
|
||||
fprintf(stderr, "taken=%d baseline=%d slowdown=%d max_slowdown=%d\n",
|
||||
(int)taken, (int)baseline, slowdown, max_slowdown);
|
||||
fail(too_slow_failure_message);
|
||||
assert_true(g_bytesScanned > approx_bytes); // or the counter isn't working
|
||||
if (g_bytesScanned > max_scanned) {
|
||||
fprintf(
|
||||
stderr,
|
||||
"after all input: scanned=%u (factor ~%.2f) max_scanned: %u (factor ~%u)\n",
|
||||
g_bytesScanned, g_bytesScanned / (double)approx_bytes, max_scanned,
|
||||
max_factor);
|
||||
fail("scanned too many bytes");
|
||||
}
|
||||
|
||||
XML_ParserFree(parser);
|
||||
@@ -5774,19 +6168,17 @@ START_TEST(test_varying_buffer_fills) {
|
||||
fillsize[2], fillsize[3]);
|
||||
XML_Parser parser = XML_ParserCreate(NULL);
|
||||
assert_true(parser != NULL);
|
||||
g_parseAttempts = 0;
|
||||
|
||||
CharData storage;
|
||||
CharData_Init(&storage);
|
||||
XML_SetUserData(parser, &storage);
|
||||
XML_SetStartElementHandler(parser, start_element_event_handler);
|
||||
|
||||
g_bytesScanned = 0;
|
||||
int worstcase_bytes = 0; // sum of (buffered bytes at each XML_Parse call)
|
||||
int scanned_bytes = 0; // sum of (buffered bytes at each actual parse)
|
||||
int offset = 0;
|
||||
while (*fillsize >= 0) {
|
||||
assert_true(offset + *fillsize <= document_length); // or test is invalid
|
||||
const unsigned attempts_before = g_parseAttempts;
|
||||
const enum XML_Status status
|
||||
= XML_Parse(parser, &document[offset], *fillsize, XML_FALSE);
|
||||
if (status != XML_STATUS_OK) {
|
||||
@@ -5796,28 +6188,20 @@ START_TEST(test_varying_buffer_fills) {
|
||||
fillsize++;
|
||||
assert_true(offset <= INT_MAX - worstcase_bytes); // avoid overflow
|
||||
worstcase_bytes += offset; // we might've tried to parse all pending bytes
|
||||
if (g_parseAttempts != attempts_before) {
|
||||
assert_true(g_parseAttempts == attempts_before + 1); // max 1/XML_Parse
|
||||
assert_true(offset <= INT_MAX - scanned_bytes); // avoid overflow
|
||||
scanned_bytes += offset; // we *did* try to parse all pending bytes
|
||||
}
|
||||
}
|
||||
assert_true(storage.count == 1); // the big token should've been parsed
|
||||
assert_true(scanned_bytes > 0); // test-the-test: does our counter work?
|
||||
assert_true(g_bytesScanned > 0); // test-the-test: does our counter work?
|
||||
if (g_reparseDeferralEnabledDefault) {
|
||||
// heuristic is enabled; some XML_Parse calls may have deferred reparsing
|
||||
const int max_bytes_scanned = -*fillsize;
|
||||
if (scanned_bytes > max_bytes_scanned) {
|
||||
const unsigned max_bytes_scanned = -*fillsize;
|
||||
if (g_bytesScanned > max_bytes_scanned) {
|
||||
fprintf(stderr,
|
||||
"bytes scanned in parse attempts: actual=%d limit=%d \n",
|
||||
scanned_bytes, max_bytes_scanned);
|
||||
"bytes scanned in parse attempts: actual=%u limit=%u \n",
|
||||
g_bytesScanned, max_bytes_scanned);
|
||||
fail("too many bytes scanned in parse attempts");
|
||||
}
|
||||
assert_true(scanned_bytes <= worstcase_bytes);
|
||||
} else {
|
||||
// heuristic is disabled; every XML_Parse() will have reparsed
|
||||
assert_true(scanned_bytes == worstcase_bytes);
|
||||
}
|
||||
assert_true(g_bytesScanned <= (unsigned)worstcase_bytes);
|
||||
|
||||
XML_ParserFree(parser);
|
||||
}
|
||||
@@ -5889,7 +6273,9 @@ make_basic_test_case(Suite *s) {
|
||||
tcase_add_test(tc_basic, test_wfc_undeclared_entity_with_external_subset);
|
||||
tcase_add_test(tc_basic, test_not_standalone_handler_reject);
|
||||
tcase_add_test(tc_basic, test_not_standalone_handler_accept);
|
||||
tcase_add_test(tc_basic, test_entity_start_tag_level_greater_than_one);
|
||||
tcase_add_test__if_xml_ge(tc_basic, test_wfc_no_recursive_entity_refs);
|
||||
tcase_add_test(tc_basic, test_no_indirectly_recursive_entity_refs);
|
||||
tcase_add_test__ifdef_xml_dtd(tc_basic, test_ext_entity_invalid_parse);
|
||||
tcase_add_test__if_xml_ge(tc_basic, test_dtd_default_handling);
|
||||
tcase_add_test(tc_basic, test_dtd_attr_handling);
|
||||
@@ -5940,6 +6326,8 @@ make_basic_test_case(Suite *s) {
|
||||
tcase_add_test__ifdef_xml_dtd(tc_basic, test_user_parameters);
|
||||
tcase_add_test__ifdef_xml_dtd(tc_basic, test_ext_entity_ref_parameter);
|
||||
tcase_add_test(tc_basic, test_empty_parse);
|
||||
tcase_add_test(tc_basic, test_negative_len_parse);
|
||||
tcase_add_test(tc_basic, test_negative_len_parse_buffer);
|
||||
tcase_add_test(tc_basic, test_get_buffer_1);
|
||||
tcase_add_test(tc_basic, test_get_buffer_2);
|
||||
#if XML_CONTEXT_BYTES > 0
|
||||
@@ -5972,6 +6360,8 @@ make_basic_test_case(Suite *s) {
|
||||
tcase_add_test__ifdef_xml_dtd(tc_basic, test_skipped_parameter_entity);
|
||||
tcase_add_test__ifdef_xml_dtd(tc_basic,
|
||||
test_recursive_external_parameter_entity);
|
||||
tcase_add_test__ifdef_xml_dtd(tc_basic,
|
||||
test_recursive_external_parameter_entity_2);
|
||||
tcase_add_test(tc_basic, test_undefined_ext_entity_in_external_dtd);
|
||||
tcase_add_test(tc_basic, test_suspend_xdecl);
|
||||
tcase_add_test(tc_basic, test_abort_epilog);
|
||||
@@ -6064,8 +6454,14 @@ make_basic_test_case(Suite *s) {
|
||||
tcase_add_test(tc_basic, test_empty_element_abort);
|
||||
tcase_add_test__ifdef_xml_dtd(tc_basic,
|
||||
test_pool_integrity_with_unfinished_attr);
|
||||
tcase_add_test__if_xml_ge(tc_basic, test_entity_ref_no_elements);
|
||||
tcase_add_test__if_xml_ge(tc_basic, test_deep_nested_entity);
|
||||
tcase_add_test__if_xml_ge(tc_basic, test_deep_nested_attribute_entity);
|
||||
tcase_add_test__if_xml_ge(tc_basic,
|
||||
test_deep_nested_entity_delayed_interpretation);
|
||||
tcase_add_test__if_xml_ge(tc_basic, test_nested_entity_suspend);
|
||||
tcase_add_test(tc_basic, test_big_tokens_take_linear_time);
|
||||
tcase_add_test__if_xml_ge(tc_basic, test_nested_entity_suspend_2);
|
||||
tcase_add_test(tc_basic, test_big_tokens_scale_linearly);
|
||||
tcase_add_test(tc_basic, test_set_reparse_deferral);
|
||||
tcase_add_test(tc_basic, test_reparse_deferral_is_inherited);
|
||||
tcase_add_test(tc_basic, test_set_reparse_deferral_on_null_parser);
|
||||
|
||||
@@ -303,6 +303,7 @@ RANLIB = @RANLIB@
|
||||
SED = @SED@
|
||||
SET_MAKE = @SET_MAKE@
|
||||
SHELL = @SHELL@
|
||||
SIZEOF_VOID_P = @SIZEOF_VOID_P@
|
||||
SO_MAJOR = @SO_MAJOR@
|
||||
SO_MINOR = @SO_MINOR@
|
||||
SO_PATCH = @SO_PATCH@
|
||||
@@ -316,7 +317,6 @@ ac_ct_AR = @ac_ct_AR@
|
||||
ac_ct_CC = @ac_ct_CC@
|
||||
ac_ct_CXX = @ac_ct_CXX@
|
||||
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
|
||||
ac_cv_sizeof_void_p = @ac_cv_sizeof_void_p@
|
||||
am__include = @am__include@
|
||||
am__leading_dot = @am__leading_dot@
|
||||
am__quote = @am__quote@
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
|
||||
Copyright (c) 2003-2006 Karl Waclawek <karl@waclawek.net>
|
||||
Copyright (c) 2005-2007 Steven Solie <steven@solie.ca>
|
||||
Copyright (c) 2017-2023 Sebastian Pipping <sebastian@pipping.org>
|
||||
Copyright (c) 2017-2025 Sebastian Pipping <sebastian@pipping.org>
|
||||
Copyright (c) 2017 Rhodri James <rhodri@wildebeest.org.uk>
|
||||
Licensed under the MIT license:
|
||||
|
||||
@@ -32,10 +32,18 @@
|
||||
USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#define _POSIX_C_SOURCE 1 // fdopen
|
||||
|
||||
#if defined(_MSC_VER)
|
||||
# include <io.h> // _open, _close
|
||||
#else
|
||||
# include <unistd.h> // close
|
||||
#endif
|
||||
|
||||
#include <fcntl.h> // open
|
||||
#include <sys/stat.h>
|
||||
#include <assert.h>
|
||||
#include <stddef.h> // ptrdiff_t
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <time.h>
|
||||
#include "expat.h"
|
||||
@@ -52,17 +60,18 @@
|
||||
# define XML_FMT_STR "s"
|
||||
#endif
|
||||
|
||||
static void
|
||||
static int
|
||||
usage(const char *prog, int rc) {
|
||||
fprintf(stderr, "usage: %s [-n] filename bufferSize nr_of_loops\n", prog);
|
||||
exit(rc);
|
||||
return rc;
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, char *argv[]) {
|
||||
XML_Parser parser;
|
||||
char *XMLBuf, *XMLBufEnd, *XMLBufPtr;
|
||||
FILE *fd;
|
||||
int fd;
|
||||
FILE *file;
|
||||
struct stat fileAttr;
|
||||
int nrOfLoops, bufferSize, i, isFinal;
|
||||
size_t fileSize;
|
||||
@@ -76,34 +85,48 @@ main(int argc, char *argv[]) {
|
||||
ns = 1;
|
||||
j = 1;
|
||||
} else
|
||||
usage(argv[0], 1);
|
||||
return usage(argv[0], 1);
|
||||
}
|
||||
}
|
||||
|
||||
if (argc != j + 4)
|
||||
usage(argv[0], 1);
|
||||
return usage(argv[0], 1);
|
||||
|
||||
if (stat(argv[j + 1], &fileAttr) != 0) {
|
||||
fprintf(stderr, "could not access file '%s'\n", argv[j + 1]);
|
||||
fd = open(argv[j + 1], O_RDONLY);
|
||||
if (fd == -1) {
|
||||
fprintf(stderr, "could not open file '%s'\n", argv[j + 1]);
|
||||
return 2;
|
||||
}
|
||||
|
||||
fd = fopen(argv[j + 1], "r");
|
||||
if (! fd) {
|
||||
fprintf(stderr, "could not open file '%s'\n", argv[j + 1]);
|
||||
exit(2);
|
||||
if (fstat(fd, &fileAttr) != 0) {
|
||||
close(fd);
|
||||
fprintf(stderr, "could not fstat file '%s'\n", argv[j + 1]);
|
||||
return 2;
|
||||
}
|
||||
|
||||
file = fdopen(fd, "r");
|
||||
if (! file) {
|
||||
close(fd);
|
||||
fprintf(stderr, "could not fdopen file '%s'\n", argv[j + 1]);
|
||||
return 2;
|
||||
}
|
||||
|
||||
bufferSize = atoi(argv[j + 2]);
|
||||
nrOfLoops = atoi(argv[j + 3]);
|
||||
if (bufferSize <= 0 || nrOfLoops <= 0) {
|
||||
fclose(file); // NOTE: this closes fd as well
|
||||
fprintf(stderr, "buffer size and nr of loops must be greater than zero.\n");
|
||||
exit(3);
|
||||
return 3;
|
||||
}
|
||||
|
||||
XMLBuf = malloc(fileAttr.st_size);
|
||||
fileSize = fread(XMLBuf, sizeof(char), fileAttr.st_size, fd);
|
||||
fclose(fd);
|
||||
if (XMLBuf == NULL) {
|
||||
fclose(file); // NOTE: this closes fd as well
|
||||
fprintf(stderr, "ouf of memory.\n");
|
||||
return 5;
|
||||
}
|
||||
fileSize = fread(XMLBuf, sizeof(char), fileAttr.st_size, file);
|
||||
fclose(file); // NOTE: this closes fd as well
|
||||
|
||||
if (ns)
|
||||
parser = XML_ParserCreateNS(NULL, '!');
|
||||
@@ -132,7 +155,7 @@ main(int argc, char *argv[]) {
|
||||
XML_GetCurrentColumnNumber(parser));
|
||||
free(XMLBuf);
|
||||
XML_ParserFree(parser);
|
||||
exit(4);
|
||||
return 4;
|
||||
}
|
||||
XMLBufPtr += bufferSize;
|
||||
} while (! isFinal);
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
Copyright (c) 2003 Greg Stein <gstein@users.sourceforge.net>
|
||||
Copyright (c) 2005-2007 Steven Solie <steven@solie.ca>
|
||||
Copyright (c) 2005-2012 Karl Waclawek <karl@waclawek.net>
|
||||
Copyright (c) 2016-2023 Sebastian Pipping <sebastian@pipping.org>
|
||||
Copyright (c) 2016-2025 Sebastian Pipping <sebastian@pipping.org>
|
||||
Copyright (c) 2017-2022 Rhodri James <rhodri@wildebeest.org.uk>
|
||||
Copyright (c) 2017 Joe Orton <jorton@redhat.com>
|
||||
Copyright (c) 2017 José Gutiérrez de la Concha <jose@zeroc.com>
|
||||
@@ -42,6 +42,8 @@
|
||||
*/
|
||||
|
||||
#include <assert.h>
|
||||
#include <errno.h>
|
||||
#include <stdint.h> // for SIZE_MAX
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
@@ -51,6 +53,7 @@
|
||||
#include "chardata.h"
|
||||
#include "minicheck.h"
|
||||
#include "common.h"
|
||||
#include "handlers.h"
|
||||
|
||||
/* Common test data */
|
||||
|
||||
@@ -201,6 +204,12 @@ _XML_Parse_SINGLE_BYTES(XML_Parser parser, const char *s, int len,
|
||||
for (; len > chunksize; len -= chunksize, s += chunksize) {
|
||||
enum XML_Status res = XML_Parse(parser, s, chunksize, XML_FALSE);
|
||||
if (res != XML_STATUS_OK) {
|
||||
if ((res == XML_STATUS_SUSPENDED) && (len > chunksize)) {
|
||||
fail("Use of function _XML_Parse_SINGLE_BYTES with a chunk size "
|
||||
"greater than 0 (from g_chunkSize) does not work well with "
|
||||
"suspension. Please consider use of plain XML_Parse at this "
|
||||
"place in your test, instead.");
|
||||
}
|
||||
return res;
|
||||
}
|
||||
}
|
||||
@@ -221,30 +230,6 @@ _expect_failure(const char *text, enum XML_Error errorCode,
|
||||
_xml_failure(g_parser, file, lineno);
|
||||
}
|
||||
|
||||
/* Character data support for handlers, built on top of the code in
|
||||
* chardata.c
|
||||
*/
|
||||
void XMLCALL
|
||||
accumulate_characters(void *userData, const XML_Char *s, int len) {
|
||||
CharData_AppendXMLChars((CharData *)userData, s, len);
|
||||
}
|
||||
|
||||
void XMLCALL
|
||||
accumulate_attribute(void *userData, const XML_Char *name,
|
||||
const XML_Char **atts) {
|
||||
CharData *storage = (CharData *)userData;
|
||||
UNUSED_P(name);
|
||||
/* Check there are attributes to deal with */
|
||||
if (atts == NULL)
|
||||
return;
|
||||
|
||||
while (storage->count < 0 && atts[0] != NULL) {
|
||||
/* "accumulate" the value of the first attribute we see */
|
||||
CharData_AppendXMLChars(storage, atts[1], -1);
|
||||
atts += 2;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
_run_character_check(const char *text, const XML_Char *expected,
|
||||
const char *file, int line) {
|
||||
@@ -273,12 +258,6 @@ _run_attribute_check(const char *text, const XML_Char *expected,
|
||||
CharData_CheckXMLChars(&storage, expected);
|
||||
}
|
||||
|
||||
void XMLCALL
|
||||
ext_accumulate_characters(void *userData, const XML_Char *s, int len) {
|
||||
ExtTest *test_data = (ExtTest *)userData;
|
||||
accumulate_characters(test_data->storage, s, len);
|
||||
}
|
||||
|
||||
void
|
||||
_run_ext_character_check(const char *text, ExtTest *test_data,
|
||||
const XML_Char *expected, const char *file, int line) {
|
||||
@@ -323,3 +302,26 @@ duff_reallocator(void *ptr, size_t size) {
|
||||
g_reallocation_count--;
|
||||
return realloc(ptr, size);
|
||||
}
|
||||
|
||||
// Portable remake of strndup(3) for C99; does not care about space efficiency
|
||||
char *
|
||||
portable_strndup(const char *s, size_t n) {
|
||||
if ((s == NULL) || (n == SIZE_MAX)) {
|
||||
errno = EINVAL;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
char *const buffer = (char *)malloc(n + 1);
|
||||
if (buffer == NULL) {
|
||||
errno = ENOMEM;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
errno = 0;
|
||||
|
||||
memcpy(buffer, s, n);
|
||||
|
||||
buffer[n] = '\0';
|
||||
|
||||
return buffer;
|
||||
}
|
||||
@@ -10,7 +10,7 @@
|
||||
Copyright (c) 2003 Greg Stein <gstein@users.sourceforge.net>
|
||||
Copyright (c) 2005-2007 Steven Solie <steven@solie.ca>
|
||||
Copyright (c) 2005-2012 Karl Waclawek <karl@waclawek.net>
|
||||
Copyright (c) 2016-2023 Sebastian Pipping <sebastian@pipping.org>
|
||||
Copyright (c) 2016-2025 Sebastian Pipping <sebastian@pipping.org>
|
||||
Copyright (c) 2017-2022 Rhodri James <rhodri@wildebeest.org.uk>
|
||||
Copyright (c) 2017 Joe Orton <jorton@redhat.com>
|
||||
Copyright (c) 2017 José Gutiérrez de la Concha <jose@zeroc.com>
|
||||
@@ -111,12 +111,6 @@ extern void _expect_failure(const char *text, enum XML_Error errorCode,
|
||||
/* Support functions for handlers to collect up character and attribute data.
|
||||
*/
|
||||
|
||||
extern void XMLCALL accumulate_characters(void *userData, const XML_Char *s,
|
||||
int len);
|
||||
|
||||
extern void XMLCALL accumulate_attribute(void *userData, const XML_Char *name,
|
||||
const XML_Char **atts);
|
||||
|
||||
extern void _run_character_check(const char *text, const XML_Char *expected,
|
||||
const char *file, int line);
|
||||
|
||||
@@ -135,9 +129,6 @@ typedef struct ExtTest {
|
||||
CharData *storage;
|
||||
} ExtTest;
|
||||
|
||||
extern void XMLCALL ext_accumulate_characters(void *userData, const XML_Char *s,
|
||||
int len);
|
||||
|
||||
extern void _run_ext_character_check(const char *text, ExtTest *test_data,
|
||||
const XML_Char *expected, const char *file,
|
||||
int line);
|
||||
@@ -155,6 +146,8 @@ extern void *duff_allocator(size_t size);
|
||||
|
||||
extern void *duff_reallocator(void *ptr, size_t size);
|
||||
|
||||
extern char *portable_strndup(const char *s, size_t n);
|
||||
|
||||
#endif /* XML_COMMON_H */
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
@@ -103,7 +103,9 @@ end_element_event_handler2(void *userData, const XML_Char *name) {
|
||||
void XMLCALL
|
||||
counting_start_element_handler(void *userData, const XML_Char *name,
|
||||
const XML_Char **atts) {
|
||||
ElementInfo *info = (ElementInfo *)userData;
|
||||
ParserAndElementInfo *const parserAndElementInfos
|
||||
= (ParserAndElementInfo *)userData;
|
||||
ElementInfo *info = parserAndElementInfos->info;
|
||||
AttrInfo *attr;
|
||||
int count, id, i;
|
||||
|
||||
@@ -120,12 +122,12 @@ counting_start_element_handler(void *userData, const XML_Char *name,
|
||||
* is possibly a little unexpected, but it is what the
|
||||
* documentation in expat.h tells us to expect.
|
||||
*/
|
||||
count = XML_GetSpecifiedAttributeCount(g_parser);
|
||||
count = XML_GetSpecifiedAttributeCount(parserAndElementInfos->parser);
|
||||
if (info->attr_count * 2 != count) {
|
||||
fail("Not got expected attribute count");
|
||||
return;
|
||||
}
|
||||
id = XML_GetIdAttributeIndex(g_parser);
|
||||
id = XML_GetIdAttributeIndex(parserAndElementInfos->parser);
|
||||
if (id == -1 && info->id_name != NULL) {
|
||||
fail("ID not present");
|
||||
return;
|
||||
@@ -1840,6 +1842,15 @@ element_decl_suspender(void *userData, const XML_Char *name,
|
||||
XML_FreeContentModel(g_parser, model);
|
||||
}
|
||||
|
||||
void XMLCALL
|
||||
suspend_after_element_declaration(void *userData, const XML_Char *name,
|
||||
XML_Content *model) {
|
||||
UNUSED_P(name);
|
||||
XML_Parser parser = (XML_Parser)userData;
|
||||
assert_true(XML_StopParser(parser, /*resumable*/ XML_TRUE) == XML_STATUS_OK);
|
||||
XML_FreeContentModel(parser, model);
|
||||
}
|
||||
|
||||
void XMLCALL
|
||||
accumulate_pi_characters(void *userData, const XML_Char *target,
|
||||
const XML_Char *data) {
|
||||
@@ -1881,9 +1892,17 @@ accumulate_entity_decl(void *userData, const XML_Char *entityName,
|
||||
}
|
||||
|
||||
void XMLCALL
|
||||
accumulate_char_data(void *userData, const XML_Char *s, int len) {
|
||||
CharData *const storage = (CharData *)userData;
|
||||
CharData_AppendXMLChars(storage, s, len);
|
||||
accumulate_char_data_and_suspend(void *userData, const XML_Char *s, int len) {
|
||||
ParserPlusStorage *const parserPlusStorage = (ParserPlusStorage *)userData;
|
||||
|
||||
CharData_AppendXMLChars(parserPlusStorage->storage, s, len);
|
||||
|
||||
for (int i = 0; i < len; i++) {
|
||||
if (s[i] == 'Z') {
|
||||
XML_StopParser(parserPlusStorage->parser, /*resumable=*/XML_TRUE);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void XMLCALL
|
||||
@@ -1910,6 +1929,34 @@ accumulate_start_element(void *userData, const XML_Char *name,
|
||||
CharData_AppendXMLChars(storage, XCS(")\n"), 2);
|
||||
}
|
||||
|
||||
void XMLCALL
|
||||
accumulate_characters(void *userData, const XML_Char *s, int len) {
|
||||
CharData *const storage = (CharData *)userData;
|
||||
CharData_AppendXMLChars(storage, s, len);
|
||||
}
|
||||
|
||||
void XMLCALL
|
||||
accumulate_attribute(void *userData, const XML_Char *name,
|
||||
const XML_Char **atts) {
|
||||
CharData *const storage = (CharData *)userData;
|
||||
UNUSED_P(name);
|
||||
/* Check there are attributes to deal with */
|
||||
if (atts == NULL)
|
||||
return;
|
||||
|
||||
while (storage->count < 0 && atts[0] != NULL) {
|
||||
/* "accumulate" the value of the first attribute we see */
|
||||
CharData_AppendXMLChars(storage, atts[1], -1);
|
||||
atts += 2;
|
||||
}
|
||||
}
|
||||
|
||||
void XMLCALL
|
||||
ext_accumulate_characters(void *userData, const XML_Char *s, int len) {
|
||||
ExtTest *const test_data = (ExtTest *)userData;
|
||||
accumulate_characters(test_data->storage, s, len);
|
||||
}
|
||||
|
||||
void XMLCALL
|
||||
checking_default_handler(void *userData, const XML_Char *s, int len) {
|
||||
DefaultCheck *data = (DefaultCheck *)userData;
|
||||
|
||||
@@ -92,6 +92,11 @@ typedef struct elementInfo {
|
||||
AttrInfo *attributes;
|
||||
} ElementInfo;
|
||||
|
||||
typedef struct StructParserAndElementInfo {
|
||||
XML_Parser parser;
|
||||
ElementInfo *info;
|
||||
} ParserAndElementInfo;
|
||||
|
||||
extern void XMLCALL counting_start_element_handler(void *userData,
|
||||
const XML_Char *name,
|
||||
const XML_Char **atts);
|
||||
@@ -320,6 +325,7 @@ extern int XMLCALL external_entity_devaluer(XML_Parser parser,
|
||||
typedef struct ext_hdlr_data {
|
||||
const char *parse_text;
|
||||
XML_ExternalEntityRefHandler handler;
|
||||
CharData *storage;
|
||||
} ExtHdlrData;
|
||||
|
||||
extern int XMLCALL external_entity_oneshot_loader(XML_Parser parser,
|
||||
@@ -552,6 +558,10 @@ extern void XMLCALL suspending_comment_handler(void *userData,
|
||||
extern void XMLCALL element_decl_suspender(void *userData, const XML_Char *name,
|
||||
XML_Content *model);
|
||||
|
||||
extern void XMLCALL suspend_after_element_declaration(void *userData,
|
||||
const XML_Char *name,
|
||||
XML_Content *model);
|
||||
|
||||
extern void XMLCALL accumulate_pi_characters(void *userData,
|
||||
const XML_Char *target,
|
||||
const XML_Char *data);
|
||||
@@ -564,13 +574,23 @@ extern void XMLCALL accumulate_entity_decl(
|
||||
const XML_Char *systemId, const XML_Char *publicId,
|
||||
const XML_Char *notationName);
|
||||
|
||||
extern void XMLCALL accumulate_char_data(void *userData, const XML_Char *s,
|
||||
int len);
|
||||
extern void XMLCALL accumulate_char_data_and_suspend(void *userData,
|
||||
const XML_Char *s,
|
||||
int len);
|
||||
|
||||
extern void XMLCALL accumulate_start_element(void *userData,
|
||||
const XML_Char *name,
|
||||
const XML_Char **atts);
|
||||
|
||||
extern void XMLCALL accumulate_characters(void *userData, const XML_Char *s,
|
||||
int len);
|
||||
|
||||
extern void XMLCALL accumulate_attribute(void *userData, const XML_Char *name,
|
||||
const XML_Char **atts);
|
||||
|
||||
extern void XMLCALL ext_accumulate_characters(void *userData, const XML_Char *s,
|
||||
int len);
|
||||
|
||||
typedef struct default_check {
|
||||
const XML_Char *expected;
|
||||
const int expectedLen;
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
|
||||
Copyright (c) 2004-2006 Fred L. Drake, Jr. <fdrake@users.sourceforge.net>
|
||||
Copyright (c) 2006-2012 Karl Waclawek <karl@waclawek.net>
|
||||
Copyright (c) 2016-2024 Sebastian Pipping <sebastian@pipping.org>
|
||||
Copyright (c) 2016-2025 Sebastian Pipping <sebastian@pipping.org>
|
||||
Copyright (c) 2022 Rhodri James <rhodri@wildebeest.org.uk>
|
||||
Copyright (c) 2023-2024 Sony Corporation / Snild Dolkow <snild@sony.com>
|
||||
Licensed under the MIT license:
|
||||
@@ -129,8 +129,10 @@ void _check_set_test_info(char const *function, char const *filename,
|
||||
* Prototypes for the actual implementation.
|
||||
*/
|
||||
|
||||
# if defined(__GNUC__)
|
||||
# if defined(__has_attribute)
|
||||
# if __has_attribute(noreturn)
|
||||
__attribute__((noreturn))
|
||||
# endif
|
||||
# endif
|
||||
void
|
||||
_fail(const char *file, int line, const char *msg);
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
Copyright (c) 2003 Greg Stein <gstein@users.sourceforge.net>
|
||||
Copyright (c) 2005-2007 Steven Solie <steven@solie.ca>
|
||||
Copyright (c) 2005-2012 Karl Waclawek <karl@waclawek.net>
|
||||
Copyright (c) 2016-2024 Sebastian Pipping <sebastian@pipping.org>
|
||||
Copyright (c) 2016-2025 Sebastian Pipping <sebastian@pipping.org>
|
||||
Copyright (c) 2017-2022 Rhodri James <rhodri@wildebeest.org.uk>
|
||||
Copyright (c) 2017 Joe Orton <jorton@redhat.com>
|
||||
Copyright (c) 2017 José Gutiérrez de la Concha <jose@zeroc.com>
|
||||
@@ -59,6 +59,9 @@
|
||||
#include "handlers.h"
|
||||
#include "misc_tests.h"
|
||||
|
||||
void XMLCALL accumulate_characters_ext_handler(void *userData,
|
||||
const XML_Char *s, int len);
|
||||
|
||||
/* Test that a failure to allocate the parser structure fails gracefully */
|
||||
START_TEST(test_misc_alloc_create_parser) {
|
||||
XML_Memory_Handling_Suite memsuite = {duff_allocator, realloc, free};
|
||||
@@ -208,7 +211,7 @@ START_TEST(test_misc_version) {
|
||||
if (! versions_equal(&read_version, &parsed_version))
|
||||
fail("Version mismatch");
|
||||
|
||||
if (xcstrcmp(version_text, XCS("expat_2.6.0"))) /* needs bump on releases */
|
||||
if (xcstrcmp(version_text, XCS("expat_2.7.1"))) /* needs bump on releases */
|
||||
fail("XML_*_VERSION in expat.h out of sync?\n");
|
||||
}
|
||||
END_TEST
|
||||
@@ -294,6 +297,7 @@ START_TEST(test_misc_stop_during_end_handler_issue_240_1) {
|
||||
parser = XML_ParserCreate(NULL);
|
||||
XML_SetElementHandler(parser, start_element_issue_240, end_element_issue_240);
|
||||
mydata = (DataIssue240 *)malloc(sizeof(DataIssue240));
|
||||
assert_true(mydata != NULL);
|
||||
mydata->parser = parser;
|
||||
mydata->deep = 0;
|
||||
XML_SetUserData(parser, mydata);
|
||||
@@ -315,6 +319,7 @@ START_TEST(test_misc_stop_during_end_handler_issue_240_2) {
|
||||
parser = XML_ParserCreate(NULL);
|
||||
XML_SetElementHandler(parser, start_element_issue_240, end_element_issue_240);
|
||||
mydata = (DataIssue240 *)malloc(sizeof(DataIssue240));
|
||||
assert_true(mydata != NULL);
|
||||
mydata->parser = parser;
|
||||
mydata->deep = 0;
|
||||
XML_SetUserData(parser, mydata);
|
||||
@@ -328,63 +333,119 @@ START_TEST(test_misc_stop_during_end_handler_issue_240_2) {
|
||||
END_TEST
|
||||
|
||||
START_TEST(test_misc_deny_internal_entity_closing_doctype_issue_317) {
|
||||
const char *const inputOne = "<!DOCTYPE d [\n"
|
||||
"<!ENTITY % e ']><d/>'>\n"
|
||||
"\n"
|
||||
"%e;";
|
||||
const char *const inputTwo = "<!DOCTYPE d [\n"
|
||||
"<!ENTITY % e1 ']><d/>'><!ENTITY % e2 '&e1;'>\n"
|
||||
"\n"
|
||||
"%e2;";
|
||||
const char *const inputThree = "<!DOCTYPE d [\n"
|
||||
"<!ENTITY % e ']><d'>\n"
|
||||
"\n"
|
||||
"%e;";
|
||||
const char *const inputIssue317 = "<!DOCTYPE doc [\n"
|
||||
"<!ENTITY % foo ']>\n"
|
||||
"<doc>Hell<oc (#PCDATA)*>'>\n"
|
||||
"%foo;\n"
|
||||
"]>\n"
|
||||
"<doc>Hello, world</dVc>";
|
||||
const char *const inputOne
|
||||
= "<!DOCTYPE d [\n"
|
||||
"<!ENTITY % element_d '<!ELEMENT d (#PCDATA)*>'>\n"
|
||||
"%element_d;\n"
|
||||
"<!ENTITY % e ']><d/>'>\n"
|
||||
"\n"
|
||||
"%e;";
|
||||
const char *const inputTwo
|
||||
= "<!DOCTYPE d [\n"
|
||||
"<!ENTITY % element_d '<!ELEMENT d (#PCDATA)*>'>\n"
|
||||
"%element_d;\n"
|
||||
"<!ENTITY % e1 ']><d/>'><!ENTITY % e2 '%e1;'>\n"
|
||||
"\n"
|
||||
"%e2;";
|
||||
const char *const inputThree
|
||||
= "<!DOCTYPE d [\n"
|
||||
"<!ENTITY % element_d '<!ELEMENT d (#PCDATA)*>'>\n"
|
||||
"%element_d;\n"
|
||||
"<!ENTITY % e ']><d'>\n"
|
||||
"\n"
|
||||
"%e;/>";
|
||||
const char *const inputIssue317
|
||||
= "<!DOCTYPE doc [\n"
|
||||
"<!ENTITY % element_doc '<!ELEMENT doc (#PCDATA)*>'>\n"
|
||||
"%element_doc;\n"
|
||||
"<!ENTITY % foo ']>\n"
|
||||
"<doc>Hell<oc (#PCDATA)*>'>\n"
|
||||
"%foo;\n"
|
||||
"]>\n"
|
||||
"<doc>Hello, world</dVc>";
|
||||
|
||||
const char *const inputs[] = {inputOne, inputTwo, inputThree, inputIssue317};
|
||||
const XML_Bool suspendOrNot[] = {XML_FALSE, XML_TRUE};
|
||||
size_t inputIndex = 0;
|
||||
|
||||
for (; inputIndex < sizeof(inputs) / sizeof(inputs[0]); inputIndex++) {
|
||||
set_subtest("%s", inputs[inputIndex]);
|
||||
XML_Parser parser;
|
||||
enum XML_Status parseResult;
|
||||
int setParamEntityResult;
|
||||
XML_Size lineNumber;
|
||||
XML_Size columnNumber;
|
||||
const char *const input = inputs[inputIndex];
|
||||
for (size_t suspendOrNotIndex = 0;
|
||||
suspendOrNotIndex < sizeof(suspendOrNot) / sizeof(suspendOrNot[0]);
|
||||
suspendOrNotIndex++) {
|
||||
const char *const input = inputs[inputIndex];
|
||||
const XML_Bool suspend = suspendOrNot[suspendOrNotIndex];
|
||||
if (suspend && (g_chunkSize > 0)) {
|
||||
// We cannot use _XML_Parse_SINGLE_BYTES below due to suspension, and
|
||||
// so chunk sizes >0 would only repeat the very same test
|
||||
// due to use of plain XML_Parse; we are saving upon that runtime:
|
||||
return;
|
||||
}
|
||||
|
||||
parser = XML_ParserCreate(NULL);
|
||||
setParamEntityResult
|
||||
= XML_SetParamEntityParsing(parser, XML_PARAM_ENTITY_PARSING_ALWAYS);
|
||||
if (setParamEntityResult != 1)
|
||||
fail("Failed to set XML_PARAM_ENTITY_PARSING_ALWAYS.");
|
||||
set_subtest("[input=%d suspend=%s] %s", (int)inputIndex,
|
||||
suspend ? "true" : "false", input);
|
||||
XML_Parser parser;
|
||||
enum XML_Status parseResult;
|
||||
int setParamEntityResult;
|
||||
XML_Size lineNumber;
|
||||
XML_Size columnNumber;
|
||||
|
||||
parser = XML_ParserCreate(NULL);
|
||||
setParamEntityResult
|
||||
= XML_SetParamEntityParsing(parser, XML_PARAM_ENTITY_PARSING_ALWAYS);
|
||||
if (setParamEntityResult != 1)
|
||||
fail("Failed to set XML_PARAM_ENTITY_PARSING_ALWAYS.");
|
||||
|
||||
if (suspend) {
|
||||
XML_SetUserData(parser, parser);
|
||||
XML_SetElementDeclHandler(parser, suspend_after_element_declaration);
|
||||
}
|
||||
|
||||
if (suspend) {
|
||||
// can't use SINGLE_BYTES here, because it'll return early on
|
||||
// suspension, and we won't know exactly how much input we actually
|
||||
// managed to give Expat.
|
||||
parseResult = XML_Parse(parser, input, (int)strlen(input), 0);
|
||||
|
||||
while (parseResult == XML_STATUS_SUSPENDED) {
|
||||
parseResult = XML_ResumeParser(parser);
|
||||
}
|
||||
|
||||
if (parseResult != XML_STATUS_ERROR) {
|
||||
// can't use SINGLE_BYTES here, because it'll return early on
|
||||
// suspension, and we won't know exactly how much input we actually
|
||||
// managed to give Expat.
|
||||
parseResult = XML_Parse(parser, "", 0, 1);
|
||||
}
|
||||
|
||||
while (parseResult == XML_STATUS_SUSPENDED) {
|
||||
parseResult = XML_ResumeParser(parser);
|
||||
}
|
||||
} else {
|
||||
parseResult
|
||||
= _XML_Parse_SINGLE_BYTES(parser, input, (int)strlen(input), 0);
|
||||
|
||||
if (parseResult != XML_STATUS_ERROR) {
|
||||
parseResult = _XML_Parse_SINGLE_BYTES(parser, "", 0, 1);
|
||||
}
|
||||
}
|
||||
|
||||
parseResult = _XML_Parse_SINGLE_BYTES(parser, input, (int)strlen(input), 0);
|
||||
if (parseResult != XML_STATUS_ERROR) {
|
||||
parseResult = _XML_Parse_SINGLE_BYTES(parser, "", 0, 1);
|
||||
if (parseResult != XML_STATUS_ERROR) {
|
||||
fail("Parsing was expected to fail but succeeded.");
|
||||
}
|
||||
|
||||
if (XML_GetErrorCode(parser) != XML_ERROR_INVALID_TOKEN)
|
||||
fail("Error code does not match XML_ERROR_INVALID_TOKEN");
|
||||
|
||||
lineNumber = XML_GetCurrentLineNumber(parser);
|
||||
if (lineNumber != 6)
|
||||
fail("XML_GetCurrentLineNumber does not work as expected.");
|
||||
|
||||
columnNumber = XML_GetCurrentColumnNumber(parser);
|
||||
if (columnNumber != 0)
|
||||
fail("XML_GetCurrentColumnNumber does not work as expected.");
|
||||
|
||||
XML_ParserFree(parser);
|
||||
}
|
||||
|
||||
if (XML_GetErrorCode(parser) != XML_ERROR_INVALID_TOKEN)
|
||||
fail("Error code does not match XML_ERROR_INVALID_TOKEN");
|
||||
|
||||
lineNumber = XML_GetCurrentLineNumber(parser);
|
||||
if (lineNumber != 4)
|
||||
fail("XML_GetCurrentLineNumber does not work as expected.");
|
||||
|
||||
columnNumber = XML_GetCurrentColumnNumber(parser);
|
||||
if (columnNumber != 0)
|
||||
fail("XML_GetCurrentColumnNumber does not work as expected.");
|
||||
|
||||
XML_ParserFree(parser);
|
||||
}
|
||||
}
|
||||
END_TEST
|
||||
@@ -447,7 +508,7 @@ START_TEST(test_misc_general_entities_support) {
|
||||
XML_SetExternalEntityRefHandler(parser,
|
||||
external_entity_failer__if_not_xml_ge);
|
||||
XML_SetEntityDeclHandler(parser, accumulate_entity_decl);
|
||||
XML_SetCharacterDataHandler(parser, accumulate_char_data);
|
||||
XML_SetCharacterDataHandler(parser, accumulate_characters);
|
||||
|
||||
if (_XML_Parse_SINGLE_BYTES(parser, doc, (int)strlen(doc), XML_TRUE)
|
||||
!= XML_STATUS_OK) {
|
||||
@@ -496,6 +557,127 @@ START_TEST(test_misc_char_handler_stop_without_leak) {
|
||||
}
|
||||
END_TEST
|
||||
|
||||
START_TEST(test_misc_resumeparser_not_crashing) {
|
||||
XML_Parser parser = XML_ParserCreate(NULL);
|
||||
XML_GetBuffer(parser, 1);
|
||||
XML_StopParser(parser, /*resumable=*/XML_TRUE);
|
||||
XML_ResumeParser(parser); // could crash here, previously
|
||||
XML_ParserFree(parser);
|
||||
}
|
||||
END_TEST
|
||||
|
||||
START_TEST(test_misc_stopparser_rejects_unstarted_parser) {
|
||||
const XML_Bool cases[] = {XML_TRUE, XML_FALSE};
|
||||
for (size_t i = 0; i < sizeof(cases) / sizeof(cases[0]); i++) {
|
||||
const XML_Bool resumable = cases[i];
|
||||
XML_Parser parser = XML_ParserCreate(NULL);
|
||||
assert_true(XML_GetErrorCode(parser) == XML_ERROR_NONE);
|
||||
assert_true(XML_StopParser(parser, resumable) == XML_STATUS_ERROR);
|
||||
assert_true(XML_GetErrorCode(parser) == XML_ERROR_NOT_STARTED);
|
||||
XML_ParserFree(parser);
|
||||
}
|
||||
}
|
||||
END_TEST
|
||||
|
||||
/* Adaptation of accumulate_characters that takes ExtHdlrData input to work with
|
||||
* test_renter_loop_finite_content below */
|
||||
void XMLCALL
|
||||
accumulate_characters_ext_handler(void *userData, const XML_Char *s, int len) {
|
||||
ExtHdlrData *const test_data = (ExtHdlrData *)userData;
|
||||
CharData_AppendXMLChars(test_data->storage, s, len);
|
||||
}
|
||||
|
||||
/* Test that internalEntityProcessor does not re-enter forever;
|
||||
* based on files tests/xmlconf/xmltest/valid/ext-sa/012.{xml,ent} */
|
||||
START_TEST(test_renter_loop_finite_content) {
|
||||
CharData storage;
|
||||
CharData_Init(&storage);
|
||||
const char *const text = "<!DOCTYPE doc [\n"
|
||||
"<!ENTITY e1 '&e2;'>\n"
|
||||
"<!ENTITY e2 '&e3;'>\n"
|
||||
"<!ENTITY e3 SYSTEM '012.ent'>\n"
|
||||
"<!ENTITY e4 '&e5;'>\n"
|
||||
"<!ENTITY e5 '(e5)'>\n"
|
||||
"<!ELEMENT doc (#PCDATA)>\n"
|
||||
"]>\n"
|
||||
"<doc>&e1;</doc>\n";
|
||||
ExtHdlrData test_data = {"&e4;\n", external_entity_null_loader, &storage};
|
||||
const XML_Char *const expected = XCS("(e5)\n");
|
||||
|
||||
XML_Parser parser = XML_ParserCreate(NULL);
|
||||
assert_true(parser != NULL);
|
||||
XML_SetUserData(parser, &test_data);
|
||||
XML_SetExternalEntityRefHandler(parser, external_entity_oneshot_loader);
|
||||
XML_SetCharacterDataHandler(parser, accumulate_characters_ext_handler);
|
||||
if (_XML_Parse_SINGLE_BYTES(parser, text, (int)strlen(text), XML_TRUE)
|
||||
== XML_STATUS_ERROR)
|
||||
xml_failure(parser);
|
||||
|
||||
CharData_CheckXMLChars(&storage, expected);
|
||||
XML_ParserFree(parser);
|
||||
}
|
||||
END_TEST
|
||||
|
||||
// Inspired by function XML_OriginalString of Perl's XML::Parser
|
||||
static char *
|
||||
dup_original_string(XML_Parser parser) {
|
||||
const int byte_count = XML_GetCurrentByteCount(parser);
|
||||
|
||||
assert_true(byte_count >= 0);
|
||||
|
||||
int offset = -1;
|
||||
int size = -1;
|
||||
|
||||
const char *const context = XML_GetInputContext(parser, &offset, &size);
|
||||
|
||||
#if XML_CONTEXT_BYTES > 0
|
||||
assert_true(context != NULL);
|
||||
assert_true(offset >= 0);
|
||||
assert_true(size >= 0);
|
||||
return portable_strndup(context + offset, byte_count);
|
||||
#else
|
||||
assert_true(context == NULL);
|
||||
return NULL;
|
||||
#endif
|
||||
}
|
||||
|
||||
static void
|
||||
on_characters_issue_980(void *userData, const XML_Char *s, int len) {
|
||||
(void)s;
|
||||
(void)len;
|
||||
XML_Parser parser = (XML_Parser)userData;
|
||||
|
||||
char *const original_string = dup_original_string(parser);
|
||||
|
||||
#if XML_CONTEXT_BYTES > 0
|
||||
assert_true(original_string != NULL);
|
||||
assert_true(strcmp(original_string, "&draft.day;") == 0);
|
||||
free(original_string);
|
||||
#else
|
||||
assert_true(original_string == NULL);
|
||||
#endif
|
||||
}
|
||||
|
||||
START_TEST(test_misc_expected_event_ptr_issue_980) {
|
||||
// NOTE: This is a tiny subset of sample "REC-xml-19980210.xml"
|
||||
// from Perl's XML::Parser
|
||||
const char *const doc = "<!DOCTYPE day [\n"
|
||||
" <!ENTITY draft.day '10'>\n"
|
||||
"]>\n"
|
||||
"<day>&draft.day;</day>\n";
|
||||
|
||||
XML_Parser parser = XML_ParserCreate(NULL);
|
||||
XML_SetUserData(parser, parser);
|
||||
XML_SetCharacterDataHandler(parser, on_characters_issue_980);
|
||||
|
||||
assert_true(_XML_Parse_SINGLE_BYTES(parser, doc, (int)strlen(doc),
|
||||
/*isFinal=*/XML_TRUE)
|
||||
== XML_STATUS_OK);
|
||||
|
||||
XML_ParserFree(parser);
|
||||
}
|
||||
END_TEST
|
||||
|
||||
void
|
||||
make_miscellaneous_test_case(Suite *s) {
|
||||
TCase *tc_misc = tcase_create("miscellaneous tests");
|
||||
@@ -520,4 +702,8 @@ make_miscellaneous_test_case(Suite *s) {
|
||||
test_misc_create_external_entity_parser_with_null_context);
|
||||
tcase_add_test(tc_misc, test_misc_general_entities_support);
|
||||
tcase_add_test(tc_misc, test_misc_char_handler_stop_without_leak);
|
||||
tcase_add_test(tc_misc, test_misc_resumeparser_not_crashing);
|
||||
tcase_add_test(tc_misc, test_misc_stopparser_rejects_unstarted_parser);
|
||||
tcase_add_test__if_xml_ge(tc_misc, test_renter_loop_finite_content);
|
||||
tcase_add_test(tc_misc, test_misc_expected_event_ptr_issue_980);
|
||||
}
|
||||
@@ -2,8 +2,8 @@
|
||||
# EXPAT TEST SCRIPT FOR W3C XML TEST SUITE
|
||||
#
|
||||
# This script can be used to exercise Expat against the
|
||||
# w3c.org xml test suite, available from
|
||||
# http://www.w3.org/XML/Test/xmlts20020606.zip.
|
||||
# w3c.org xml test suite, available from:
|
||||
# https://www.w3.org/XML/Test/xmlts20020606.zip
|
||||
#
|
||||
# To run this script, first set XMLWF below so that xmlwf can be
|
||||
# found, then set the output directory with OUTPUT.
|
||||
@@ -30,6 +30,7 @@
|
||||
# Copyright (c) 2002 Karl Waclawek <[email protected]>
|
||||
# Copyright (c) 2008-2019 Sebastian Pipping <[email protected]>
|
||||
# Copyright (c) 2017 Rhodri James <[email protected]>
|
||||
# Copyright (c) 2025 Hanno Böck <[email protected]>
|
||||
# Licensed under the MIT license:
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining
|
||||
|
||||
@@ -311,6 +311,7 @@ RANLIB = @RANLIB@
|
||||
SED = @SED@
|
||||
SET_MAKE = @SET_MAKE@
|
||||
SHELL = @SHELL@
|
||||
SIZEOF_VOID_P = @SIZEOF_VOID_P@
|
||||
SO_MAJOR = @SO_MAJOR@
|
||||
SO_MINOR = @SO_MINOR@
|
||||
SO_PATCH = @SO_PATCH@
|
||||
@@ -324,7 +325,6 @@ ac_ct_AR = @ac_ct_AR@
|
||||
ac_ct_CC = @ac_ct_CC@
|
||||
ac_ct_CXX = @ac_ct_CXX@
|
||||
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
|
||||
ac_cv_sizeof_void_p = @ac_cv_sizeof_void_p@
|
||||
am__include = @am__include@
|
||||
am__leading_dot = @am__leading_dot@
|
||||
am__quote = @am__quote@
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
Copyright (c) 2017 Rhodri James <rhodri@wildebeest.org.uk>
|
||||
Copyright (c) 2017 Franek Korta <fkorta@gmail.com>
|
||||
Copyright (c) 2022 Sean McBride <sean@rogue-research.com>
|
||||
Copyright (c) 2025 Hanno Böck <hanno@gentoo.org>
|
||||
Licensed under the MIT license:
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
@@ -55,7 +56,7 @@
|
||||
# define EXPAT_read_count_t int
|
||||
# define EXPAT_read_req_t unsigned int
|
||||
#else /* POSIX */
|
||||
/* http://pubs.opengroup.org/onlinepubs/009695399/functions/read.html */
|
||||
/* https://pubs.opengroup.org/onlinepubs/009695399/functions/read.html */
|
||||
# define EXPAT_read read
|
||||
# define EXPAT_read_count_t ssize_t
|
||||
# define EXPAT_read_req_t size_t
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
Copyright (c) 2017 Rhodri James <rhodri@wildebeest.org.uk>
|
||||
Copyright (c) 2019 David Loffredo <loffredo@steptools.com>
|
||||
Copyright (c) 2021 Donghee Na <donghee.na@python.org>
|
||||
Copyright (c) 2024 Hanno Böck <hanno@gentoo.org>
|
||||
Licensed under the MIT license:
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
@@ -91,7 +92,8 @@ reportError(XML_Parser parser, const XML_Char *filename) {
|
||||
filename, XML_GetErrorLineNumber(parser),
|
||||
XML_GetErrorColumnNumber(parser), message);
|
||||
else
|
||||
ftprintf(stderr, T("%s: (unknown message %d)\n"), filename, code);
|
||||
ftprintf(stderr, T("%s: (unknown message %u)\n"), filename,
|
||||
(unsigned int)code);
|
||||
}
|
||||
|
||||
/* This implementation will give problems on files larger than INT_MAX. */
|
||||
|
||||
@@ -46,7 +46,7 @@ class X86CompressEVEXTablesEmitter {
|
||||
|
||||
typedef std::pair<const CodeGenInstruction *, const CodeGenInstruction *>
|
||||
Entry;
|
||||
typedef std::map<const Record *, std::vector<const CodeGenInstruction *>>
|
||||
typedef std::map<StringRef, std::vector<const CodeGenInstruction *>>
|
||||
PredicateInstMap;
|
||||
|
||||
std::vector<Entry> Table;
|
||||
@@ -89,7 +89,7 @@ void X86CompressEVEXTablesEmitter::printCheckPredicate(
|
||||
for (const auto &[Key, Val] : PredicateInsts) {
|
||||
for (const auto &Inst : Val)
|
||||
OS << " case X86::" << Inst->TheDef->getName() << ":\n";
|
||||
OS << " return " << Key->getValueAsString("CondString") << ";\n";
|
||||
OS << " return " << Key << ";\n";
|
||||
}
|
||||
|
||||
OS << " }\n";
|
||||
@@ -226,7 +226,7 @@ void X86CompressEVEXTablesEmitter::run(raw_ostream &OS) {
|
||||
Name == "HasAVXIFMA";
|
||||
});
|
||||
if(It!= Predicates.end())
|
||||
PredicateInsts[*It].push_back(NewInst);
|
||||
PredicateInsts[(*It)->getValueAsString("CondString")].push_back(NewInst);
|
||||
}
|
||||
|
||||
printTable(Table, OS);
|
||||
|
||||
@@ -23,10 +23,10 @@ such as renaming, adding or removing zones, please read
|
||||
"Theory and pragmatics of the tz code and data"
|
||||
<https://www.iana.org/time-zones/repository/theory.html>.
|
||||
It is also good to browse the mailing list archives
|
||||
<https://mm.icann.org/pipermail/tz/> for examples of patches that tend
|
||||
to work well. Additions to data should contain commentary citing
|
||||
reliable sources as justification. Citations should use "https:" URLs
|
||||
if available.
|
||||
<https://lists.iana.org/hyperkitty/list/[email protected]/>
|
||||
for examples of patches that tend to work well.
|
||||
Changes should contain commentary citing reliable sources.
|
||||
Citations should use "https:" URLs if available.
|
||||
|
||||
For changes that fix sensitive security-related bugs, please see the
|
||||
distribution's 'SECURITY' file.
|
||||
@@ -63,12 +63,16 @@ If you use Git the following workflow may be helpful:
|
||||
* Edit source files. Include commentary that justifies the
|
||||
changes by citing reliable sources.
|
||||
|
||||
* Debug the changes, e.g.:
|
||||
* Debug the changes locally, e.g.:
|
||||
|
||||
make check
|
||||
make install
|
||||
make TOPDIR=$PWD/tz clean check install
|
||||
./zdump -v America/Los_Angeles
|
||||
|
||||
Although builds assume only basic POSIX, they use extra features
|
||||
if available. 'make check' accesses validator.w3.org unless you
|
||||
lack 'curl' or use 'make CURL=:'. If you have the latest GCC,
|
||||
"make CFLAGS='$(GCC_DEBUG_FLAGS)'" does extra checking.
|
||||
|
||||
* For each separable change, commit it in the new branch, e.g.:
|
||||
|
||||
git add northamerica
|
||||
|
||||
+230
-208
@@ -3,17 +3,17 @@
|
||||
# 2009-05-17 by Arthur David Olson.
|
||||
# Request POSIX conformance; this must be the first non-comment line.
|
||||
.POSIX:
|
||||
# On older platforms you may need to scrounge for a POSIX-conforming 'make'.
|
||||
# For example, on Solaris 10 (2005), use /usr/sfw/bin/gmake or
|
||||
# /usr/xpg4/bin/make, not /usr/ccs/bin/make.
|
||||
# On older platforms you may need to scrounge for POSIX conformance.
|
||||
# For example, on Solaris 10 (2005) with Sun Studio 12 aka Sun C 5.9 (2007),
|
||||
# use 'PATH=/usr/xpg4/bin:$PATH make CC=c99'.
|
||||
|
||||
# To affect how this Makefile works, you can run a shell script like this:
|
||||
#
|
||||
# #!/bin/sh
|
||||
# make CC='gcc -std=gnu11' "$@"
|
||||
# make CC='gcc -std=gnu23' "$@"
|
||||
#
|
||||
# This example script is appropriate for a pre-2017 GNU/Linux system
|
||||
# where a non-default setting is needed to support this package's use of C99.
|
||||
# This example script is appropriate for a circa 2024 GNU/Linux system
|
||||
# where a non-default setting enables this package's optional use of C23.
|
||||
#
|
||||
# Alternatively, you can simply edit this Makefile to tailor the following
|
||||
# macro definitions.
|
||||
@@ -53,7 +53,7 @@ DATAFORM= main
|
||||
|
||||
LOCALTIME= Factory
|
||||
|
||||
# The POSIXRULES macro controls interpretation of POSIX-2017.1-like TZ
|
||||
# The POSIXRULES macro controls interpretation of POSIX-like TZ
|
||||
# settings like TZ='EET-2EEST' that lack DST transition rules.
|
||||
# If POSIXRULES is '-', no template is installed; this is the default.
|
||||
# Any other value for POSIXRULES is obsolete and should not be relied on, as:
|
||||
@@ -132,11 +132,12 @@ LIBDIR = $(TOPDIR)/$(USRDIR)/lib
|
||||
|
||||
# Types to try, as an alternative to time_t.
|
||||
TIME_T_ALTERNATIVES = $(TIME_T_ALTERNATIVES_HEAD) $(TIME_T_ALTERNATIVES_TAIL)
|
||||
TIME_T_ALTERNATIVES_HEAD = int_least64_t
|
||||
TIME_T_ALTERNATIVES_TAIL = int_least32_t uint_least32_t uint_least64_t
|
||||
TIME_T_ALTERNATIVES_HEAD = int_least64_t.ck
|
||||
TIME_T_ALTERNATIVES_TAIL = int_least32_t.ck uint_least32_t.ck \
|
||||
uint_least64_t.ck
|
||||
|
||||
# What kind of TZif data files to generate. (TZif is the binary time
|
||||
# zone data format that zic generates; see Internet RFC 8536.)
|
||||
# zone data format that zic generates; see Internet RFC 9636.)
|
||||
# If you want only POSIX time, with time values interpreted as
|
||||
# seconds since the epoch (not counting leap seconds), use
|
||||
# REDO= posix_only
|
||||
@@ -219,6 +220,7 @@ LDLIBS=
|
||||
# than what POSIX specifies, assuming local time is UT.
|
||||
# For example, N is 252460800 on AmigaOS.
|
||||
# -DHAVE_DECL_ASCTIME_R=0 if <time.h> does not declare asctime_r
|
||||
# on POSIX platforms predating POSIX.1-2024
|
||||
# -DHAVE_DECL_ENVIRON if <unistd.h> declares 'environ'
|
||||
# -DHAVE_DECL_TIMEGM=0 if <time.h> does not declare timegm
|
||||
# -DHAVE_DIRECT_H if mkdir needs <direct.h> (MS-Windows)
|
||||
@@ -229,7 +231,7 @@ LDLIBS=
|
||||
# where LDLIBS also needs to contain -lintl on some hosts;
|
||||
# -DHAVE_GETTEXT=0 to avoid using gettext
|
||||
# -DHAVE_INCOMPATIBLE_CTIME_R if your system's time.h declares
|
||||
# ctime_r and asctime_r incompatibly with the POSIX standard
|
||||
# ctime_r and asctime_r incompatibly with POSIX.1-2017 and earlier
|
||||
# (Solaris when _POSIX_PTHREAD_SEMANTICS is not defined).
|
||||
# -DHAVE_INTTYPES_H=0 if <inttypes.h> does not work*+
|
||||
# -DHAVE_LINK=0 if your system lacks a link function
|
||||
@@ -253,6 +255,7 @@ LDLIBS=
|
||||
# -DHAVE_UNISTD_H=0 if <unistd.h> does not work*
|
||||
# -DHAVE_UTMPX_H=0 if <utmpx.h> does not work*
|
||||
# -Dlocale_t=XXX if your system uses XXX instead of locale_t
|
||||
# -DMKTIME_MIGHT_OVERFLOW if mktime might fail due to time_t overflow
|
||||
# -DPORT_TO_C89 if tzcode should also run on mostly-C89 platforms+
|
||||
# Typically it is better to use a later standard. For example,
|
||||
# with GCC 4.9.4 (2016), prefer '-std=gnu11' to '-DPORT_TO_C89'.
|
||||
@@ -260,9 +263,12 @@ LDLIBS=
|
||||
# feature (integers at least 64 bits wide) and maybe more.
|
||||
# -DRESERVE_STD_EXT_IDS if your platform reserves standard identifiers
|
||||
# with external linkage, e.g., applications cannot define 'localtime'.
|
||||
# -Dssize_t=long on hosts like MS-Windows that lack ssize_t
|
||||
# -DSUPPORT_C89 if the tzcode library should support C89 callers+
|
||||
# However, this might trigger latent bugs in C99-or-later callers.
|
||||
# -Dssize_t=int on hosts like MS-Windows that lack ssize_t
|
||||
# -DSUPPORT_C89=0 if the tzcode library should not support C89 callers
|
||||
# Although -DSUPPORT_C89=0 might work around latent bugs in callers,
|
||||
# it does not conform to POSIX.
|
||||
# -DSUPPORT_POSIX2008 if the library should support older POSIX callers+
|
||||
# However, this might cause problems in POSIX.1-2024-or-later callers.
|
||||
# -DSUPPRESS_TZDIR to not prepend TZDIR to file names; this has
|
||||
# security implications and is not recommended for general use
|
||||
# -DTHREAD_SAFE to make localtime.c thread-safe, as POSIX requires;
|
||||
@@ -274,13 +280,13 @@ LDLIBS=
|
||||
# -DTZ_DOMAINDIR=\"/path\" to use "/path" for gettext directory;
|
||||
# the default is system-supplied, typically "/usr/lib/locale"
|
||||
# -DTZDEFRULESTRING=\",date/time,date/time\" to default to the specified
|
||||
# DST transitions for POSIX.1-2017-style TZ strings lacking them,
|
||||
# DST transitions for proleptic format TZ strings lacking them,
|
||||
# in the usual case where POSIXRULES is '-'. If not specified,
|
||||
# TZDEFRULESTRING defaults to US rules for future DST transitions.
|
||||
# This mishandles some past timestamps, as US DST rules have changed.
|
||||
# It also mishandles settings like TZ='EET-2EEST' for eastern Europe,
|
||||
# as Europe and US DST rules differ.
|
||||
# -DTZNAME_MAXIMUM=N to limit time zone abbreviations to N bytes (default 255)
|
||||
# -DTZNAME_MAXIMUM=N to limit time zone abbreviations to N bytes (default 254)
|
||||
# -DUNINIT_TRAP if reading uninitialized storage can cause problems
|
||||
# other than simply getting garbage data
|
||||
# -DUSE_LTZ=0 to build zdump with the system time zone library
|
||||
@@ -302,23 +308,26 @@ LDLIBS=
|
||||
#
|
||||
# * Options marked "*" can be omitted if your compiler is C23 compatible.
|
||||
# * Options marked "+" are obsolescent and are planned to be removed
|
||||
# once the code assumes C99 or later, say in the year 2029.
|
||||
# once the code assumes C99 or later (say in the year 2029)
|
||||
# and POSIX.1-2024 or later (say in the year 2034).
|
||||
#
|
||||
# Select instrumentation via "make GCC_INSTRUMENT='whatever'".
|
||||
GCC_INSTRUMENT = \
|
||||
-fsanitize=undefined -fsanitize-address-use-after-scope \
|
||||
-fsanitize-undefined-trap-on-error -fstack-protector
|
||||
# Omit -fanalyzer from GCC_DEBUG_FLAGS, as it makes GCC too slow.
|
||||
GCC_DEBUG_FLAGS = -DGCC_LINT -g3 -O3 -fno-common \
|
||||
GCC_DEBUG_FLAGS = -DGCC_LINT -g3 -O3 \
|
||||
$(GCC_INSTRUMENT) \
|
||||
-Wall -Wextra \
|
||||
-Walloc-size-larger-than=100000 -Warray-bounds=2 \
|
||||
-Wbad-function-cast -Wbidi-chars=any,ucn -Wcast-align=strict -Wdate-time \
|
||||
-Wbad-function-cast -Wbidi-chars=any,ucn -Wcast-align=strict -Wcast-qual \
|
||||
-Wdate-time \
|
||||
-Wdeclaration-after-statement -Wdouble-promotion \
|
||||
-Wduplicated-branches -Wduplicated-cond \
|
||||
-Wduplicated-branches -Wduplicated-cond -Wflex-array-member-not-at-end \
|
||||
-Wformat=2 -Wformat-overflow=2 -Wformat-signedness -Wformat-truncation \
|
||||
-Wimplicit-fallthrough=5 -Winit-self -Wlogical-op \
|
||||
-Wmissing-declarations -Wmissing-prototypes -Wnested-externs \
|
||||
-Wmissing-declarations -Wmissing-prototypes \
|
||||
-Wmissing-variable-declarations -Wnested-externs \
|
||||
-Wnull-dereference \
|
||||
-Wold-style-definition -Woverlength-strings -Wpointer-arith \
|
||||
-Wshadow -Wshift-overflow=2 -Wstrict-overflow \
|
||||
@@ -327,10 +336,9 @@ GCC_DEBUG_FLAGS = -DGCC_LINT -g3 -O3 -fno-common \
|
||||
-Wsuggest-attribute=const -Wsuggest-attribute=format \
|
||||
-Wsuggest-attribute=malloc \
|
||||
-Wsuggest-attribute=noreturn -Wsuggest-attribute=pure \
|
||||
-Wtrampolines -Wundef -Wuninitialized -Wunused-macros -Wuse-after-free=3 \
|
||||
-Wtrampolines -Wundef -Wunused-macros -Wuse-after-free=3 \
|
||||
-Wvariadic-macros -Wvla -Wwrite-strings \
|
||||
-Wno-address -Wno-format-nonliteral -Wno-sign-compare \
|
||||
-Wno-type-limits
|
||||
-Wno-format-nonliteral -Wno-sign-compare -Wno-type-limits
|
||||
#
|
||||
# If your system has a "GMT offset" field in its "struct tm"s
|
||||
# (or if you decide to add such a field in your system's "time.h" file),
|
||||
@@ -341,9 +349,8 @@ GCC_DEBUG_FLAGS = -DGCC_LINT -g3 -O3 -fno-common \
|
||||
# Similarly, if your system has a "zone abbreviation" field, define
|
||||
# -DTM_ZONE=tm_zone
|
||||
# and define NO_TM_ZONE to suppress any guessing.
|
||||
# Although these two fields are not required by POSIX.1-2017,
|
||||
# POSIX 202x/D4 requires them and they are widely available
|
||||
# on GNU/Linux and BSD systems.
|
||||
# Although POSIX.1-2024 requires these fields and they are widely available
|
||||
# on GNU/Linux and BSD systems, some older systems lack them.
|
||||
#
|
||||
# The next batch of options control support for external variables
|
||||
# exported by tzcode. In practice these variables are less useful
|
||||
@@ -353,7 +360,9 @@ GCC_DEBUG_FLAGS = -DGCC_LINT -g3 -O3 -fno-common \
|
||||
# # -DHAVE_TZNAME=0 # do not support "tzname"
|
||||
# # -DHAVE_TZNAME=1 # support "tzname", which is defined by system library
|
||||
# # -DHAVE_TZNAME=2 # support and define "tzname"
|
||||
# # to the "CFLAGS=" line. "tzname" is required by POSIX.1-1988 and later.
|
||||
# # to the "CFLAGS=" line. Although "tzname" is required by POSIX.1-1988
|
||||
# # and later, its contents are unspecified if you use a geographical TZ
|
||||
# # and the variable is planned to be removed in a future POSIX edition.
|
||||
# # If not defined, the code attempts to guess HAVE_TZNAME from other macros.
|
||||
# # Warning: unless time_tz is also defined, HAVE_TZNAME=1 can cause
|
||||
# # crashes when combined with some platforms' standard libraries,
|
||||
@@ -364,7 +373,9 @@ GCC_DEBUG_FLAGS = -DGCC_LINT -g3 -O3 -fno-common \
|
||||
# # -DUSG_COMPAT=1 # support, and variables are defined by system library
|
||||
# # -DUSG_COMPAT=2 # support and define variables
|
||||
# # to the "CFLAGS=" line; "timezone" and "daylight" are inspired by Unix
|
||||
# # Systems Group code and are required by POSIX.1-2008 and later (with XSI).
|
||||
# # Systems Group code and are required by POSIX.1-2008 and later (with XSI),
|
||||
# # although their contents are unspecified if you use a geographical TZ
|
||||
# # and the variables are planned to be removed in a future edition of POSIX.
|
||||
# # If not defined, the code attempts to guess USG_COMPAT from other macros.
|
||||
# #
|
||||
# # To support the external variable "altzone", add
|
||||
@@ -428,18 +439,13 @@ GCC_DEBUG_FLAGS = -DGCC_LINT -g3 -O3 -fno-common \
|
||||
|
||||
# The name of a POSIX-like library archiver, its flags, C compiler,
|
||||
# linker flags, and 'make' utility. Ordinarily the defaults suffice.
|
||||
# The commented-out values are the defaults specified by POSIX.1-202x/D4.
|
||||
# The commented-out values are the defaults specified by POSIX.1-2024.
|
||||
#AR = ar
|
||||
#ARFLAGS = -rv
|
||||
#CC = c17
|
||||
#LDFLAGS =
|
||||
#MAKE = make
|
||||
|
||||
# For leap seconds, this Makefile uses LEAPSECONDS='-L leapseconds' in
|
||||
# submake command lines. The default is no leap seconds.
|
||||
|
||||
LEAPSECONDS=
|
||||
|
||||
# Where to fetch leap-seconds.list from.
|
||||
leaplist_URI = \
|
||||
https://hpiers.obspm.fr/iers/bul/bulc/ntp/leap-seconds.list
|
||||
@@ -461,7 +467,7 @@ ZFLAGS=
|
||||
|
||||
# How to use zic to install TZif files.
|
||||
|
||||
ZIC_INSTALL= $(ZIC) -d '$(DESTDIR)$(TZDIR)' $(LEAPSECONDS)
|
||||
ZIC_INSTALL= $(ZIC) -d '$(DESTDIR)$(TZDIR)'
|
||||
|
||||
# The name of a POSIX-compliant 'awk' on your system.
|
||||
# mawk 1.3.3 and Solaris 10 /usr/bin/awk do not work.
|
||||
@@ -480,6 +486,7 @@ KSHELL= /bin/bash
|
||||
|
||||
# Name of curl <https://curl.haxx.se/>, used for HTML validation
|
||||
# and to fetch leap-seconds.list from upstream.
|
||||
# Set CURL=: to disable use of the Internet.
|
||||
CURL= curl
|
||||
|
||||
# Name of GNU Privacy Guard <https://gnupg.org/>, used to sign distributions.
|
||||
@@ -533,21 +540,28 @@ OK_LINE= '^'$(OK_CHAR)'*$$'
|
||||
|
||||
# Flags to give 'tar' when making a distribution.
|
||||
# Try to use flags appropriate for GNU tar.
|
||||
GNUTARFLAGS= --format=pax --pax-option='delete=atime,delete=ctime' \
|
||||
GNUTARFLAGS= --format=pax --pax-option=delete=atime,delete=ctime \
|
||||
--numeric-owner --owner=0 --group=0 \
|
||||
--mode=go+u,go-w --sort=name
|
||||
TARFLAGS= `if tar $(GNUTARFLAGS) --version >/dev/null 2>&1; \
|
||||
then echo $(GNUTARFLAGS); \
|
||||
else :; \
|
||||
fi`
|
||||
SETUP_TAR= \
|
||||
export LC_ALL=C && \
|
||||
if tar $(GNUTARFLAGS) --version >/dev/null 2>&1; then \
|
||||
TAR='tar $(GNUTARFLAGS)'; \
|
||||
else \
|
||||
TAR=tar; \
|
||||
fi
|
||||
|
||||
# Flags to give 'gzip' when making a distribution.
|
||||
GZIPFLAGS= -9n
|
||||
|
||||
# When comparing .tzs files, use GNU diff's -F'^TZ=' option if supported.
|
||||
# This makes it easier to see which Zone has been affected.
|
||||
DIFF_TZS= diff -u$$(! diff -u -F'^TZ=' - - <>/dev/null >&0 2>&1 \
|
||||
|| echo ' -F^TZ=')
|
||||
SETUP_DIFF_TZS = \
|
||||
if diff -u -F'^TZ=' - - <>/dev/null >&0 2>&1; then \
|
||||
DIFF_TZS='diff -u -F^TZ='; \
|
||||
else \
|
||||
DIFF_TZS='diff -u'; \
|
||||
fi
|
||||
|
||||
# ':' on typical hosts; 'ranlib' on the ancient hosts that still need ranlib.
|
||||
RANLIB= :
|
||||
@@ -561,8 +575,8 @@ RANLIB= :
|
||||
|
||||
|
||||
TZCOBJS= zic.o
|
||||
TZDOBJS= zdump.o localtime.o asctime.o strftime.o
|
||||
DATEOBJS= date.o localtime.o strftime.o asctime.o
|
||||
TZDOBJS= zdump.o localtime.o strftime.o
|
||||
DATEOBJS= date.o localtime.o strftime.o
|
||||
LIBSRCS= localtime.c asctime.c difftime.c strftime.c
|
||||
LIBOBJS= localtime.o asctime.o difftime.o strftime.o
|
||||
HEADERS= tzfile.h private.h
|
||||
@@ -579,8 +593,7 @@ MANTXTS= newctime.3.txt newstrftime.3.txt newtzset.3.txt \
|
||||
COMMON= calendars CONTRIBUTING LICENSE Makefile \
|
||||
NEWS README SECURITY theory.html version
|
||||
WEB_PAGES= tz-art.html tz-how-to.html tz-link.html
|
||||
CHECK_WEB_PAGES=check_theory.html check_tz-art.html \
|
||||
check_tz-how-to.html check_tz-link.html
|
||||
CHECK_WEB_PAGES=theory.ck tz-art.ck tz-how-to.ck tz-link.ck
|
||||
DOCS= $(MANS) date.1 $(MANTXTS) $(WEB_PAGES)
|
||||
PRIMARY_YDATA= africa antarctica asia australasia \
|
||||
europe northamerica southamerica
|
||||
@@ -603,8 +616,8 @@ TZS_YEAR= 2050
|
||||
TZS_CUTOFF_FLAG= -c $(TZS_YEAR)
|
||||
TZS= to$(TZS_YEAR).tzs
|
||||
TZS_NEW= to$(TZS_YEAR)new.tzs
|
||||
TZS_DEPS= $(YDATA) asctime.c localtime.c \
|
||||
private.h tzfile.h zdump.c zic.c
|
||||
TZS_DEPS= $(YDATA) localtime.c private.h \
|
||||
strftime.c tzfile.h zdump.c zic.c
|
||||
TZDATA_DIST = $(COMMON) $(DATA) $(MISC)
|
||||
# EIGHT_YARDS is just a yard short of the whole ENCHILADA.
|
||||
EIGHT_YARDS = $(TZDATA_DIST) $(DOCS) $(SOURCES) tzdata.zi
|
||||
@@ -641,8 +654,7 @@ install: all $(DATA) $(REDO) $(MANS)
|
||||
'$(DESTDIR)$(MANDIR)/man3' '$(DESTDIR)$(MANDIR)/man5' \
|
||||
'$(DESTDIR)$(MANDIR)/man8'
|
||||
$(ZIC_INSTALL) -l $(LOCALTIME) \
|
||||
`case '$(POSIXRULES)' in ?*) echo '-p';; esac \
|
||||
` $(POSIXRULES) \
|
||||
-p $(POSIXRULES) \
|
||||
-t '$(DESTDIR)$(TZDEFAULT)'
|
||||
cp -f $(TABDATA) '$(DESTDIR)$(TZDIR)/.'
|
||||
cp tzselect '$(DESTDIR)$(BINDIR)/.'
|
||||
@@ -665,10 +677,10 @@ INSTALL: ALL install date.1
|
||||
# and append "-dirty" if the contents do not already end in "-dirty".
|
||||
version: $(VERSION_DEPS)
|
||||
{ (type git) >/dev/null 2>&1 && \
|
||||
V=`git describe --match '[0-9][0-9][0-9][0-9][a-z]*' \
|
||||
--abbrev=7 --dirty` || \
|
||||
if test '$(VERSION)' = unknown && V=`cat $@`; then \
|
||||
case $$V in *-dirty);; *) V=$$V-dirty;; esac; \
|
||||
V=$$(git describe --match '[0-9][0-9][0-9][0-9][a-z]*' \
|
||||
--abbrev=7 --dirty) || \
|
||||
if test '$(VERSION)' = unknown && read -r V <$@; then \
|
||||
V=$${V%-dirty}-dirty; \
|
||||
else \
|
||||
V='$(VERSION)'; \
|
||||
fi; } && \
|
||||
@@ -678,7 +690,7 @@ version: $(VERSION_DEPS)
|
||||
# These files can be tailored by setting BACKWARD, PACKRATDATA, PACKRATLIST.
|
||||
vanguard.zi main.zi rearguard.zi: $(DSTDATA_ZI_DEPS)
|
||||
$(AWK) \
|
||||
-v DATAFORM=`expr $@ : '\(.*\).zi'` \
|
||||
-v DATAFORM=$(@:.zi=) \
|
||||
-v PACKRATDATA='$(PACKRATDATA)' \
|
||||
-v PACKRATLIST='$(PACKRATLIST)' \
|
||||
-f ziguard.awk \
|
||||
@@ -687,7 +699,7 @@ vanguard.zi main.zi rearguard.zi: $(DSTDATA_ZI_DEPS)
|
||||
# This file has a version comment that attempts to capture any tailoring
|
||||
# via BACKWARD, DATAFORM, PACKRATDATA, PACKRATLIST, and REDO.
|
||||
tzdata.zi: $(DATAFORM).zi version zishrink.awk
|
||||
version=`sed 1q version` && \
|
||||
read -r version <version && \
|
||||
LC_ALL=C $(AWK) \
|
||||
-v dataform='$(DATAFORM)' \
|
||||
-v deps='$(DSTDATA_ZI_DEPS) zishrink.awk' \
|
||||
@@ -708,7 +720,7 @@ tzdir.h:
|
||||
mv $@.out $@
|
||||
|
||||
version.h: version
|
||||
VERSION=`cat version` && printf '%s\n' \
|
||||
read -r VERSION <version && printf '%s\n' \
|
||||
'static char const PKGVERSION[]="($(PACKAGE)) ";' \
|
||||
"static char const TZVERSION[]=\"$$VERSION\";" \
|
||||
'static char const REPORT_BUGS_TO[]="$(BUGEMAIL)";' \
|
||||
@@ -748,12 +760,11 @@ commit-leap-seconds.list: fetch-leap-seconds.list
|
||||
git commit --author="$$author" --date="$$date" -m'make $@' \
|
||||
leap-seconds.list
|
||||
|
||||
# Arguments to pass to submakes of install_data.
|
||||
# Arguments to pass to submakes.
|
||||
# They can be overridden by later submake arguments.
|
||||
INSTALLARGS = \
|
||||
BACKWARD='$(BACKWARD)' \
|
||||
DESTDIR='$(DESTDIR)' \
|
||||
LEAPSECONDS='$(LEAPSECONDS)' \
|
||||
PACKRATDATA='$(PACKRATDATA)' \
|
||||
PACKRATLIST='$(PACKRATLIST)' \
|
||||
TZDEFAULT='$(TZDEFAULT)' \
|
||||
@@ -762,16 +773,11 @@ INSTALLARGS = \
|
||||
|
||||
INSTALL_DATA_DEPS = zic leapseconds tzdata.zi
|
||||
|
||||
# 'make install_data' installs one set of TZif files.
|
||||
install_data: $(INSTALL_DATA_DEPS)
|
||||
posix_only: $(INSTALL_DATA_DEPS)
|
||||
$(ZIC_INSTALL) tzdata.zi
|
||||
|
||||
posix_only: $(INSTALL_DATA_DEPS)
|
||||
$(MAKE) $(INSTALLARGS) LEAPSECONDS= install_data
|
||||
|
||||
right_only: $(INSTALL_DATA_DEPS)
|
||||
$(MAKE) $(INSTALLARGS) LEAPSECONDS='-L leapseconds' \
|
||||
install_data
|
||||
$(ZIC_INSTALL) -L leapseconds tzdata.zi
|
||||
|
||||
# In earlier versions of this makefile, the other two directories were
|
||||
# subdirectories of $(TZDIR). However, this led to configuration errors.
|
||||
@@ -802,8 +808,7 @@ ZDS = dummy.zd
|
||||
# Rule used only by submakes invoked by the $(TZS_NEW) rule.
|
||||
# It is separate so that GNU 'make -j' can run instances in parallel.
|
||||
$(ZDS): zdump
|
||||
./zdump -i $(TZS_CUTOFF_FLAG) '$(wd)/'$$(expr $@ : '\(.*\).zd') \
|
||||
>$@
|
||||
./zdump -i $(TZS_CUTOFF_FLAG) "$$PWD/$(@:.zd=)" >$@
|
||||
|
||||
TZS_NEW_DEPS = tzdata.zi zdump zic
|
||||
$(TZS_NEW): $(TZS_NEW_DEPS)
|
||||
@@ -812,20 +817,19 @@ $(TZS_NEW): $(TZS_NEW_DEPS)
|
||||
$(zic) -d tzs$(TZS_YEAR).dir tzdata.zi
|
||||
$(AWK) '/^L/{print "Link\t" $$2 "\t" $$3}' \
|
||||
tzdata.zi | LC_ALL=C sort >$@.out
|
||||
wd=`pwd` && \
|
||||
x=`$(AWK) '/^Z/{print "tzs$(TZS_YEAR).dir/" $$2 ".zd"}' \
|
||||
x=$$($(AWK) '/^Z/{print "tzs$(TZS_YEAR).dir/" $$2 ".zd"}' \
|
||||
tzdata.zi \
|
||||
| LC_ALL=C sort -t . -k 2,2` && \
|
||||
| LC_ALL=C sort -t . -k 2,2) && \
|
||||
set x $$x && \
|
||||
shift && \
|
||||
ZDS=$$* && \
|
||||
$(MAKE) wd="$$wd" TZS_CUTOFF_FLAG="$(TZS_CUTOFF_FLAG)" \
|
||||
$(MAKE) TZS_CUTOFF_FLAG="$(TZS_CUTOFF_FLAG)" \
|
||||
ZDS="$$ZDS" $$ZDS && \
|
||||
sed 's,^TZ=".*\.dir/,TZ=",' $$ZDS >>$@.out
|
||||
rm -fr tzs$(TZS_YEAR).dir
|
||||
mv $@.out $@
|
||||
|
||||
# If $(TZS) exists but 'make check_tzs' fails, a maintainer should inspect the
|
||||
# If $(TZS) exists but 'make tzs.ck' fails, a maintainer should inspect the
|
||||
# failed output and fix the inconsistency, perhaps by running 'make force_tzs'.
|
||||
$(TZS):
|
||||
touch $@
|
||||
@@ -842,7 +846,7 @@ date: $(DATEOBJS)
|
||||
$(CC) -o $@ $(CFLAGS) $(LDFLAGS) $(DATEOBJS) $(LDLIBS)
|
||||
|
||||
tzselect: tzselect.ksh version
|
||||
VERSION=`cat version` && sed \
|
||||
read -r VERSION <version && sed \
|
||||
-e "s'#!/bin/bash'#!"'$(KSHELL)'\' \
|
||||
-e s\''\(AWK\)=[^}]*'\''\1=\'\''$(AWK)\'\'\' \
|
||||
-e s\''\(PKGVERSION\)=.*'\''\1=\'\''($(PACKAGE)) \'\'\' \
|
||||
@@ -853,11 +857,11 @@ tzselect: tzselect.ksh version
|
||||
chmod +x $@.out
|
||||
mv $@.out $@
|
||||
|
||||
check: check_back check_mild
|
||||
check_mild: check_character_set check_white_space check_links \
|
||||
check_name_lengths check_now \
|
||||
check_slashed_abbrs check_sorted \
|
||||
check_tables check_web check_ziguard check_zishrink check_tzs
|
||||
check: check_mild back.ck now.ck
|
||||
check_mild: check_web check_zishrink \
|
||||
character-set.ck white-space.ck links.ck mainguard.ck \
|
||||
name-lengths.ck slashed-abbrs.ck sorted.ck \
|
||||
tables.ck ziguard.ck tzs.ck
|
||||
|
||||
# True if UTF8_LOCALE does not work;
|
||||
# otherwise, false but with LC_ALL set to $(UTF8_LOCALE).
|
||||
@@ -865,9 +869,9 @@ UTF8_LOCALE_MISSING = \
|
||||
{ test ! '$(UTF8_LOCALE)' \
|
||||
|| ! printf 'A\304\200B\n' \
|
||||
| LC_ALL='$(UTF8_LOCALE)' grep -q '^A.B$$' >/dev/null 2>&1 \
|
||||
|| { LC_ALL='$(UTF8_LOCALE)'; export LC_ALL; false; }; }
|
||||
|| { export LC_ALL='$(UTF8_LOCALE)'; false; }; }
|
||||
|
||||
check_character_set: $(ENCHILADA)
|
||||
character-set.ck: $(ENCHILADA)
|
||||
$(UTF8_LOCALE_MISSING) || { \
|
||||
sharp='#' && \
|
||||
! grep -Env $(SAFE_LINE) $(MANS) date.1 $(MANTXTS) \
|
||||
@@ -882,48 +886,55 @@ check_character_set: $(ENCHILADA)
|
||||
}
|
||||
touch $@
|
||||
|
||||
check_white_space: $(ENCHILADA)
|
||||
white-space.ck: $(ENCHILADA)
|
||||
$(UTF8_LOCALE_MISSING) || { \
|
||||
patfmt=' \t|[\f\r\v]' && pat=`printf "$$patfmt\\n"` && \
|
||||
enchilada='$(ENCHILADA)' && \
|
||||
patfmt=' \t|[\f\r\v]' && pat=$$(printf "$$patfmt\\n") && \
|
||||
! grep -En "$$pat|[$s]\$$" \
|
||||
$$(ls $(ENCHILADA) | grep -Fvx leap-seconds.list); \
|
||||
$${enchilada%leap-seconds.list*} \
|
||||
$${enchilada#*leap-seconds.list}; \
|
||||
}
|
||||
touch $@
|
||||
|
||||
PRECEDES_FILE_NAME = ^(Zone|Link[$s]+[^$s]+)[$s]+
|
||||
FILE_NAME_COMPONENT_TOO_LONG = $(PRECEDES_FILE_NAME)[^$s]*[^/$s]{15}
|
||||
|
||||
check_name_lengths: $(TDATA_TO_CHECK) backzone
|
||||
! grep -En '$(FILE_NAME_COMPONENT_TOO_LONG)' \
|
||||
name-lengths.ck: $(TDATA_TO_CHECK) backzone
|
||||
:;! grep -En '$(FILE_NAME_COMPONENT_TOO_LONG)' \
|
||||
$(TDATA_TO_CHECK) backzone
|
||||
touch $@
|
||||
|
||||
mainguard.ck: main.zi
|
||||
test '$(PACKRATLIST)' || \
|
||||
cat $(TDATA) $(PACKRATDATA) | diff -u - main.zi
|
||||
touch $@
|
||||
|
||||
PRECEDES_STDOFF = ^(Zone[$s]+[^$s]+)?[$s]+
|
||||
STDOFF = [-+]?[0-9:.]+
|
||||
RULELESS_SAVE = (-|$(STDOFF)[sd]?)
|
||||
RULELESS_SLASHED_ABBRS = \
|
||||
$(PRECEDES_STDOFF)$(STDOFF)[$s]+$(RULELESS_SAVE)[$s]+[^$s]*/
|
||||
|
||||
check_slashed_abbrs: $(TDATA_TO_CHECK)
|
||||
! grep -En '$(RULELESS_SLASHED_ABBRS)' $(TDATA_TO_CHECK)
|
||||
slashed-abbrs.ck: $(TDATA_TO_CHECK)
|
||||
:;! grep -En '$(RULELESS_SLASHED_ABBRS)' $(TDATA_TO_CHECK)
|
||||
touch $@
|
||||
|
||||
CHECK_CC_LIST = { n = split($$1,a,/,/); for (i=2; i<=n; i++) print a[1], a[i]; }
|
||||
|
||||
check_sorted: backward backzone
|
||||
sorted.ck: backward backzone
|
||||
$(AWK) '/^Link/ {printf "%.5d %s\n", g, $$3} !/./ {g++}' \
|
||||
backward | LC_ALL=C sort -cu
|
||||
$(AWK) '/^Zone/ {print $$2}' backzone | LC_ALL=C sort -cu
|
||||
$(AWK) '/^Zone.*\// {print $$2}' backzone | LC_ALL=C sort -cu
|
||||
touch $@
|
||||
|
||||
check_back: checklinks.awk $(TDATA_TO_CHECK)
|
||||
back.ck: checklinks.awk $(TDATA_TO_CHECK)
|
||||
$(AWK) \
|
||||
-v DATAFORM=$(DATAFORM) \
|
||||
-v backcheck=backward \
|
||||
-f checklinks.awk $(TDATA_TO_CHECK)
|
||||
touch $@
|
||||
|
||||
check_links: checklinks.awk tzdata.zi
|
||||
links.ck: checklinks.awk tzdata.zi
|
||||
$(AWK) \
|
||||
-v DATAFORM=$(DATAFORM) \
|
||||
-f checklinks.awk tzdata.zi
|
||||
@@ -932,26 +943,36 @@ check_links: checklinks.awk tzdata.zi
|
||||
# Check timestamps from now through 28 years from now, to make sure
|
||||
# that zonenow.tab contains all sequences of planned timestamps,
|
||||
# without any duplicate sequences. In theory this might require
|
||||
# 2800 years but that would take a long time to check.
|
||||
CHECK_NOW_TIMESTAMP = `./date +%s`
|
||||
# 2800+ years but that would take a long time to check.
|
||||
CHECK_NOW_TIMESTAMP = $$(./date +%s)
|
||||
CHECK_NOW_FUTURE_YEARS = 28
|
||||
CHECK_NOW_FUTURE_SECS = $(CHECK_NOW_FUTURE_YEARS) '*' 366 '*' 24 '*' 60 '*' 60
|
||||
check_now: checknow.awk date tzdata.zi zdump zic zone1970.tab zonenow.tab
|
||||
rm -fr $@.dir
|
||||
mkdir $@.dir
|
||||
./zic -d $@.dir tzdata.zi
|
||||
CHECK_NOW_FUTURE_SECS = $(CHECK_NOW_FUTURE_YEARS) * 366 * 24 * 60 * 60
|
||||
now.ck: checknow.awk date tzdata.zi zdump zic zone1970.tab zonenow.tab
|
||||
rm -fr $@d
|
||||
mkdir $@d
|
||||
./zic -d $@d tzdata.zi
|
||||
now=$(CHECK_NOW_TIMESTAMP) && \
|
||||
future=`expr $(CHECK_NOW_FUTURE_SECS) + $$now` && \
|
||||
future=$$(($(CHECK_NOW_FUTURE_SECS) + $$now)) && \
|
||||
./zdump -i -t $$now,$$future \
|
||||
$$(find $$PWD/$@.dir/????*/ -type f) \
|
||||
>$@.dir/zdump.tab
|
||||
$$(find "$$PWD/$@d"/????*/ -type f) \
|
||||
>$@d/zdump-now.tab && \
|
||||
./zdump -i -t 0,$$future \
|
||||
$$(find "$$PWD/$@d" -name Etc -prune \
|
||||
-o -type f ! -name '*.tab' -print) \
|
||||
>$@d/zdump-1970.tab
|
||||
$(AWK) \
|
||||
-v zdump_table=$@.dir/zdump.tab \
|
||||
-v zdump_table=$@d/zdump-now.tab \
|
||||
-f checknow.awk zonenow.tab
|
||||
rm -fr $@.dir
|
||||
$(AWK) \
|
||||
'BEGIN {print "-\t-\tUTC"} /^Zone/ {print "-\t-\t" $$2}' \
|
||||
$(PRIMARY_YDATA) backward factory | \
|
||||
$(AWK) \
|
||||
-v zdump_table=$@d/zdump-1970.tab \
|
||||
-f checknow.awk
|
||||
rm -fr $@d
|
||||
touch $@
|
||||
|
||||
check_tables: checktab.awk $(YDATA) backward zone.tab zone1970.tab
|
||||
tables.ck: checktab.awk $(YDATA) backward zone.tab zone1970.tab
|
||||
for tab in $(ZONETABLES); do \
|
||||
test "$$tab" = zone.tab && links='$(BACKWARD)' || links=''; \
|
||||
$(AWK) -f checktab.awk -v zone_table=$$tab $(YDATA) $$links \
|
||||
@@ -959,26 +980,24 @@ check_tables: checktab.awk $(YDATA) backward zone.tab zone1970.tab
|
||||
done
|
||||
touch $@
|
||||
|
||||
check_tzs: $(TZS) $(TZS_NEW)
|
||||
tzs.ck: $(TZS) $(TZS_NEW)
|
||||
if test -s $(TZS); then \
|
||||
$(DIFF_TZS) $(TZS) $(TZS_NEW); \
|
||||
$(SETUP_DIFF_TZS) && $$DIFF_TZS $(TZS) $(TZS_NEW); \
|
||||
else \
|
||||
cp $(TZS_NEW) $(TZS); \
|
||||
fi
|
||||
touch $@
|
||||
|
||||
check_web: $(CHECK_WEB_PAGES)
|
||||
check_theory.html: theory.html
|
||||
check_tz-art.html: tz-art.html
|
||||
check_tz-how-to.html: tz-how-to.html
|
||||
check_tz-link.html: tz-link.html
|
||||
check_theory.html check_tz-art.html check_tz-how-to.html check_tz-link.html:
|
||||
$(CURL) -sS --url https://validator.w3.org/nu/ -F out=gnu \
|
||||
-F file=@$$(expr $@ : 'check_\(.*\)') -o $@.out && \
|
||||
.SUFFIXES: .ck .html
|
||||
.html.ck:
|
||||
{ ! ($(CURL) --version) >/dev/null 2>&1 || \
|
||||
$(CURL) -sS --url https://validator.w3.org/nu/ -F out=gnu \
|
||||
-F file=@$<; } >$@.out && \
|
||||
test ! -s $@.out || { cat $@.out; exit 1; }
|
||||
mv $@.out $@
|
||||
|
||||
check_ziguard: rearguard.zi vanguard.zi ziguard.awk
|
||||
ziguard.ck: rearguard.zi vanguard.zi ziguard.awk
|
||||
$(AWK) -v DATAFORM=rearguard -f ziguard.awk vanguard.zi | \
|
||||
diff -u rearguard.zi -
|
||||
$(AWK) -v DATAFORM=vanguard -f ziguard.awk rearguard.zi | \
|
||||
@@ -987,36 +1006,35 @@ check_ziguard: rearguard.zi vanguard.zi ziguard.awk
|
||||
|
||||
# Check that zishrink.awk does not alter the data, and that ziguard.awk
|
||||
# preserves main-format data.
|
||||
check_zishrink: check_zishrink_posix check_zishrink_right
|
||||
check_zishrink_posix check_zishrink_right: \
|
||||
check_zishrink: zishrink-posix.ck zishrink-right.ck
|
||||
zishrink-posix.ck zishrink-right.ck: \
|
||||
zic leapseconds $(PACKRATDATA) $(PACKRATLIST) \
|
||||
$(TDATA) $(DATAFORM).zi tzdata.zi
|
||||
rm -fr $@.dir $@-t.dir $@-shrunk.dir
|
||||
mkdir $@.dir $@-t.dir $@-shrunk.dir
|
||||
rm -fr $@d t-$@d shrunk-$@d
|
||||
mkdir $@d t-$@d shrunk-$@d
|
||||
case $@ in \
|
||||
*_right) leap='-L leapseconds';; \
|
||||
*right*) leap='-L leapseconds';; \
|
||||
*) leap=;; \
|
||||
esac && \
|
||||
$(ZIC) $$leap -d $@.dir $(DATAFORM).zi && \
|
||||
$(ZIC) $$leap -d $@-shrunk.dir tzdata.zi && \
|
||||
$(ZIC) $$leap -d $@d $(DATAFORM).zi && \
|
||||
$(ZIC) $$leap -d shrunk-$@d tzdata.zi && \
|
||||
case $(DATAFORM),$(PACKRATLIST) in \
|
||||
main,) \
|
||||
$(ZIC) $$leap -d $@-t.dir $(TDATA) && \
|
||||
$(ZIC) $$leap -d t-$@d $(TDATA) && \
|
||||
$(AWK) '/^Rule/' $(TDATA) | \
|
||||
$(ZIC) $$leap -d $@-t.dir - $(PACKRATDATA) && \
|
||||
diff -r $@.dir $@-t.dir;; \
|
||||
$(ZIC) $$leap -d t-$@d - $(PACKRATDATA) && \
|
||||
diff -r $@d t-$@d;; \
|
||||
esac
|
||||
diff -r $@.dir $@-shrunk.dir
|
||||
rm -fr $@.dir $@-t.dir $@-shrunk.dir
|
||||
diff -r $@d shrunk-$@d
|
||||
rm -fr $@d t-$@d shrunk-$@d
|
||||
touch $@
|
||||
|
||||
clean_misc:
|
||||
rm -fr check_*.dir typecheck_*.dir
|
||||
rm -f *.o *.out $(TIME_T_ALTERNATIVES) \
|
||||
check_* core typecheck_* \
|
||||
rm -fr *.ckd *.dir
|
||||
rm -f *.ck *.core *.o *.out core core.* \
|
||||
date tzdir.h tzselect version.h zdump zic libtz.a
|
||||
clean: clean_misc
|
||||
rm -fr *.dir tzdb-*/
|
||||
rm -fr tzdb-*/
|
||||
rm -f *.zi $(TZS_NEW)
|
||||
|
||||
maintainer-clean: clean
|
||||
@@ -1027,7 +1045,7 @@ maintainer-clean: clean
|
||||
names:
|
||||
@echo $(ENCHILADA)
|
||||
|
||||
public: check check_public $(CHECK_TIME_T_ALTERNATIVES) \
|
||||
public: check public.ck $(CHECK_TIME_T_ALTERNATIVES) \
|
||||
tarballs signatures
|
||||
|
||||
date.1.txt: date.1
|
||||
@@ -1041,7 +1059,7 @@ zdump.8.txt: zdump.8
|
||||
zic.8.txt: zic.8
|
||||
|
||||
$(MANTXTS): workman.sh
|
||||
LC_ALL=C sh workman.sh `expr $@ : '\(.*\)\.txt$$'` >$@.out
|
||||
LC_ALL=C sh workman.sh $(@:.txt=) >$@.out
|
||||
mv $@.out $@
|
||||
|
||||
# Set file timestamps deterministically if possible,
|
||||
@@ -1054,13 +1072,13 @@ SET_TIMESTAMP_N = sh -c '\
|
||||
n=$$0 dest=$$1; shift; \
|
||||
<"$$dest" && \
|
||||
if test $$n != 0 && \
|
||||
lsout=`ls -nt --time-style="+%s" "$$@" 2>/dev/null`; then \
|
||||
lsout=$$(ls -nt --time-style="+%s" "$$@" 2>/dev/null); then \
|
||||
set x $$lsout && \
|
||||
timestamp=`expr $$7 + $$n` && \
|
||||
timestamp=$$(($$7 + $$n)) && \
|
||||
echo "+ touch -md @$$timestamp $$dest" && \
|
||||
touch -md @$$timestamp "$$dest"; \
|
||||
else \
|
||||
newest=`ls -t "$$@" | sed 1q` && \
|
||||
newest=$$(ls -t "$$@" | sed 1q) && \
|
||||
echo "+ touch -mr $$newest $$dest" && \
|
||||
touch -mr "$$newest" "$$dest"; \
|
||||
fi'
|
||||
@@ -1083,15 +1101,15 @@ SET_TIMESTAMP_DEP = $(SET_TIMESTAMP_N) 1
|
||||
set-timestamps.out: $(EIGHT_YARDS)
|
||||
rm -f $@
|
||||
if (type git) >/dev/null 2>&1 && \
|
||||
files=`git ls-files $(EIGHT_YARDS)` && \
|
||||
files=$$(git ls-files $(EIGHT_YARDS)) && \
|
||||
touch -md @1 test.out; then \
|
||||
rm -f test.out && \
|
||||
for file in $$files; do \
|
||||
if git diff --quiet $$file; then \
|
||||
time=`TZ=UTC0 git log -1 \
|
||||
if git diff --quiet HEAD $$file; then \
|
||||
time=$$(TZ=UTC0 git log -1 \
|
||||
--format='tformat:%cd' \
|
||||
--date='format:%Y-%m-%dT%H:%M:%SZ' \
|
||||
$$file` && \
|
||||
$$file) && \
|
||||
echo "+ touch -md $$time $$file" && \
|
||||
touch -md $$time $$file; \
|
||||
else \
|
||||
@@ -1100,8 +1118,8 @@ set-timestamps.out: $(EIGHT_YARDS)
|
||||
done; \
|
||||
fi
|
||||
$(SET_TIMESTAMP_DEP) leapseconds $(LEAP_DEPS)
|
||||
for file in `ls $(MANTXTS) | sed 's/\.txt$$//'`; do \
|
||||
$(SET_TIMESTAMP_DEP) $$file.txt $$file workman.sh || \
|
||||
for file in $(MANTXTS); do \
|
||||
$(SET_TIMESTAMP_DEP) $$file $${file%.txt} workman.sh || \
|
||||
exit; \
|
||||
done
|
||||
$(SET_TIMESTAMP_DEP) version $(VERSION_DEPS)
|
||||
@@ -1114,30 +1132,29 @@ set-tzs-timestamp.out: $(TZS)
|
||||
# The zics below ensure that each data file can stand on its own.
|
||||
# We also do an all-files run to catch links to links.
|
||||
|
||||
check_public: $(VERSION_DEPS)
|
||||
rm -fr public.dir
|
||||
mkdir public.dir
|
||||
ln $(VERSION_DEPS) public.dir
|
||||
cd public.dir \
|
||||
public.ck: $(VERSION_DEPS)
|
||||
rm -fr $@d
|
||||
mkdir $@d
|
||||
ln $(VERSION_DEPS) $@d
|
||||
cd $@d \
|
||||
&& $(MAKE) CFLAGS='$(GCC_DEBUG_FLAGS)' TZDIR='$(TZDIR)' ALL
|
||||
for i in $(TDATA_TO_CHECK) public.dir/tzdata.zi \
|
||||
public.dir/vanguard.zi public.dir/main.zi \
|
||||
public.dir/rearguard.zi; \
|
||||
for i in $(TDATA_TO_CHECK) \
|
||||
tzdata.zi vanguard.zi main.zi rearguard.zi; \
|
||||
do \
|
||||
public.dir/zic -v -d public.dir/zoneinfo $$i 2>&1 || exit; \
|
||||
$@d/zic -v -d $@d/zoneinfo $@d/$$i || exit; \
|
||||
done
|
||||
public.dir/zic -v -d public.dir/zoneinfo-all $(TDATA_TO_CHECK)
|
||||
$@d/zic -v -d $@d/zoneinfo-all $(TDATA_TO_CHECK)
|
||||
:
|
||||
: Also check 'backzone' syntax.
|
||||
rm public.dir/main.zi
|
||||
cd public.dir && $(MAKE) PACKRATDATA=backzone main.zi
|
||||
public.dir/zic -d public.dir/zoneinfo main.zi
|
||||
rm public.dir/main.zi
|
||||
cd public.dir && \
|
||||
rm $@d/main.zi
|
||||
cd $@d && $(MAKE) PACKRATDATA=backzone main.zi
|
||||
$@d/zic -d $@d/zoneinfo main.zi
|
||||
rm $@d/main.zi
|
||||
cd $@d && \
|
||||
$(MAKE) PACKRATDATA=backzone PACKRATLIST=zone.tab main.zi
|
||||
public.dir/zic -d public.dir/zoneinfo main.zi
|
||||
$@d/zic -d $@d/zoneinfo main.zi
|
||||
:
|
||||
rm -fr public.dir
|
||||
rm -fr $@d
|
||||
touch $@
|
||||
|
||||
# Check that the code works under various alternative
|
||||
@@ -1145,46 +1162,47 @@ check_public: $(VERSION_DEPS)
|
||||
check_time_t_alternatives: $(TIME_T_ALTERNATIVES)
|
||||
$(TIME_T_ALTERNATIVES_TAIL): $(TIME_T_ALTERNATIVES_HEAD)
|
||||
$(TIME_T_ALTERNATIVES): $(VERSION_DEPS)
|
||||
rm -fr $@.dir
|
||||
mkdir $@.dir
|
||||
ln $(VERSION_DEPS) $@.dir
|
||||
rm -fr $@d
|
||||
mkdir $@d
|
||||
ln $(VERSION_DEPS) $@d
|
||||
case $@ in \
|
||||
int*32_t) range=-2147483648,2147483648;; \
|
||||
*32_t*) range=-2147483648,2147483648;; \
|
||||
u*) range=0,4294967296;; \
|
||||
*) range=-4294967296,4294967296;; \
|
||||
esac && \
|
||||
wd=`pwd` && \
|
||||
zones=`$(AWK) '/^[^#]/ { print $$3 }' <zone1970.tab` && \
|
||||
wd=$$PWD && \
|
||||
zones=$$($(AWK) '/^[^#]/ { print $$3 }' <zone1970.tab) && \
|
||||
if test $@ = $(TIME_T_ALTERNATIVES_HEAD); then \
|
||||
range_target=; \
|
||||
else \
|
||||
range_target=to$$range.tzs; \
|
||||
fi && \
|
||||
(cd $@.dir && \
|
||||
$(MAKE) TOPDIR="$$wd/$@.dir" \
|
||||
CFLAGS='$(CFLAGS) -Dtime_tz='"'$@'" \
|
||||
(cd $@d && \
|
||||
$(MAKE) TOPDIR="$$wd/$@d" \
|
||||
CFLAGS='$(CFLAGS) -Dtime_tz='"'$(@:.ck=)'" \
|
||||
REDO='$(REDO)' \
|
||||
D=$$wd/$@.dir \
|
||||
D="$$wd/$@d" \
|
||||
TZS_YEAR="$$range" TZS_CUTOFF_FLAG="-t $$range" \
|
||||
install $$range_target) && \
|
||||
test $@ = $(TIME_T_ALTERNATIVES_HEAD) || { \
|
||||
(cd $(TIME_T_ALTERNATIVES_HEAD).dir && \
|
||||
$(MAKE) TOPDIR="$$wd/$@.dir" \
|
||||
(cd $(TIME_T_ALTERNATIVES_HEAD)d && \
|
||||
$(MAKE) TOPDIR="$$wd/$@d" \
|
||||
TZS_YEAR="$$range" TZS_CUTOFF_FLAG="-t $$range" \
|
||||
D=$$wd/$@.dir \
|
||||
D="$$wd/$@d" \
|
||||
to$$range.tzs) && \
|
||||
$(DIFF_TZS) $(TIME_T_ALTERNATIVES_HEAD).dir/to$$range.tzs \
|
||||
$@.dir/to$$range.tzs && \
|
||||
$(SETUP_DIFF_TZS) && \
|
||||
$$DIFF_TZS $(TIME_T_ALTERNATIVES_HEAD)d/to$$range.tzs \
|
||||
$@d/to$$range.tzs && \
|
||||
if diff -q Makefile Makefile 2>/dev/null; then \
|
||||
quiet_option='-q'; \
|
||||
else \
|
||||
quiet_option=''; \
|
||||
fi && \
|
||||
diff $$quiet_option -r $(TIME_T_ALTERNATIVES_HEAD).dir/etc \
|
||||
$@.dir/etc && \
|
||||
diff $$quiet_option -r $(TIME_T_ALTERNATIVES_HEAD)d/etc \
|
||||
$@d/etc && \
|
||||
diff $$quiet_option -r \
|
||||
$(TIME_T_ALTERNATIVES_HEAD).dir/usr/share \
|
||||
$@.dir/usr/share; \
|
||||
$(TIME_T_ALTERNATIVES_HEAD)d/usr/share \
|
||||
$@d/usr/share; \
|
||||
}
|
||||
touch $@
|
||||
|
||||
@@ -1199,7 +1217,7 @@ ALL_ASC = $(TRADITIONAL_ASC) $(REARGUARD_ASC) \
|
||||
tarballs rearguard_tarballs tailored_tarballs traditional_tarballs \
|
||||
signatures rearguard_signatures traditional_signatures: \
|
||||
version set-timestamps.out rearguard.zi vanguard.zi
|
||||
VERSION=`cat version` && \
|
||||
read -r VERSION <version && \
|
||||
$(MAKE) AWK='$(AWK)' VERSION="$$VERSION" $@_version
|
||||
|
||||
# These *_version rules are intended for use if VERSION is set by some
|
||||
@@ -1218,15 +1236,15 @@ rearguard_signatures_version: $(REARGUARD_ASC)
|
||||
traditional_signatures_version: $(TRADITIONAL_ASC)
|
||||
|
||||
tzcode$(VERSION).tar.gz: set-timestamps.out
|
||||
LC_ALL=C && export LC_ALL && \
|
||||
tar $(TARFLAGS) -cf - \
|
||||
$(SETUP_TAR) && \
|
||||
$$TAR -cf - \
|
||||
$(COMMON) $(DOCS) $(SOURCES) | \
|
||||
gzip $(GZIPFLAGS) >$@.out
|
||||
mv $@.out $@
|
||||
|
||||
tzdata$(VERSION).tar.gz: set-timestamps.out
|
||||
LC_ALL=C && export LC_ALL && \
|
||||
tar $(TARFLAGS) -cf - $(TZDATA_DIST) | \
|
||||
$(SETUP_TAR) && \
|
||||
$$TAR -cf - $(TZDATA_DIST) | \
|
||||
gzip $(GZIPFLAGS) >$@.out
|
||||
mv $@.out $@
|
||||
|
||||
@@ -1251,9 +1269,9 @@ tzdata$(VERSION)-rearguard.tar.gz: rearguard.zi set-timestamps.out
|
||||
: The dummy pacificnew pacifies TZUpdater 2.3.1 and earlier.
|
||||
$(CREATE_EMPTY) $@.dir/pacificnew
|
||||
touch -mr version $@.dir/version
|
||||
LC_ALL=C && export LC_ALL && \
|
||||
$(SETUP_TAR) && \
|
||||
(cd $@.dir && \
|
||||
tar $(TARFLAGS) -cf - \
|
||||
$$TAR -cf - \
|
||||
$(TZDATA_DIST) pacificnew | \
|
||||
gzip $(GZIPFLAGS)) >$@.out
|
||||
mv $@.out $@
|
||||
@@ -1269,9 +1287,14 @@ tzdata$(VERSION)-tailored.tar.gz: set-timestamps.out
|
||||
rm -fr $@.dir
|
||||
mkdir $@.dir
|
||||
: The dummy pacificnew pacifies TZUpdater 2.3.1 and earlier.
|
||||
if test $(DATAFORM) = vanguard; then \
|
||||
pacificnew=; \
|
||||
else \
|
||||
pacificnew=pacificnew; \
|
||||
fi && \
|
||||
cd $@.dir && \
|
||||
$(CREATE_EMPTY) $(PRIMARY_YDATA) $(NDATA) backward \
|
||||
`test $(DATAFORM) = vanguard || echo pacificnew`
|
||||
$$pacificnew
|
||||
(grep '^#' tzdata.zi && echo && cat $(DATAFORM).zi) \
|
||||
>$@.dir/etcetera
|
||||
touch -mr tzdata.zi $@.dir/etcetera
|
||||
@@ -1291,9 +1314,9 @@ tzdata$(VERSION)-tailored.tar.gz: set-timestamps.out
|
||||
test -f $@.dir/$$file || links="$$links $$file"; \
|
||||
done && \
|
||||
ln $$links $@.dir
|
||||
LC_ALL=C && export LC_ALL && \
|
||||
$(SETUP_TAR) && \
|
||||
(cd $@.dir && \
|
||||
tar $(TARFLAGS) -cf - * | gzip $(GZIPFLAGS)) >$@.out
|
||||
$$TAR -cf - * | gzip $(GZIPFLAGS)) >$@.out
|
||||
mv $@.out $@
|
||||
|
||||
tzdb-$(VERSION).tar.lz: set-timestamps.out set-tzs-timestamp.out
|
||||
@@ -1301,8 +1324,8 @@ tzdb-$(VERSION).tar.lz: set-timestamps.out set-tzs-timestamp.out
|
||||
mkdir tzdb-$(VERSION)
|
||||
ln $(ENCHILADA) tzdb-$(VERSION)
|
||||
$(SET_TIMESTAMP) tzdb-$(VERSION) tzdb-$(VERSION)/*
|
||||
LC_ALL=C && export LC_ALL && \
|
||||
tar $(TARFLAGS) -cf - tzdb-$(VERSION) | lzip -9 >$@.out
|
||||
$(SETUP_TAR) && \
|
||||
$$TAR -cf - tzdb-$(VERSION) | lzip -9 >$@.out
|
||||
mv $@.out $@
|
||||
|
||||
tzcode$(VERSION).tar.gz.asc: tzcode$(VERSION).tar.gz
|
||||
@@ -1313,41 +1336,40 @@ $(ALL_ASC):
|
||||
$(GPG) --armor --detach-sign $?
|
||||
|
||||
TYPECHECK_CFLAGS = $(CFLAGS) -DTYPECHECK -D__time_t_defined -D_TIME_T
|
||||
typecheck: typecheck_long_long typecheck_unsigned
|
||||
typecheck_long_long typecheck_unsigned: $(VERSION_DEPS)
|
||||
rm -fr $@.dir
|
||||
mkdir $@.dir
|
||||
ln $(VERSION_DEPS) $@.dir
|
||||
cd $@.dir && \
|
||||
typecheck: long-long.ck unsigned.ck
|
||||
long-long.ck unsigned.ck: $(VERSION_DEPS)
|
||||
rm -fr $@d
|
||||
mkdir $@d
|
||||
ln $(VERSION_DEPS) $@d
|
||||
cd $@d && \
|
||||
case $@ in \
|
||||
*_long_long) i="long long";; \
|
||||
*_unsigned ) i="unsigned" ;; \
|
||||
long-long.*) i="long long";; \
|
||||
unsigned.* ) i="unsigned" ;; \
|
||||
esac && \
|
||||
typecheck_cflags='' && \
|
||||
$(MAKE) \
|
||||
CFLAGS="$(TYPECHECK_CFLAGS) \"-Dtime_t=$$i\"" \
|
||||
TOPDIR="`pwd`" \
|
||||
TOPDIR="$$PWD" \
|
||||
install
|
||||
$@.dir/zdump -i -c 1970,1971 Europe/Rome
|
||||
$@d/zdump -i -c 1970,1971 Europe/Rome
|
||||
touch $@
|
||||
|
||||
zonenames: tzdata.zi
|
||||
@$(AWK) '/^Z/ { print $$2 } /^L/ { print $$3 }' tzdata.zi
|
||||
|
||||
asctime.o: private.h tzfile.h
|
||||
asctime.o: private.h
|
||||
date.o: private.h
|
||||
difftime.o: private.h
|
||||
localtime.o: private.h tzfile.h tzdir.h
|
||||
strftime.o: private.h tzfile.h
|
||||
zdump.o: version.h
|
||||
zic.o: private.h tzfile.h tzdir.h version.h
|
||||
localtime.o: private.h tzdir.h tzfile.h
|
||||
strftime.o: localtime.c private.h tzdir.h tzfile.h
|
||||
zdump.o: private.h version.h
|
||||
zic.o: private.h tzdir.h tzfile.h version.h
|
||||
|
||||
.PHONY: ALL INSTALL all
|
||||
.PHONY: check check_mild check_time_t_alternatives
|
||||
.PHONY: check_web check_zishrink
|
||||
.PHONY: clean clean_misc commit-leap-seconds.list dummy.zd
|
||||
.PHONY: fetch-leap-seconds.list force_tzs
|
||||
.PHONY: install install_data maintainer-clean names
|
||||
.PHONY: install maintainer-clean names
|
||||
.PHONY: posix_only posix_right public
|
||||
.PHONY: rearguard_signatures rearguard_signatures_version
|
||||
.PHONY: rearguard_tarballs rearguard_tarballs_version
|
||||
|
||||
+227
-4
@@ -1,5 +1,228 @@
|
||||
News for the tz database
|
||||
|
||||
Release 2025b - 2025-03-22 13:40:46 -0700
|
||||
|
||||
Briefly:
|
||||
New zone for Aysén Region in Chile which moves from -04/-03 to -03.
|
||||
|
||||
Changes to future timestamps
|
||||
|
||||
Chile's Aysén Region moves from -04/-03 to -03 year-round, joining
|
||||
Magallanes Region. The region will not change its clocks on
|
||||
2025-04-05 at 24:00, diverging from America/Santiago and creating a
|
||||
new zone America/Coyhaique. (Thanks to Yonathan Dossow.) Model
|
||||
this as a change to standard offset effective 2025-03-20.
|
||||
|
||||
Changes to past timestamps
|
||||
|
||||
Iran switched from +04 to +0330 on 1978-11-10 at 24:00, not at
|
||||
year end. (Thanks to Roozbeh Pournader.)
|
||||
|
||||
Changes to code
|
||||
|
||||
'zic -l TIMEZONE -d . -l /some/other/file/system' no longer
|
||||
attempts to create an incorrect symlink, and no longer has a
|
||||
read buffer underflow. (Problem reported by Evgeniy Gorbanev.)
|
||||
|
||||
|
||||
Release 2025a - 2025-01-15 10:47:24 -0800
|
||||
|
||||
Briefly:
|
||||
Paraguay adopted permanent -03 starting spring 2024.
|
||||
Improve pre-1991 data for the Philippines.
|
||||
Etc/Unknown is now reserved.
|
||||
|
||||
Changes to future timestamps
|
||||
|
||||
Paraguay stopped changing its clocks after the spring-forward
|
||||
transition on 2024-10-06, so it is now permanently at -03.
|
||||
(Thanks to Heitor David Pinto and Even Scharning.)
|
||||
This affects timestamps starting 2025-03-22, as well as the
|
||||
obsolescent tm_isdst flags starting 2024-10-15.
|
||||
|
||||
Changes to past timestamps
|
||||
|
||||
Correct timestamps for the Philippines before 1900, and from 1937
|
||||
through 1990. (Thanks to P Chan for the heads-up and citations.)
|
||||
This includes adjusting local mean time before 1899; fixing
|
||||
transitions in September 1899, January 1937, and June 1954; adding
|
||||
transitions in December 1941, November 1945, March and September
|
||||
1977, and May and July 1990; and removing incorrect transitions in
|
||||
March and September 1978.
|
||||
|
||||
Changes to data
|
||||
|
||||
Add zone1970.tab lines for the Concordia and Eyre Bird Observatory
|
||||
research stations. (Thanks to Derick Rethans and Jule Dabars.)
|
||||
|
||||
Changes to code
|
||||
|
||||
strftime %s now generates the correct numeric string even when the
|
||||
represented number does not fit into time_t. This is better than
|
||||
generating the numeric equivalent of (time_t) -1, as strftime did
|
||||
in TZDB releases 96a (when %s was introduced) through 2020a and in
|
||||
releases 2022b through 2024b. It is also better than failing and
|
||||
returning 0, as strftime did in releases 2020b through 2022a.
|
||||
|
||||
strftime now outputs an invalid conversion specifier as-is,
|
||||
instead of eliding the leading '%', which confused debugging.
|
||||
|
||||
An invalid TZ now generates the time zone abbreviation "-00", not
|
||||
"UTC", to help the user see that an error has occurred. (Thanks
|
||||
to Arthur David Olson for suggesting a "wrong result".)
|
||||
|
||||
mktime and timeoff no longer incorrectly fail merely because a
|
||||
struct tm component near INT_MIN or INT_MAX overflows when a
|
||||
lower-order component carries into it.
|
||||
|
||||
TZNAME_MAXIMUM, the maximum number of bytes in a proleptic TZ
|
||||
string's time zone abbreviation, now defaults to 254 not 255.
|
||||
This helps reduce the size of internal state from 25480 to 21384
|
||||
on common platforms. This change should not be a problem, as
|
||||
nobody uses such long "abbreviations" and the longstanding tzcode
|
||||
maximum was 16 until release 2023a. For those who prefer no
|
||||
arbitrary limits, you can now specify TZNAME_MAXIMUM values up to
|
||||
PTRDIFF_MAX, a limit forced by C anyway; formerly tzcode silently
|
||||
misbehaved unless TZNAME_MAXIMUM was less than INT_MAX.
|
||||
|
||||
tzset and related functions no longer leak a file descriptor if
|
||||
another thread forks or execs at about the same time and if the
|
||||
platform has O_CLOFORK and O_CLOEXEC respectively. Also, the
|
||||
functions no longer let a TZif file become a controlling terminal.
|
||||
|
||||
'zdump -' now reads TZif data from /dev/stdin.
|
||||
(From a question by Arthur David Olson.)
|
||||
|
||||
Changes to documentation
|
||||
|
||||
The name Etc/Unknown is now reserved: it will not be used by TZDB.
|
||||
This is for compatibility with CLDR, which uses the string
|
||||
"Etc/Unknown" for an unknown or invalid timezone. (Thanks to
|
||||
Justin Grant, Mark Davis, and Guy Harris.)
|
||||
|
||||
Cite Internet RFC 9636, which obsoletes RFC 8536 for TZif format.
|
||||
|
||||
|
||||
Release 2024b - 2024-09-04 12:27:47 -0700
|
||||
|
||||
Briefly:
|
||||
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.
|
||||
|
||||
Changes to past timestamps
|
||||
|
||||
Asia/Choibalsan is now an alias for Asia/Ulaanbaatar rather than
|
||||
being a separate Zone with differing behavior before April 2008.
|
||||
This seems better given our wildly conflicting information about
|
||||
Mongolia's time zone history. (Thanks to Heitor David Pinto.)
|
||||
|
||||
Historical transitions for Mexico have been updated based on
|
||||
official Mexican decrees. The affected timestamps occur during
|
||||
the years 1921-1927, 1931, 1945, 1949-1970, and 1981-1997.
|
||||
The affected zones are America/Bahia_Banderas, America/Cancun,
|
||||
America/Chihuahua, America/Ciudad_Juarez, America/Hermosillo,
|
||||
America/Mazatlan, America/Merida, America/Mexico_City,
|
||||
America/Monterrey, America/Ojinaga, and America/Tijuana.
|
||||
(Thanks to Heitor David Pinto.)
|
||||
|
||||
Historical transitions for Portugal, represented by Europe/Lisbon,
|
||||
Atlantic/Azores, and Atlantic/Madeira, have been updated based on a
|
||||
close reading of old Portuguese legislation, replacing previous data
|
||||
mainly originating from Whitman and Shanks & Pottenger. These
|
||||
changes affect a few transitions in 1917-1921, 1924, and 1940
|
||||
throughout these regions by a few hours or days, and various
|
||||
timestamps between 1977 and 1993 depending on the region. In
|
||||
particular, the Azores and Madeira did not observe DST from 1977 to
|
||||
1981. Additionally, the adoption of standard zonal time in former
|
||||
Portuguese colonies have been adjusted: Africa/Maputo in 1909, and
|
||||
Asia/Dili by 22 minutes at the start of 1912.
|
||||
(Thanks to Tim Parenti.)
|
||||
|
||||
Changes to past tm_isdst flags
|
||||
|
||||
The period from 1966-04-03 through 1966-10-02 in Portugal is now
|
||||
modeled as DST, to more closely reflect how contemporaneous changes
|
||||
in law entered into force.
|
||||
|
||||
Changes to data
|
||||
|
||||
Names present only for compatibility with UNIX System V
|
||||
(last released in the 1990s) have been moved to 'backward'.
|
||||
These names, which for post-1970 timestamps mostly just duplicate
|
||||
data of geographical names, were confusing downstream uses.
|
||||
Names moved to 'backward' are now links to geographical names.
|
||||
This affects behavior for TZ='EET' for some pre-1981 timestamps,
|
||||
for TZ='CET' for some pre-1947 timestamps, and for TZ='WET' for
|
||||
some pre-1996 timestamps. Also, TZ='MET' now behaves like
|
||||
TZ='CET' and so uses the abbreviation "CET" rather than "MET".
|
||||
Those needing the previous TZDB behavior, which does not match any
|
||||
real-world clocks, can find the old entries in 'backzone'.
|
||||
(Problem reported by Justin Grant.)
|
||||
|
||||
The main source files' time zone abbreviations now use %z,
|
||||
supported by zic since release 2015f and used in vanguard form
|
||||
since release 2022b. For example, America/Sao_Paulo now contains
|
||||
the zone continuation line "-3:00 Brazil %z", which is less error
|
||||
prone than the old "-3:00 Brazil -03/-02". This does not change
|
||||
the represented data: the generated TZif files are unchanged.
|
||||
Rearguard form still avoids %z, to support obsolescent parsers.
|
||||
|
||||
Asia/Almaty has been removed from zonenow.tab as it now agrees
|
||||
with Asia/Tashkent for future timestamps, due to Kazakhstan's
|
||||
2024-02-29 time zone change. Similarly, America/Scoresbysund
|
||||
has been removed, as it now agrees with America/Nuuk due to
|
||||
its 2024-03-31 time zone change.
|
||||
|
||||
Changes to code
|
||||
|
||||
localtime.c now always uses a TZif file's time type 0 to handle
|
||||
timestamps before the file's first transition. Formerly,
|
||||
localtime.c sometimes inferred a different time type, in order to
|
||||
handle problematic data generated by zic 2018e or earlier. As it
|
||||
is now safe to assume more recent versions of zic, there is no
|
||||
longer a pressing need to fail to conform RFC 8536 section 3.2,
|
||||
which requires using time type 0 in this situation. This change
|
||||
does not affect behavior when reading TZif files generated by zic
|
||||
2018f and later.
|
||||
|
||||
POSIX.1-2024 removes asctime_r and ctime_r and does not let
|
||||
libraries define them, so remove them except when needed to
|
||||
conform to earlier POSIX. These functions are dangerous as they
|
||||
can overrun user buffers. If you still need them, add
|
||||
-DSUPPORT_POSIX2008 to CFLAGS.
|
||||
|
||||
The SUPPORT_C89 option now defaults to 1 instead of 0, fixing a
|
||||
POSIX-conformance bug introduced in 2023a.
|
||||
|
||||
tzselect now supports POSIX.1-2024 proleptic TZ strings. Also, it
|
||||
assumes POSIX.2-1992 or later, as practical porting targets now
|
||||
all support that, and it uses some features from POSIX.1-2024 if
|
||||
available.
|
||||
|
||||
Changes to build procedure
|
||||
|
||||
'make check' no longer requires curl and Internet access.
|
||||
|
||||
The build procedure now assumes POSIX.2-1992 or later, to simplify
|
||||
maintenance. To build on Solaris 10, the only extant system still
|
||||
defaulting to pre-POSIX, prepend /usr/xpg4/bin to PATH.
|
||||
|
||||
Changes to documentation
|
||||
|
||||
The documentation now reflects POSIX.1-2024.
|
||||
|
||||
Changes to commentary
|
||||
|
||||
Commentary about historical transitions in Portugal and her former
|
||||
colonies has been expanded with links to relevant legislation.
|
||||
(Thanks to Tim Parenti.)
|
||||
|
||||
|
||||
Release 2024a - 2024-02-01 09:28:56 -0800
|
||||
|
||||
Briefly:
|
||||
@@ -84,10 +307,10 @@ Release 2023d - 2023-12-21 20:02:24 -0800
|
||||
changing its time zone from -01/+00 to -02/-01 at the same moment
|
||||
as the spring-forward transition. Its clocks will therefore not
|
||||
spring forward as previously scheduled. The time zone change
|
||||
reverts to its common practice before 1981.
|
||||
reverts to its common practice before 1981. (Thanks to Jule Dabars.)
|
||||
|
||||
Fix predictions for DST transitions in Palestine in 2072-2075,
|
||||
correcting a typo introduced in 2023a.
|
||||
correcting a typo introduced in 2023a. (Thanks to Jule Dabars.)
|
||||
|
||||
Changes to past and future timestamps
|
||||
|
||||
@@ -161,7 +384,7 @@ Release 2023d - 2023-12-21 20:02:24 -0800
|
||||
* It uses the special .POSIX target.
|
||||
* It quotes special characters more carefully.
|
||||
* It no longer mishandles builds in an ISO 8859 locale.
|
||||
Due to the CC changes, TZDIR is now #defined in a file tzfile.h
|
||||
Due to the CC changes, TZDIR is now #defined in a file tzdir.h
|
||||
built by 'make', not in a $(CC) -D option. Also, TZDEFAULT is
|
||||
now treated like TZDIR as they have similar roles.
|
||||
|
||||
@@ -283,7 +506,7 @@ Release 2023a - 2023-03-22 12:39:33 -0700
|
||||
To improve tzselect diagnostics, zone1970.tab's comments column is
|
||||
now limited to countries that have multiple timezones.
|
||||
|
||||
Note that leap seconds are planned to be discontinued by 2035.
|
||||
Note that there are plans to discontinue leap seconds by 2035.
|
||||
|
||||
|
||||
Release 2022g - 2022-11-29 08:58:31 -0800
|
||||
|
||||
+42
-31
@@ -103,17 +103,16 @@ Zone Africa/Algiers 0:12:12 - LMT 1891 Mar 16
|
||||
|
||||
# Cape Verde / Cabo Verde
|
||||
#
|
||||
# From Paul Eggert (2018-02-16):
|
||||
# Shanks gives 1907 for the transition to +02.
|
||||
# For now, ignore that and follow the 1911-05-26 Portuguese decree
|
||||
# (see Europe/Lisbon).
|
||||
# From Tim Parenti (2024-07-01), per Paul Eggert (2018-02-16):
|
||||
# For timestamps before independence, see commentary for Europe/Lisbon.
|
||||
# Shanks gives 1907 instead for the transition to -02.
|
||||
#
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Atlantic/Cape_Verde -1:34:04 - LMT 1912 Jan 01 2:00u # Praia
|
||||
-2:00 - -02 1942 Sep
|
||||
-2:00 1:00 -01 1945 Oct 15
|
||||
-2:00 - -02 1975 Nov 25 2:00
|
||||
-1:00 - -01
|
||||
-2:00 - %z 1942 Sep
|
||||
-2:00 1:00 %z 1945 Oct 15
|
||||
-2:00 - %z 1975 Nov 25 2:00
|
||||
-1:00 - %z
|
||||
|
||||
# Chad
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
@@ -345,14 +344,12 @@ Zone Africa/Cairo 2:05:09 - LMT 1900 Oct
|
||||
|
||||
# Guinea-Bissau
|
||||
#
|
||||
# From Paul Eggert (2018-02-16):
|
||||
# Shanks gives 1911-05-26 for the transition to WAT,
|
||||
# evidently confusing the date of the Portuguese decree
|
||||
# (see Europe/Lisbon) with the date that it took effect.
|
||||
# From Tim Parenti (2024-07-01), per Paul Eggert (2018-02-16):
|
||||
# For timestamps before independence, see commentary for Europe/Lisbon.
|
||||
#
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Africa/Bissau -1:02:20 - LMT 1912 Jan 1 1:00u
|
||||
-1:00 - -01 1975
|
||||
-1:00 - %z 1975
|
||||
0:00 - GMT
|
||||
|
||||
# Comoros
|
||||
@@ -417,10 +414,10 @@ Zone Africa/Bissau -1:02:20 - LMT 1912 Jan 1 1:00u
|
||||
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Africa/Nairobi 2:27:16 - LMT 1908 May
|
||||
2:30 - +0230 1928 Jun 30 24:00
|
||||
2:30 - %z 1928 Jun 30 24:00
|
||||
3:00 - EAT 1930 Jan 4 24:00
|
||||
2:30 - +0230 1936 Dec 31 24:00
|
||||
2:45 - +0245 1942 Jul 31 24:00
|
||||
2:30 - %z 1936 Dec 31 24:00
|
||||
2:45 - %z 1942 Jul 31 24:00
|
||||
3:00 - EAT
|
||||
|
||||
# Liberia
|
||||
@@ -591,7 +588,7 @@ Rule Mauritius 2008 only - Oct lastSun 2:00 1:00 -
|
||||
Rule Mauritius 2009 only - Mar lastSun 2:00 0 -
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Indian/Mauritius 3:50:00 - LMT 1907 # Port Louis
|
||||
4:00 Mauritius +04/+05
|
||||
4:00 Mauritius %z
|
||||
# Agalega Is, Rodriguez
|
||||
# no information; probably like Indian/Mauritius
|
||||
|
||||
@@ -1071,10 +1068,10 @@ Rule Morocco 2087 only - May 11 2:00 0 -
|
||||
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Africa/Casablanca -0:30:20 - LMT 1913 Oct 26
|
||||
0:00 Morocco +00/+01 1984 Mar 16
|
||||
1:00 - +01 1986
|
||||
0:00 Morocco +00/+01 2018 Oct 28 3:00
|
||||
1:00 Morocco +01/+00
|
||||
0:00 Morocco %z 1984 Mar 16
|
||||
1:00 - %z 1986
|
||||
0:00 Morocco %z 2018 Oct 28 3:00
|
||||
1:00 Morocco %z
|
||||
|
||||
# Western Sahara
|
||||
#
|
||||
@@ -1088,9 +1085,9 @@ Zone Africa/Casablanca -0:30:20 - LMT 1913 Oct 26
|
||||
# since most of it was then controlled by Morocco.
|
||||
|
||||
Zone Africa/El_Aaiun -0:52:48 - LMT 1934 Jan # El Aaiún
|
||||
-1:00 - -01 1976 Apr 14
|
||||
0:00 Morocco +00/+01 2018 Oct 28 3:00
|
||||
1:00 Morocco +01/+00
|
||||
-1:00 - %z 1976 Apr 14
|
||||
0:00 Morocco %z 2018 Oct 28 3:00
|
||||
1:00 Morocco %z
|
||||
|
||||
# Botswana
|
||||
# Burundi
|
||||
@@ -1101,13 +1098,27 @@ Zone Africa/El_Aaiun -0:52:48 - LMT 1934 Jan # El Aaiún
|
||||
# Zambia
|
||||
# Zimbabwe
|
||||
#
|
||||
# Shanks gives 1903-03-01 for the transition to CAT.
|
||||
# Perhaps the 1911-05-26 Portuguese decree
|
||||
# https://dre.pt/pdf1sdip/1911/05/12500/23132313.pdf
|
||||
# merely made it official?
|
||||
# From Tim Parenti (2024-07-01):
|
||||
# For timestamps before Mozambique's independence, see commentary for
|
||||
# Europe/Lisbon.
|
||||
#
|
||||
# From Paul Eggert (2024-05-24):
|
||||
# The London Gazette, 1903-04-03, page 2245, says that
|
||||
# as of 1903-03-03 a time ball at the port of Lourenço Marques
|
||||
# (as Maputo was then called) was dropped daily at 13:00:00 LMT,
|
||||
# corresponding to 22:49:41.7 GMT, so local time was +02:10:18.3.
|
||||
# Conversely, the newspaper South Africa, 1909-02-09, page 321,
|
||||
# says the port had just installed an apparatus that communicated
|
||||
# "from the controlling clock in the new Observatory at Reuben Point ...
|
||||
# exact mean South African time, i.e., 30 deg., or 2 hours East of Greenwich".
|
||||
# Although Shanks gives 1903-03-01 for the transition to CAT,
|
||||
# evidently the port transitioned to CAT after 1903-03-03 but before
|
||||
# the Portuguese legal transition of 1912-01-01 (see Europe/Lisbon commentary).
|
||||
# For lack of better info, list 1909 as the transition date.
|
||||
#
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Africa/Maputo 2:10:20 - LMT 1903 Mar
|
||||
#STDOFF 2:10:18.3
|
||||
Zone Africa/Maputo 2:10:18 - LMT 1909
|
||||
2:00 - CAT
|
||||
|
||||
# Namibia
|
||||
@@ -1172,7 +1183,7 @@ Rule Namibia 1995 2017 - Apr Sun>=1 2:00 -1:00 WAT
|
||||
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Africa/Windhoek 1:08:24 - LMT 1892 Feb 8
|
||||
1:30 - +0130 1903 Mar
|
||||
1:30 - %z 1903 Mar
|
||||
2:00 - SAST 1942 Sep 20 2:00
|
||||
2:00 1:00 SAST 1943 Mar 21 2:00
|
||||
2:00 - SAST 1990 Mar 21 # independence
|
||||
@@ -1260,7 +1271,7 @@ Zone Africa/Windhoek 1:08:24 - LMT 1892 Feb 8
|
||||
Zone Africa/Lagos 0:13:35 - LMT 1905 Jul 1
|
||||
0:00 - GMT 1908 Jul 1
|
||||
0:13:35 - LMT 1914 Jan 1
|
||||
0:30 - +0030 1919 Sep 1
|
||||
0:30 - %z 1919 Sep 1
|
||||
1:00 - WAT
|
||||
|
||||
# São Tomé and Príncipe
|
||||
|
||||
+31
-29
@@ -87,34 +87,34 @@
|
||||
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Antarctica/Casey 0 - -00 1969
|
||||
8:00 - +08 2009 Oct 18 2:00
|
||||
11:00 - +11 2010 Mar 5 2:00
|
||||
8:00 - +08 2011 Oct 28 2:00
|
||||
11:00 - +11 2012 Feb 21 17:00u
|
||||
8:00 - +08 2016 Oct 22
|
||||
11:00 - +11 2018 Mar 11 4:00
|
||||
8:00 - +08 2018 Oct 7 4:00
|
||||
11:00 - +11 2019 Mar 17 3:00
|
||||
8:00 - +08 2019 Oct 4 3:00
|
||||
11:00 - +11 2020 Mar 8 3:00
|
||||
8:00 - +08 2020 Oct 4 0:01
|
||||
11:00 - +11 2021 Mar 14 0:00
|
||||
8:00 - +08 2021 Oct 3 0:01
|
||||
11:00 - +11 2022 Mar 13 0:00
|
||||
8:00 - +08 2022 Oct 2 0:01
|
||||
11:00 - +11 2023 Mar 9 3:00
|
||||
8:00 - +08
|
||||
8:00 - %z 2009 Oct 18 2:00
|
||||
11:00 - %z 2010 Mar 5 2:00
|
||||
8:00 - %z 2011 Oct 28 2:00
|
||||
11:00 - %z 2012 Feb 21 17:00u
|
||||
8:00 - %z 2016 Oct 22
|
||||
11:00 - %z 2018 Mar 11 4:00
|
||||
8:00 - %z 2018 Oct 7 4:00
|
||||
11:00 - %z 2019 Mar 17 3:00
|
||||
8:00 - %z 2019 Oct 4 3:00
|
||||
11:00 - %z 2020 Mar 8 3:00
|
||||
8:00 - %z 2020 Oct 4 0:01
|
||||
11:00 - %z 2021 Mar 14 0:00
|
||||
8:00 - %z 2021 Oct 3 0:01
|
||||
11:00 - %z 2022 Mar 13 0:00
|
||||
8:00 - %z 2022 Oct 2 0:01
|
||||
11:00 - %z 2023 Mar 9 3:00
|
||||
8:00 - %z
|
||||
Zone Antarctica/Davis 0 - -00 1957 Jan 13
|
||||
7:00 - +07 1964 Nov
|
||||
7:00 - %z 1964 Nov
|
||||
0 - -00 1969 Feb
|
||||
7:00 - +07 2009 Oct 18 2:00
|
||||
5:00 - +05 2010 Mar 10 20:00u
|
||||
7:00 - +07 2011 Oct 28 2:00
|
||||
5:00 - +05 2012 Feb 21 20:00u
|
||||
7:00 - +07
|
||||
7:00 - %z 2009 Oct 18 2:00
|
||||
5:00 - %z 2010 Mar 10 20:00u
|
||||
7:00 - %z 2011 Oct 28 2:00
|
||||
5:00 - %z 2012 Feb 21 20:00u
|
||||
7:00 - %z
|
||||
Zone Antarctica/Mawson 0 - -00 1954 Feb 13
|
||||
6:00 - +06 2009 Oct 18 2:00
|
||||
5:00 - +05
|
||||
6:00 - %z 2009 Oct 18 2:00
|
||||
5:00 - %z
|
||||
# References:
|
||||
# Casey Weather (1998-02-26)
|
||||
# http://www.antdiv.gov.au/aad/exop/sfo/casey/casey_aws.html
|
||||
@@ -174,6 +174,8 @@ Zone Antarctica/Mawson 0 - -00 1954 Feb 13
|
||||
|
||||
# France & Italy - year-round base
|
||||
# Concordia, -750600+1232000, since 2005
|
||||
# https://en.wikipedia.org/wiki/Concordia_Station
|
||||
# Can use Asia/Singapore, which it has agreed with since inception.
|
||||
|
||||
# Germany - year-round base
|
||||
# Neumayer III, -704080-0081602, since 2009
|
||||
@@ -290,10 +292,10 @@ Zone Antarctica/Troll 0 - -00 2005 Feb 12
|
||||
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Antarctica/Vostok 0 - -00 1957 Dec 16
|
||||
7:00 - +07 1994 Feb
|
||||
7:00 - %z 1994 Feb
|
||||
0 - -00 1994 Nov
|
||||
7:00 - +07 2023 Dec 18 2:00
|
||||
5:00 - +05
|
||||
7:00 - %z 2023 Dec 18 2:00
|
||||
5:00 - %z
|
||||
|
||||
# S Africa - year-round bases
|
||||
# Marion Island, -4653+03752
|
||||
@@ -326,7 +328,7 @@ Zone Antarctica/Vostok 0 - -00 1957 Dec 16
|
||||
#
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Antarctica/Rothera 0 - -00 1976 Dec 1
|
||||
-3:00 - -03
|
||||
-3:00 - %z
|
||||
|
||||
# Uruguay - year round base
|
||||
# Artigas, King George Island, -621104-0585107
|
||||
|
||||
+326
-237
@@ -83,8 +83,8 @@ Rule RussiaAsia 1996 2010 - Oct lastSun 2:00s 0 -
|
||||
# Afghanistan
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Kabul 4:36:48 - LMT 1890
|
||||
4:00 - +04 1945
|
||||
4:30 - +0430
|
||||
4:00 - %z 1945
|
||||
4:30 - %z
|
||||
|
||||
# Armenia
|
||||
# From Paul Eggert (2006-03-22):
|
||||
@@ -116,12 +116,12 @@ Rule Armenia 2011 only - Mar lastSun 2:00s 1:00 -
|
||||
Rule Armenia 2011 only - Oct lastSun 2:00s 0 -
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Yerevan 2:58:00 - LMT 1924 May 2
|
||||
3:00 - +03 1957 Mar
|
||||
4:00 RussiaAsia +04/+05 1991 Mar 31 2:00s
|
||||
3:00 RussiaAsia +03/+04 1995 Sep 24 2:00s
|
||||
4:00 - +04 1997
|
||||
4:00 RussiaAsia +04/+05 2011
|
||||
4:00 Armenia +04/+05
|
||||
3:00 - %z 1957 Mar
|
||||
4:00 RussiaAsia %z 1991 Mar 31 2:00s
|
||||
3:00 RussiaAsia %z 1995 Sep 24 2:00s
|
||||
4:00 - %z 1997
|
||||
4:00 RussiaAsia %z 2011
|
||||
4:00 Armenia %z
|
||||
|
||||
# Azerbaijan
|
||||
|
||||
@@ -142,12 +142,12 @@ Rule Azer 1997 2015 - Mar lastSun 4:00 1:00 -
|
||||
Rule Azer 1997 2015 - Oct lastSun 5:00 0 -
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Baku 3:19:24 - LMT 1924 May 2
|
||||
3:00 - +03 1957 Mar
|
||||
4:00 RussiaAsia +04/+05 1991 Mar 31 2:00s
|
||||
3:00 RussiaAsia +03/+04 1992 Sep lastSun 2:00s
|
||||
4:00 - +04 1996
|
||||
4:00 EUAsia +04/+05 1997
|
||||
4:00 Azer +04/+05
|
||||
3:00 - %z 1957 Mar
|
||||
4:00 RussiaAsia %z 1991 Mar 31 2:00s
|
||||
3:00 RussiaAsia %z 1992 Sep lastSun 2:00s
|
||||
4:00 - %z 1996
|
||||
4:00 EUAsia %z 1997
|
||||
4:00 Azer %z
|
||||
|
||||
# Bangladesh
|
||||
# From Alexander Krivenyshev (2009-05-13):
|
||||
@@ -228,17 +228,17 @@ Rule Dhaka 2009 only - Dec 31 24:00 0 -
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Dhaka 6:01:40 - LMT 1890
|
||||
5:53:20 - HMT 1941 Oct # Howrah Mean Time?
|
||||
6:30 - +0630 1942 May 15
|
||||
5:30 - +0530 1942 Sep
|
||||
6:30 - +0630 1951 Sep 30
|
||||
6:00 - +06 2009
|
||||
6:00 Dhaka +06/+07
|
||||
6:30 - %z 1942 May 15
|
||||
5:30 - %z 1942 Sep
|
||||
6:30 - %z 1951 Sep 30
|
||||
6:00 - %z 2009
|
||||
6:00 Dhaka %z
|
||||
|
||||
# Bhutan
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Thimphu 5:58:36 - LMT 1947 Aug 15 # or Thimbu
|
||||
5:30 - +0530 1987 Oct
|
||||
6:00 - +06
|
||||
5:30 - %z 1987 Oct
|
||||
6:00 - %z
|
||||
|
||||
# British Indian Ocean Territory
|
||||
# Whitman and the 1995 CIA time zone map say 5:00, but the
|
||||
@@ -248,8 +248,8 @@ Zone Asia/Thimphu 5:58:36 - LMT 1947 Aug 15 # or Thimbu
|
||||
# then contained the Chagos Archipelago).
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Indian/Chagos 4:49:40 - LMT 1907
|
||||
5:00 - +05 1996
|
||||
6:00 - +06
|
||||
5:00 - %z 1996
|
||||
6:00 - %z
|
||||
|
||||
# Cocos (Keeling) Islands
|
||||
# Myanmar (Burma)
|
||||
@@ -265,9 +265,9 @@ Zone Indian/Chagos 4:49:40 - LMT 1907
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Yangon 6:24:47 - LMT 1880 # or Rangoon
|
||||
6:24:47 - RMT 1920 # Rangoon local time
|
||||
6:30 - +0630 1942 May
|
||||
9:00 - +09 1945 May 3
|
||||
6:30 - +0630
|
||||
6:30 - %z 1942 May
|
||||
9:00 - %z 1945 May 3
|
||||
6:30 - %z
|
||||
|
||||
# China
|
||||
|
||||
@@ -656,7 +656,7 @@ Zone Asia/Shanghai 8:05:43 - LMT 1901
|
||||
# Xinjiang time, used by many in western China; represented by Ürümqi / Ürümchi
|
||||
# / Wulumuqi. (Please use Asia/Shanghai if you prefer Beijing time.)
|
||||
Zone Asia/Urumqi 5:50:20 - LMT 1928
|
||||
6:00 - +06
|
||||
6:00 - %z
|
||||
|
||||
# Hong Kong
|
||||
|
||||
@@ -1114,7 +1114,7 @@ Rule Macau 1979 only - Oct Sun>=16 03:30 0 S
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Macau 7:34:10 - LMT 1904 Oct 30
|
||||
8:00 - CST 1941 Dec 21 23:00
|
||||
9:00 Macau +09/+10 1945 Sep 30 24:00
|
||||
9:00 Macau %z 1945 Sep 30 24:00
|
||||
8:00 Macau C%sT
|
||||
|
||||
|
||||
@@ -1157,7 +1157,7 @@ Zone Asia/Nicosia 2:13:28 - LMT 1921 Nov 14
|
||||
Zone Asia/Famagusta 2:15:48 - LMT 1921 Nov 14
|
||||
2:00 Cyprus EE%sT 1998 Sep
|
||||
2:00 EUAsia EE%sT 2016 Sep 8
|
||||
3:00 - +03 2017 Oct 29 1:00u
|
||||
3:00 - %z 2017 Oct 29 1:00u
|
||||
2:00 EUAsia EE%sT
|
||||
|
||||
# Georgia
|
||||
@@ -1198,18 +1198,25 @@ Zone Asia/Famagusta 2:15:48 - LMT 1921 Nov 14
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Tbilisi 2:59:11 - LMT 1880
|
||||
2:59:11 - TBMT 1924 May 2 # Tbilisi Mean Time
|
||||
3:00 - +03 1957 Mar
|
||||
4:00 RussiaAsia +04/+05 1991 Mar 31 2:00s
|
||||
3:00 RussiaAsia +03/+04 1992
|
||||
3:00 E-EurAsia +03/+04 1994 Sep lastSun
|
||||
4:00 E-EurAsia +04/+05 1996 Oct lastSun
|
||||
4:00 1:00 +05 1997 Mar lastSun
|
||||
4:00 E-EurAsia +04/+05 2004 Jun 27
|
||||
3:00 RussiaAsia +03/+04 2005 Mar lastSun 2:00
|
||||
4:00 - +04
|
||||
3:00 - %z 1957 Mar
|
||||
4:00 RussiaAsia %z 1991 Mar 31 2:00s
|
||||
3:00 RussiaAsia %z 1992
|
||||
3:00 E-EurAsia %z 1994 Sep lastSun
|
||||
4:00 E-EurAsia %z 1996 Oct lastSun
|
||||
4:00 1:00 %z 1997 Mar lastSun
|
||||
4:00 E-EurAsia %z 2004 Jun 27
|
||||
3:00 RussiaAsia %z 2005 Mar lastSun 2:00
|
||||
4:00 - %z
|
||||
|
||||
# East Timor
|
||||
|
||||
# From Tim Parenti (2024-07-01):
|
||||
# The 1912-01-01 transition occurred at 00:00 new time, per the 1911-05-24
|
||||
# Portuguese decree (see Europe/Lisbon). A provision in article 5(c) of the
|
||||
# decree prescribed that Timor "will keep counting time in harmony with
|
||||
# neighboring foreign colonies, [for] as long as they do not adopt the time
|
||||
# that belongs to them in [the Washington Convention] system."
|
||||
|
||||
# See Indonesia for the 1945 transition.
|
||||
|
||||
# From João Carrascalão, brother of the former governor of East Timor, in
|
||||
@@ -1233,11 +1240,11 @@ Zone Asia/Tbilisi 2:59:11 - LMT 1880
|
||||
# midnight on Saturday, September 16.
|
||||
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Dili 8:22:20 - LMT 1912 Jan 1
|
||||
8:00 - +08 1942 Feb 21 23:00
|
||||
9:00 - +09 1976 May 3
|
||||
8:00 - +08 2000 Sep 17 0:00
|
||||
9:00 - +09
|
||||
Zone Asia/Dili 8:22:20 - LMT 1911 Dec 31 16:00u
|
||||
8:00 - %z 1942 Feb 21 23:00
|
||||
9:00 - %z 1976 May 3
|
||||
8:00 - %z 2000 Sep 17 0:00
|
||||
9:00 - %z
|
||||
|
||||
# India
|
||||
|
||||
@@ -1303,9 +1310,9 @@ Zone Asia/Kolkata 5:53:28 - LMT 1854 Jun 28 # Kolkata
|
||||
5:53:20 - HMT 1870 # Howrah Mean Time?
|
||||
5:21:10 - MMT 1906 Jan 1 # Madras local time
|
||||
5:30 - IST 1941 Oct
|
||||
5:30 1:00 +0630 1942 May 15
|
||||
5:30 1:00 %z 1942 May 15
|
||||
5:30 - IST 1942 Sep
|
||||
5:30 1:00 +0630 1945 Oct 15
|
||||
5:30 1:00 %z 1945 Oct 15
|
||||
5:30 - IST
|
||||
# Since 1970 the following are like Asia/Kolkata:
|
||||
# Andaman Is
|
||||
@@ -1357,33 +1364,33 @@ Zone Asia/Jakarta 7:07:12 - LMT 1867 Aug 10
|
||||
# Shanks & Pottenger say the next transition was at 1924 Jan 1 0:13,
|
||||
# but this must be a typo.
|
||||
7:07:12 - BMT 1923 Dec 31 16:40u # Batavia
|
||||
7:20 - +0720 1932 Nov
|
||||
7:30 - +0730 1942 Mar 23
|
||||
9:00 - +09 1945 Sep 23
|
||||
7:30 - +0730 1948 May
|
||||
8:00 - +08 1950 May
|
||||
7:30 - +0730 1964
|
||||
7:20 - %z 1932 Nov
|
||||
7:30 - %z 1942 Mar 23
|
||||
9:00 - %z 1945 Sep 23
|
||||
7:30 - %z 1948 May
|
||||
8:00 - %z 1950 May
|
||||
7:30 - %z 1964
|
||||
7:00 - WIB
|
||||
# west and central Borneo
|
||||
Zone Asia/Pontianak 7:17:20 - LMT 1908 May
|
||||
7:17:20 - PMT 1932 Nov # Pontianak MT
|
||||
7:30 - +0730 1942 Jan 29
|
||||
9:00 - +09 1945 Sep 23
|
||||
7:30 - +0730 1948 May
|
||||
8:00 - +08 1950 May
|
||||
7:30 - +0730 1964
|
||||
7:30 - %z 1942 Jan 29
|
||||
9:00 - %z 1945 Sep 23
|
||||
7:30 - %z 1948 May
|
||||
8:00 - %z 1950 May
|
||||
7:30 - %z 1964
|
||||
8:00 - WITA 1988 Jan 1
|
||||
7:00 - WIB
|
||||
# Sulawesi, Lesser Sundas, east and south Borneo
|
||||
Zone Asia/Makassar 7:57:36 - LMT 1920
|
||||
7:57:36 - MMT 1932 Nov # Macassar MT
|
||||
8:00 - +08 1942 Feb 9
|
||||
9:00 - +09 1945 Sep 23
|
||||
8:00 - %z 1942 Feb 9
|
||||
9:00 - %z 1945 Sep 23
|
||||
8:00 - WITA
|
||||
# Maluku Islands, West Papua, Papua
|
||||
Zone Asia/Jayapura 9:22:48 - LMT 1932 Nov
|
||||
9:00 - +09 1944 Sep 1
|
||||
9:30 - +0930 1964
|
||||
9:00 - %z 1944 Sep 1
|
||||
9:30 - %z 1964
|
||||
9:00 - WIT
|
||||
|
||||
# Iran
|
||||
@@ -1493,6 +1500,16 @@ Zone Asia/Jayapura 9:22:48 - LMT 1932 Nov
|
||||
# (UIT No. 143 17.XI.1977) and not 23 September (UIT No. 141 13.IX.1977).
|
||||
# UIT is the Operational Bulletin of International Telecommunication Union.
|
||||
|
||||
# From Roozbeh Pournader (2025-03-18):
|
||||
# ... the exact time of Iran's transition from +0400 to +0330 ... was Friday
|
||||
# 1357/8/19 AP=1978-11-10. Here's a newspaper clip from the Ettela'at
|
||||
# newspaper, dated 1357/8/14 AP=1978-11-05, translated from Persian
|
||||
# (at https://w.wiki/DUEY):
|
||||
# Following the government's decision about returning the official time
|
||||
# to the previous status, the spokesperson for the Ministry of Energy
|
||||
# announced today: At the hour 24 of Friday 19th of Aban (=1978-11-10),
|
||||
# the country's time will be pulled back half an hour.
|
||||
#
|
||||
# From Roozbeh Pournader (2003-03-15):
|
||||
# This is an English translation of what I just found (originally in Persian).
|
||||
# The Gregorian dates in brackets are mine:
|
||||
@@ -1619,9 +1636,9 @@ Rule Iran 2021 2022 - Sep 21 24:00 0 -
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Tehran 3:25:44 - LMT 1916
|
||||
3:25:44 - TMT 1935 Jun 13 # Tehran Mean Time
|
||||
3:30 Iran +0330/+0430 1977 Oct 20 24:00
|
||||
4:00 Iran +04/+05 1979
|
||||
3:30 Iran +0330/+0430
|
||||
3:30 Iran %z 1977 Oct 20 24:00
|
||||
4:00 Iran %z 1978 Nov 10 24:00
|
||||
3:30 Iran %z
|
||||
|
||||
|
||||
# Iraq
|
||||
@@ -1664,8 +1681,8 @@ Rule Iraq 1991 2007 - Oct 1 3:00s 0 -
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Baghdad 2:57:40 - LMT 1890
|
||||
2:57:36 - BMT 1918 # Baghdad Mean Time?
|
||||
3:00 - +03 1982 May
|
||||
3:00 Iraq +03/+04
|
||||
3:00 - %z 1982 May
|
||||
3:00 Iraq %z
|
||||
|
||||
|
||||
###############################################################################
|
||||
@@ -2262,7 +2279,7 @@ Rule Jordan 2022 only - Feb lastThu 24:00 1:00 S
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Amman 2:23:44 - LMT 1931
|
||||
2:00 Jordan EE%sT 2022 Oct 28 0:00s
|
||||
3:00 - +03
|
||||
3:00 - %z
|
||||
|
||||
|
||||
# Kazakhstan
|
||||
@@ -2473,88 +2490,88 @@ Zone Asia/Amman 2:23:44 - LMT 1931
|
||||
# Almaty (formerly Alma-Ata), representing most locations in Kazakhstan
|
||||
# This includes Abai/Abay (ISO 3166-2 code KZ-10), Aqmola/Akmola (KZ-11),
|
||||
# Almaty (KZ-19), Almaty city (KZ-75), Astana city (KZ-71),
|
||||
# East Kazkhstan (KZ-63), Jambyl/Zhambyl (KZ-31), Jetisu/Zhetysu (KZ-33),
|
||||
# East Kazakhstan (KZ-63), Jambyl/Zhambyl (KZ-31), Jetisu/Zhetysu (KZ-33),
|
||||
# Karaganda (KZ-35), North Kazakhstan (KZ-59), Pavlodar (KZ-55),
|
||||
# Shyumkent city (KZ-79), Turkistan (KZ-61), and Ulytau (KZ-62).
|
||||
# Shymkent city (KZ-79), Turkistan (KZ-61), and Ulytau (KZ-62).
|
||||
Zone Asia/Almaty 5:07:48 - LMT 1924 May 2 # or Alma-Ata
|
||||
5:00 - +05 1930 Jun 21
|
||||
6:00 RussiaAsia +06/+07 1991 Mar 31 2:00s
|
||||
5:00 RussiaAsia +05/+06 1992 Jan 19 2:00s
|
||||
6:00 RussiaAsia +06/+07 2004 Oct 31 2:00s
|
||||
6:00 - +06 2024 Mar 1 0:00
|
||||
5:00 - +05
|
||||
5:00 - %z 1930 Jun 21
|
||||
6:00 RussiaAsia %z 1991 Mar 31 2:00s
|
||||
5:00 RussiaAsia %z 1992 Jan 19 2:00s
|
||||
6:00 RussiaAsia %z 2004 Oct 31 2:00s
|
||||
6:00 - %z 2024 Mar 1 0:00
|
||||
5:00 - %z
|
||||
# Qyzylorda (aka Kyzylorda, Kizilorda, Kzyl-Orda, etc.) (KZ-43)
|
||||
Zone Asia/Qyzylorda 4:21:52 - LMT 1924 May 2
|
||||
4:00 - +04 1930 Jun 21
|
||||
5:00 - +05 1981 Apr 1
|
||||
5:00 1:00 +06 1981 Oct 1
|
||||
6:00 - +06 1982 Apr 1
|
||||
5:00 RussiaAsia +05/+06 1991 Mar 31 2:00s
|
||||
4:00 RussiaAsia +04/+05 1991 Sep 29 2:00s
|
||||
5:00 RussiaAsia +05/+06 1992 Jan 19 2:00s
|
||||
6:00 RussiaAsia +06/+07 1992 Mar 29 2:00s
|
||||
5:00 RussiaAsia +05/+06 2004 Oct 31 2:00s
|
||||
6:00 - +06 2018 Dec 21 0:00
|
||||
5:00 - +05
|
||||
4:00 - %z 1930 Jun 21
|
||||
5:00 - %z 1981 Apr 1
|
||||
5:00 1:00 %z 1981 Oct 1
|
||||
6:00 - %z 1982 Apr 1
|
||||
5:00 RussiaAsia %z 1991 Mar 31 2:00s
|
||||
4:00 RussiaAsia %z 1991 Sep 29 2:00s
|
||||
5:00 RussiaAsia %z 1992 Jan 19 2:00s
|
||||
6:00 RussiaAsia %z 1992 Mar 29 2:00s
|
||||
5:00 RussiaAsia %z 2004 Oct 31 2:00s
|
||||
6:00 - %z 2018 Dec 21 0:00
|
||||
5:00 - %z
|
||||
# Qostanay (aka Kostanay, Kustanay) (KZ-39)
|
||||
# The 1991/2 rules are unclear partly because of the 1997 Turgai
|
||||
# reorganization.
|
||||
Zone Asia/Qostanay 4:14:28 - LMT 1924 May 2
|
||||
4:00 - +04 1930 Jun 21
|
||||
5:00 - +05 1981 Apr 1
|
||||
5:00 1:00 +06 1981 Oct 1
|
||||
6:00 - +06 1982 Apr 1
|
||||
5:00 RussiaAsia +05/+06 1991 Mar 31 2:00s
|
||||
4:00 RussiaAsia +04/+05 1992 Jan 19 2:00s
|
||||
5:00 RussiaAsia +05/+06 2004 Oct 31 2:00s
|
||||
6:00 - +06 2024 Mar 1 0:00
|
||||
5:00 - +05
|
||||
4:00 - %z 1930 Jun 21
|
||||
5:00 - %z 1981 Apr 1
|
||||
5:00 1:00 %z 1981 Oct 1
|
||||
6:00 - %z 1982 Apr 1
|
||||
5:00 RussiaAsia %z 1991 Mar 31 2:00s
|
||||
4:00 RussiaAsia %z 1992 Jan 19 2:00s
|
||||
5:00 RussiaAsia %z 2004 Oct 31 2:00s
|
||||
6:00 - %z 2024 Mar 1 0:00
|
||||
5:00 - %z
|
||||
# Aqtöbe (aka Aktobe, formerly Aktyubinsk) (KZ-15)
|
||||
Zone Asia/Aqtobe 3:48:40 - LMT 1924 May 2
|
||||
4:00 - +04 1930 Jun 21
|
||||
5:00 - +05 1981 Apr 1
|
||||
5:00 1:00 +06 1981 Oct 1
|
||||
6:00 - +06 1982 Apr 1
|
||||
5:00 RussiaAsia +05/+06 1991 Mar 31 2:00s
|
||||
4:00 RussiaAsia +04/+05 1992 Jan 19 2:00s
|
||||
5:00 RussiaAsia +05/+06 2004 Oct 31 2:00s
|
||||
5:00 - +05
|
||||
4:00 - %z 1930 Jun 21
|
||||
5:00 - %z 1981 Apr 1
|
||||
5:00 1:00 %z 1981 Oct 1
|
||||
6:00 - %z 1982 Apr 1
|
||||
5:00 RussiaAsia %z 1991 Mar 31 2:00s
|
||||
4:00 RussiaAsia %z 1992 Jan 19 2:00s
|
||||
5:00 RussiaAsia %z 2004 Oct 31 2:00s
|
||||
5:00 - %z
|
||||
# Mangghystaū (KZ-47)
|
||||
# Aqtau was not founded until 1963, but it represents an inhabited region,
|
||||
# so include timestamps before 1963.
|
||||
Zone Asia/Aqtau 3:21:04 - LMT 1924 May 2
|
||||
4:00 - +04 1930 Jun 21
|
||||
5:00 - +05 1981 Oct 1
|
||||
6:00 - +06 1982 Apr 1
|
||||
5:00 RussiaAsia +05/+06 1991 Mar 31 2:00s
|
||||
4:00 RussiaAsia +04/+05 1992 Jan 19 2:00s
|
||||
5:00 RussiaAsia +05/+06 1994 Sep 25 2:00s
|
||||
4:00 RussiaAsia +04/+05 2004 Oct 31 2:00s
|
||||
5:00 - +05
|
||||
4:00 - %z 1930 Jun 21
|
||||
5:00 - %z 1981 Oct 1
|
||||
6:00 - %z 1982 Apr 1
|
||||
5:00 RussiaAsia %z 1991 Mar 31 2:00s
|
||||
4:00 RussiaAsia %z 1992 Jan 19 2:00s
|
||||
5:00 RussiaAsia %z 1994 Sep 25 2:00s
|
||||
4:00 RussiaAsia %z 2004 Oct 31 2:00s
|
||||
5:00 - %z
|
||||
# Atyraū (KZ-23) is like Mangghystaū except it switched from
|
||||
# +04/+05 to +05/+06 in spring 1999, not fall 1994.
|
||||
Zone Asia/Atyrau 3:27:44 - LMT 1924 May 2
|
||||
3:00 - +03 1930 Jun 21
|
||||
5:00 - +05 1981 Oct 1
|
||||
6:00 - +06 1982 Apr 1
|
||||
5:00 RussiaAsia +05/+06 1991 Mar 31 2:00s
|
||||
4:00 RussiaAsia +04/+05 1992 Jan 19 2:00s
|
||||
5:00 RussiaAsia +05/+06 1999 Mar 28 2:00s
|
||||
4:00 RussiaAsia +04/+05 2004 Oct 31 2:00s
|
||||
5:00 - +05
|
||||
3:00 - %z 1930 Jun 21
|
||||
5:00 - %z 1981 Oct 1
|
||||
6:00 - %z 1982 Apr 1
|
||||
5:00 RussiaAsia %z 1991 Mar 31 2:00s
|
||||
4:00 RussiaAsia %z 1992 Jan 19 2:00s
|
||||
5:00 RussiaAsia %z 1999 Mar 28 2:00s
|
||||
4:00 RussiaAsia %z 2004 Oct 31 2:00s
|
||||
5:00 - %z
|
||||
# West Kazakhstan (KZ-27)
|
||||
# From Paul Eggert (2016-03-18):
|
||||
# The 1989 transition is from USSR act No. 227 (1989-03-14).
|
||||
Zone Asia/Oral 3:25:24 - LMT 1924 May 2 # or Ural'sk
|
||||
3:00 - +03 1930 Jun 21
|
||||
5:00 - +05 1981 Apr 1
|
||||
5:00 1:00 +06 1981 Oct 1
|
||||
6:00 - +06 1982 Apr 1
|
||||
5:00 RussiaAsia +05/+06 1989 Mar 26 2:00s
|
||||
4:00 RussiaAsia +04/+05 1992 Jan 19 2:00s
|
||||
5:00 RussiaAsia +05/+06 1992 Mar 29 2:00s
|
||||
4:00 RussiaAsia +04/+05 2004 Oct 31 2:00s
|
||||
5:00 - +05
|
||||
3:00 - %z 1930 Jun 21
|
||||
5:00 - %z 1981 Apr 1
|
||||
5:00 1:00 %z 1981 Oct 1
|
||||
6:00 - %z 1982 Apr 1
|
||||
5:00 RussiaAsia %z 1989 Mar 26 2:00s
|
||||
4:00 RussiaAsia %z 1992 Jan 19 2:00s
|
||||
5:00 RussiaAsia %z 1992 Mar 29 2:00s
|
||||
4:00 RussiaAsia %z 2004 Oct 31 2:00s
|
||||
5:00 - %z
|
||||
|
||||
# Kyrgyzstan (Kirgizstan)
|
||||
# Transitions through 1991 are from Shanks & Pottenger.
|
||||
@@ -2575,11 +2592,11 @@ Rule Kyrgyz 1997 2005 - Mar lastSun 2:30 1:00 -
|
||||
Rule Kyrgyz 1997 2004 - Oct lastSun 2:30 0 -
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Bishkek 4:58:24 - LMT 1924 May 2
|
||||
5:00 - +05 1930 Jun 21
|
||||
6:00 RussiaAsia +06/+07 1991 Mar 31 2:00s
|
||||
5:00 RussiaAsia +05/+06 1991 Aug 31 2:00
|
||||
5:00 Kyrgyz +05/+06 2005 Aug 12
|
||||
6:00 - +06
|
||||
5:00 - %z 1930 Jun 21
|
||||
6:00 RussiaAsia %z 1991 Mar 31 2:00s
|
||||
5:00 RussiaAsia %z 1991 Aug 31 2:00
|
||||
5:00 Kyrgyz %z 2005 Aug 12
|
||||
6:00 - %z
|
||||
|
||||
###############################################################################
|
||||
|
||||
@@ -2786,16 +2803,16 @@ Rule NBorneo 1935 1941 - Dec 14 0:00 0 -
|
||||
# and 1982 transition dates are from Mok Ly Yng.
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Kuching 7:21:20 - LMT 1926 Mar
|
||||
7:30 - +0730 1933
|
||||
8:00 NBorneo +08/+0820 1942 Feb 16
|
||||
9:00 - +09 1945 Sep 12
|
||||
8:00 - +08
|
||||
7:30 - %z 1933
|
||||
8:00 NBorneo %z 1942 Feb 16
|
||||
9:00 - %z 1945 Sep 12
|
||||
8:00 - %z
|
||||
|
||||
# Maldives
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Indian/Maldives 4:54:00 - LMT 1880 # Malé
|
||||
4:54:00 - MMT 1960 # Malé Mean Time
|
||||
5:00 - +05
|
||||
5:00 - %z
|
||||
|
||||
# Mongolia
|
||||
|
||||
@@ -2897,9 +2914,37 @@ Zone Indian/Maldives 4:54:00 - LMT 1880 # Malé
|
||||
|
||||
# From Arthur David Olson (2008-05-19):
|
||||
# Assume that Choibalsan is indeed offset by 8:00.
|
||||
# XXX--in the absence of better information, assume that transition
|
||||
# was at the start of 2008-03-31 (the day of Steffen Thorsen's report);
|
||||
# this is almost surely wrong.
|
||||
|
||||
# From Heitor David Pinto (2024-06-23):
|
||||
# Sources about time zones in Mongolia seem to list one of two conflicting
|
||||
# configurations. The first configuration, mentioned in a comment to the TZ
|
||||
# database in 1999, citing a Mongolian government website, lists the provinces
|
||||
# of Bayan-Ölgii, Khovd and Uvs in UTC+7, and the rest of the country in
|
||||
# UTC+8. The second configuration, mentioned in a comment to the database in
|
||||
# 2001, lists Bayan-Ölgii, Khovd, Uvs, Govi-Altai and Zavkhan in UTC+7, Dornod
|
||||
# and Sükhbaatar in UTC+9, and the rest of the country in UTC+8.
|
||||
#
|
||||
# The first configuration is still mentioned by several Mongolian travel
|
||||
# agencies:
|
||||
# https://www.adventurerider.mn/en/page/about_mongolia
|
||||
# http://www.naturetours.mn/nt/mongolia.php
|
||||
# https://www.newjuulchin.mn/web/content/7506?unique=fa24a0f6e96e022a3578ee5195ac879638c734ce
|
||||
#
|
||||
# It also matches these flight schedules in 2013:
|
||||
# http://web.archive.org/web/20130722023600/https://www.hunnuair.com/en/timetabled
|
||||
# The flight times imply that the airports of Uliastai (Zavkhan), Choibalsan
|
||||
# (Dornod) and Altai (Govi-Altai) are in the same time zone as Ulaanbaatar,
|
||||
# and Khovd is one hour behind....
|
||||
#
|
||||
# The second configuration was mentioned by an official of the Mongolian
|
||||
# standards agency in an interview in 2014: https://ikon.mn/n/9v6
|
||||
# And it's still listed by the Mongolian aviation agency:
|
||||
# https://ais.mn/files/aip/eAIP/2023-12-25/html/eSUP/ZM-eSUP-23-04-en-MN.html
|
||||
#
|
||||
# ... I believe that the first configuration is what is actually observed in
|
||||
# Mongolia and has been so all along, at least since 1999. The second
|
||||
# configuration closely matches the ideal time zone boundaries at 97.5° E and
|
||||
# 112.5° E but it doesn't seem to be used in practice.
|
||||
|
||||
# From Ganbold Tsagaankhuu (2015-03-10):
|
||||
# It seems like yesterday Mongolian Government meeting has concluded to use
|
||||
@@ -2938,25 +2983,18 @@ Rule Mongol 2015 2016 - Sep lastSat 0:00 0 -
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
# Hovd, a.k.a. Chovd, Dund-Us, Dzhargalant, Khovd, Jirgalanta
|
||||
Zone Asia/Hovd 6:06:36 - LMT 1905 Aug
|
||||
6:00 - +06 1978
|
||||
7:00 Mongol +07/+08
|
||||
6:00 - %z 1978
|
||||
7:00 Mongol %z
|
||||
# Ulaanbaatar, a.k.a. Ulan Bataar, Ulan Bator, Urga
|
||||
Zone Asia/Ulaanbaatar 7:07:32 - LMT 1905 Aug
|
||||
7:00 - +07 1978
|
||||
8:00 Mongol +08/+09
|
||||
# Choibalsan, a.k.a. Bajan Tümen, Bajan Tumen, Chojbalsan,
|
||||
# Choybalsan, Sanbejse, Tchoibalsan
|
||||
Zone Asia/Choibalsan 7:38:00 - LMT 1905 Aug
|
||||
7:00 - +07 1978
|
||||
8:00 - +08 1983 Apr
|
||||
9:00 Mongol +09/+10 2008 Mar 31
|
||||
8:00 Mongol +08/+09
|
||||
7:00 - %z 1978
|
||||
8:00 Mongol %z
|
||||
|
||||
# Nepal
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Kathmandu 5:41:16 - LMT 1920
|
||||
5:30 - +0530 1986
|
||||
5:45 - +0545
|
||||
5:30 - %z 1986
|
||||
5:45 - %z
|
||||
|
||||
# Pakistan
|
||||
|
||||
@@ -3102,10 +3140,10 @@ Rule Pakistan 2009 only - Apr 15 0:00 1:00 S
|
||||
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Karachi 4:28:12 - LMT 1907
|
||||
5:30 - +0530 1942 Sep
|
||||
5:30 1:00 +0630 1945 Oct 15
|
||||
5:30 - +0530 1951 Sep 30
|
||||
5:00 - +05 1971 Mar 26
|
||||
5:30 - %z 1942 Sep
|
||||
5:30 1:00 %z 1945 Oct 15
|
||||
5:30 - %z 1951 Sep 30
|
||||
5:00 - %z 1971 Mar 26
|
||||
5:00 Pakistan PK%sT # Pakistan Time
|
||||
|
||||
# Palestine
|
||||
@@ -3637,30 +3675,79 @@ Zone Asia/Hebron 2:20:23 - LMT 1900 Oct
|
||||
# be immediately followed by 1845-01-01; see R.H. van Gent's
|
||||
# History of the International Date Line
|
||||
# https://webspace.science.uu.nl/~gent0113/idl/idl_philippines.htm
|
||||
# The rest of the data entries are from Shanks & Pottenger.
|
||||
|
||||
# From Jesper Nørgaard Welen (2006-04-26):
|
||||
# ... claims that Philippines had DST last time in 1990:
|
||||
# http://story.philippinetimes.com/p.x/ct/9/id/145be20cc6b121c0/cid/3e5bbccc730d258c/
|
||||
# [a story dated 2006-04-25 by Cris Larano of Dow Jones Newswires,
|
||||
# but no details]
|
||||
# From P Chan (2021-05-10):
|
||||
# Here's a fairly comprehensive article in Japanese:
|
||||
# https://wiki.suikawiki.org/n/Philippine%20Time
|
||||
# (2021-05-16):
|
||||
# According to the references listed in the article,
|
||||
# the periods that the Philippines (Manila) observed DST or used +9 are:
|
||||
#
|
||||
# 1936-10-31 24:00 to 1937-01-15 24:00
|
||||
# (Proclamation No. 104, Proclamation No. 126)
|
||||
# 1941-12-15 24:00 to 1945-11-30 24:00
|
||||
# (Proclamation No. 789, Proclamation No. 20)
|
||||
# 1954-04-11 24:00 to 1954-06-04 24:00
|
||||
# (Proclamation No. 13, Proclamation No. 33)
|
||||
# 1977-03-27 24:00 to 1977-09-21 24:00
|
||||
# (Proclamation No. 1629, Proclamation No. 1641)
|
||||
# 1990-05-21 00:00 to 1990-07-28 24:00
|
||||
# (National Emergency Memorandum Order No. 17, Executive Order No. 415)
|
||||
#
|
||||
# Proclamation No. 104 ... October 30, 1936
|
||||
# https://www.officialgazette.gov.ph/1936/10/30/proclamation-no-104-s-1936/
|
||||
# Proclamation No. 126 ... January 15, 1937
|
||||
# https://www.officialgazette.gov.ph/1937/01/15/proclamation-no-126-s-1937/
|
||||
# Proclamation No. 789 ... December 13, 1941
|
||||
# https://www.officialgazette.gov.ph/1941/12/13/proclamation-no-789-s-1941/
|
||||
# Proclamation No. 20 ... November 11, 1945
|
||||
# https://www.officialgazette.gov.ph/1945/11/11/proclamation-no-20-s-1945/
|
||||
# Proclamation No. 13 ... April 6, 1954
|
||||
# https://www.officialgazette.gov.ph/1954/04/06/proclamation-no-13-s-1954/
|
||||
# Proclamation No. 33 ... June 3, 1954
|
||||
# https://www.officialgazette.gov.ph/1954/06/03/proclamation-no-33-s-1954/
|
||||
# Proclamation No. 1629 ... March 25, 1977
|
||||
# https://www.officialgazette.gov.ph/1977/03/25/proclamation-no-1629-s-1977/
|
||||
# Proclamation No. 1641 ...May 26, 1977
|
||||
# https://www.officialgazette.gov.ph/1977/05/26/proclamation-no-1641-s-1977/
|
||||
# National Emergency Memorandum Order No. 17 ... May 2, 1990
|
||||
# https://www.officialgazette.gov.ph/1990/05/02/national-emergency-memorandum-order-no-17-s-1990/
|
||||
# Executive Order No. 415 ... July 20, 1990
|
||||
# https://www.officialgazette.gov.ph/1990/07/20/executive-order-no-415-s-1990/
|
||||
#
|
||||
# During WWII, Proclamation No. 789 fixed two periods of DST. The first period
|
||||
# was set to continue only until January 31, 1942. But Manila was occupied by
|
||||
# the Japanese earlier in the month....
|
||||
#
|
||||
# For the date of the adoption of standard time, Shank[s] gives 1899-05-11.
|
||||
# The article is not able to state the basis of that. I guess it was based on
|
||||
# a US War Department Circular issued on that date.
|
||||
# https://books.google.com/books?id=JZ1PAAAAYAAJ&pg=RA3-PA8
|
||||
#
|
||||
# However, according to other sources, standard time was adopted on
|
||||
# 1899-09-06. Also, the LMT was GMT+8:03:52
|
||||
# https://books.google.com/books?id=MOYIAQAAIAAJ&pg=PA521
|
||||
# https://books.google.com/books?id=lSnqqatpYikC&pg=PA21
|
||||
#
|
||||
# From Paul Eggert (2024-09-05):
|
||||
# The penultimate URL in P Chan's email refers to page 521 of
|
||||
# Selga M, The Time Service in the Philippines.
|
||||
# Proc Pan-Pacific Science Congress. Vol. 1 (1923), 519-532.
|
||||
# It says, "The change from the meridian 120° 58' 04" to the 120th implied a
|
||||
# change of 3 min. 52s.26 in time; consequently on 6th September, 1899,
|
||||
# Manila Observatory gave the noon signal 3 min. 52s.26 later than before".
|
||||
#
|
||||
# Wikipedia says the US declared Manila liberated on March 4, 1945;
|
||||
# this doesn't affect clocks, just our time zone abbreviation and DST flag.
|
||||
|
||||
# From Paul Eggert (2014-08-14):
|
||||
# The following source says DST may be instituted November-January and again
|
||||
# March-June, but this is not definite. It also says DST was last proclaimed
|
||||
# during the Ramos administration (1992-1998); but again, no details.
|
||||
# Carcamo D. PNoy urged to declare use of daylight saving time.
|
||||
# Philippine Star 2014-08-05
|
||||
# http://www.philstar.com/headlines/2014/08/05/1354152/pnoy-urged-declare-use-daylight-saving-time
|
||||
|
||||
# From Paul Goyette (2018-06-15):
|
||||
# From Paul Goyette (2018-06-15) with URLs updated by Guy Harris (2024-02-15):
|
||||
# In the Philippines, there is a national law, Republic Act No. 10535
|
||||
# which declares the official time here as "Philippine Standard Time".
|
||||
# The act [1] even specifies use of PST as the abbreviation, although
|
||||
# the FAQ provided by PAGASA [2] uses the "acronym PhST to distinguish
|
||||
# it from the Pacific Standard Time (PST)."
|
||||
# [1] http://www.officialgazette.gov.ph/2013/05/15/republic-act-no-10535/
|
||||
# [2] https://www1.pagasa.dost.gov.ph/index.php/astronomy/philippine-standard-time#republic-act-10535
|
||||
# [1] https://www.officialgazette.gov.ph/2013/05/15/republic-act-no-10535/
|
||||
# [2] https://prsd.pagasa.dost.gov.ph/index.php/28-astronomy/302-philippine-standard-time
|
||||
#
|
||||
# From Paul Eggert (2018-06-19):
|
||||
# I surveyed recent news reports, and my impression is that "PST" is
|
||||
@@ -3669,32 +3756,34 @@ Zone Asia/Hebron 2:20:23 - LMT 1900 Oct
|
||||
# influence of the sources. There is no current abbreviation for DST,
|
||||
# so use "PDT", the usual American style.
|
||||
|
||||
# From P Chan (2021-05-10):
|
||||
# Here's a fairly comprehensive article in Japanese:
|
||||
# https://wiki.suikawiki.org/n/Philippine%20Time
|
||||
# From Paul Eggert (2021-05-10):
|
||||
# The info in the Japanese table has not been absorbed (yet) below.
|
||||
|
||||
# Rule NAME FROM TO - IN ON AT SAVE LETTER/S
|
||||
Rule Phil 1936 only - Nov 1 0:00 1:00 D
|
||||
Rule Phil 1937 only - Feb 1 0:00 0 S
|
||||
Rule Phil 1954 only - Apr 12 0:00 1:00 D
|
||||
Rule Phil 1954 only - Jul 1 0:00 0 S
|
||||
Rule Phil 1978 only - Mar 22 0:00 1:00 D
|
||||
Rule Phil 1978 only - Sep 21 0:00 0 S
|
||||
Rule Phil 1936 only - Oct 31 24:00 1:00 D
|
||||
Rule Phil 1937 only - Jan 15 24:00 0 S
|
||||
Rule Phil 1941 only - Dec 15 24:00 1:00 D
|
||||
# The following three rules were canceled by Japan:
|
||||
#Rule Phil 1942 only - Jan 31 24:00 0 S
|
||||
#Rule Phil 1942 only - Mar 1 0:00 1:00 D
|
||||
#Rule Phil 1942 only - Jun 30 24:00 0 S
|
||||
Rule Phil 1945 only - Nov 30 24:00 0 S
|
||||
Rule Phil 1954 only - Apr 11 24:00 1:00 D
|
||||
Rule Phil 1954 only - Jun 4 24:00 0 S
|
||||
Rule Phil 1977 only - Mar 27 24:00 1:00 D
|
||||
Rule Phil 1977 only - Sep 21 24:00 0 S
|
||||
Rule Phil 1990 only - May 21 0:00 1:00 D
|
||||
Rule Phil 1990 only - Jul 28 24:00 0 S
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Manila -15:56:00 - LMT 1844 Dec 31
|
||||
8:04:00 - LMT 1899 May 11
|
||||
8:00 Phil P%sT 1942 May
|
||||
9:00 - JST 1944 Nov
|
||||
Zone Asia/Manila -15:56:08 - LMT 1844 Dec 31
|
||||
8:03:52 - LMT 1899 Sep 6 4:00u
|
||||
8:00 Phil P%sT 1942 Feb 11 24:00
|
||||
9:00 - JST 1945 Mar 4
|
||||
8:00 Phil P%sT
|
||||
|
||||
# Bahrain
|
||||
# Qatar
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Qatar 3:26:08 - LMT 1920 # Al Dawhah / Doha
|
||||
4:00 - +04 1972 Jun
|
||||
3:00 - +03
|
||||
4:00 - %z 1972 Jun
|
||||
3:00 - %z
|
||||
|
||||
# Kuwait
|
||||
# Saudi Arabia
|
||||
@@ -3744,7 +3833,7 @@ Zone Asia/Qatar 3:26:08 - LMT 1920 # Al Dawhah / Doha
|
||||
#
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Riyadh 3:06:52 - LMT 1947 Mar 14
|
||||
3:00 - +03
|
||||
3:00 - %z
|
||||
|
||||
# Singapore
|
||||
# taken from Mok Ly Yng (2003-10-30)
|
||||
@@ -3752,13 +3841,13 @@ Zone Asia/Riyadh 3:06:52 - LMT 1947 Mar 14
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Singapore 6:55:25 - LMT 1901 Jan 1
|
||||
6:55:25 - SMT 1905 Jun 1 # Singapore M.T.
|
||||
7:00 - +07 1933 Jan 1
|
||||
7:00 0:20 +0720 1936 Jan 1
|
||||
7:20 - +0720 1941 Sep 1
|
||||
7:30 - +0730 1942 Feb 16
|
||||
9:00 - +09 1945 Sep 12
|
||||
7:30 - +0730 1981 Dec 31 16:00u
|
||||
8:00 - +08
|
||||
7:00 - %z 1933 Jan 1
|
||||
7:00 0:20 %z 1936 Jan 1
|
||||
7:20 - %z 1941 Sep 1
|
||||
7:30 - %z 1942 Feb 16
|
||||
9:00 - %z 1945 Sep 12
|
||||
7:30 - %z 1981 Dec 31 16:00u
|
||||
8:00 - %z
|
||||
|
||||
# Spratly Is
|
||||
# no information
|
||||
@@ -3816,13 +3905,13 @@ Zone Asia/Singapore 6:55:25 - LMT 1901 Jan 1
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Colombo 5:19:24 - LMT 1880
|
||||
5:19:32 - MMT 1906 # Moratuwa Mean Time
|
||||
5:30 - +0530 1942 Jan 5
|
||||
5:30 0:30 +06 1942 Sep
|
||||
5:30 1:00 +0630 1945 Oct 16 2:00
|
||||
5:30 - +0530 1996 May 25 0:00
|
||||
6:30 - +0630 1996 Oct 26 0:30
|
||||
6:00 - +06 2006 Apr 15 0:30
|
||||
5:30 - +0530
|
||||
5:30 - %z 1942 Jan 5
|
||||
5:30 0:30 %z 1942 Sep
|
||||
5:30 1:00 %z 1945 Oct 16 2:00
|
||||
5:30 - %z 1996 May 25 0:00
|
||||
6:30 - %z 1996 Oct 26 0:30
|
||||
6:00 - %z 2006 Apr 15 0:30
|
||||
5:30 - %z
|
||||
|
||||
# Syria
|
||||
# Rule NAME FROM TO - IN ON AT SAVE LETTER/S
|
||||
@@ -3993,16 +4082,16 @@ Rule Syria 2009 2022 - Oct lastFri 0:00 0 -
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Damascus 2:25:12 - LMT 1920 # Dimashq
|
||||
2:00 Syria EE%sT 2022 Oct 28 0:00
|
||||
3:00 - +03
|
||||
3:00 - %z
|
||||
|
||||
# Tajikistan
|
||||
# From Shanks & Pottenger.
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Dushanbe 4:35:12 - LMT 1924 May 2
|
||||
5:00 - +05 1930 Jun 21
|
||||
6:00 RussiaAsia +06/+07 1991 Mar 31 2:00s
|
||||
5:00 1:00 +06 1991 Sep 9 2:00s
|
||||
5:00 - +05
|
||||
5:00 - %z 1930 Jun 21
|
||||
6:00 RussiaAsia %z 1991 Mar 31 2:00s
|
||||
5:00 1:00 %z 1991 Sep 9 2:00s
|
||||
5:00 - %z
|
||||
|
||||
# Cambodia
|
||||
# Christmas I
|
||||
@@ -4012,16 +4101,16 @@ Zone Asia/Dushanbe 4:35:12 - LMT 1924 May 2
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Bangkok 6:42:04 - LMT 1880
|
||||
6:42:04 - BMT 1920 Apr # Bangkok Mean Time
|
||||
7:00 - +07
|
||||
7:00 - %z
|
||||
|
||||
# Turkmenistan
|
||||
# From Shanks & Pottenger.
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Ashgabat 3:53:32 - LMT 1924 May 2 # or Ashkhabad
|
||||
4:00 - +04 1930 Jun 21
|
||||
5:00 RussiaAsia +05/+06 1991 Mar 31 2:00
|
||||
4:00 RussiaAsia +04/+05 1992 Jan 19 2:00
|
||||
5:00 - +05
|
||||
4:00 - %z 1930 Jun 21
|
||||
5:00 RussiaAsia %z 1991 Mar 31 2:00
|
||||
4:00 RussiaAsia %z 1992 Jan 19 2:00
|
||||
5:00 - %z
|
||||
|
||||
# Oman
|
||||
# Réunion
|
||||
@@ -4031,25 +4120,25 @@ Zone Asia/Ashgabat 3:53:32 - LMT 1924 May 2 # or Ashkhabad
|
||||
# The Crozet Is also observe Réunion time; see the 'antarctica' file.
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Dubai 3:41:12 - LMT 1920
|
||||
4:00 - +04
|
||||
4:00 - %z
|
||||
|
||||
# Uzbekistan
|
||||
# Byalokoz 1919 says Uzbekistan was 4:27:53.
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Samarkand 4:27:53 - LMT 1924 May 2
|
||||
4:00 - +04 1930 Jun 21
|
||||
5:00 - +05 1981 Apr 1
|
||||
5:00 1:00 +06 1981 Oct 1
|
||||
6:00 - +06 1982 Apr 1
|
||||
5:00 RussiaAsia +05/+06 1992
|
||||
5:00 - +05
|
||||
4:00 - %z 1930 Jun 21
|
||||
5:00 - %z 1981 Apr 1
|
||||
5:00 1:00 %z 1981 Oct 1
|
||||
6:00 - %z 1982 Apr 1
|
||||
5:00 RussiaAsia %z 1992
|
||||
5:00 - %z
|
||||
# Milne says Tashkent was 4:37:10.8.
|
||||
#STDOFF 4:37:10.8
|
||||
Zone Asia/Tashkent 4:37:11 - LMT 1924 May 2
|
||||
5:00 - +05 1930 Jun 21
|
||||
6:00 RussiaAsia +06/+07 1991 Mar 31 2:00
|
||||
5:00 RussiaAsia +05/+06 1992
|
||||
5:00 - +05
|
||||
5:00 - %z 1930 Jun 21
|
||||
6:00 RussiaAsia %z 1991 Mar 31 2:00
|
||||
5:00 RussiaAsia %z 1992
|
||||
5:00 - %z
|
||||
|
||||
# Vietnam (southern)
|
||||
|
||||
@@ -4107,7 +4196,7 @@ Zone Asia/Tashkent 4:37:11 - LMT 1924 May 2
|
||||
# Võ Nguyên Giáp, Việt Nam Dân Quốc Công Báo, No. 1 (1945-09-29), page 13
|
||||
# http://baochi.nlv.gov.vn/baochi/cgi-bin/baochi?a=d&d=JwvzO19450929.2.5&dliv=none
|
||||
# It says that on 1945-09-01 at 24:00, Vietnam moved back two hours, to +07.
|
||||
# It also mentions a 1945-03-29 decree (by a Japanese Goveror-General)
|
||||
# It also mentions a 1945-03-29 decree (by a Japanese Governor-General)
|
||||
# to set the time zone to +09, but does not say whether that decree
|
||||
# merely legalized an earlier change to +09.
|
||||
#
|
||||
@@ -4128,14 +4217,14 @@ Zone Asia/Tashkent 4:37:11 - LMT 1924 May 2
|
||||
#STDOFF 7:06:30.13
|
||||
Zone Asia/Ho_Chi_Minh 7:06:30 - LMT 1906 Jul 1
|
||||
7:06:30 - PLMT 1911 May 1 # Phù Liễn MT
|
||||
7:00 - +07 1942 Dec 31 23:00
|
||||
8:00 - +08 1945 Mar 14 23:00
|
||||
9:00 - +09 1945 Sep 1 24:00
|
||||
7:00 - +07 1947 Apr 1
|
||||
8:00 - +08 1955 Jul 1 01:00
|
||||
7:00 - +07 1959 Dec 31 23:00
|
||||
8:00 - +08 1975 Jun 13
|
||||
7:00 - +07
|
||||
7:00 - %z 1942 Dec 31 23:00
|
||||
8:00 - %z 1945 Mar 14 23:00
|
||||
9:00 - %z 1945 Sep 1 24:00
|
||||
7:00 - %z 1947 Apr 1
|
||||
8:00 - %z 1955 Jul 1 01:00
|
||||
7:00 - %z 1959 Dec 31 23:00
|
||||
8:00 - %z 1975 Jun 13
|
||||
7:00 - %z
|
||||
|
||||
# From Paul Eggert (2019-02-19):
|
||||
#
|
||||
|
||||
+126
-117
@@ -43,8 +43,8 @@ Zone Australia/Perth 7:43:24 - LMT 1895 Dec
|
||||
8:00 Aus AW%sT 1943 Jul
|
||||
8:00 AW AW%sT
|
||||
Zone Australia/Eucla 8:35:28 - LMT 1895 Dec
|
||||
8:45 Aus +0845/+0945 1943 Jul
|
||||
8:45 AW +0845/+0945
|
||||
8:45 Aus %z 1943 Jul
|
||||
8:45 AW %z
|
||||
|
||||
# Queensland
|
||||
#
|
||||
@@ -209,8 +209,8 @@ Rule LH 2008 max - Apr Sun>=1 2:00 0 -
|
||||
Rule LH 2008 max - Oct Sun>=1 2:00 0:30 -
|
||||
Zone Australia/Lord_Howe 10:36:20 - LMT 1895 Feb
|
||||
10:00 - AEST 1981 Mar
|
||||
10:30 LH +1030/+1130 1985 Jul
|
||||
10:30 LH +1030/+11
|
||||
10:30 LH %z 1985 Jul
|
||||
10:30 LH %z
|
||||
|
||||
# Australian miscellany
|
||||
#
|
||||
@@ -416,16 +416,16 @@ Rule Fiji 2019 only - Nov Sun>=8 2:00 1:00 -
|
||||
Rule Fiji 2020 only - Dec 20 2:00 1:00 -
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Pacific/Fiji 11:55:44 - LMT 1915 Oct 26 # Suva
|
||||
12:00 Fiji +12/+13
|
||||
12:00 Fiji %z
|
||||
|
||||
# French Polynesia
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Pacific/Gambier -8:59:48 - LMT 1912 Oct 1 # Rikitea
|
||||
-9:00 - -09
|
||||
-9:00 - %z
|
||||
Zone Pacific/Marquesas -9:18:00 - LMT 1912 Oct 1
|
||||
-9:30 - -0930
|
||||
-9:30 - %z
|
||||
Zone Pacific/Tahiti -9:58:16 - LMT 1912 Oct 1 # Papeete
|
||||
-10:00 - -10
|
||||
-10:00 - %z
|
||||
# Clipperton (near North America) is administered from French Polynesia;
|
||||
# it is uninhabited.
|
||||
|
||||
@@ -468,7 +468,7 @@ Rule Guam 1977 only - Aug 28 2:00 0 S
|
||||
Zone Pacific/Guam -14:21:00 - LMT 1844 Dec 31
|
||||
9:39:00 - LMT 1901 # Agana
|
||||
10:00 - GST 1941 Dec 10 # Guam
|
||||
9:00 - +09 1944 Jul 31
|
||||
9:00 - %z 1944 Jul 31
|
||||
10:00 Guam G%sT 2000 Dec 23
|
||||
10:00 - ChST # Chamorro Standard Time
|
||||
|
||||
@@ -480,30 +480,30 @@ Zone Pacific/Guam -14:21:00 - LMT 1844 Dec 31
|
||||
# Wallis & Futuna
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Pacific/Tarawa 11:32:04 - LMT 1901 # Bairiki
|
||||
12:00 - +12
|
||||
12:00 - %z
|
||||
|
||||
# Kiribati (except Gilbert Is)
|
||||
# See Pacific/Tarawa for the Gilbert Is.
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Pacific/Kanton 0 - -00 1937 Aug 31
|
||||
-12:00 - -12 1979 Oct
|
||||
-11:00 - -11 1994 Dec 31
|
||||
13:00 - +13
|
||||
-12:00 - %z 1979 Oct
|
||||
-11:00 - %z 1994 Dec 31
|
||||
13:00 - %z
|
||||
Zone Pacific/Kiritimati -10:29:20 - LMT 1901
|
||||
-10:40 - -1040 1979 Oct
|
||||
-10:00 - -10 1994 Dec 31
|
||||
14:00 - +14
|
||||
-10:40 - %z 1979 Oct
|
||||
-10:00 - %z 1994 Dec 31
|
||||
14:00 - %z
|
||||
|
||||
# Marshall Is
|
||||
# See Pacific/Tarawa for most locations.
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Pacific/Kwajalein 11:09:20 - LMT 1901
|
||||
11:00 - +11 1937
|
||||
10:00 - +10 1941 Apr 1
|
||||
9:00 - +09 1944 Feb 6
|
||||
11:00 - +11 1969 Oct
|
||||
-12:00 - -12 1993 Aug 20 24:00
|
||||
12:00 - +12
|
||||
11:00 - %z 1937
|
||||
10:00 - %z 1941 Apr 1
|
||||
9:00 - %z 1944 Feb 6
|
||||
11:00 - %z 1969 Oct
|
||||
-12:00 - %z 1993 Aug 20 24:00
|
||||
12:00 - %z
|
||||
|
||||
# Micronesia
|
||||
# For Chuuk and Yap see Pacific/Port_Moresby.
|
||||
@@ -511,22 +511,22 @@ Zone Pacific/Kwajalein 11:09:20 - LMT 1901
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Pacific/Kosrae -13:08:04 - LMT 1844 Dec 31
|
||||
10:51:56 - LMT 1901
|
||||
11:00 - +11 1914 Oct
|
||||
9:00 - +09 1919 Feb 1
|
||||
11:00 - +11 1937
|
||||
10:00 - +10 1941 Apr 1
|
||||
9:00 - +09 1945 Aug
|
||||
11:00 - +11 1969 Oct
|
||||
12:00 - +12 1999
|
||||
11:00 - +11
|
||||
11:00 - %z 1914 Oct
|
||||
9:00 - %z 1919 Feb 1
|
||||
11:00 - %z 1937
|
||||
10:00 - %z 1941 Apr 1
|
||||
9:00 - %z 1945 Aug
|
||||
11:00 - %z 1969 Oct
|
||||
12:00 - %z 1999
|
||||
11:00 - %z
|
||||
|
||||
# Nauru
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Pacific/Nauru 11:07:40 - LMT 1921 Jan 15 # Uaobe
|
||||
11:30 - +1130 1942 Aug 29
|
||||
9:00 - +09 1945 Sep 8
|
||||
11:30 - +1130 1979 Feb 10 2:00
|
||||
12:00 - +12
|
||||
11:30 - %z 1942 Aug 29
|
||||
9:00 - %z 1945 Sep 8
|
||||
11:30 - %z 1979 Feb 10 2:00
|
||||
12:00 - %z
|
||||
|
||||
# New Caledonia
|
||||
# Rule NAME FROM TO - IN ON AT SAVE LETTER/S
|
||||
@@ -537,7 +537,7 @@ Rule NC 1996 only - Dec 1 2:00s 1:00 -
|
||||
Rule NC 1997 only - Mar 2 2:00s 0 -
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Pacific/Noumea 11:05:48 - LMT 1912 Jan 13 # Nouméa
|
||||
11:00 NC +11/+12
|
||||
11:00 NC %z
|
||||
|
||||
|
||||
###############################################################################
|
||||
@@ -581,8 +581,8 @@ Zone Pacific/Auckland 11:39:04 - LMT 1868 Nov 2
|
||||
12:00 NZ NZ%sT
|
||||
|
||||
Zone Pacific/Chatham 12:13:48 - LMT 1868 Nov 2
|
||||
12:15 - +1215 1946 Jan 1
|
||||
12:45 Chatham +1245/+1345
|
||||
12:15 - %z 1946 Jan 1
|
||||
12:45 Chatham %z
|
||||
|
||||
# Auckland Is
|
||||
# uninhabited; Māori and Moriori, colonial settlers, pastoralists, sealers,
|
||||
@@ -635,8 +635,8 @@ Rule Cook 1979 1990 - Oct lastSun 0:00 0:30 -
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Pacific/Rarotonga 13:20:56 - LMT 1899 Dec 26 # Avarua
|
||||
-10:39:04 - LMT 1952 Oct 16
|
||||
-10:30 - -1030 1978 Nov 12
|
||||
-10:00 Cook -10/-0930
|
||||
-10:30 - %z 1978 Nov 12
|
||||
-10:00 Cook %z
|
||||
|
||||
###############################################################################
|
||||
|
||||
@@ -653,30 +653,30 @@ Zone Pacific/Rarotonga 13:20:56 - LMT 1899 Dec 26 # Avarua
|
||||
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Pacific/Niue -11:19:40 - LMT 1952 Oct 16 # Alofi
|
||||
-11:20 - -1120 1964 Jul
|
||||
-11:00 - -11
|
||||
-11:20 - %z 1964 Jul
|
||||
-11:00 - %z
|
||||
|
||||
# Norfolk
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Pacific/Norfolk 11:11:52 - LMT 1901 # Kingston
|
||||
11:12 - +1112 1951
|
||||
11:30 - +1130 1974 Oct 27 02:00s
|
||||
11:30 1:00 +1230 1975 Mar 2 02:00s
|
||||
11:30 - +1130 2015 Oct 4 02:00s
|
||||
11:00 - +11 2019 Jul
|
||||
11:00 AN +11/+12
|
||||
11:12 - %z 1951
|
||||
11:30 - %z 1974 Oct 27 02:00s
|
||||
11:30 1:00 %z 1975 Mar 2 02:00s
|
||||
11:30 - %z 2015 Oct 4 02:00s
|
||||
11:00 - %z 2019 Jul
|
||||
11:00 AN %z
|
||||
|
||||
# Palau (Belau)
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Pacific/Palau -15:02:04 - LMT 1844 Dec 31 # Koror
|
||||
8:57:56 - LMT 1901
|
||||
9:00 - +09
|
||||
9:00 - %z
|
||||
|
||||
# Papua New Guinea
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Pacific/Port_Moresby 9:48:40 - LMT 1880
|
||||
9:48:32 - PMMT 1895 # Port Moresby Mean Time
|
||||
10:00 - +10
|
||||
10:00 - %z
|
||||
#
|
||||
# From Paul Eggert (2014-10-13):
|
||||
# Base the Bougainville entry on the Arawa-Kieta region, which appears to have
|
||||
@@ -697,16 +697,16 @@ Zone Pacific/Port_Moresby 9:48:40 - LMT 1880
|
||||
#
|
||||
Zone Pacific/Bougainville 10:22:16 - LMT 1880
|
||||
9:48:32 - PMMT 1895
|
||||
10:00 - +10 1942 Jul
|
||||
9:00 - +09 1945 Aug 21
|
||||
10:00 - +10 2014 Dec 28 2:00
|
||||
11:00 - +11
|
||||
10:00 - %z 1942 Jul
|
||||
9:00 - %z 1945 Aug 21
|
||||
10:00 - %z 2014 Dec 28 2:00
|
||||
11:00 - %z
|
||||
|
||||
# Pitcairn
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Pacific/Pitcairn -8:40:20 - LMT 1901 # Adamstown
|
||||
-8:30 - -0830 1998 Apr 27 0:00
|
||||
-8:00 - -08
|
||||
-8:30 - %z 1998 Apr 27 0:00
|
||||
-8:00 - %z
|
||||
|
||||
# American Samoa
|
||||
# Midway
|
||||
@@ -795,15 +795,15 @@ Rule WS 2012 2020 - Sep lastSun 3:00 1 -
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Pacific/Apia 12:33:04 - LMT 1892 Jul 5
|
||||
-11:26:56 - LMT 1911
|
||||
-11:30 - -1130 1950
|
||||
-11:00 WS -11/-10 2011 Dec 29 24:00
|
||||
13:00 WS +13/+14
|
||||
-11:30 - %z 1950
|
||||
-11:00 WS %z 2011 Dec 29 24:00
|
||||
13:00 WS %z
|
||||
|
||||
# Solomon Is
|
||||
# excludes Bougainville, for which see Papua New Guinea
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Pacific/Guadalcanal 10:39:48 - LMT 1912 Oct 1 # Honiara
|
||||
11:00 - +11
|
||||
11:00 - %z
|
||||
|
||||
# Tokelau
|
||||
#
|
||||
@@ -826,8 +826,8 @@ Zone Pacific/Guadalcanal 10:39:48 - LMT 1912 Oct 1 # Honiara
|
||||
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Pacific/Fakaofo -11:24:56 - LMT 1901
|
||||
-11:00 - -11 2011 Dec 30
|
||||
13:00 - +13
|
||||
-11:00 - %z 2011 Dec 30
|
||||
13:00 - %z
|
||||
|
||||
# Tonga
|
||||
# Rule NAME FROM TO - IN ON AT SAVE LETTER/S
|
||||
@@ -839,9 +839,9 @@ Rule Tonga 2016 only - Nov Sun>=1 2:00 1:00 -
|
||||
Rule Tonga 2017 only - Jan Sun>=15 3:00 0 -
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Pacific/Tongatapu 12:19:12 - LMT 1945 Sep 10
|
||||
12:20 - +1220 1961
|
||||
13:00 - +13 1999
|
||||
13:00 Tonga +13/+14
|
||||
12:20 - %z 1961
|
||||
13:00 - %z 1999
|
||||
13:00 Tonga %z
|
||||
|
||||
|
||||
# US minor outlying islands
|
||||
@@ -930,7 +930,7 @@ Rule Vanuatu 1992 1993 - Jan Sat>=22 24:00 0 -
|
||||
Rule Vanuatu 1992 only - Oct Sat>=22 24:00 1:00 -
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Pacific/Efate 11:13:16 - LMT 1912 Jan 13 # Vila
|
||||
11:00 Vanuatu +11/+12
|
||||
11:00 Vanuatu %z
|
||||
|
||||
###############################################################################
|
||||
|
||||
@@ -1239,10 +1239,10 @@ Zone Pacific/Efate 11:13:16 - LMT 1912 Jan 13 # Vila
|
||||
# The 1992 ending date used in the rules is a best guess;
|
||||
# it matches what was used in the past.
|
||||
|
||||
# The Australian Bureau of Meteorology FAQ
|
||||
# http://www.bom.gov.au/faq/faqgen.htm
|
||||
# (1999-09-27) writes that Giles Meteorological Station uses
|
||||
# South Australian time even though it's located in Western Australia.
|
||||
# From Christopher Hunt (2006-11-21), after an advance warning
|
||||
# from Jesper Nørgaard Welen (2006-11-01):
|
||||
# WA are trialing DST for three years.
|
||||
# http://www.parliament.wa.gov.au/parliament/bills.nsf/9A1B183144403DA54825721200088DF1/$File/Bill175-1B.pdf
|
||||
|
||||
# From Paul Eggert (2018-04-01):
|
||||
# The Guardian Express of Perth, Australia reported today that the
|
||||
@@ -1254,54 +1254,10 @@ Zone Pacific/Efate 11:13:16 - LMT 1912 Jan 13 # Vila
|
||||
# https://www.communitynews.com.au/guardian-express/news/exclusive-daylight-savings-coming-wa-summer-2018/
|
||||
# [The article ends with "Today's date is April 1."]
|
||||
|
||||
# Queensland
|
||||
|
||||
# From Paul Eggert (2018-02-26):
|
||||
# I lack access to the following source for Queensland DST:
|
||||
# Pearce C. History of daylight saving time in Queensland.
|
||||
# Queensland Hist J. 2017 Aug;23(6):389-403
|
||||
# https://search.informit.com.au/documentSummary;dn=994682348436426;res=IELHSS
|
||||
|
||||
# From George Shepherd via Simon Woodhead via Robert Elz (1991-03-06):
|
||||
# # The state of QUEENSLAND.. [ Courtesy Qld. Dept Premier Econ&Trade Devel ]
|
||||
# # [ Dec 1990 ]
|
||||
# ...
|
||||
# Zone Australia/Queensland 10:00 AQ %sST
|
||||
# ...
|
||||
# Rule AQ 1971 only - Oct lastSun 2:00 1:00 D
|
||||
# Rule AQ 1972 only - Feb lastSun 3:00 0 E
|
||||
# Rule AQ 1989 max - Oct lastSun 2:00 1:00 D
|
||||
# Rule AQ 1990 max - Mar Sun>=1 3:00 0 E
|
||||
|
||||
# From Bradley White (1989-12-24):
|
||||
# "Australia/Queensland" now observes daylight time (i.e. from
|
||||
# October 1989).
|
||||
|
||||
# From Bradley White (1991-03-04):
|
||||
# A recent excerpt from an Australian newspaper...
|
||||
# ...Queensland...[has] agreed to end daylight saving
|
||||
# at 3am tomorrow (March 3)...
|
||||
|
||||
# From John Mackin (1991-03-06):
|
||||
# I can certainly confirm for my part that Daylight Saving in NSW did in fact
|
||||
# end on Sunday, 3 March. I don't know at what hour, though. (It surprised
|
||||
# me.)
|
||||
|
||||
# From Bradley White (1992-03-08):
|
||||
# ...there was recently a referendum in Queensland which resulted
|
||||
# in the experimental daylight saving system being abandoned. So, ...
|
||||
# ...
|
||||
# Rule QLD 1989 1991 - Oct lastSun 2:00 1:00 D
|
||||
# Rule QLD 1990 1992 - Mar Sun>=1 3:00 0 S
|
||||
# ...
|
||||
|
||||
# From Arthur David Olson (1992-03-08):
|
||||
# The chosen rules the union of the 1971/1972 change and the 1989-1992 changes.
|
||||
|
||||
# From Christopher Hunt (2006-11-21), after an advance warning
|
||||
# from Jesper Nørgaard Welen (2006-11-01):
|
||||
# WA are trialing DST for three years.
|
||||
# http://www.parliament.wa.gov.au/parliament/bills.nsf/9A1B183144403DA54825721200088DF1/$File/Bill175-1B.pdf
|
||||
# The Australian Bureau of Meteorology FAQ
|
||||
# http://www.bom.gov.au/faq/faqgen.htm
|
||||
# (1999-09-27) writes that Giles Meteorological Station uses
|
||||
# South Australian time even though it's located in Western Australia.
|
||||
|
||||
# From Rives McDow (2002-04-09):
|
||||
# The most interesting region I have found consists of three towns on the
|
||||
@@ -1359,6 +1315,59 @@ Zone Pacific/Efate 11:13:16 - LMT 1912 Jan 13 # Vila
|
||||
# For lack of better info, assume the tradition dates back to the
|
||||
# introduction of standard time in 1895.
|
||||
|
||||
# From Stuart Bishop (2024-11-12):
|
||||
# An article discussing the in-use but technically unofficial timezones
|
||||
# in the Western Australian portion of the Nullarbor Plain.
|
||||
# https://www.abc.net.au/news/2024-11-22/outback-wa-properties-strange-time-zones/104542494
|
||||
# From Paul Eggert (2024-11-12):
|
||||
# As the article says, the Eyre Bird Observatory and nearby sheep stations
|
||||
# can use Tokyo time. Other possibilities include Asia/Chita, Asia/Seoul,
|
||||
# and Asia/Jayapura.
|
||||
|
||||
# Queensland
|
||||
|
||||
# From Paul Eggert (2018-02-26):
|
||||
# I lack access to the following source for Queensland DST:
|
||||
# Pearce C. History of daylight saving time in Queensland.
|
||||
# Queensland Hist J. 2017 Aug;23(6):389-403
|
||||
# https://search.informit.com.au/documentSummary;dn=994682348436426;res=IELHSS
|
||||
|
||||
# From George Shepherd via Simon Woodhead via Robert Elz (1991-03-06):
|
||||
# # The state of QUEENSLAND.. [ Courtesy Qld. Dept Premier Econ&Trade Devel ]
|
||||
# # [ Dec 1990 ]
|
||||
# ...
|
||||
# Zone Australia/Queensland 10:00 AQ %sST
|
||||
# ...
|
||||
# Rule AQ 1971 only - Oct lastSun 2:00 1:00 D
|
||||
# Rule AQ 1972 only - Feb lastSun 3:00 0 E
|
||||
# Rule AQ 1989 max - Oct lastSun 2:00 1:00 D
|
||||
# Rule AQ 1990 max - Mar Sun>=1 3:00 0 E
|
||||
|
||||
# From Bradley White (1989-12-24):
|
||||
# "Australia/Queensland" now observes daylight time (i.e. from
|
||||
# October 1989).
|
||||
|
||||
# From Bradley White (1991-03-04):
|
||||
# A recent excerpt from an Australian newspaper...
|
||||
# ...Queensland...[has] agreed to end daylight saving
|
||||
# at 3am tomorrow (March 3)...
|
||||
|
||||
# From John Mackin (1991-03-06):
|
||||
# I can certainly confirm for my part that Daylight Saving in NSW did in fact
|
||||
# end on Sunday, 3 March. I don't know at what hour, though. (It surprised
|
||||
# me.)
|
||||
|
||||
# From Bradley White (1992-03-08):
|
||||
# ...there was recently a referendum in Queensland which resulted
|
||||
# in the experimental daylight saving system being abandoned. So, ...
|
||||
# ...
|
||||
# Rule QLD 1989 1991 - Oct lastSun 2:00 1:00 D
|
||||
# Rule QLD 1990 1992 - Mar Sun>=1 3:00 0 S
|
||||
# ...
|
||||
|
||||
# From Arthur David Olson (1992-03-08):
|
||||
# The chosen rules the union of the 1971/1972 change and the 1989-1992 changes.
|
||||
|
||||
|
||||
# southeast Australia
|
||||
#
|
||||
|
||||
+14
-1
@@ -1,9 +1,10 @@
|
||||
# tzdb links for backward compatibility
|
||||
# Links and zones for backward compatibility
|
||||
|
||||
# This file is in the public domain, so clarified as of
|
||||
# 2009-05-17 by Arthur David Olson.
|
||||
|
||||
# This file provides links from old or merged timezone names to current ones.
|
||||
# It also provides a few zone entries for old naming conventions.
|
||||
# Many names changed in 1993 and in 1995, and many merged names moved here
|
||||
# in the period from 2013 through 2022. Several of these names are
|
||||
# also present in the file 'backzone', which has data important only
|
||||
@@ -44,6 +45,8 @@ Link America/Rio_Branco Brazil/Acre #= America/Porto_Acre
|
||||
Link America/Noronha Brazil/DeNoronha
|
||||
Link America/Sao_Paulo Brazil/East
|
||||
Link America/Manaus Brazil/West
|
||||
Link Europe/Brussels CET
|
||||
Link America/Chicago CST6CDT
|
||||
Link America/Halifax Canada/Atlantic
|
||||
Link America/Winnipeg Canada/Central
|
||||
# This line is commented out, as the name exceeded the 14-character limit
|
||||
@@ -58,6 +61,9 @@ Link America/Whitehorse Canada/Yukon
|
||||
Link America/Santiago Chile/Continental
|
||||
Link Pacific/Easter Chile/EasterIsland
|
||||
Link America/Havana Cuba
|
||||
Link Europe/Athens EET
|
||||
Link America/Panama EST
|
||||
Link America/New_York EST5EDT
|
||||
Link Africa/Cairo Egypt
|
||||
Link Europe/Dublin Eire
|
||||
# Vanguard section, for most .zi parsers.
|
||||
@@ -96,6 +102,9 @@ Link America/Jamaica Jamaica
|
||||
Link Asia/Tokyo Japan
|
||||
Link Pacific/Kwajalein Kwajalein
|
||||
Link Africa/Tripoli Libya
|
||||
Link Europe/Brussels MET
|
||||
Link America/Phoenix MST
|
||||
Link America/Denver MST7MDT
|
||||
Link America/Tijuana Mexico/BajaNorte
|
||||
Link America/Mazatlan Mexico/BajaSur
|
||||
Link America/Mexico_City Mexico/General
|
||||
@@ -275,6 +284,7 @@ Link America/Denver America/Shiprock
|
||||
Link America/Toronto America/Thunder_Bay
|
||||
Link America/Edmonton America/Yellowknife
|
||||
Link Pacific/Auckland Antarctica/South_Pole
|
||||
Link Asia/Ulaanbaatar Asia/Choibalsan
|
||||
Link Asia/Shanghai Asia/Chongqing
|
||||
Link Asia/Shanghai Asia/Harbin
|
||||
Link Asia/Urumqi Asia/Kashgar
|
||||
@@ -289,6 +299,7 @@ Link Europe/Kyiv Europe/Zaporozhye
|
||||
Link Pacific/Kanton Pacific/Enderbury
|
||||
Link Pacific/Honolulu Pacific/Johnston
|
||||
Link Pacific/Port_Moresby Pacific/Yap
|
||||
Link Europe/Lisbon WET
|
||||
|
||||
|
||||
# Alternate names for the same location
|
||||
@@ -314,5 +325,7 @@ Link Europe/Kyiv Europe/Kiev
|
||||
# Classically, Cyprus is in Asia; e.g. see Herodotus, Histories, I.72.
|
||||
# However, for various reasons many users expect to find it under Europe.
|
||||
Link Asia/Nicosia Europe/Nicosia
|
||||
Link Pacific/Honolulu HST
|
||||
Link America/Los_Angeles PST8PDT
|
||||
Link Pacific/Guadalcanal Pacific/Ponape #= Pacific/Pohnpei
|
||||
Link Pacific/Port_Moresby Pacific/Truk #= Pacific/Chuuk
|
||||
+27
-8
@@ -346,10 +346,8 @@ Zone Africa/Lome 0:04:52 - LMT 1893
|
||||
|
||||
# Angola
|
||||
#
|
||||
# From Paul Eggert (2018-02-16):
|
||||
# Shanks gives 1911-05-26 for the transition to WAT,
|
||||
# evidently confusing the date of the Portuguese decree
|
||||
# (see Europe/Lisbon) with the date that it took effect.
|
||||
# From Tim Parenti (2024-07-01), per Paul Eggert (2018-02-16):
|
||||
# For timestamps before independence, see commentary for Europe/Lisbon.
|
||||
#
|
||||
Zone Africa/Luanda 0:52:56 - LMT 1892
|
||||
0:52:04 - LMT 1911 Dec 31 23:00u # Luanda MT?
|
||||
@@ -1086,10 +1084,10 @@ Zone Asia/Muscat 3:54:24 - LMT 1920
|
||||
4:00 - +04
|
||||
|
||||
# India
|
||||
# From Paul Eggert (2014-08-11), after a heads-up from Stephen Colebourne:
|
||||
# According to a Portuguese decree (1911-05-26)
|
||||
# https://dre.pt/pdf1sdip/1911/05/12500/23132313.pdf
|
||||
# Portuguese India switched to UT +05 on 1912-01-01.
|
||||
# From Tim Parenti (2024-07-01), per Paul Eggert (2014-08-11), after a
|
||||
# heads-up from Stephen Colebourne:
|
||||
# According to a Portuguese decree (1911-05-24), Portuguese India switched to
|
||||
# UT +05 on 1912-01-01 (see Europe/Lisbon).
|
||||
#Zone Asia/Panaji [not enough info to complete]
|
||||
|
||||
# Cambodia
|
||||
@@ -1829,6 +1827,27 @@ Zone Pacific/Wake 11:06:28 - LMT 1901
|
||||
Zone Pacific/Wallis 12:15:20 - LMT 1901
|
||||
12:00 - +12
|
||||
|
||||
|
||||
# From Paul Eggert (2024-05-22):
|
||||
# The following zones pretend that standard time extends backward
|
||||
# indefinitely into the past, and so are ahistorical.
|
||||
# In current TZDB these entries are links to geographical locations
|
||||
# that agree with the ahistorical zones since 1970.
|
||||
# These are in numeric rather than alphabetic order.
|
||||
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone HST -10:00 - HST
|
||||
Zone PST8PDT -8:00 US P%sT
|
||||
Zone MST -7:00 - MST
|
||||
Zone MST7MDT -7:00 US M%sT
|
||||
Zone CST6CDT -6:00 US C%sT
|
||||
Zone EST -5:00 - EST
|
||||
Zone EST5EDT -5:00 US E%sT
|
||||
Zone WET 0:00 EU WE%sT
|
||||
Zone CET 1:00 C-Eur CE%sT
|
||||
Zone MET 1:00 C-Eur ME%sT
|
||||
Zone EET 2:00 EU EE%sT
|
||||
|
||||
# Local Variables:
|
||||
# coding: utf-8
|
||||
# End:
|
||||
@@ -14,7 +14,7 @@ BEGIN {
|
||||
if ($0 ~ /^TZ/) {
|
||||
record_zone(zone, data)
|
||||
zone = $0
|
||||
sub(/.*\.dir\//, "", zone)
|
||||
sub(/.*\.ckd\//, "", zone)
|
||||
sub(/\/\//, "/", zone)
|
||||
sub(/"/, "", zone)
|
||||
data = ""
|
||||
@@ -44,8 +44,8 @@ BEGIN {
|
||||
END {
|
||||
for (zone in zone_data) {
|
||||
data = zone_data[zone]
|
||||
if (!zonenow[data]) {
|
||||
printf "zonenow.tab should have one of:%s\n", zones[data]
|
||||
if (data && !zonenow[data]) {
|
||||
printf "Zone table should have one of:%s\n", zones[data]
|
||||
zonenow[data] = zone # This suppresses duplicate diagnostics.
|
||||
status = 1
|
||||
}
|
||||
|
||||
@@ -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 <iso_table) {
|
||||
iso_NR++
|
||||
if ($0 ~ /^#/) continue
|
||||
@@ -65,6 +78,12 @@ BEGIN {
|
||||
split(ccs, cca, /,/)
|
||||
cc = cca[1]
|
||||
|
||||
if (tztab[tz]) {
|
||||
printf "%s:%d: %s: duplicate Zone from line %d\n", \
|
||||
zone_table, zone_NR, tz, tz2NR[tz]
|
||||
status = 1
|
||||
}
|
||||
|
||||
# Don't complain about a special case for Crimea in zone.tab.
|
||||
# FIXME: zone.tab should be removed, since it is obsolete.
|
||||
# Or at least put just "XX" in its country-code column.
|
||||
@@ -128,12 +147,14 @@ BEGIN {
|
||||
$1 ~ /^#/ { next }
|
||||
|
||||
{
|
||||
tz = rules = ""
|
||||
tz = rules = stdoff = ""
|
||||
if ($1 == "Zone") {
|
||||
tz = $2
|
||||
stdoff = $3
|
||||
ruleUsed[$4] = 1
|
||||
if ($5 ~ /%/) rulePercentUsed[$4] = 1
|
||||
} else if ($1 == "Link" && zone_table == "zone.tab") {
|
||||
} else if ($1 == "Link") {
|
||||
if (zone_table == "zone.tab") {
|
||||
# Ignore Link commands if source and destination basenames
|
||||
# are identical, e.g. Europe/Istanbul versus Asia/Istanbul.
|
||||
src = $2
|
||||
@@ -141,13 +162,27 @@ $1 ~ /^#/ { next }
|
||||
while ((i = index(src, "/"))) src = substr(src, i+1)
|
||||
while ((i = index(dst, "/"))) dst = substr(dst, i+1)
|
||||
if (src != dst) tz = $3
|
||||
}
|
||||
} else if ($1 == "Rule") {
|
||||
ruleDefined[$2] = 1
|
||||
if ($10 != "-") ruleLetters[$2] = 1
|
||||
if (!monthabbr[$6]) {
|
||||
printf "%s:%d: tricky month: %s\n", FILENAME, FNR, $6 \
|
||||
>>"/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") {
|
||||
|
||||
+31
-27
@@ -5,7 +5,7 @@
|
||||
|
||||
# These entries are for uses not otherwise covered by the tz database.
|
||||
# Their main practical use is for platforms like Android that lack
|
||||
# support for POSIX.1-2017-style TZ strings. On such platforms these entries
|
||||
# support for POSIX proleptic TZ strings. On such platforms these entries
|
||||
# can be useful if the timezone database is wrong or if a ship or
|
||||
# aircraft at sea is not in a timezone.
|
||||
|
||||
@@ -51,29 +51,33 @@ Link Etc/GMT GMT
|
||||
# so we moved the names into the Etc subdirectory.
|
||||
# Also, the time zone abbreviations are now compatible with %z.
|
||||
|
||||
Zone Etc/GMT-14 14 - +14
|
||||
Zone Etc/GMT-13 13 - +13
|
||||
Zone Etc/GMT-12 12 - +12
|
||||
Zone Etc/GMT-11 11 - +11
|
||||
Zone Etc/GMT-10 10 - +10
|
||||
Zone Etc/GMT-9 9 - +09
|
||||
Zone Etc/GMT-8 8 - +08
|
||||
Zone Etc/GMT-7 7 - +07
|
||||
Zone Etc/GMT-6 6 - +06
|
||||
Zone Etc/GMT-5 5 - +05
|
||||
Zone Etc/GMT-4 4 - +04
|
||||
Zone Etc/GMT-3 3 - +03
|
||||
Zone Etc/GMT-2 2 - +02
|
||||
Zone Etc/GMT-1 1 - +01
|
||||
Zone Etc/GMT+1 -1 - -01
|
||||
Zone Etc/GMT+2 -2 - -02
|
||||
Zone Etc/GMT+3 -3 - -03
|
||||
Zone Etc/GMT+4 -4 - -04
|
||||
Zone Etc/GMT+5 -5 - -05
|
||||
Zone Etc/GMT+6 -6 - -06
|
||||
Zone Etc/GMT+7 -7 - -07
|
||||
Zone Etc/GMT+8 -8 - -08
|
||||
Zone Etc/GMT+9 -9 - -09
|
||||
Zone Etc/GMT+10 -10 - -10
|
||||
Zone Etc/GMT+11 -11 - -11
|
||||
Zone Etc/GMT+12 -12 - -12
|
||||
# There is no "Etc/Unknown" entry, as CLDR says that "Etc/Unknown"
|
||||
# corresponds to an unknown or invalid time zone, and things would get
|
||||
# confusing if Etc/Unknown were made valid here.
|
||||
|
||||
Zone Etc/GMT-14 14 - %z
|
||||
Zone Etc/GMT-13 13 - %z
|
||||
Zone Etc/GMT-12 12 - %z
|
||||
Zone Etc/GMT-11 11 - %z
|
||||
Zone Etc/GMT-10 10 - %z
|
||||
Zone Etc/GMT-9 9 - %z
|
||||
Zone Etc/GMT-8 8 - %z
|
||||
Zone Etc/GMT-7 7 - %z
|
||||
Zone Etc/GMT-6 6 - %z
|
||||
Zone Etc/GMT-5 5 - %z
|
||||
Zone Etc/GMT-4 4 - %z
|
||||
Zone Etc/GMT-3 3 - %z
|
||||
Zone Etc/GMT-2 2 - %z
|
||||
Zone Etc/GMT-1 1 - %z
|
||||
Zone Etc/GMT+1 -1 - %z
|
||||
Zone Etc/GMT+2 -2 - %z
|
||||
Zone Etc/GMT+3 -3 - %z
|
||||
Zone Etc/GMT+4 -4 - %z
|
||||
Zone Etc/GMT+5 -5 - %z
|
||||
Zone Etc/GMT+6 -6 - %z
|
||||
Zone Etc/GMT+7 -7 - %z
|
||||
Zone Etc/GMT+8 -8 - %z
|
||||
Zone Etc/GMT+9 -9 - %z
|
||||
Zone Etc/GMT+10 -10 - %z
|
||||
Zone Etc/GMT+11 -11 - %z
|
||||
Zone Etc/GMT+12 -12 - %z
|
||||
+451
-264
@@ -730,14 +730,6 @@ Rule Russia 1996 2010 - Oct lastSun 2:00s 0 -
|
||||
# Take "abolishing daylight saving time" to mean that time is now considered
|
||||
# to be standard.
|
||||
|
||||
# These are for backward compatibility with older versions.
|
||||
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone WET 0:00 EU WE%sT
|
||||
Zone CET 1:00 C-Eur CE%sT
|
||||
Zone MET 1:00 C-Eur ME%sT
|
||||
Zone EET 2:00 EU EE%sT
|
||||
|
||||
# Previous editions of this database used abbreviations like MET DST
|
||||
# for Central European Summer Time, but this didn't agree with common usage.
|
||||
|
||||
@@ -871,7 +863,7 @@ Zone Europe/Minsk 1:50:16 - LMT 1880
|
||||
3:00 Russia MSK/MSD 1990
|
||||
3:00 - MSK 1991 Mar 31 2:00s
|
||||
2:00 Russia EE%sT 2011 Mar 27 2:00s
|
||||
3:00 - +03
|
||||
3:00 - %z
|
||||
|
||||
# Belgium
|
||||
# Luxembourg
|
||||
@@ -1155,7 +1147,7 @@ Zone Atlantic/Faroe -0:27:04 - LMT 1908 Jan 11 # Tórshavn
|
||||
# However, Greenland will change to Daylight Saving Time again in 2024
|
||||
# and onwards.
|
||||
|
||||
# From a contributor who wishes to remain anonymous for now (2023-10-29):
|
||||
# From Jule Dabars (2023-10-29):
|
||||
# https://www.dr.dk/nyheder/seneste/i-nat-skal-uret-stilles-en-time-tilbage-men-foerste-gang-sker-det-ikke-i-groenland
|
||||
# with a link to that page:
|
||||
# https://naalakkersuisut.gl/Nyheder/2023/10/2710_sommertid
|
||||
@@ -1176,22 +1168,22 @@ Rule Thule 2007 max - Nov Sun>=1 2:00 0 S
|
||||
#
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Danmarkshavn -1:14:40 - LMT 1916 Jul 28
|
||||
-3:00 - -03 1980 Apr 6 2:00
|
||||
-3:00 EU -03/-02 1996
|
||||
-3:00 - %z 1980 Apr 6 2:00
|
||||
-3:00 EU %z 1996
|
||||
0:00 - GMT
|
||||
#
|
||||
# Use the old name Scoresbysund, as the current name Ittoqqortoormiit
|
||||
# exceeds tzdb's 14-letter limit and has no common English abbreviation.
|
||||
Zone America/Scoresbysund -1:27:52 - LMT 1916 Jul 28 # Ittoqqortoormiit
|
||||
-2:00 - -02 1980 Apr 6 2:00
|
||||
-2:00 C-Eur -02/-01 1981 Mar 29
|
||||
-1:00 EU -01/+00 2024 Mar 31
|
||||
-2:00 EU -02/-01
|
||||
-2:00 - %z 1980 Apr 6 2:00
|
||||
-2:00 C-Eur %z 1981 Mar 29
|
||||
-1:00 EU %z 2024 Mar 31
|
||||
-2:00 EU %z
|
||||
Zone America/Nuuk -3:26:56 - LMT 1916 Jul 28 # Godthåb
|
||||
-3:00 - -03 1980 Apr 6 2:00
|
||||
-3:00 EU -03/-02 2023 Mar 26 1:00u
|
||||
-2:00 - -02 2023 Oct 29 1:00u
|
||||
-2:00 EU -02/-01
|
||||
-3:00 - %z 1980 Apr 6 2:00
|
||||
-3:00 EU %z 2023 Mar 26 1:00u
|
||||
-2:00 - %z 2023 Oct 29 1:00u
|
||||
-2:00 EU %z
|
||||
Zone America/Thule -4:35:08 - LMT 1916 Jul 28 # Pituffik
|
||||
-4:00 Thule A%sT
|
||||
|
||||
@@ -2063,10 +2055,39 @@ Zone Europe/Warsaw 1:24:00 - LMT 1880
|
||||
|
||||
# Portugal
|
||||
|
||||
# From Paul Eggert (2014-08-11), after a heads-up from Stephen Colebourne:
|
||||
# According to a Portuguese decree (1911-05-26)
|
||||
# https://dre.pt/application/dir/pdf1sdip/1911/05/12500/23132313.pdf
|
||||
# Lisbon was at -0:36:44.68, but switched to GMT on 1912-01-01 at 00:00.
|
||||
# From Tim Parenti (2024-07-01), per Alois Treindl (2021-02-07) and Michael
|
||||
# Deckers (2021-02-10):
|
||||
# http://oal.ul.pt/documentos/2018/01/hl1911a2018.pdf/
|
||||
# The Astronomical Observatory of Lisbon has published a list detailing the
|
||||
# historical transitions in legal time within continental Portugal. It
|
||||
# directly references many decrees and ordinances which are, in turn,
|
||||
# referenced below. They can be viewed in the public archives of the Diário da
|
||||
# República (until 1976-04-09 known as the Diário do Govêrno) at
|
||||
# https://dre.pt/ (in Portuguese).
|
||||
#
|
||||
# Most of the Rules below have been updated simply to match the Observatory's
|
||||
# listing for continental (mainland) Portugal. Although there are over 50
|
||||
# referenced decrees and ordinances, only the handful with comments below have
|
||||
# been verified against the text, typically to provide additional confidence
|
||||
# wherever dates provided by Whitman and Shanks & Pottenger had disagreed.
|
||||
# See further below for the Azores and Madeira.
|
||||
|
||||
# From Tim Parenti (2024-07-01), per Paul Eggert (2014-08-11), after a
|
||||
# heads-up from Stephen Colebourne:
|
||||
# According to a 1911-05-24 Portuguese decree, Lisbon was at -0:36:44.68, but
|
||||
# switched to GMT on 1912-01-01 at 00:00.
|
||||
# https://dre.pt/dr/detalhe/decreto/593090
|
||||
# https://dre.pt/application/conteudo/593090
|
||||
# The decree made legal time throughout Portugal and her possessions
|
||||
# "subordinate to the Greenwich meridian, according to the principle adopted at
|
||||
# the Washington Convention in 1884" and eliminated the "difference of five
|
||||
# minutes between the internal and external clocks of railway stations".
|
||||
#
|
||||
# The decree was gazetted in the 1911-05-30 issue of Diário do Govêrno, and is
|
||||
# considered to be dated 1911-05-24 by that issue's summary; however, the text
|
||||
# of the decree itself is dated 1911-05-26. The Diário da República website
|
||||
# notes the discrepancy, but later laws and the Observatory all seem to refer
|
||||
# to this decree by the 1911-05-24 date.
|
||||
#
|
||||
# From Michael Deckers (2018-02-15):
|
||||
# article 5 [of the 1911 decree; Deckers's translation] ...:
|
||||
@@ -2074,37 +2095,62 @@ Zone Europe/Warsaw 1:24:00 - LMT 1880
|
||||
# according to the 2nd article, the civil day January 1, 1912 begins,
|
||||
# all clocks therefore having to be advanced or set back correspondingly ...
|
||||
|
||||
# From Rui Pedro Salgueiro (1992-11-12):
|
||||
# Portugal has recently (September, 27) changed timezone
|
||||
# (from WET to MET or CET) to harmonize with EEC.
|
||||
#
|
||||
# Martin Bruckmann (1996-02-29) reports via Peter Ilieve
|
||||
# that Portugal is reverting to 0:00 by not moving its clocks this spring.
|
||||
# The new Prime Minister was fed up with getting up in the dark in the winter.
|
||||
#
|
||||
# From Paul Eggert (1996-11-12):
|
||||
# IATA SSIM (1991-09) reports several 1991-09 and 1992-09 transitions
|
||||
# at 02:00u, not 01:00u. Assume that these are typos.
|
||||
# IATA SSIM (1991/1992) reports that the Azores were at -1:00.
|
||||
# IATA SSIM (1993-02) says +0:00; later issues (through 1996-09) say -1:00.
|
||||
# Guess that the Azores changed to EU rules in 1992 (since that's when Portugal
|
||||
# harmonized with EU rules), and that they stayed +0:00 that winter.
|
||||
#
|
||||
# Rule NAME FROM TO - IN ON AT SAVE LETTER/S
|
||||
# DSH writes that despite Decree 1,469 (1915), the change to the clocks was not
|
||||
# done every year, depending on what Spain did, because of railroad schedules.
|
||||
# Go with Shanks & Pottenger.
|
||||
# From Tim Parenti (2024-07-01), per Paul Eggert (1999-01-30):
|
||||
# DSH writes in their history that Decreto 1469 of 1915-03-30 established
|
||||
# summer time and that, "despite" this, the change to the clocks was not done
|
||||
# every year, depending on what Spain did, because of railroad schedules.
|
||||
# In fact, that decree had nothing to do with DST; rather, it regulated the
|
||||
# sending of time signals. But we do see linkage to Spain in the 1920s below.
|
||||
# https://dre.pt/dr/detalhe/decreto/1469-1915-285721
|
||||
# https://dre.pt/application/conteudo/285721
|
||||
#
|
||||
# According to the Observatory, standard time was first advanced by Decreto
|
||||
# 2433 of 1916-06-09 and restored by Decreto 2712 of 1916-10-28. While Whitman
|
||||
# gives 1916-10-31 for the latter transition, Shanks & Pottenger agrees more
|
||||
# closely with the decree, which stated that its provision "will start sixty
|
||||
# minutes after the end of 31 October, according to the current time," i.e.,
|
||||
# 01:00 on 1 November.
|
||||
# https://dre.pt/dr/detalhe/decreto/2433-1916-267192
|
||||
# https://dre.pt/application/conteudo/267192
|
||||
# https://dre.pt/dr/detalhe/decreto/2712-1916-590937
|
||||
# https://dre.pt/application/conteudo/590937
|
||||
Rule Port 1916 only - Jun 17 23:00 1:00 S
|
||||
# Whitman gives 1916 Oct 31; go with Shanks & Pottenger.
|
||||
Rule Port 1916 only - Nov 1 1:00 0 -
|
||||
Rule Port 1917 only - Feb 28 23:00s 1:00 S
|
||||
Rule Port 1917 1921 - Oct 14 23:00s 0 -
|
||||
Rule Port 1918 only - Mar 1 23:00s 1:00 S
|
||||
Rule Port 1919 only - Feb 28 23:00s 1:00 S
|
||||
Rule Port 1920 only - Feb 29 23:00s 1:00 S
|
||||
Rule Port 1921 only - Feb 28 23:00s 1:00 S
|
||||
# From Tim Parenti (2024-07-01):
|
||||
# Article 7 of Decreto 2922 of 1916-12-30 stated that "the legal time will be
|
||||
# advanced by sixty minutes from 1 March to 31 October." Per Article 15, this
|
||||
# came into force from 1917-01-01. Just before the first fall back, Decreto
|
||||
# 3446 of 1917-10-11 changed the annual end date to 14 October.
|
||||
# https://dre.pt/dr/detalhe/decreto/2922-1916-261894
|
||||
# https://dre.pt/application/conteudo/261894
|
||||
# https://dre.pt/dr/detalhe/decreto/3446-1917-495161
|
||||
# https://dre.pt/application/conteudo/495161
|
||||
# This annual change was revoked by Decreto 8038 of 1922-02-18.
|
||||
# https://dre.pt/dr/detalhe/decreto/8038-1922-569751
|
||||
# https://dre.pt/application/conteudo/569751
|
||||
Rule Port 1917 1921 - Mar 1 0:00 1:00 S
|
||||
Rule Port 1917 1921 - Oct 14 24:00 0 -
|
||||
# From Tim Parenti (2024-07-01):
|
||||
# Decreto 9592 of 1924-04-14 noted that "France maintains the advance of legal
|
||||
# time in the summer and Spain has now adopted it for the first time" and
|
||||
# considered "that the absence of similar measures would cause serious
|
||||
# difficulties for international rail connections with consequent repercussions
|
||||
# on domestic service hours..." along with "inconvenient analogues...for postal
|
||||
# and telegraph services." Summer time would be in effect from 17 April to 4
|
||||
# October, with the spring change explicitly specified by bringing clocks
|
||||
# forward from 16 April 23:00.
|
||||
# https://dre.pt/dr/detalhe/decreto/9592-1924-652133
|
||||
# https://dre.pt/application/conteudo/652133
|
||||
#
|
||||
# Decreto 10700, issued 1925-04-16, noted that Spain had not continued summer
|
||||
# time, declared that "the current legal hour prior to 17 April remains
|
||||
# unchanged from that day forward", and revoked legislation to the contrary,
|
||||
# just a day before summer time would have otherwise resumed.
|
||||
# https://dre.pt/dr/detalhe/decreto/10700-1925-437826
|
||||
# https://dre.pt/application/conteudo/437826
|
||||
Rule Port 1924 only - Apr 16 23:00s 1:00 S
|
||||
Rule Port 1924 only - Oct 14 23:00s 0 -
|
||||
Rule Port 1924 only - Oct 4 23:00s 0 -
|
||||
Rule Port 1926 only - Apr 17 23:00s 1:00 S
|
||||
Rule Port 1926 1929 - Oct Sat>=1 23:00s 0 -
|
||||
Rule Port 1927 only - Apr 9 23:00s 1:00 S
|
||||
@@ -2116,6 +2162,8 @@ Rule Port 1931 1932 - Oct Sat>=1 23:00s 0 -
|
||||
Rule Port 1932 only - Apr 2 23:00s 1:00 S
|
||||
Rule Port 1934 only - Apr 7 23:00s 1:00 S
|
||||
# Whitman gives 1934 Oct 5; go with Shanks & Pottenger.
|
||||
# Note: The 1935 law specified 10-06 00:00, not 10-05 24:00, but the following
|
||||
# is equivalent and more succinct.
|
||||
Rule Port 1934 1938 - Oct Sat>=1 23:00s 0 -
|
||||
# Shanks & Pottenger give 1935 Apr 30; go with Whitman.
|
||||
Rule Port 1935 only - Mar 30 23:00s 1:00 S
|
||||
@@ -2126,10 +2174,19 @@ Rule Port 1938 only - Mar 26 23:00s 1:00 S
|
||||
Rule Port 1939 only - Apr 15 23:00s 1:00 S
|
||||
# Whitman gives 1939 Oct 7; go with Shanks & Pottenger.
|
||||
Rule Port 1939 only - Nov 18 23:00s 0 -
|
||||
# From Tim Parenti (2024-07-01):
|
||||
# Portaria 9465 of 1940-02-17 advanced clocks from Saturday 1940-02-24 23:00.
|
||||
# The clocks were restored by Portaria 9658, issued Monday 1940-10-07,
|
||||
# effective from 24:00 that very night, which agrees with Shanks & Pottenger;
|
||||
# Whitman gives Saturday 1940-10-05 instead.
|
||||
# https://dre.pt/dr/detalhe/portaria/9465-1940-189096
|
||||
# https://dre.pt/application/conteudo/189096
|
||||
# https://dre.pt/dr/detalhe/portaria/9658-1940-196729
|
||||
# https://dre.pt/application/conteudo/196729
|
||||
Rule Port 1940 only - Feb 24 23:00s 1:00 S
|
||||
# Shanks & Pottenger give 1940 Oct 7; go with Whitman.
|
||||
Rule Port 1940 1941 - Oct 5 23:00s 0 -
|
||||
Rule Port 1940 only - Oct 7 23:00s 0 -
|
||||
Rule Port 1941 only - Apr 5 23:00s 1:00 S
|
||||
Rule Port 1941 only - Oct 5 23:00s 0 -
|
||||
Rule Port 1942 1945 - Mar Sat>=8 23:00s 1:00 S
|
||||
Rule Port 1942 only - Apr 25 22:00s 2:00 M # Midsummer
|
||||
Rule Port 1942 only - Aug 15 22:00s 1:00 S
|
||||
@@ -2139,66 +2196,195 @@ Rule Port 1943 1945 - Aug Sat>=25 22:00s 1:00 S
|
||||
Rule Port 1944 1945 - Apr Sat>=21 22:00s 2:00 M
|
||||
Rule Port 1946 only - Apr Sat>=1 23:00s 1:00 S
|
||||
Rule Port 1946 only - Oct Sat>=1 23:00s 0 -
|
||||
# Whitman says DST was not observed in 1950; go with Shanks & Pottenger.
|
||||
# Whitman gives Oct lastSun for 1952 on; go with Shanks & Pottenger.
|
||||
Rule Port 1947 1965 - Apr Sun>=1 2:00s 1:00 S
|
||||
# From Tim Parenti (2024-07-01), per Alois Treindl (2021-02-07):
|
||||
# The Astronomical Observatory of Lisbon cites Portaria 11767 of 1947-03-28 for
|
||||
# 1947 and Portaria 12286 of 1948-02-19 for 1948.
|
||||
# https://dre.pt/dr/detalhe/portaria/11767-1947-414787
|
||||
# https://dre.pt/application/conteudo/414787
|
||||
# https://dre.pt/dr/detalhe/portaria/12286-1948-152953
|
||||
# https://dre.pt/application/conteudo/152953
|
||||
#
|
||||
# Although the latter ordinance explicitly had the 1948-10-03 transition
|
||||
# scheduled for 02:00 rather than 03:00 as had been used in 1947, Decreto-Lei
|
||||
# 37048 of 1948-09-07 recognized "that it is advisable to definitely set...the
|
||||
# 'summer time' regime", and fixed the fall transition at 03:00 moving forward.
|
||||
# https://dre.pt/dr/detalhe/decreto-lei/37048-1948-373810
|
||||
# https://dre.pt/application/conteudo/373810
|
||||
# While the Observatory only cites this act for 1949-1965 and not for 1948, it
|
||||
# does not appear to have had any provision delaying its effect, so assume that
|
||||
# it overrode the prior ordinance for 1948-10-03.
|
||||
#
|
||||
# Whitman says DST was not observed in 1950 and gives Oct lastSun for 1952 on.
|
||||
# The Observatory, however, agrees with Shanks & Pottenger that 1950 was not an
|
||||
# exception and that Oct Sun>=1 was maintained through 1965.
|
||||
Rule Port 1947 1966 - Apr Sun>=1 2:00s 1:00 S
|
||||
Rule Port 1947 1965 - Oct Sun>=1 2:00s 0 -
|
||||
Rule Port 1977 only - Mar 27 0:00s 1:00 S
|
||||
Rule Port 1977 only - Sep 25 0:00s 0 -
|
||||
Rule Port 1978 1979 - Apr Sun>=1 0:00s 1:00 S
|
||||
Rule Port 1978 only - Oct 1 0:00s 0 -
|
||||
Rule Port 1979 1982 - Sep lastSun 1:00s 0 -
|
||||
Rule Port 1980 only - Mar lastSun 0:00s 1:00 S
|
||||
Rule Port 1981 1982 - Mar lastSun 1:00s 1:00 S
|
||||
Rule Port 1983 only - Mar lastSun 2:00s 1:00 S
|
||||
# From Tim Parenti (2024-07-01):
|
||||
# Decreto-Lei 47233 of 1966-10-01 considered that the "duality" in time was
|
||||
# "the cause of serious disturbances" and noted that "the countries with which
|
||||
# we have the most frequent contacts...have already adopted" a solution
|
||||
# coinciding with the extant "summer time". It established that the former
|
||||
# "summer time" would apply year-round on the mainland and adjacent islands
|
||||
# with immediate effect, as the fall back would have otherwise occurred later
|
||||
# that evening.
|
||||
# https://dre.pt/dr/detalhe/decreto-lei/47233-1966-293729
|
||||
# Model this by changing zones without changing clocks at the
|
||||
# previously-appointed fall back time.
|
||||
#
|
||||
# Decreto-Lei 309/76 of 1976-04-27 acknowledged that those international
|
||||
# contacts had returned to adopting seasonal times, and considered that the
|
||||
# year-round advancement "entails considerable sacrifices for the vast majority
|
||||
# of the working population during the winter months", including morning
|
||||
# visibility concerns for schoolchildren. It specified, beginning 1976-09-26
|
||||
# 01:00, an annual return to UT+00 on the mainland from 00:00 UT on Sep lastSun
|
||||
# to 00:00 UT on Mar lastSun (unless the latter date fell on Easter, in which
|
||||
# case it was to be brought forward to the preceding Sunday). It also assigned
|
||||
# the Permanent Time Commission to study and propose revisions for the Azores
|
||||
# and Madeira, neither of which resumed DST until 1982 (as described further
|
||||
# below).
|
||||
# https://dre.pt/dr/detalhe/decreto-lei/309-1976-502063
|
||||
Rule Port 1976 only - Sep lastSun 1:00 0 -
|
||||
Rule Port 1977 only - Mar lastSun 0:00s 1:00 S
|
||||
Rule Port 1977 only - Sep lastSun 0:00s 0 -
|
||||
# From Tim Parenti (2024-07-01):
|
||||
# Beginning in 1978, rather than triggering the Easter rule of the 1976 decree
|
||||
# (Easter fell on 1978-03-26), Article 5 was used instead, which allowed DST
|
||||
# dates to be changed by order of the Minister of Education and Scientific
|
||||
# Research, upon consultation with the Permanent Time Commission, "whenever
|
||||
# considered convenient." As such, a series of one-off ordinances were
|
||||
# promulgated for the mainland in 1978 through 1980, after which the 1976
|
||||
# decree naturally came back into force from 1981.
|
||||
Rule Port 1978 1980 - Apr Sun>=1 1:00s 1:00 S
|
||||
Rule Port 1978 only - Oct 1 1:00s 0 -
|
||||
Rule Port 1979 1980 - Sep lastSun 1:00s 0 -
|
||||
Rule Port 1981 1986 - Mar lastSun 0:00s 1:00 S
|
||||
Rule Port 1981 1985 - Sep lastSun 0:00s 0 -
|
||||
# From Tim Parenti (2024-07-01):
|
||||
# Decreto-Lei 44-B/86 of 1986-03-07 switched mainland Portugal's transition
|
||||
# times from 0:00s to 1:00u to harmonize with the EEC from 1986-03-30.
|
||||
# https://dre.pt/dr/detalhe/decreto-lei/44-b-1986-628280
|
||||
# (Transitions of 1:00s as previously reported and used by the W-Eur rules,
|
||||
# though equivalent, appear to have been fiction here.) Madeira continued to
|
||||
# use 0:00s for spring 1986 before joining with the mainland using 1:00u in the
|
||||
# fall; meanwhile, in the Azores the two were equivalent, so the law specifying
|
||||
# 0:00s wasn't touched until 1992. (See below for more on the islands.)
|
||||
#
|
||||
# From Rui Pedro Salgueiro (1992-11-12):
|
||||
# Portugal has recently (September, 27) changed timezone
|
||||
# (from WET to MET or CET) to harmonize with EEC.
|
||||
#
|
||||
# Martin Bruckmann (1996-02-29) reports via Peter Ilieve
|
||||
# that Portugal is reverting to 0:00 by not moving its clocks this spring.
|
||||
# The new Prime Minister was fed up with getting up in the dark in the winter.
|
||||
#
|
||||
# From Paul Eggert (1996-11-12):
|
||||
# IATA SSIM (1991-09) reports several 1991-09 and 1992-09 transitions
|
||||
# at 02:00u, not 01:00u. Assume that these are typos.
|
||||
#
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
#STDOFF -0:36:44.68
|
||||
Zone Europe/Lisbon -0:36:45 - LMT 1884
|
||||
-0:36:45 - LMT 1912 Jan 1 0:00u # Lisbon MT
|
||||
0:00 Port WE%sT 1966 Apr 3 2:00
|
||||
0:00 Port WE%sT 1966 Oct 2 2:00s
|
||||
1:00 - CET 1976 Sep 26 1:00
|
||||
0:00 Port WE%sT 1983 Sep 25 1:00s
|
||||
0:00 W-Eur WE%sT 1992 Sep 27 1:00s
|
||||
0:00 Port WE%sT 1986
|
||||
0:00 EU WE%sT 1992 Sep 27 1:00u
|
||||
1:00 EU CE%sT 1996 Mar 31 1:00u
|
||||
0:00 EU WE%sT
|
||||
|
||||
# From Tim Parenti (2024-07-01):
|
||||
# For the Azores and Madeira, legislation was followed from the laws currently
|
||||
# in force as listed at:
|
||||
# https://oal.ul.pt/hora-legal/legislacao/
|
||||
# working backward through references of revocation and abrogation to
|
||||
# Decreto-Lei 47233 of 1966-10-01, the last time DST was abolished across the
|
||||
# mainland and its adjacent islands. Because of that reference, it is
|
||||
# therefore assumed that DST rules in the islands prior to 1966 were like that
|
||||
# of the mainland, though most legislation of the time didn't explicitly
|
||||
# specify DST practices for the islands.
|
||||
Zone Atlantic/Azores -1:42:40 - LMT 1884 # Ponta Delgada
|
||||
-1:54:32 - HMT 1912 Jan 1 2:00u # Horta MT
|
||||
# Vanguard section, for zic and other parsers that support %z.
|
||||
# -2:00 Port %z 1966 Apr 3 2:00
|
||||
# -1:00 Port %z 1983 Sep 25 1:00s
|
||||
# -1:00 W-Eur %z 1992 Sep 27 1:00s
|
||||
-2:00 Port %z 1966 Oct 2 2:00s
|
||||
# From Tim Parenti (2024-07-01):
|
||||
# While Decreto-Lei 309/76 of 1976-04-27 reintroduced DST on the mainland by
|
||||
# falling back on 1976-09-26, it assigned the Permanent Time Commission to
|
||||
# study and propose revisions for the Azores and Madeira. Decreto Regional
|
||||
# 9/77/A of 1977-05-17 affirmed that "the legal time remained unchanged in the
|
||||
# Azores" at UT-1, and would remain there year-round.
|
||||
# https://dre.pt/dr/detalhe/decreto-regional/9-1977-252066
|
||||
#
|
||||
# Decreto Regional 2/82/A, published 1982-03-02, adopted DST in the same
|
||||
# fashion as the mainland used at the time.
|
||||
# https://dre.pt/dr/detalhe/decreto-regional/2-1982-599965
|
||||
# Though transitions in the Azores officially remained at 0:00s through 1992,
|
||||
# this was equivalent to the EU-style 1:00u adopted by the mainland in 1986, so
|
||||
# model it as such.
|
||||
-1:00 - %z 1982 Mar 28 0:00s
|
||||
-1:00 Port %z 1986
|
||||
# Rearguard section, for parsers lacking %z; see ziguard.awk.
|
||||
-2:00 Port -02/-01 1942 Apr 25 22:00s
|
||||
-2:00 Port +00 1942 Aug 15 22:00s
|
||||
-2:00 Port -02/-01 1943 Apr 17 22:00s
|
||||
-2:00 Port +00 1943 Aug 28 22:00s
|
||||
-2:00 Port -02/-01 1944 Apr 22 22:00s
|
||||
-2:00 Port +00 1944 Aug 26 22:00s
|
||||
-2:00 Port -02/-01 1945 Apr 21 22:00s
|
||||
-2:00 Port +00 1945 Aug 25 22:00s
|
||||
-2:00 Port -02/-01 1966 Apr 3 2:00
|
||||
-1:00 Port -01/+00 1983 Sep 25 1:00s
|
||||
-1:00 W-Eur -01/+00 1992 Sep 27 1:00s
|
||||
# -2:00 Port -02/-01 1942 Apr 25 22:00s
|
||||
# -2:00 Port +00 1942 Aug 15 22:00s
|
||||
# -2:00 Port -02/-01 1943 Apr 17 22:00s
|
||||
# -2:00 Port +00 1943 Aug 28 22:00s
|
||||
# -2:00 Port -02/-01 1944 Apr 22 22:00s
|
||||
# -2:00 Port +00 1944 Aug 26 22:00s
|
||||
# -2:00 Port -02/-01 1945 Apr 21 22:00s
|
||||
# -2:00 Port +00 1945 Aug 25 22:00s
|
||||
# -2:00 Port -02/-01 1966 Oct 2 2:00s
|
||||
# -1:00 - -01 1982 Mar 28 0:00s
|
||||
# -1:00 Port -01/+00 1986
|
||||
# End of rearguard section.
|
||||
0:00 EU WE%sT 1993 Mar 28 1:00u
|
||||
-1:00 EU -01/+00
|
||||
#
|
||||
# From Paul Eggert (1996-11-12):
|
||||
# IATA SSIM (1991/1992) reports that the Azores were at -1:00.
|
||||
# IATA SSIM (1993-02) says +0:00; later issues (through 1996-09) say -1:00.
|
||||
#
|
||||
# From Tim Parenti (2024-07-01):
|
||||
# After mainland Portugal had shifted forward an hour from 1992-09-27, Decreto
|
||||
# Legislativo Regional 29/92/A of 1992-12-23 sought to "reduce the time
|
||||
# difference" by shifting the Azores forward as well from 1992-12-27. Just six
|
||||
# months later, this was revoked by Decreto Legislativo Regional 9/93/A, citing
|
||||
# "major changes in work habits and way of life." Though the revocation didn't
|
||||
# give a transition time, it was signed Wednesday 1993-06-16; assume it took
|
||||
# effect later that evening, and that an EU-style spring forward (to +01) was
|
||||
# still observed in the interim on 1993-03-28.
|
||||
# https://dre.pt/dr/detalhe/decreto-legislativo-regional/29-1992-621553
|
||||
# https://dre.pt/dr/detalhe/decreto-legislativo-regional/9-1993-389633
|
||||
-1:00 EU %z 1992 Dec 27 1:00s
|
||||
0:00 EU WE%sT 1993 Jun 17 1:00u
|
||||
-1:00 EU %z
|
||||
|
||||
Zone Atlantic/Madeira -1:07:36 - LMT 1884 # Funchal
|
||||
-1:07:36 - FMT 1912 Jan 1 1:00u # Funchal MT
|
||||
# Vanguard section, for zic and other parsers that support %z.
|
||||
# -1:00 Port %z 1966 Apr 3 2:00
|
||||
-1:00 Port %z 1966 Oct 2 2:00s
|
||||
# Rearguard section, for parsers lacking %z; see ziguard.awk.
|
||||
-1:00 Port -01/+00 1942 Apr 25 22:00s
|
||||
-1:00 Port +01 1942 Aug 15 22:00s
|
||||
-1:00 Port -01/+00 1943 Apr 17 22:00s
|
||||
-1:00 Port +01 1943 Aug 28 22:00s
|
||||
-1:00 Port -01/+00 1944 Apr 22 22:00s
|
||||
-1:00 Port +01 1944 Aug 26 22:00s
|
||||
-1:00 Port -01/+00 1945 Apr 21 22:00s
|
||||
-1:00 Port +01 1945 Aug 25 22:00s
|
||||
-1:00 Port -01/+00 1966 Apr 3 2:00
|
||||
# -1:00 Port -01/+00 1942 Apr 25 22:00s
|
||||
# -1:00 Port +01 1942 Aug 15 22:00s
|
||||
# -1:00 Port -01/+00 1943 Apr 17 22:00s
|
||||
# -1:00 Port +01 1943 Aug 28 22:00s
|
||||
# -1:00 Port -01/+00 1944 Apr 22 22:00s
|
||||
# -1:00 Port +01 1944 Aug 26 22:00s
|
||||
# -1:00 Port -01/+00 1945 Apr 21 22:00s
|
||||
# -1:00 Port +01 1945 Aug 25 22:00s
|
||||
# -1:00 Port -01/+00 1966 Oct 2 2:00s
|
||||
# End of rearguard section.
|
||||
0:00 Port WE%sT 1983 Sep 25 1:00s
|
||||
#
|
||||
# From Tim Parenti (2024-07-01):
|
||||
# Decreto Regional 5/82/M, published 1982-04-03, established DST transitions at
|
||||
# 0:00u, which for Madeira is equivalent to the mainland's rules (0:00s) at the
|
||||
# time. It came into effect the day following its publication, Sunday
|
||||
# 1982-04-04, thus resuming Madeira's DST practice about a week later than the
|
||||
# mainland and the Azores.
|
||||
# https://dre.pt/dr/detalhe/decreto-regional/5-1982-608273
|
||||
#
|
||||
# Decreto Legislativo Regional 18/86/M, published 1986-10-01, adopted EU-style
|
||||
# rules (1:00u) and entered into immediate force after being signed on
|
||||
# 1986-07-31.
|
||||
# https://dre.pt/dr/detalhe/decreto-legislativo-regional/18-1986-221705
|
||||
0:00 - WET 1982 Apr 4
|
||||
0:00 Port WE%sT 1986 Jul 31
|
||||
0:00 EU WE%sT
|
||||
|
||||
# Romania
|
||||
@@ -2410,7 +2596,7 @@ Zone Europe/Kaliningrad 1:22:00 - LMT 1893 Apr
|
||||
2:00 Poland EE%sT 1946 Apr 7
|
||||
3:00 Russia MSK/MSD 1989 Mar 26 2:00s
|
||||
2:00 Russia EE%sT 2011 Mar 27 2:00s
|
||||
3:00 - +03 2014 Oct 26 2:00s
|
||||
3:00 - %z 2014 Oct 26 2:00s
|
||||
2:00 - EET
|
||||
|
||||
|
||||
@@ -2660,14 +2846,14 @@ Zone Europe/Simferopol 2:16:24 - LMT 1880
|
||||
# http://publication.pravo.gov.ru/Document/View/0001201602150056
|
||||
|
||||
Zone Europe/Astrakhan 3:12:12 - LMT 1924 May
|
||||
3:00 - +03 1930 Jun 21
|
||||
4:00 Russia +04/+05 1989 Mar 26 2:00s
|
||||
3:00 Russia +03/+04 1991 Mar 31 2:00s
|
||||
4:00 - +04 1992 Mar 29 2:00s
|
||||
3:00 Russia +03/+04 2011 Mar 27 2:00s
|
||||
4:00 - +04 2014 Oct 26 2:00s
|
||||
3:00 - +03 2016 Mar 27 2:00s
|
||||
4:00 - +04
|
||||
3:00 - %z 1930 Jun 21
|
||||
4:00 Russia %z 1989 Mar 26 2:00s
|
||||
3:00 Russia %z 1991 Mar 31 2:00s
|
||||
4:00 - %z 1992 Mar 29 2:00s
|
||||
3:00 Russia %z 2011 Mar 27 2:00s
|
||||
4:00 - %z 2014 Oct 26 2:00s
|
||||
3:00 - %z 2016 Mar 27 2:00s
|
||||
4:00 - %z
|
||||
|
||||
# From Paul Eggert (2016-11-11):
|
||||
# Europe/Volgograd covers:
|
||||
@@ -2697,15 +2883,15 @@ Zone Europe/Astrakhan 3:12:12 - LMT 1924 May
|
||||
# http://publication.pravo.gov.ru/Document/View/0001202012220002
|
||||
|
||||
Zone Europe/Volgograd 2:57:40 - LMT 1920 Jan 3
|
||||
3:00 - +03 1930 Jun 21
|
||||
4:00 - +04 1961 Nov 11
|
||||
4:00 Russia +04/+05 1988 Mar 27 2:00s
|
||||
3:00 - %z 1930 Jun 21
|
||||
4:00 - %z 1961 Nov 11
|
||||
4:00 Russia %z 1988 Mar 27 2:00s
|
||||
3:00 Russia MSK/MSD 1991 Mar 31 2:00s
|
||||
4:00 - +04 1992 Mar 29 2:00s
|
||||
4:00 - %z 1992 Mar 29 2:00s
|
||||
3:00 Russia MSK/MSD 2011 Mar 27 2:00s
|
||||
4:00 - MSK 2014 Oct 26 2:00s
|
||||
3:00 - MSK 2018 Oct 28 2:00s
|
||||
4:00 - +04 2020 Dec 27 2:00s
|
||||
4:00 - %z 2020 Dec 27 2:00s
|
||||
3:00 - MSK
|
||||
|
||||
# From Paul Eggert (2016-11-11):
|
||||
@@ -2720,14 +2906,14 @@ Zone Europe/Volgograd 2:57:40 - LMT 1920 Jan 3
|
||||
# http://publication.pravo.gov.ru/Document/View/0001201611220031
|
||||
|
||||
Zone Europe/Saratov 3:04:18 - LMT 1919 Jul 1 0:00u
|
||||
3:00 - +03 1930 Jun 21
|
||||
4:00 Russia +04/+05 1988 Mar 27 2:00s
|
||||
3:00 Russia +03/+04 1991 Mar 31 2:00s
|
||||
4:00 - +04 1992 Mar 29 2:00s
|
||||
3:00 Russia +03/+04 2011 Mar 27 2:00s
|
||||
4:00 - +04 2014 Oct 26 2:00s
|
||||
3:00 - +03 2016 Dec 4 2:00s
|
||||
4:00 - +04
|
||||
3:00 - %z 1930 Jun 21
|
||||
4:00 Russia %z 1988 Mar 27 2:00s
|
||||
3:00 Russia %z 1991 Mar 31 2:00s
|
||||
4:00 - %z 1992 Mar 29 2:00s
|
||||
3:00 Russia %z 2011 Mar 27 2:00s
|
||||
4:00 - %z 2014 Oct 26 2:00s
|
||||
3:00 - %z 2016 Dec 4 2:00s
|
||||
4:00 - %z
|
||||
|
||||
# From Paul Eggert (2016-03-18):
|
||||
# Europe/Kirov covers:
|
||||
@@ -2735,10 +2921,10 @@ Zone Europe/Saratov 3:04:18 - LMT 1919 Jul 1 0:00u
|
||||
# The 1989 transition is from USSR act No. 227 (1989-03-14).
|
||||
#
|
||||
Zone Europe/Kirov 3:18:48 - LMT 1919 Jul 1 0:00u
|
||||
3:00 - +03 1930 Jun 21
|
||||
4:00 Russia +04/+05 1989 Mar 26 2:00s
|
||||
3:00 - %z 1930 Jun 21
|
||||
4:00 Russia %z 1989 Mar 26 2:00s
|
||||
3:00 Russia MSK/MSD 1991 Mar 31 2:00s
|
||||
4:00 - +04 1992 Mar 29 2:00s
|
||||
4:00 - %z 1992 Mar 29 2:00s
|
||||
3:00 Russia MSK/MSD 2011 Mar 27 2:00s
|
||||
4:00 - MSK 2014 Oct 26 2:00s
|
||||
3:00 - MSK
|
||||
@@ -2753,15 +2939,15 @@ Zone Europe/Kirov 3:18:48 - LMT 1919 Jul 1 0:00u
|
||||
# The 1989 transition is from USSR act No. 227 (1989-03-14).
|
||||
|
||||
Zone Europe/Samara 3:20:20 - LMT 1919 Jul 1 0:00u
|
||||
3:00 - +03 1930 Jun 21
|
||||
4:00 - +04 1935 Jan 27
|
||||
4:00 Russia +04/+05 1989 Mar 26 2:00s
|
||||
3:00 Russia +03/+04 1991 Mar 31 2:00s
|
||||
2:00 Russia +02/+03 1991 Sep 29 2:00s
|
||||
3:00 - +03 1991 Oct 20 3:00
|
||||
4:00 Russia +04/+05 2010 Mar 28 2:00s
|
||||
3:00 Russia +03/+04 2011 Mar 27 2:00s
|
||||
4:00 - +04
|
||||
3:00 - %z 1930 Jun 21
|
||||
4:00 - %z 1935 Jan 27
|
||||
4:00 Russia %z 1989 Mar 26 2:00s
|
||||
3:00 Russia %z 1991 Mar 31 2:00s
|
||||
2:00 Russia %z 1991 Sep 29 2:00s
|
||||
3:00 - %z 1991 Oct 20 3:00
|
||||
4:00 Russia %z 2010 Mar 28 2:00s
|
||||
3:00 Russia %z 2011 Mar 27 2:00s
|
||||
4:00 - %z
|
||||
|
||||
# From Paul Eggert (2016-03-18):
|
||||
# Europe/Ulyanovsk covers:
|
||||
@@ -2777,14 +2963,14 @@ Zone Europe/Samara 3:20:20 - LMT 1919 Jul 1 0:00u
|
||||
# http://publication.pravo.gov.ru/Document/View/0001201603090051
|
||||
|
||||
Zone Europe/Ulyanovsk 3:13:36 - LMT 1919 Jul 1 0:00u
|
||||
3:00 - +03 1930 Jun 21
|
||||
4:00 Russia +04/+05 1989 Mar 26 2:00s
|
||||
3:00 Russia +03/+04 1991 Mar 31 2:00s
|
||||
2:00 Russia +02/+03 1992 Jan 19 2:00s
|
||||
3:00 Russia +03/+04 2011 Mar 27 2:00s
|
||||
4:00 - +04 2014 Oct 26 2:00s
|
||||
3:00 - +03 2016 Mar 27 2:00s
|
||||
4:00 - +04
|
||||
3:00 - %z 1930 Jun 21
|
||||
4:00 Russia %z 1989 Mar 26 2:00s
|
||||
3:00 Russia %z 1991 Mar 31 2:00s
|
||||
2:00 Russia %z 1992 Jan 19 2:00s
|
||||
3:00 Russia %z 2011 Mar 27 2:00s
|
||||
4:00 - %z 2014 Oct 26 2:00s
|
||||
3:00 - %z 2016 Mar 27 2:00s
|
||||
4:00 - %z
|
||||
|
||||
# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2001-08-25):
|
||||
# Asia/Yekaterinburg covers...
|
||||
@@ -2809,12 +2995,12 @@ Zone Europe/Ulyanovsk 3:13:36 - LMT 1919 Jul 1 0:00u
|
||||
#STDOFF 4:02:32.9
|
||||
Zone Asia/Yekaterinburg 4:02:33 - LMT 1916 Jul 3
|
||||
3:45:05 - PMT 1919 Jul 15 4:00
|
||||
4:00 - +04 1930 Jun 21
|
||||
5:00 Russia +05/+06 1991 Mar 31 2:00s
|
||||
4:00 Russia +04/+05 1992 Jan 19 2:00s
|
||||
5:00 Russia +05/+06 2011 Mar 27 2:00s
|
||||
6:00 - +06 2014 Oct 26 2:00s
|
||||
5:00 - +05
|
||||
4:00 - %z 1930 Jun 21
|
||||
5:00 Russia %z 1991 Mar 31 2:00s
|
||||
4:00 Russia %z 1992 Jan 19 2:00s
|
||||
5:00 Russia %z 2011 Mar 27 2:00s
|
||||
6:00 - %z 2014 Oct 26 2:00s
|
||||
5:00 - %z
|
||||
|
||||
|
||||
# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2001-08-25):
|
||||
@@ -2824,12 +3010,12 @@ Zone Asia/Yekaterinburg 4:02:33 - LMT 1916 Jul 3
|
||||
# Byalokoz 1919 says Omsk was 4:53:30.
|
||||
|
||||
Zone Asia/Omsk 4:53:30 - LMT 1919 Nov 14
|
||||
5:00 - +05 1930 Jun 21
|
||||
6:00 Russia +06/+07 1991 Mar 31 2:00s
|
||||
5:00 Russia +05/+06 1992 Jan 19 2:00s
|
||||
6:00 Russia +06/+07 2011 Mar 27 2:00s
|
||||
7:00 - +07 2014 Oct 26 2:00s
|
||||
6:00 - +06
|
||||
5:00 - %z 1930 Jun 21
|
||||
6:00 Russia %z 1991 Mar 31 2:00s
|
||||
5:00 Russia %z 1992 Jan 19 2:00s
|
||||
6:00 Russia %z 2011 Mar 27 2:00s
|
||||
7:00 - %z 2014 Oct 26 2:00s
|
||||
6:00 - %z
|
||||
|
||||
# From Paul Eggert (2016-02-22):
|
||||
# Asia/Barnaul covers:
|
||||
@@ -2862,14 +3048,14 @@ Zone Asia/Omsk 4:53:30 - LMT 1919 Nov 14
|
||||
# http://publication.pravo.gov.ru/Document/View/0001201603090038
|
||||
|
||||
Zone Asia/Barnaul 5:35:00 - LMT 1919 Dec 10
|
||||
6:00 - +06 1930 Jun 21
|
||||
7:00 Russia +07/+08 1991 Mar 31 2:00s
|
||||
6:00 Russia +06/+07 1992 Jan 19 2:00s
|
||||
7:00 Russia +07/+08 1995 May 28
|
||||
6:00 Russia +06/+07 2011 Mar 27 2:00s
|
||||
7:00 - +07 2014 Oct 26 2:00s
|
||||
6:00 - +06 2016 Mar 27 2:00s
|
||||
7:00 - +07
|
||||
6:00 - %z 1930 Jun 21
|
||||
7:00 Russia %z 1991 Mar 31 2:00s
|
||||
6:00 Russia %z 1992 Jan 19 2:00s
|
||||
7:00 Russia %z 1995 May 28
|
||||
6:00 Russia %z 2011 Mar 27 2:00s
|
||||
7:00 - %z 2014 Oct 26 2:00s
|
||||
6:00 - %z 2016 Mar 27 2:00s
|
||||
7:00 - %z
|
||||
|
||||
# From Paul Eggert (2016-03-18):
|
||||
# Asia/Novosibirsk covers:
|
||||
@@ -2883,14 +3069,14 @@ Zone Asia/Barnaul 5:35:00 - LMT 1919 Dec 10
|
||||
# http://publication.pravo.gov.ru/Document/View/0001201607040064
|
||||
|
||||
Zone Asia/Novosibirsk 5:31:40 - LMT 1919 Dec 14 6:00
|
||||
6:00 - +06 1930 Jun 21
|
||||
7:00 Russia +07/+08 1991 Mar 31 2:00s
|
||||
6:00 Russia +06/+07 1992 Jan 19 2:00s
|
||||
7:00 Russia +07/+08 1993 May 23 # say Shanks & P.
|
||||
6:00 Russia +06/+07 2011 Mar 27 2:00s
|
||||
7:00 - +07 2014 Oct 26 2:00s
|
||||
6:00 - +06 2016 Jul 24 2:00s
|
||||
7:00 - +07
|
||||
6:00 - %z 1930 Jun 21
|
||||
7:00 Russia %z 1991 Mar 31 2:00s
|
||||
6:00 Russia %z 1992 Jan 19 2:00s
|
||||
7:00 Russia %z 1993 May 23 # say Shanks & P.
|
||||
6:00 Russia %z 2011 Mar 27 2:00s
|
||||
7:00 - %z 2014 Oct 26 2:00s
|
||||
6:00 - %z 2016 Jul 24 2:00s
|
||||
7:00 - %z
|
||||
|
||||
# From Paul Eggert (2016-03-18):
|
||||
# Asia/Tomsk covers:
|
||||
@@ -2935,14 +3121,14 @@ Zone Asia/Novosibirsk 5:31:40 - LMT 1919 Dec 14 6:00
|
||||
# http://publication.pravo.gov.ru/Document/View/0001201604260048
|
||||
|
||||
Zone Asia/Tomsk 5:39:51 - LMT 1919 Dec 22
|
||||
6:00 - +06 1930 Jun 21
|
||||
7:00 Russia +07/+08 1991 Mar 31 2:00s
|
||||
6:00 Russia +06/+07 1992 Jan 19 2:00s
|
||||
7:00 Russia +07/+08 2002 May 1 3:00
|
||||
6:00 Russia +06/+07 2011 Mar 27 2:00s
|
||||
7:00 - +07 2014 Oct 26 2:00s
|
||||
6:00 - +06 2016 May 29 2:00s
|
||||
7:00 - +07
|
||||
6:00 - %z 1930 Jun 21
|
||||
7:00 Russia %z 1991 Mar 31 2:00s
|
||||
6:00 Russia %z 1992 Jan 19 2:00s
|
||||
7:00 Russia %z 2002 May 1 3:00
|
||||
6:00 Russia %z 2011 Mar 27 2:00s
|
||||
7:00 - %z 2014 Oct 26 2:00s
|
||||
6:00 - %z 2016 May 29 2:00s
|
||||
7:00 - %z
|
||||
|
||||
|
||||
# From Tim Parenti (2014-07-03):
|
||||
@@ -2973,12 +3159,12 @@ Zone Asia/Tomsk 5:39:51 - LMT 1919 Dec 22
|
||||
# realigning itself with KRAT.
|
||||
|
||||
Zone Asia/Novokuznetsk 5:48:48 - LMT 1924 May 1
|
||||
6:00 - +06 1930 Jun 21
|
||||
7:00 Russia +07/+08 1991 Mar 31 2:00s
|
||||
6:00 Russia +06/+07 1992 Jan 19 2:00s
|
||||
7:00 Russia +07/+08 2010 Mar 28 2:00s
|
||||
6:00 Russia +06/+07 2011 Mar 27 2:00s
|
||||
7:00 - +07
|
||||
6:00 - %z 1930 Jun 21
|
||||
7:00 Russia %z 1991 Mar 31 2:00s
|
||||
6:00 Russia %z 1992 Jan 19 2:00s
|
||||
7:00 Russia %z 2010 Mar 28 2:00s
|
||||
6:00 Russia %z 2011 Mar 27 2:00s
|
||||
7:00 - %z
|
||||
|
||||
# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2001-08-25):
|
||||
# Asia/Krasnoyarsk covers...
|
||||
@@ -2992,12 +3178,12 @@ Zone Asia/Novokuznetsk 5:48:48 - LMT 1924 May 1
|
||||
# Byalokoz 1919 says Krasnoyarsk was 6:11:26.
|
||||
|
||||
Zone Asia/Krasnoyarsk 6:11:26 - LMT 1920 Jan 6
|
||||
6:00 - +06 1930 Jun 21
|
||||
7:00 Russia +07/+08 1991 Mar 31 2:00s
|
||||
6:00 Russia +06/+07 1992 Jan 19 2:00s
|
||||
7:00 Russia +07/+08 2011 Mar 27 2:00s
|
||||
8:00 - +08 2014 Oct 26 2:00s
|
||||
7:00 - +07
|
||||
6:00 - %z 1930 Jun 21
|
||||
7:00 Russia %z 1991 Mar 31 2:00s
|
||||
6:00 Russia %z 1992 Jan 19 2:00s
|
||||
7:00 Russia %z 2011 Mar 27 2:00s
|
||||
8:00 - %z 2014 Oct 26 2:00s
|
||||
7:00 - %z
|
||||
|
||||
|
||||
# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2001-08-25):
|
||||
@@ -3014,12 +3200,12 @@ Zone Asia/Krasnoyarsk 6:11:26 - LMT 1920 Jan 6
|
||||
|
||||
Zone Asia/Irkutsk 6:57:05 - LMT 1880
|
||||
6:57:05 - IMT 1920 Jan 25 # Irkutsk Mean Time
|
||||
7:00 - +07 1930 Jun 21
|
||||
8:00 Russia +08/+09 1991 Mar 31 2:00s
|
||||
7:00 Russia +07/+08 1992 Jan 19 2:00s
|
||||
8:00 Russia +08/+09 2011 Mar 27 2:00s
|
||||
9:00 - +09 2014 Oct 26 2:00s
|
||||
8:00 - +08
|
||||
7:00 - %z 1930 Jun 21
|
||||
8:00 Russia %z 1991 Mar 31 2:00s
|
||||
7:00 Russia %z 1992 Jan 19 2:00s
|
||||
8:00 Russia %z 2011 Mar 27 2:00s
|
||||
9:00 - %z 2014 Oct 26 2:00s
|
||||
8:00 - %z
|
||||
|
||||
|
||||
# From Tim Parenti (2014-07-06):
|
||||
@@ -3036,13 +3222,13 @@ Zone Asia/Irkutsk 6:57:05 - LMT 1880
|
||||
# http://publication.pravo.gov.ru/Document/View/0001201512300107
|
||||
|
||||
Zone Asia/Chita 7:33:52 - LMT 1919 Dec 15
|
||||
8:00 - +08 1930 Jun 21
|
||||
9:00 Russia +09/+10 1991 Mar 31 2:00s
|
||||
8:00 Russia +08/+09 1992 Jan 19 2:00s
|
||||
9:00 Russia +09/+10 2011 Mar 27 2:00s
|
||||
10:00 - +10 2014 Oct 26 2:00s
|
||||
8:00 - +08 2016 Mar 27 2:00
|
||||
9:00 - +09
|
||||
8:00 - %z 1930 Jun 21
|
||||
9:00 Russia %z 1991 Mar 31 2:00s
|
||||
8:00 Russia %z 1992 Jan 19 2:00s
|
||||
9:00 Russia %z 2011 Mar 27 2:00s
|
||||
10:00 - %z 2014 Oct 26 2:00s
|
||||
8:00 - %z 2016 Mar 27 2:00
|
||||
9:00 - %z
|
||||
|
||||
|
||||
# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2009-11-29):
|
||||
@@ -3082,12 +3268,12 @@ Zone Asia/Chita 7:33:52 - LMT 1919 Dec 15
|
||||
# Byalokoz 1919 says Yakutsk was 8:38:58.
|
||||
|
||||
Zone Asia/Yakutsk 8:38:58 - LMT 1919 Dec 15
|
||||
8:00 - +08 1930 Jun 21
|
||||
9:00 Russia +09/+10 1991 Mar 31 2:00s
|
||||
8:00 Russia +08/+09 1992 Jan 19 2:00s
|
||||
9:00 Russia +09/+10 2011 Mar 27 2:00s
|
||||
10:00 - +10 2014 Oct 26 2:00s
|
||||
9:00 - +09
|
||||
8:00 - %z 1930 Jun 21
|
||||
9:00 Russia %z 1991 Mar 31 2:00s
|
||||
8:00 Russia %z 1992 Jan 19 2:00s
|
||||
9:00 Russia %z 2011 Mar 27 2:00s
|
||||
10:00 - %z 2014 Oct 26 2:00s
|
||||
9:00 - %z
|
||||
|
||||
|
||||
# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2009-11-29):
|
||||
@@ -3105,12 +3291,12 @@ Zone Asia/Yakutsk 8:38:58 - LMT 1919 Dec 15
|
||||
# Go with Byalokoz.
|
||||
|
||||
Zone Asia/Vladivostok 8:47:31 - LMT 1922 Nov 15
|
||||
9:00 - +09 1930 Jun 21
|
||||
10:00 Russia +10/+11 1991 Mar 31 2:00s
|
||||
9:00 Russia +09/+10 1992 Jan 19 2:00s
|
||||
10:00 Russia +10/+11 2011 Mar 27 2:00s
|
||||
11:00 - +11 2014 Oct 26 2:00s
|
||||
10:00 - +10
|
||||
9:00 - %z 1930 Jun 21
|
||||
10:00 Russia %z 1991 Mar 31 2:00s
|
||||
9:00 Russia %z 1992 Jan 19 2:00s
|
||||
10:00 Russia %z 2011 Mar 27 2:00s
|
||||
11:00 - %z 2014 Oct 26 2:00s
|
||||
10:00 - %z
|
||||
|
||||
|
||||
# From Tim Parenti (2014-07-03):
|
||||
@@ -3128,14 +3314,14 @@ Zone Asia/Vladivostok 8:47:31 - LMT 1922 Nov 15
|
||||
# This transition is no doubt wrong, but we have no better info.
|
||||
|
||||
Zone Asia/Khandyga 9:02:13 - LMT 1919 Dec 15
|
||||
8:00 - +08 1930 Jun 21
|
||||
9:00 Russia +09/+10 1991 Mar 31 2:00s
|
||||
8:00 Russia +08/+09 1992 Jan 19 2:00s
|
||||
9:00 Russia +09/+10 2004
|
||||
10:00 Russia +10/+11 2011 Mar 27 2:00s
|
||||
11:00 - +11 2011 Sep 13 0:00s # Decree 725?
|
||||
10:00 - +10 2014 Oct 26 2:00s
|
||||
9:00 - +09
|
||||
8:00 - %z 1930 Jun 21
|
||||
9:00 Russia %z 1991 Mar 31 2:00s
|
||||
8:00 Russia %z 1992 Jan 19 2:00s
|
||||
9:00 Russia %z 2004
|
||||
10:00 Russia %z 2011 Mar 27 2:00s
|
||||
11:00 - %z 2011 Sep 13 0:00s # Decree 725?
|
||||
10:00 - %z 2014 Oct 26 2:00s
|
||||
9:00 - %z
|
||||
|
||||
|
||||
# From Tim Parenti (2014-07-03):
|
||||
@@ -3151,14 +3337,14 @@ Zone Asia/Khandyga 9:02:13 - LMT 1919 Dec 15
|
||||
|
||||
# The Zone name should be Asia/Yuzhno-Sakhalinsk, but that's too long.
|
||||
Zone Asia/Sakhalin 9:30:48 - LMT 1905 Aug 23
|
||||
9:00 - +09 1945 Aug 25
|
||||
11:00 Russia +11/+12 1991 Mar 31 2:00s # Sakhalin T
|
||||
10:00 Russia +10/+11 1992 Jan 19 2:00s
|
||||
11:00 Russia +11/+12 1997 Mar lastSun 2:00s
|
||||
10:00 Russia +10/+11 2011 Mar 27 2:00s
|
||||
11:00 - +11 2014 Oct 26 2:00s
|
||||
10:00 - +10 2016 Mar 27 2:00s
|
||||
11:00 - +11
|
||||
9:00 - %z 1945 Aug 25
|
||||
11:00 Russia %z 1991 Mar 31 2:00s # Sakhalin T
|
||||
10:00 Russia %z 1992 Jan 19 2:00s
|
||||
11:00 Russia %z 1997 Mar lastSun 2:00s
|
||||
10:00 Russia %z 2011 Mar 27 2:00s
|
||||
11:00 - %z 2014 Oct 26 2:00s
|
||||
10:00 - %z 2016 Mar 27 2:00s
|
||||
11:00 - %z
|
||||
|
||||
|
||||
# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2009-11-29):
|
||||
@@ -3181,13 +3367,13 @@ Zone Asia/Sakhalin 9:30:48 - LMT 1905 Aug 23
|
||||
# http://publication.pravo.gov.ru/Document/View/0001201604050038
|
||||
|
||||
Zone Asia/Magadan 10:03:12 - LMT 1924 May 2
|
||||
10:00 - +10 1930 Jun 21 # Magadan Time
|
||||
11:00 Russia +11/+12 1991 Mar 31 2:00s
|
||||
10:00 Russia +10/+11 1992 Jan 19 2:00s
|
||||
11:00 Russia +11/+12 2011 Mar 27 2:00s
|
||||
12:00 - +12 2014 Oct 26 2:00s
|
||||
10:00 - +10 2016 Apr 24 2:00s
|
||||
11:00 - +11
|
||||
10:00 - %z 1930 Jun 21 # Magadan Time
|
||||
11:00 Russia %z 1991 Mar 31 2:00s
|
||||
10:00 Russia %z 1992 Jan 19 2:00s
|
||||
11:00 Russia %z 2011 Mar 27 2:00s
|
||||
12:00 - %z 2014 Oct 26 2:00s
|
||||
10:00 - %z 2016 Apr 24 2:00s
|
||||
11:00 - %z
|
||||
|
||||
|
||||
# From Tim Parenti (2014-07-06):
|
||||
@@ -3232,12 +3418,12 @@ Zone Asia/Magadan 10:03:12 - LMT 1924 May 2
|
||||
# Go with Srednekolymsk.
|
||||
|
||||
Zone Asia/Srednekolymsk 10:14:52 - LMT 1924 May 2
|
||||
10:00 - +10 1930 Jun 21
|
||||
11:00 Russia +11/+12 1991 Mar 31 2:00s
|
||||
10:00 Russia +10/+11 1992 Jan 19 2:00s
|
||||
11:00 Russia +11/+12 2011 Mar 27 2:00s
|
||||
12:00 - +12 2014 Oct 26 2:00s
|
||||
11:00 - +11
|
||||
10:00 - %z 1930 Jun 21
|
||||
11:00 Russia %z 1991 Mar 31 2:00s
|
||||
10:00 Russia %z 1992 Jan 19 2:00s
|
||||
11:00 Russia %z 2011 Mar 27 2:00s
|
||||
12:00 - %z 2014 Oct 26 2:00s
|
||||
11:00 - %z
|
||||
|
||||
|
||||
# From Tim Parenti (2014-07-03):
|
||||
@@ -3255,14 +3441,14 @@ Zone Asia/Srednekolymsk 10:14:52 - LMT 1924 May 2
|
||||
# UTC+12 since at least then, too.
|
||||
|
||||
Zone Asia/Ust-Nera 9:32:54 - LMT 1919 Dec 15
|
||||
8:00 - +08 1930 Jun 21
|
||||
9:00 Russia +09/+10 1981 Apr 1
|
||||
11:00 Russia +11/+12 1991 Mar 31 2:00s
|
||||
10:00 Russia +10/+11 1992 Jan 19 2:00s
|
||||
11:00 Russia +11/+12 2011 Mar 27 2:00s
|
||||
12:00 - +12 2011 Sep 13 0:00s # Decree 725?
|
||||
11:00 - +11 2014 Oct 26 2:00s
|
||||
10:00 - +10
|
||||
8:00 - %z 1930 Jun 21
|
||||
9:00 Russia %z 1981 Apr 1
|
||||
11:00 Russia %z 1991 Mar 31 2:00s
|
||||
10:00 Russia %z 1992 Jan 19 2:00s
|
||||
11:00 Russia %z 2011 Mar 27 2:00s
|
||||
12:00 - %z 2011 Sep 13 0:00s # Decree 725?
|
||||
11:00 - %z 2014 Oct 26 2:00s
|
||||
10:00 - %z
|
||||
|
||||
|
||||
# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2001-08-25):
|
||||
@@ -3275,12 +3461,12 @@ Zone Asia/Ust-Nera 9:32:54 - LMT 1919 Dec 15
|
||||
# The Zone name should be Asia/Petropavlovsk-Kamchatski or perhaps
|
||||
# Asia/Petropavlovsk-Kamchatsky, but these are too long.
|
||||
Zone Asia/Kamchatka 10:34:36 - LMT 1922 Nov 10
|
||||
11:00 - +11 1930 Jun 21
|
||||
12:00 Russia +12/+13 1991 Mar 31 2:00s
|
||||
11:00 Russia +11/+12 1992 Jan 19 2:00s
|
||||
12:00 Russia +12/+13 2010 Mar 28 2:00s
|
||||
11:00 Russia +11/+12 2011 Mar 27 2:00s
|
||||
12:00 - +12
|
||||
11:00 - %z 1930 Jun 21
|
||||
12:00 Russia %z 1991 Mar 31 2:00s
|
||||
11:00 Russia %z 1992 Jan 19 2:00s
|
||||
12:00 Russia %z 2010 Mar 28 2:00s
|
||||
11:00 Russia %z 2011 Mar 27 2:00s
|
||||
12:00 - %z
|
||||
|
||||
|
||||
# From Tim Parenti (2014-07-03):
|
||||
@@ -3288,13 +3474,13 @@ Zone Asia/Kamchatka 10:34:36 - LMT 1922 Nov 10
|
||||
# 87 RU-CHU Chukotka Autonomous Okrug
|
||||
|
||||
Zone Asia/Anadyr 11:49:56 - LMT 1924 May 2
|
||||
12:00 - +12 1930 Jun 21
|
||||
13:00 Russia +13/+14 1982 Apr 1 0:00s
|
||||
12:00 Russia +12/+13 1991 Mar 31 2:00s
|
||||
11:00 Russia +11/+12 1992 Jan 19 2:00s
|
||||
12:00 Russia +12/+13 2010 Mar 28 2:00s
|
||||
11:00 Russia +11/+12 2011 Mar 27 2:00s
|
||||
12:00 - +12
|
||||
12:00 - %z 1930 Jun 21
|
||||
13:00 Russia %z 1982 Apr 1 0:00s
|
||||
12:00 Russia %z 1991 Mar 31 2:00s
|
||||
11:00 Russia %z 1992 Jan 19 2:00s
|
||||
12:00 Russia %z 2010 Mar 28 2:00s
|
||||
11:00 Russia %z 2011 Mar 27 2:00s
|
||||
12:00 - %z
|
||||
|
||||
# Bosnia & Herzegovina
|
||||
# Croatia
|
||||
@@ -3413,7 +3599,7 @@ Zone Africa/Ceuta -0:21:16 - LMT 1901 Jan 1 0:00u
|
||||
1:00 - CET 1986
|
||||
1:00 EU CE%sT
|
||||
Zone Atlantic/Canary -1:01:36 - LMT 1922 Mar # Las Palmas de Gran C.
|
||||
-1:00 - -01 1946 Sep 30 1:00
|
||||
-1:00 - %z 1946 Sep 30 1:00
|
||||
0:00 - WET 1980 Apr 6 0:00s
|
||||
0:00 1:00 WEST 1980 Sep 28 1:00u
|
||||
0:00 EU WE%sT
|
||||
@@ -3494,8 +3680,8 @@ Zone Atlantic/Canary -1:01:36 - LMT 1922 Mar # Las Palmas de Gran C.
|
||||
# but if no one is present after 11 at night, could be postponed until one
|
||||
# hour before the beginning of service.
|
||||
|
||||
# From Paul Eggert (2013-09-11):
|
||||
# Round BMT to the nearest even second, 0:29:46.
|
||||
# From Paul Eggert (2024-05-24):
|
||||
# Express BMT as 0:29:45.500, approximately the same precision 7° 26' 22.50".
|
||||
#
|
||||
# We can find no reliable source for Shanks's assertion that all of Switzerland
|
||||
# except Geneva switched to Bern Mean Time at 00:00 on 1848-09-12. This book:
|
||||
@@ -3534,6 +3720,7 @@ Rule Swiss 1941 1942 - May Mon>=1 1:00 1:00 S
|
||||
Rule Swiss 1941 1942 - Oct Mon>=1 2:00 0 -
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Europe/Zurich 0:34:08 - LMT 1853 Jul 16 # See above comment.
|
||||
#STDOFF 0:29:45.500
|
||||
0:29:46 - BMT 1894 Jun # Bern Mean Time
|
||||
1:00 Swiss CE%sT 1981
|
||||
1:00 EU CE%sT
|
||||
@@ -3731,7 +3918,7 @@ Rule Turkey 1996 2006 - Oct lastSun 1:00s 0 -
|
||||
Zone Europe/Istanbul 1:55:52 - LMT 1880
|
||||
1:56:56 - IMT 1910 Oct # Istanbul Mean Time?
|
||||
2:00 Turkey EE%sT 1978 Jun 29
|
||||
3:00 Turkey +03/+04 1984 Nov 1 2:00
|
||||
3:00 Turkey %z 1984 Nov 1 2:00
|
||||
2:00 Turkey EE%sT 2007
|
||||
2:00 EU EE%sT 2011 Mar 27 1:00u
|
||||
2:00 - EET 2011 Mar 28 1:00u
|
||||
@@ -3740,7 +3927,7 @@ Zone Europe/Istanbul 1:55:52 - LMT 1880
|
||||
2:00 EU EE%sT 2015 Oct 25 1:00u
|
||||
2:00 1:00 EEST 2015 Nov 8 1:00u
|
||||
2:00 EU EE%sT 2016 Sep 7
|
||||
3:00 - +03
|
||||
3:00 - %z
|
||||
|
||||
# Ukraine
|
||||
#
|
||||
|
||||
@@ -8,5 +8,15 @@
|
||||
# time zone abbreviation "-00", indicating that the actual time zone
|
||||
# is unknown.
|
||||
|
||||
# TZ="Factory" was added to TZDB in 1989, and in 2016 its abbreviation
|
||||
# was changed to "-00" from a longish English-language error message.
|
||||
# Around 2010, CLDR added "Etc/Unknown" for use with TZDB, to stand
|
||||
# for an unknown or invalid time zone. These two notions differ:
|
||||
# TZ="Factory" is a valid timezone, so tzalloc("Factory") succeeds, whereas
|
||||
# TZ="Etc/Unknown" is invalid and tzalloc("Etc/Unknown") fails.
|
||||
# Also, a downstream distributor could modify Factory to be a
|
||||
# default timezone suitable for the devices it manufactures,
|
||||
# whereas that cannot happen for Etc/Unknown.
|
||||
|
||||
# Zone NAME STDOFF RULES FORMAT
|
||||
Zone Factory 0 - "Local time zone must be set--use tzsetup"
|
||||
@@ -1,5 +1,5 @@
|
||||
# ATOMIC TIME.
|
||||
# The Coordinated Universal Time (UTC) is the reference time scale derived
|
||||
# ATOMIC TIME
|
||||
# Coordinated Universal Time (UTC) is the reference time scale derived
|
||||
# from The "Temps Atomique International" (TAI) calculated by the Bureau
|
||||
# International des Poids et Mesures (BIPM) using a worldwide network of atomic
|
||||
# clocks. UTC differs from TAI by an integer number of seconds; it is the basis
|
||||
@@ -8,34 +8,34 @@
|
||||
#
|
||||
# ASTRONOMICAL TIME (UT1) is the time scale based on the rate of rotation of the earth.
|
||||
# It is now mainly derived from Very Long Baseline Interferometry (VLBI). The various
|
||||
# irregular fluctuations progressively detected in the rotation rate of the Earth lead
|
||||
# irregular fluctuations progressively detected in the rotation rate of the Earth led
|
||||
# in 1972 to the replacement of UT1 by UTC as the reference time scale.
|
||||
#
|
||||
#
|
||||
# LEAP SECOND
|
||||
# Atomic clocks are more stable than the rate of the earth rotation since the latter
|
||||
# Atomic clocks are more stable than the rate of the earth's rotation since the latter
|
||||
# undergoes a full range of geophysical perturbations at various time scales: lunisolar
|
||||
# and core-mantle torques, atmospheric and oceanic effetcs, etc.
|
||||
# and core-mantle torques, atmospheric and oceanic effects, etc.
|
||||
# Leap seconds are needed to keep the two time scales in agreement, i.e. UT1-UTC smaller
|
||||
# than 0.9 second. Therefore, when necessary a "leap second" is applied to UTC.
|
||||
# than 0.9 seconds. Therefore, when necessary a "leap second" is applied to UTC.
|
||||
# Since the adoption of this system in 1972 it has been necessary to add a number of seconds to UTC,
|
||||
# firstly due to the initial choice of the value of the second (1/86400 mean solar day of
|
||||
# the year 1820) and secondly to the general slowing down of the Earth's rotation. It is
|
||||
# theorically possible to have a negative leap second (a second removed from UTC), but so far,
|
||||
# theoretically possible to have a negative leap second (a second removed from UTC), but so far,
|
||||
# all leap seconds have been positive (a second has been added to UTC). Based on what we know about
|
||||
# the earth's rotation, it is unlikely that we will ever have a negative leap second.
|
||||
#
|
||||
#
|
||||
# HISTORY
|
||||
# The first leap second was added on June 30, 1972. Until yhe year 2000, it was necessary in average to add a
|
||||
# The first leap second was added on June 30, 1972. Until the year 2000, it was necessary in average to add a
|
||||
# leap second at a rate of 1 to 2 years. Since the year 2000 leap seconds are introduced with an
|
||||
# average interval of 3 to 4 years due to the acceleration of the Earth rotation speed.
|
||||
# average interval of 3 to 4 years due to the acceleration of the Earth's rotation speed.
|
||||
#
|
||||
#
|
||||
# RESPONSABILITY OF THE DECISION TO INTRODUCE A LEAP SECOND IN UTC
|
||||
# RESPONSIBILITY OF THE DECISION TO INTRODUCE A LEAP SECOND IN UTC
|
||||
# The decision to introduce a leap second in UTC is the responsibility of the Earth Orientation Center of
|
||||
# the International Earth Rotation and reference System Service (IERS). This center is located at Paris
|
||||
# Observatory. According to international agreements, leap seconds should only be scheduled for certain dates:
|
||||
# Observatory. According to international agreements, leap seconds should be scheduled only for certain dates:
|
||||
# first preference is given to the end of December and June, and second preference at the end of March
|
||||
# and September. Since the introduction of leap seconds in 1972, only dates in June and December were used.
|
||||
#
|
||||
@@ -60,15 +60,15 @@
|
||||
#
|
||||
# The following line shows the last update of this file in NTP timestamp:
|
||||
#
|
||||
#$ 3913697179
|
||||
#$ 3945196800
|
||||
#
|
||||
# 2) Expiration date of the file given on a semi-annual basis: last June or last December
|
||||
#
|
||||
# File expires on 28 December 2024
|
||||
# File expires on 28 December 2025
|
||||
#
|
||||
# Expire date in NTP timestamp:
|
||||
#
|
||||
#@ 3944332800
|
||||
#@ 3975868800
|
||||
#
|
||||
#
|
||||
# LIST OF LEAP SECONDS
|
||||
@@ -117,4 +117,4 @@
|
||||
# please see the readme file in the 'source' directory :
|
||||
# https://hpiers.obspm.fr/iers/bul/bulc/ntp/sources/README
|
||||
#
|
||||
#h 9dac5845 8acd32c0 2947d462 daf4a943 f58d9391
|
||||
#h 848434d5 570f7ea8 d79ba227 a00fc821 f608e2d4
|
||||
@@ -69,11 +69,11 @@ Leap 2016 Dec 31 23:59:60 + S
|
||||
# Any additional leap seconds will come after this.
|
||||
# This Expires line is commented out for now,
|
||||
# so that pre-2020a zic implementations do not reject this file.
|
||||
#Expires 2024 Dec 28 00:00:00
|
||||
#Expires 2025 Dec 28 00:00:00
|
||||
|
||||
# POSIX timestamps for the data in this file:
|
||||
#updated 1704708379 (2024-01-08 10:06:19 UTC)
|
||||
#expires 1735344000 (2024-12-28 00:00:00 UTC)
|
||||
#updated 1736208000 (2025-01-07 00:00:00 UTC)
|
||||
#expires 1766880000 (2025-12-28 00:00:00 UTC)
|
||||
|
||||
# Updated through IERS Bulletin C (https://hpiers.obspm.fr/iers/bul/bulc/bulletinc.dat)
|
||||
# File expires on 28 December 2024
|
||||
# File expires on 28 December 2025
|
||||
+118
-43
@@ -27,9 +27,12 @@
|
||||
# in New York City (1869-10). His 1870 proposal was based on Washington, DC,
|
||||
# but in 1872-05 he moved the proposed origin to Greenwich.
|
||||
|
||||
# From Paul Eggert (2018-03-20):
|
||||
# From Paul Eggert (2024-11-18):
|
||||
# Dowd's proposal left many details unresolved, such as where to draw
|
||||
# lines between time zones. The key individual who made time zones
|
||||
# lines between time zones. Sandford Fleming of the Canadian Pacific Railway
|
||||
# argued for Dowd's proposal in 1876, and Cleveland Abbe of the American
|
||||
# Meteorology Society published a report in 1879 recommending four US time
|
||||
# zones based on GMT. However, the key individual who made time zones
|
||||
# work in the US was William Frederick Allen - railway engineer,
|
||||
# managing editor of the Travelers' Guide, and secretary of the
|
||||
# General Time Convention, a railway standardization group. Allen
|
||||
@@ -185,26 +188,6 @@ Rule US 1987 2006 - Apr Sun>=1 2:00 1:00 D
|
||||
Rule US 2007 max - Mar Sun>=8 2:00 1:00 D
|
||||
Rule US 2007 max - Nov Sun>=1 2:00 0 S
|
||||
|
||||
# From Arthur David Olson, 2005-12-19
|
||||
# We generate the files specified below to guard against old files with
|
||||
# obsolete information being left in the time zone binary directory.
|
||||
# We limit the list to names that have appeared in previous versions of
|
||||
# this time zone package.
|
||||
# We do these as separate Zones rather than as Links to avoid problems if
|
||||
# a particular place changes whether it observes DST.
|
||||
# We put these specifications here in the northamerica file both to
|
||||
# increase the chances that they'll actually get compiled and to
|
||||
# avoid the need to duplicate the US rules in another file.
|
||||
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone EST -5:00 - EST
|
||||
Zone MST -7:00 - MST
|
||||
Zone HST -10:00 - HST
|
||||
Zone EST5EDT -5:00 US E%sT
|
||||
Zone CST6CDT -6:00 US C%sT
|
||||
Zone MST7MDT -7:00 US M%sT
|
||||
Zone PST8PDT -8:00 US P%sT
|
||||
|
||||
# From U. S. Naval Observatory (1989-01-19):
|
||||
# USA EASTERN 5 H BEHIND UTC NEW YORK, WASHINGTON
|
||||
# USA EASTERN 4 H BEHIND UTC APR 3 - OCT 30
|
||||
@@ -1628,6 +1611,15 @@ Zone America/Moncton -4:19:08 - LMT 1883 Dec 9
|
||||
# For more on Orillia, see: Daubs K. Bold attempt at daylight saving
|
||||
# time became a comic failure in Orillia. Toronto Star 2017-07-08.
|
||||
# https://www.thestar.com/news/insight/2017/07/08/bold-attempt-at-daylight-saving-time-became-a-comic-failure-in-orillia.html
|
||||
# From Paul Eggert (2025-03-20):
|
||||
# Also see the 1912-06-17 front page of The Evening Sunbeam,
|
||||
# reproduced in: Richardson M. "Daylight saving was a confusing
|
||||
# time in Orillia" in the 2025-03-15 Orillia Matters. Richardson writes,
|
||||
# "The first Sunday after the switch was made, [DST proponent and
|
||||
# Orillia mayor William Sword] Frost walked into church an hour late.
|
||||
# This became a symbol of the downfall of daylight saving in Orillia."
|
||||
# The mayor became known as "Daylight Bill".
|
||||
# https://www.orilliamatters.com/local-news/column-daylight-saving-was-a-confusing-time-in-orillia-10377529
|
||||
|
||||
# From Mark Brader (2010-03-06):
|
||||
#
|
||||
@@ -2373,6 +2365,81 @@ Zone America/Dawson -9:17:40 - LMT 1900 Aug 20
|
||||
# the researchers who prepared the Decrees page failed to find some of
|
||||
# the relevant documents.
|
||||
|
||||
# From Heitor David Pinto (2024-08-04):
|
||||
# In 1931, the decree implementing DST specified that it would take
|
||||
# effect on 30 April....
|
||||
# https://www.dof.gob.mx/nota_to_imagen_fs.php?cod_diario=192270&pagina=2&seccion=1
|
||||
#
|
||||
# In 1981, the decree changing Campeche, Yucatán and Quintana Roo to UTC-5
|
||||
# specified that it would enter into force on 26 December 1981 at 2:00....
|
||||
# https://www.dof.gob.mx/nota_to_imagen_fs.php?codnota=4705667&fecha=23/12/1981&cod_diario=202796
|
||||
#
|
||||
# In 1982, the decree returning Campeche and Yucatán to UTC-6 specified that
|
||||
# it would enter into force on 2 November 1982 at 2:00....
|
||||
# https://www.dof.gob.mx/nota_to_imagen_fs.php?cod_diario=205689&pagina=3&seccion=0
|
||||
#
|
||||
# Quintana Roo changed to UTC-6 on 4 January 1983 at 0:00, and again
|
||||
# to UTC-5 on 26 October 1997 at 2:00....
|
||||
# https://www.dof.gob.mx/nota_to_imagen_fs.php?codnota=4787355&fecha=28/12/1982&cod_diario=206112
|
||||
# https://www.dof.gob.mx/nota_to_imagen_fs.php?cod_diario=209559&pagina=15&seccion=0
|
||||
#
|
||||
# Durango, Coahuila, Nuevo León and Tamaulipas were set to UTC-7 on 1 January
|
||||
# 1922, and changed to UTC-6 on 10 June 1927. Then Durango, Coahuila and
|
||||
# Nuevo León (but not Tamaulipas) returned to UTC-7 on 15 November 1930,
|
||||
# observed DST in 1931, and changed again to UTC-6 on 1 April 1932....
|
||||
# https://www.dof.gob.mx/nota_to_imagen_fs.php?codnota=4441846&fecha=29/12/1921&cod_diario=187468
|
||||
# https://www.dof.gob.mx/nota_to_imagen_fs.php?codnota=4541520&fecha=09/06/1927&cod_diario=193920
|
||||
# https://www.dof.gob.mx/nota_to_imagen_fs.php?codnota=4491963&fecha=15/11/1930&cod_diario=190835
|
||||
# https://www.dof.gob.mx/nota_to_imagen_fs.php?codnota=4418437&fecha=21/01/1932&cod_diario=185588
|
||||
#
|
||||
# ... the ... 10 June 1927 ... decree only said 10 June 1927, without
|
||||
# specifying a time, so I suppose that it should be considered at 0:00.
|
||||
# https://www.dof.gob.mx/nota_to_imagen_fs.php?codnota=4541520&fecha=09/06/1927&cod_diario=193920
|
||||
#
|
||||
# In 1942, the decree changing Baja California, Baja California Sur, Sonora,
|
||||
# Sinaloa and Nayarit to UTC-7 was published on 24 April, but it said that it
|
||||
# would apply from 1 April, so it's unclear when the change actually
|
||||
# occurred. The database currently shows 24 April 1942.
|
||||
# https://www.dof.gob.mx/nota_to_imagen_fs.php?cod_diario=192203&pagina=2&seccion=1
|
||||
#
|
||||
# Baja California Sur, Sonora, Sinaloa and Nayarit never used UTC-8. The ...
|
||||
# 14 January 1949 ... change [to UTC-8] only occurred in Baja California.
|
||||
# https://www.dof.gob.mx/nota_to_imagen_fs.php?codnota=4515613&fecha=13/01/1949&cod_diario=192309
|
||||
#
|
||||
# In 1945, the decree changing Baja California to UTC-8 specified that it
|
||||
# would take effect on the third day from its publication.
|
||||
# It was published on 12 November, so it would take effect on 15 November....
|
||||
# https://www.dof.gob.mx/nota_to_imagen_fs.php?codnota=4555049&fecha=12/11/1945&cod_diario=194763
|
||||
#
|
||||
# In 1948, the decree changing Baja California to UTC-7 specified that it
|
||||
# would take effect on "this date". The decree was made on 13 March,
|
||||
# but published on 5 April, so it's unclear when the change actually occurred.
|
||||
# The database currently shows 5 April 1948.
|
||||
# https://www.dof.gob.mx/nota_to_imagen_fs.php?cod_diario=188624&pagina=2&seccion=0
|
||||
#
|
||||
# In 1949, the decree changing Baja California to UTC-8 was published on 13
|
||||
# January, but it said that it would apply from 1 January, so it's unclear when
|
||||
# the change actually occurred. The database currently shows 14 January 1949.
|
||||
# https://www.dof.gob.mx/nota_to_imagen_fs.php?codnota=4515613&fecha=13/01/1949&cod_diario=192309
|
||||
#
|
||||
# Baja California also observed UTC-7 from 1 May to 24 September 1950,
|
||||
# from 29 April to 30 September 1951 at 2:00,
|
||||
# and from 27 April to 28 September 1952 at 2:00....
|
||||
# https://www.dof.gob.mx/nota_to_imagen_fs.php?codnota=4600403&fecha=29/04/1950&cod_diario=197505
|
||||
# https://www.dof.gob.mx/nota_to_imagen_fs.php?codnota=4623553&fecha=23/09/1950&cod_diario=198805
|
||||
# https://www.dof.gob.mx/nota_to_imagen_fs.php?codnota=4469444&fecha=27/04/1951&cod_diario=189317
|
||||
# https://www.dof.gob.mx/nota_to_imagen_fs.php?codnota=4533868&fecha=10/03/1952&cod_diario=193465
|
||||
#
|
||||
# All changes in Baja California from 1948 to 1952 match those in California,
|
||||
# on the same dates or with a difference of one day.
|
||||
# So it may be easier to implement these changes as DST with rule CA
|
||||
# during this whole period.
|
||||
#
|
||||
# From Paul Eggert (2024-08-18):
|
||||
# For now, maintain the slightly-different history for Baja California,
|
||||
# as we have no information on whether 1948/1952 clocks in Tijuana followed
|
||||
# the decrees or followed San Diego.
|
||||
|
||||
# From Alan Perry (1996-02-15):
|
||||
# A guy from our Mexico subsidiary finally found the Presidential Decree
|
||||
# outlining the timezone changes in Mexico.
|
||||
@@ -2576,7 +2643,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 - May 1 23: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
|
||||
@@ -2595,14 +2662,16 @@ Rule Mexico 2002 2022 - Oct lastSun 2:00 0 S
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
# Quintana Roo; represented by Cancún
|
||||
Zone America/Cancun -5:47:04 - LMT 1922 Jan 1 6:00u
|
||||
-6:00 - CST 1981 Dec 23
|
||||
-6:00 - CST 1981 Dec 26 2:00
|
||||
-5:00 - EST 1983 Jan 4 0:00
|
||||
-6:00 Mexico C%sT 1997 Oct 26 2:00
|
||||
-5:00 Mexico E%sT 1998 Aug 2 2:00
|
||||
-6:00 Mexico C%sT 2015 Feb 1 2:00
|
||||
-5:00 - EST
|
||||
# Campeche, Yucatán; represented by Mérida
|
||||
Zone America/Merida -5:58:28 - LMT 1922 Jan 1 6:00u
|
||||
-6:00 - CST 1981 Dec 23
|
||||
-5:00 - EST 1982 Dec 2
|
||||
-6:00 - CST 1981 Dec 26 2:00
|
||||
-5:00 - EST 1982 Nov 2 2:00
|
||||
-6:00 Mexico C%sT
|
||||
# Coahuila, Nuevo León, Tamaulipas (near US border)
|
||||
# This includes the following municipios:
|
||||
@@ -2619,12 +2688,15 @@ Zone America/Matamoros -6:30:00 - LMT 1922 Jan 1 6:00u
|
||||
-6:00 US C%sT
|
||||
# Durango; Coahuila, Nuevo León, Tamaulipas (away from US border)
|
||||
Zone America/Monterrey -6:41:16 - LMT 1922 Jan 1 6:00u
|
||||
-7:00 - MST 1927 Jun 10
|
||||
-6:00 - CST 1930 Nov 15
|
||||
-7:00 Mexico M%sT 1932 Apr 1
|
||||
-6:00 - CST 1988
|
||||
-6:00 US C%sT 1989
|
||||
-6:00 Mexico C%sT
|
||||
# Central Mexico
|
||||
Zone America/Mexico_City -6:36:36 - LMT 1922 Jan 1 7:00u
|
||||
-7:00 - MST 1927 Jun 10 23:00
|
||||
-7:00 - MST 1927 Jun 10
|
||||
-6:00 - CST 1930 Nov 15
|
||||
-7:00 Mexico M%sT 1932 Apr 1
|
||||
-6:00 Mexico C%sT 2001 Sep 30 2:00
|
||||
@@ -2635,7 +2707,7 @@ Zone America/Mexico_City -6:36:36 - LMT 1922 Jan 1 7:00u
|
||||
# Práxedis G Guerrero.
|
||||
# http://gaceta.diputados.gob.mx/PDF/65/2a022/nov/20221124-VII.pdf
|
||||
Zone America/Ciudad_Juarez -7:05:56 - LMT 1922 Jan 1 7:00u
|
||||
-7:00 - MST 1927 Jun 10 23:00
|
||||
-7:00 - MST 1927 Jun 10
|
||||
-6:00 - CST 1930 Nov 15
|
||||
-7:00 Mexico M%sT 1932 Apr 1
|
||||
-6:00 - CST 1996
|
||||
@@ -2650,7 +2722,7 @@ Zone America/Ciudad_Juarez -7:05:56 - LMT 1922 Jan 1 7:00u
|
||||
# Benavides.
|
||||
# http://gaceta.diputados.gob.mx/PDF/65/2a022/nov/20221124-VII.pdf
|
||||
Zone America/Ojinaga -6:57:40 - LMT 1922 Jan 1 7:00u
|
||||
-7:00 - MST 1927 Jun 10 23:00
|
||||
-7:00 - MST 1927 Jun 10
|
||||
-6:00 - CST 1930 Nov 15
|
||||
-7:00 Mexico M%sT 1932 Apr 1
|
||||
-6:00 - CST 1996
|
||||
@@ -2662,7 +2734,7 @@ Zone America/Ojinaga -6:57:40 - LMT 1922 Jan 1 7:00u
|
||||
-6:00 US C%sT
|
||||
# Chihuahua (away from US border)
|
||||
Zone America/Chihuahua -7:04:20 - LMT 1922 Jan 1 7:00u
|
||||
-7:00 - MST 1927 Jun 10 23:00
|
||||
-7:00 - MST 1927 Jun 10
|
||||
-6:00 - CST 1930 Nov 15
|
||||
-7:00 Mexico M%sT 1932 Apr 1
|
||||
-6:00 - CST 1996
|
||||
@@ -2672,23 +2744,21 @@ Zone America/Chihuahua -7:04:20 - LMT 1922 Jan 1 7:00u
|
||||
-6:00 - CST
|
||||
# Sonora
|
||||
Zone America/Hermosillo -7:23:52 - LMT 1922 Jan 1 7:00u
|
||||
-7:00 - MST 1927 Jun 10 23:00
|
||||
-7:00 - MST 1927 Jun 10
|
||||
-6:00 - CST 1930 Nov 15
|
||||
-7:00 Mexico M%sT 1932 Apr 1
|
||||
-6:00 - CST 1942 Apr 24
|
||||
-7:00 - MST 1949 Jan 14
|
||||
-8:00 - PST 1970
|
||||
-7:00 - MST 1996
|
||||
-7:00 Mexico M%sT 1999
|
||||
-7:00 - MST
|
||||
|
||||
# Baja California Sur, Nayarit (except Bahía de Banderas), Sinaloa
|
||||
Zone America/Mazatlan -7:05:40 - LMT 1922 Jan 1 7:00u
|
||||
-7:00 - MST 1927 Jun 10 23:00
|
||||
-7:00 - MST 1927 Jun 10
|
||||
-6:00 - CST 1930 Nov 15
|
||||
-7:00 Mexico M%sT 1932 Apr 1
|
||||
-6:00 - CST 1942 Apr 24
|
||||
-7:00 - MST 1949 Jan 14
|
||||
-8:00 - PST 1970
|
||||
-7:00 - MST 1970
|
||||
-7:00 Mexico M%sT
|
||||
|
||||
# Bahía de Banderas
|
||||
@@ -2721,27 +2791,32 @@ Zone America/Mazatlan -7:05:40 - LMT 1922 Jan 1 7:00u
|
||||
# Use "Bahia_Banderas" to keep the name to fourteen characters.
|
||||
|
||||
Zone America/Bahia_Banderas -7:01:00 - LMT 1922 Jan 1 7:00u
|
||||
-7:00 - MST 1927 Jun 10 23:00
|
||||
-7:00 - MST 1927 Jun 10
|
||||
-6:00 - CST 1930 Nov 15
|
||||
-7:00 Mexico M%sT 1932 Apr 1
|
||||
-6:00 - CST 1942 Apr 24
|
||||
-7:00 - MST 1949 Jan 14
|
||||
-8:00 - PST 1970
|
||||
-7:00 - MST 1970
|
||||
-7:00 Mexico M%sT 2010 Apr 4 2:00
|
||||
-6:00 Mexico C%sT
|
||||
|
||||
# Baja California
|
||||
Zone America/Tijuana -7:48:04 - LMT 1922 Jan 1 7:00u
|
||||
-7:00 - MST 1924
|
||||
-8:00 - PST 1927 Jun 10 23:00
|
||||
-8:00 - PST 1927 Jun 10
|
||||
-7:00 - MST 1930 Nov 15
|
||||
-8:00 - PST 1931 Apr 1
|
||||
-8:00 1:00 PDT 1931 Sep 30
|
||||
-8:00 - PST 1942 Apr 24
|
||||
-8:00 1:00 PWT 1945 Aug 14 23:00u
|
||||
-8:00 1:00 PPT 1945 Nov 12 # Peace
|
||||
-8:00 1:00 PPT 1945 Nov 15 # Peace
|
||||
-8:00 - PST 1948 Apr 5
|
||||
-8:00 1:00 PDT 1949 Jan 14
|
||||
-8:00 - PST 1950 May 1
|
||||
-8:00 1:00 PDT 1950 Sep 24
|
||||
-8:00 - PST 1951 Apr 29 2:00
|
||||
-8:00 1:00 PDT 1951 Sep 30 2:00
|
||||
-8:00 - PST 1952 Apr 27 2:00
|
||||
-8:00 1:00 PDT 1952 Sep 28 2:00
|
||||
-8:00 - PST 1954
|
||||
-8:00 CA P%sT 1961
|
||||
-8:00 - PST 1976
|
||||
@@ -3550,8 +3625,8 @@ Zone America/Puerto_Rico -4:24:25 - LMT 1899 Mar 28 12:00 # San Juan
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Miquelon -3:44:40 - LMT 1911 Jun 15 # St Pierre
|
||||
-4:00 - AST 1980 May
|
||||
-3:00 - -03 1987
|
||||
-3:00 Canada -03/-02
|
||||
-3:00 - %z 1987
|
||||
-3:00 Canada %z
|
||||
|
||||
# Turks and Caicos
|
||||
#
|
||||
|
||||
+336
-261
@@ -402,11 +402,11 @@ Rule Arg 2008 only - Oct Sun>=15 0:00 1:00 -
|
||||
Zone America/Argentina/Buenos_Aires -3:53:48 - LMT 1894 Oct 31
|
||||
#STDOFF -4:16:48.25
|
||||
-4:16:48 - CMT 1920 May # Córdoba Mean Time
|
||||
-4:00 - -04 1930 Dec
|
||||
-4:00 Arg -04/-03 1969 Oct 5
|
||||
-3:00 Arg -03/-02 1999 Oct 3
|
||||
-4:00 Arg -04/-03 2000 Mar 3
|
||||
-3:00 Arg -03/-02
|
||||
-4:00 - %z 1930 Dec
|
||||
-4:00 Arg %z 1969 Oct 5
|
||||
-3:00 Arg %z 1999 Oct 3
|
||||
-4:00 Arg %z 2000 Mar 3
|
||||
-3:00 Arg %z
|
||||
#
|
||||
# Córdoba (CB), Santa Fe (SF), Entre Ríos (ER), Corrientes (CN), Misiones (MN),
|
||||
# Chaco (CC), Formosa (FM), Santiago del Estero (SE)
|
||||
@@ -421,120 +421,120 @@ Zone America/Argentina/Buenos_Aires -3:53:48 - LMT 1894 Oct 31
|
||||
#STDOFF -4:16:48.25
|
||||
Zone America/Argentina/Cordoba -4:16:48 - LMT 1894 Oct 31
|
||||
-4:16:48 - CMT 1920 May
|
||||
-4:00 - -04 1930 Dec
|
||||
-4:00 Arg -04/-03 1969 Oct 5
|
||||
-3:00 Arg -03/-02 1991 Mar 3
|
||||
-4:00 - -04 1991 Oct 20
|
||||
-3:00 Arg -03/-02 1999 Oct 3
|
||||
-4:00 Arg -04/-03 2000 Mar 3
|
||||
-3:00 Arg -03/-02
|
||||
-4:00 - %z 1930 Dec
|
||||
-4:00 Arg %z 1969 Oct 5
|
||||
-3:00 Arg %z 1991 Mar 3
|
||||
-4:00 - %z 1991 Oct 20
|
||||
-3:00 Arg %z 1999 Oct 3
|
||||
-4:00 Arg %z 2000 Mar 3
|
||||
-3:00 Arg %z
|
||||
#
|
||||
# Salta (SA), La Pampa (LP), Neuquén (NQ), Rio Negro (RN)
|
||||
Zone America/Argentina/Salta -4:21:40 - LMT 1894 Oct 31
|
||||
#STDOFF -4:16:48.25
|
||||
-4:16:48 - CMT 1920 May
|
||||
-4:00 - -04 1930 Dec
|
||||
-4:00 Arg -04/-03 1969 Oct 5
|
||||
-3:00 Arg -03/-02 1991 Mar 3
|
||||
-4:00 - -04 1991 Oct 20
|
||||
-3:00 Arg -03/-02 1999 Oct 3
|
||||
-4:00 Arg -04/-03 2000 Mar 3
|
||||
-3:00 Arg -03/-02 2008 Oct 18
|
||||
-3:00 - -03
|
||||
-4:00 - %z 1930 Dec
|
||||
-4:00 Arg %z 1969 Oct 5
|
||||
-3:00 Arg %z 1991 Mar 3
|
||||
-4:00 - %z 1991 Oct 20
|
||||
-3:00 Arg %z 1999 Oct 3
|
||||
-4:00 Arg %z 2000 Mar 3
|
||||
-3:00 Arg %z 2008 Oct 18
|
||||
-3:00 - %z
|
||||
#
|
||||
# Tucumán (TM)
|
||||
Zone America/Argentina/Tucuman -4:20:52 - LMT 1894 Oct 31
|
||||
#STDOFF -4:16:48.25
|
||||
-4:16:48 - CMT 1920 May
|
||||
-4:00 - -04 1930 Dec
|
||||
-4:00 Arg -04/-03 1969 Oct 5
|
||||
-3:00 Arg -03/-02 1991 Mar 3
|
||||
-4:00 - -04 1991 Oct 20
|
||||
-3:00 Arg -03/-02 1999 Oct 3
|
||||
-4:00 Arg -04/-03 2000 Mar 3
|
||||
-3:00 - -03 2004 Jun 1
|
||||
-4:00 - -04 2004 Jun 13
|
||||
-3:00 Arg -03/-02
|
||||
-4:00 - %z 1930 Dec
|
||||
-4:00 Arg %z 1969 Oct 5
|
||||
-3:00 Arg %z 1991 Mar 3
|
||||
-4:00 - %z 1991 Oct 20
|
||||
-3:00 Arg %z 1999 Oct 3
|
||||
-4:00 Arg %z 2000 Mar 3
|
||||
-3:00 - %z 2004 Jun 1
|
||||
-4:00 - %z 2004 Jun 13
|
||||
-3:00 Arg %z
|
||||
#
|
||||
# La Rioja (LR)
|
||||
Zone America/Argentina/La_Rioja -4:27:24 - LMT 1894 Oct 31
|
||||
#STDOFF -4:16:48.25
|
||||
-4:16:48 - CMT 1920 May
|
||||
-4:00 - -04 1930 Dec
|
||||
-4:00 Arg -04/-03 1969 Oct 5
|
||||
-3:00 Arg -03/-02 1991 Mar 1
|
||||
-4:00 - -04 1991 May 7
|
||||
-3:00 Arg -03/-02 1999 Oct 3
|
||||
-4:00 Arg -04/-03 2000 Mar 3
|
||||
-3:00 - -03 2004 Jun 1
|
||||
-4:00 - -04 2004 Jun 20
|
||||
-3:00 Arg -03/-02 2008 Oct 18
|
||||
-3:00 - -03
|
||||
-4:00 - %z 1930 Dec
|
||||
-4:00 Arg %z 1969 Oct 5
|
||||
-3:00 Arg %z 1991 Mar 1
|
||||
-4:00 - %z 1991 May 7
|
||||
-3:00 Arg %z 1999 Oct 3
|
||||
-4:00 Arg %z 2000 Mar 3
|
||||
-3:00 - %z 2004 Jun 1
|
||||
-4:00 - %z 2004 Jun 20
|
||||
-3:00 Arg %z 2008 Oct 18
|
||||
-3:00 - %z
|
||||
#
|
||||
# San Juan (SJ)
|
||||
Zone America/Argentina/San_Juan -4:34:04 - LMT 1894 Oct 31
|
||||
#STDOFF -4:16:48.25
|
||||
-4:16:48 - CMT 1920 May
|
||||
-4:00 - -04 1930 Dec
|
||||
-4:00 Arg -04/-03 1969 Oct 5
|
||||
-3:00 Arg -03/-02 1991 Mar 1
|
||||
-4:00 - -04 1991 May 7
|
||||
-3:00 Arg -03/-02 1999 Oct 3
|
||||
-4:00 Arg -04/-03 2000 Mar 3
|
||||
-3:00 - -03 2004 May 31
|
||||
-4:00 - -04 2004 Jul 25
|
||||
-3:00 Arg -03/-02 2008 Oct 18
|
||||
-3:00 - -03
|
||||
-4:00 - %z 1930 Dec
|
||||
-4:00 Arg %z 1969 Oct 5
|
||||
-3:00 Arg %z 1991 Mar 1
|
||||
-4:00 - %z 1991 May 7
|
||||
-3:00 Arg %z 1999 Oct 3
|
||||
-4:00 Arg %z 2000 Mar 3
|
||||
-3:00 - %z 2004 May 31
|
||||
-4:00 - %z 2004 Jul 25
|
||||
-3:00 Arg %z 2008 Oct 18
|
||||
-3:00 - %z
|
||||
#
|
||||
# Jujuy (JY)
|
||||
Zone America/Argentina/Jujuy -4:21:12 - LMT 1894 Oct 31
|
||||
#STDOFF -4:16:48.25
|
||||
-4:16:48 - CMT 1920 May
|
||||
-4:00 - -04 1930 Dec
|
||||
-4:00 Arg -04/-03 1969 Oct 5
|
||||
-3:00 Arg -03/-02 1990 Mar 4
|
||||
-4:00 - -04 1990 Oct 28
|
||||
-4:00 1:00 -03 1991 Mar 17
|
||||
-4:00 - -04 1991 Oct 6
|
||||
-3:00 1:00 -02 1992
|
||||
-3:00 Arg -03/-02 1999 Oct 3
|
||||
-4:00 Arg -04/-03 2000 Mar 3
|
||||
-3:00 Arg -03/-02 2008 Oct 18
|
||||
-3:00 - -03
|
||||
-4:00 - %z 1930 Dec
|
||||
-4:00 Arg %z 1969 Oct 5
|
||||
-3:00 Arg %z 1990 Mar 4
|
||||
-4:00 - %z 1990 Oct 28
|
||||
-4:00 1:00 %z 1991 Mar 17
|
||||
-4:00 - %z 1991 Oct 6
|
||||
-3:00 1:00 %z 1992
|
||||
-3:00 Arg %z 1999 Oct 3
|
||||
-4:00 Arg %z 2000 Mar 3
|
||||
-3:00 Arg %z 2008 Oct 18
|
||||
-3:00 - %z
|
||||
#
|
||||
# Catamarca (CT), Chubut (CH)
|
||||
Zone America/Argentina/Catamarca -4:23:08 - LMT 1894 Oct 31
|
||||
#STDOFF -4:16:48.25
|
||||
-4:16:48 - CMT 1920 May
|
||||
-4:00 - -04 1930 Dec
|
||||
-4:00 Arg -04/-03 1969 Oct 5
|
||||
-3:00 Arg -03/-02 1991 Mar 3
|
||||
-4:00 - -04 1991 Oct 20
|
||||
-3:00 Arg -03/-02 1999 Oct 3
|
||||
-4:00 Arg -04/-03 2000 Mar 3
|
||||
-3:00 - -03 2004 Jun 1
|
||||
-4:00 - -04 2004 Jun 20
|
||||
-3:00 Arg -03/-02 2008 Oct 18
|
||||
-3:00 - -03
|
||||
-4:00 - %z 1930 Dec
|
||||
-4:00 Arg %z 1969 Oct 5
|
||||
-3:00 Arg %z 1991 Mar 3
|
||||
-4:00 - %z 1991 Oct 20
|
||||
-3:00 Arg %z 1999 Oct 3
|
||||
-4:00 Arg %z 2000 Mar 3
|
||||
-3:00 - %z 2004 Jun 1
|
||||
-4:00 - %z 2004 Jun 20
|
||||
-3:00 Arg %z 2008 Oct 18
|
||||
-3:00 - %z
|
||||
#
|
||||
# Mendoza (MZ)
|
||||
Zone America/Argentina/Mendoza -4:35:16 - LMT 1894 Oct 31
|
||||
#STDOFF -4:16:48.25
|
||||
-4:16:48 - CMT 1920 May
|
||||
-4:00 - -04 1930 Dec
|
||||
-4:00 Arg -04/-03 1969 Oct 5
|
||||
-3:00 Arg -03/-02 1990 Mar 4
|
||||
-4:00 - -04 1990 Oct 15
|
||||
-4:00 1:00 -03 1991 Mar 1
|
||||
-4:00 - -04 1991 Oct 15
|
||||
-4:00 1:00 -03 1992 Mar 1
|
||||
-4:00 - -04 1992 Oct 18
|
||||
-3:00 Arg -03/-02 1999 Oct 3
|
||||
-4:00 Arg -04/-03 2000 Mar 3
|
||||
-3:00 - -03 2004 May 23
|
||||
-4:00 - -04 2004 Sep 26
|
||||
-3:00 Arg -03/-02 2008 Oct 18
|
||||
-3:00 - -03
|
||||
-4:00 - %z 1930 Dec
|
||||
-4:00 Arg %z 1969 Oct 5
|
||||
-3:00 Arg %z 1990 Mar 4
|
||||
-4:00 - %z 1990 Oct 15
|
||||
-4:00 1:00 %z 1991 Mar 1
|
||||
-4:00 - %z 1991 Oct 15
|
||||
-4:00 1:00 %z 1992 Mar 1
|
||||
-4:00 - %z 1992 Oct 18
|
||||
-3:00 Arg %z 1999 Oct 3
|
||||
-4:00 Arg %z 2000 Mar 3
|
||||
-3:00 - %z 2004 May 23
|
||||
-4:00 - %z 2004 Sep 26
|
||||
-3:00 Arg %z 2008 Oct 18
|
||||
-3:00 - %z
|
||||
#
|
||||
# San Luis (SL)
|
||||
|
||||
@@ -544,53 +544,53 @@ Rule SanLuis 2007 2008 - Oct Sun>=8 0:00 1:00 -
|
||||
Zone America/Argentina/San_Luis -4:25:24 - LMT 1894 Oct 31
|
||||
#STDOFF -4:16:48.25
|
||||
-4:16:48 - CMT 1920 May
|
||||
-4:00 - -04 1930 Dec
|
||||
-4:00 Arg -04/-03 1969 Oct 5
|
||||
-3:00 Arg -03/-02 1990
|
||||
-3:00 1:00 -02 1990 Mar 14
|
||||
-4:00 - -04 1990 Oct 15
|
||||
-4:00 1:00 -03 1991 Mar 1
|
||||
-4:00 - -04 1991 Jun 1
|
||||
-3:00 - -03 1999 Oct 3
|
||||
-4:00 1:00 -03 2000 Mar 3
|
||||
-3:00 - -03 2004 May 31
|
||||
-4:00 - -04 2004 Jul 25
|
||||
-3:00 Arg -03/-02 2008 Jan 21
|
||||
-4:00 SanLuis -04/-03 2009 Oct 11
|
||||
-3:00 - -03
|
||||
-4:00 - %z 1930 Dec
|
||||
-4:00 Arg %z 1969 Oct 5
|
||||
-3:00 Arg %z 1990
|
||||
-3:00 1:00 %z 1990 Mar 14
|
||||
-4:00 - %z 1990 Oct 15
|
||||
-4:00 1:00 %z 1991 Mar 1
|
||||
-4:00 - %z 1991 Jun 1
|
||||
-3:00 - %z 1999 Oct 3
|
||||
-4:00 1:00 %z 2000 Mar 3
|
||||
-3:00 - %z 2004 May 31
|
||||
-4:00 - %z 2004 Jul 25
|
||||
-3:00 Arg %z 2008 Jan 21
|
||||
-4:00 SanLuis %z 2009 Oct 11
|
||||
-3:00 - %z
|
||||
#
|
||||
# Santa Cruz (SC)
|
||||
Zone America/Argentina/Rio_Gallegos -4:36:52 - LMT 1894 Oct 31
|
||||
#STDOFF -4:16:48.25
|
||||
-4:16:48 - CMT 1920 May
|
||||
-4:00 - -04 1930 Dec
|
||||
-4:00 Arg -04/-03 1969 Oct 5
|
||||
-3:00 Arg -03/-02 1999 Oct 3
|
||||
-4:00 Arg -04/-03 2000 Mar 3
|
||||
-3:00 - -03 2004 Jun 1
|
||||
-4:00 - -04 2004 Jun 20
|
||||
-3:00 Arg -03/-02 2008 Oct 18
|
||||
-3:00 - -03
|
||||
-4:00 - %z 1930 Dec
|
||||
-4:00 Arg %z 1969 Oct 5
|
||||
-3:00 Arg %z 1999 Oct 3
|
||||
-4:00 Arg %z 2000 Mar 3
|
||||
-3:00 - %z 2004 Jun 1
|
||||
-4:00 - %z 2004 Jun 20
|
||||
-3:00 Arg %z 2008 Oct 18
|
||||
-3:00 - %z
|
||||
#
|
||||
# Tierra del Fuego, Antártida e Islas del Atlántico Sur (TF)
|
||||
Zone America/Argentina/Ushuaia -4:33:12 - LMT 1894 Oct 31
|
||||
#STDOFF -4:16:48.25
|
||||
-4:16:48 - CMT 1920 May
|
||||
-4:00 - -04 1930 Dec
|
||||
-4:00 Arg -04/-03 1969 Oct 5
|
||||
-3:00 Arg -03/-02 1999 Oct 3
|
||||
-4:00 Arg -04/-03 2000 Mar 3
|
||||
-3:00 - -03 2004 May 30
|
||||
-4:00 - -04 2004 Jun 20
|
||||
-3:00 Arg -03/-02 2008 Oct 18
|
||||
-3:00 - -03
|
||||
-4:00 - %z 1930 Dec
|
||||
-4:00 Arg %z 1969 Oct 5
|
||||
-3:00 Arg %z 1999 Oct 3
|
||||
-4:00 Arg %z 2000 Mar 3
|
||||
-3:00 - %z 2004 May 30
|
||||
-4:00 - %z 2004 Jun 20
|
||||
-3:00 Arg %z 2008 Oct 18
|
||||
-3:00 - %z
|
||||
|
||||
# Bolivia
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/La_Paz -4:32:36 - LMT 1890
|
||||
-4:32:36 - CMT 1931 Oct 15 # Calamarca MT
|
||||
-4:32:36 1:00 BST 1932 Mar 21 # Bolivia ST
|
||||
-4:00 - -04
|
||||
-4:00 - %z
|
||||
|
||||
# Brazil
|
||||
|
||||
@@ -961,12 +961,12 @@ Rule Brazil 2018 only - Nov Sun>=1 0:00 1:00 -
|
||||
#
|
||||
# Fernando de Noronha (administratively part of PE)
|
||||
Zone America/Noronha -2:09:40 - LMT 1914
|
||||
-2:00 Brazil -02/-01 1990 Sep 17
|
||||
-2:00 - -02 1999 Sep 30
|
||||
-2:00 Brazil -02/-01 2000 Oct 15
|
||||
-2:00 - -02 2001 Sep 13
|
||||
-2:00 Brazil -02/-01 2002 Oct 1
|
||||
-2:00 - -02
|
||||
-2:00 Brazil %z 1990 Sep 17
|
||||
-2:00 - %z 1999 Sep 30
|
||||
-2:00 Brazil %z 2000 Oct 15
|
||||
-2:00 - %z 2001 Sep 13
|
||||
-2:00 Brazil %z 2002 Oct 1
|
||||
-2:00 - %z
|
||||
# Other Atlantic islands have no permanent settlement.
|
||||
# These include Trindade and Martim Vaz (administratively part of ES),
|
||||
# Rocas Atoll (RN), and the St Peter and St Paul Archipelago (PE).
|
||||
@@ -979,119 +979,119 @@ Zone America/Noronha -2:09:40 - LMT 1914
|
||||
# In the north a very small part from the river Javary (now Jari I guess,
|
||||
# the border with Amapá) to the Amazon, then to the Xingu.
|
||||
Zone America/Belem -3:13:56 - LMT 1914
|
||||
-3:00 Brazil -03/-02 1988 Sep 12
|
||||
-3:00 - -03
|
||||
-3:00 Brazil %z 1988 Sep 12
|
||||
-3:00 - %z
|
||||
#
|
||||
# west Pará (PA)
|
||||
# West Pará includes Altamira, Óbidos, Prainha, Oriximiná, and Santarém.
|
||||
Zone America/Santarem -3:38:48 - LMT 1914
|
||||
-4:00 Brazil -04/-03 1988 Sep 12
|
||||
-4:00 - -04 2008 Jun 24 0:00
|
||||
-3:00 - -03
|
||||
-4:00 Brazil %z 1988 Sep 12
|
||||
-4:00 - %z 2008 Jun 24 0:00
|
||||
-3:00 - %z
|
||||
#
|
||||
# Maranhão (MA), Piauí (PI), Ceará (CE), Rio Grande do Norte (RN),
|
||||
# Paraíba (PB)
|
||||
Zone America/Fortaleza -2:34:00 - LMT 1914
|
||||
-3:00 Brazil -03/-02 1990 Sep 17
|
||||
-3:00 - -03 1999 Sep 30
|
||||
-3:00 Brazil -03/-02 2000 Oct 22
|
||||
-3:00 - -03 2001 Sep 13
|
||||
-3:00 Brazil -03/-02 2002 Oct 1
|
||||
-3:00 - -03
|
||||
-3:00 Brazil %z 1990 Sep 17
|
||||
-3:00 - %z 1999 Sep 30
|
||||
-3:00 Brazil %z 2000 Oct 22
|
||||
-3:00 - %z 2001 Sep 13
|
||||
-3:00 Brazil %z 2002 Oct 1
|
||||
-3:00 - %z
|
||||
#
|
||||
# Pernambuco (PE) (except Atlantic islands)
|
||||
Zone America/Recife -2:19:36 - LMT 1914
|
||||
-3:00 Brazil -03/-02 1990 Sep 17
|
||||
-3:00 - -03 1999 Sep 30
|
||||
-3:00 Brazil -03/-02 2000 Oct 15
|
||||
-3:00 - -03 2001 Sep 13
|
||||
-3:00 Brazil -03/-02 2002 Oct 1
|
||||
-3:00 - -03
|
||||
-3:00 Brazil %z 1990 Sep 17
|
||||
-3:00 - %z 1999 Sep 30
|
||||
-3:00 Brazil %z 2000 Oct 15
|
||||
-3:00 - %z 2001 Sep 13
|
||||
-3:00 Brazil %z 2002 Oct 1
|
||||
-3:00 - %z
|
||||
#
|
||||
# Tocantins (TO)
|
||||
Zone America/Araguaina -3:12:48 - LMT 1914
|
||||
-3:00 Brazil -03/-02 1990 Sep 17
|
||||
-3:00 - -03 1995 Sep 14
|
||||
-3:00 Brazil -03/-02 2003 Sep 24
|
||||
-3:00 - -03 2012 Oct 21
|
||||
-3:00 Brazil -03/-02 2013 Sep
|
||||
-3:00 - -03
|
||||
-3:00 Brazil %z 1990 Sep 17
|
||||
-3:00 - %z 1995 Sep 14
|
||||
-3:00 Brazil %z 2003 Sep 24
|
||||
-3:00 - %z 2012 Oct 21
|
||||
-3:00 Brazil %z 2013 Sep
|
||||
-3:00 - %z
|
||||
#
|
||||
# Alagoas (AL), Sergipe (SE)
|
||||
Zone America/Maceio -2:22:52 - LMT 1914
|
||||
-3:00 Brazil -03/-02 1990 Sep 17
|
||||
-3:00 - -03 1995 Oct 13
|
||||
-3:00 Brazil -03/-02 1996 Sep 4
|
||||
-3:00 - -03 1999 Sep 30
|
||||
-3:00 Brazil -03/-02 2000 Oct 22
|
||||
-3:00 - -03 2001 Sep 13
|
||||
-3:00 Brazil -03/-02 2002 Oct 1
|
||||
-3:00 - -03
|
||||
-3:00 Brazil %z 1990 Sep 17
|
||||
-3:00 - %z 1995 Oct 13
|
||||
-3:00 Brazil %z 1996 Sep 4
|
||||
-3:00 - %z 1999 Sep 30
|
||||
-3:00 Brazil %z 2000 Oct 22
|
||||
-3:00 - %z 2001 Sep 13
|
||||
-3:00 Brazil %z 2002 Oct 1
|
||||
-3:00 - %z
|
||||
#
|
||||
# Bahia (BA)
|
||||
# There are too many Salvadors elsewhere, so use America/Bahia instead
|
||||
# of America/Salvador.
|
||||
Zone America/Bahia -2:34:04 - LMT 1914
|
||||
-3:00 Brazil -03/-02 2003 Sep 24
|
||||
-3:00 - -03 2011 Oct 16
|
||||
-3:00 Brazil -03/-02 2012 Oct 21
|
||||
-3:00 - -03
|
||||
-3:00 Brazil %z 2003 Sep 24
|
||||
-3:00 - %z 2011 Oct 16
|
||||
-3:00 Brazil %z 2012 Oct 21
|
||||
-3:00 - %z
|
||||
#
|
||||
# Goiás (GO), Distrito Federal (DF), Minas Gerais (MG),
|
||||
# Espírito Santo (ES), Rio de Janeiro (RJ), São Paulo (SP), Paraná (PR),
|
||||
# Santa Catarina (SC), Rio Grande do Sul (RS)
|
||||
Zone America/Sao_Paulo -3:06:28 - LMT 1914
|
||||
-3:00 Brazil -03/-02 1963 Oct 23 0:00
|
||||
-3:00 1:00 -02 1964
|
||||
-3:00 Brazil -03/-02
|
||||
-3:00 Brazil %z 1963 Oct 23 0:00
|
||||
-3:00 1:00 %z 1964
|
||||
-3:00 Brazil %z
|
||||
#
|
||||
# Mato Grosso do Sul (MS)
|
||||
Zone America/Campo_Grande -3:38:28 - LMT 1914
|
||||
-4:00 Brazil -04/-03
|
||||
-4:00 Brazil %z
|
||||
#
|
||||
# Mato Grosso (MT)
|
||||
Zone America/Cuiaba -3:44:20 - LMT 1914
|
||||
-4:00 Brazil -04/-03 2003 Sep 24
|
||||
-4:00 - -04 2004 Oct 1
|
||||
-4:00 Brazil -04/-03
|
||||
-4:00 Brazil %z 2003 Sep 24
|
||||
-4:00 - %z 2004 Oct 1
|
||||
-4:00 Brazil %z
|
||||
#
|
||||
# Rondônia (RO)
|
||||
Zone America/Porto_Velho -4:15:36 - LMT 1914
|
||||
-4:00 Brazil -04/-03 1988 Sep 12
|
||||
-4:00 - -04
|
||||
-4:00 Brazil %z 1988 Sep 12
|
||||
-4:00 - %z
|
||||
#
|
||||
# Roraima (RR)
|
||||
Zone America/Boa_Vista -4:02:40 - LMT 1914
|
||||
-4:00 Brazil -04/-03 1988 Sep 12
|
||||
-4:00 - -04 1999 Sep 30
|
||||
-4:00 Brazil -04/-03 2000 Oct 15
|
||||
-4:00 - -04
|
||||
-4:00 Brazil %z 1988 Sep 12
|
||||
-4:00 - %z 1999 Sep 30
|
||||
-4:00 Brazil %z 2000 Oct 15
|
||||
-4:00 - %z
|
||||
#
|
||||
# east Amazonas (AM): Boca do Acre, Jutaí, Manaus, Floriano Peixoto
|
||||
# The great circle line from Tabatinga to Porto Acre divides
|
||||
# east from west Amazonas.
|
||||
Zone America/Manaus -4:00:04 - LMT 1914
|
||||
-4:00 Brazil -04/-03 1988 Sep 12
|
||||
-4:00 - -04 1993 Sep 28
|
||||
-4:00 Brazil -04/-03 1994 Sep 22
|
||||
-4:00 - -04
|
||||
-4:00 Brazil %z 1988 Sep 12
|
||||
-4:00 - %z 1993 Sep 28
|
||||
-4:00 Brazil %z 1994 Sep 22
|
||||
-4:00 - %z
|
||||
#
|
||||
# west Amazonas (AM): Atalaia do Norte, Boca do Maoco, Benjamin Constant,
|
||||
# Eirunepé, Envira, Ipixuna
|
||||
Zone America/Eirunepe -4:39:28 - LMT 1914
|
||||
-5:00 Brazil -05/-04 1988 Sep 12
|
||||
-5:00 - -05 1993 Sep 28
|
||||
-5:00 Brazil -05/-04 1994 Sep 22
|
||||
-5:00 - -05 2008 Jun 24 0:00
|
||||
-4:00 - -04 2013 Nov 10
|
||||
-5:00 - -05
|
||||
-5:00 Brazil %z 1988 Sep 12
|
||||
-5:00 - %z 1993 Sep 28
|
||||
-5:00 Brazil %z 1994 Sep 22
|
||||
-5:00 - %z 2008 Jun 24 0:00
|
||||
-4:00 - %z 2013 Nov 10
|
||||
-5:00 - %z
|
||||
#
|
||||
# Acre (AC)
|
||||
Zone America/Rio_Branco -4:31:12 - LMT 1914
|
||||
-5:00 Brazil -05/-04 1988 Sep 12
|
||||
-5:00 - -05 2008 Jun 24 0:00
|
||||
-4:00 - -04 2013 Nov 10
|
||||
-5:00 - -05
|
||||
-5:00 Brazil %z 1988 Sep 12
|
||||
-5:00 - %z 2008 Jun 24 0:00
|
||||
-4:00 - %z 2013 Nov 10
|
||||
-5:00 - %z
|
||||
|
||||
# Chile
|
||||
|
||||
@@ -1246,35 +1246,45 @@ Zone America/Rio_Branco -4:31:12 - LMT 1914
|
||||
# dates to 2014.
|
||||
# DST End: last Saturday of April 2014 (Sun 27 Apr 2014 03:00 UTC)
|
||||
# DST Start: first Saturday of September 2014 (Sun 07 Sep 2014 04:00 UTC)
|
||||
# http://www.diariooficial.interior.gob.cl//media/2014/02/19/do-20140219.pdf
|
||||
# From Tim Parenti (2025-03-22):
|
||||
# Decreto 307 of 2014 of the Ministry of the Interior and Public Security,
|
||||
# promulgated 2014-01-30 and published 2014-02-19:
|
||||
# https://www.diariooficial.interior.gob.cl/media/2014/02/19/do-20140219.pdf#page=1
|
||||
# https://www.bcn.cl/leychile/navegar?idNorma=1059557
|
||||
|
||||
# From Eduardo Romero Urra (2015-03-03):
|
||||
# Today has been published officially that Chile will use the DST time
|
||||
# permanently until March 25 of 2017
|
||||
# http://www.diariooficial.interior.gob.cl/media/2015/03/03/1-large.jpg
|
||||
#
|
||||
# From Paul Eggert (2015-03-03):
|
||||
# For now, assume that the extension will persist indefinitely.
|
||||
# From Tim Parenti (2025-03-22):
|
||||
# Decreto 106 of 2015 of the Ministry of the Interior and Public Security,
|
||||
# promulgated 2015-01-27 and published 2015-03-03:
|
||||
# https://www.diariooficial.interior.gob.cl/media/2015/03/03/do-20150303.pdf#page=1
|
||||
# https://www.bcn.cl/leychile/navegar?idNorma=1075157
|
||||
|
||||
# From Juan Correa (2016-03-18):
|
||||
# The decree regarding DST has been published in today's Official Gazette:
|
||||
# http://www.diariooficial.interior.gob.cl/versiones-anteriores/do/20160318/
|
||||
# http://www.leychile.cl/Navegar?idNorma=1088502
|
||||
# The decree regarding DST has been published in today's Official Gazette...
|
||||
# It does consider the second Saturday of May and August as the dates
|
||||
# for the transition; and it lists DST dates until 2019, but I think
|
||||
# this scheme will stick.
|
||||
#
|
||||
# From Paul Eggert (2016-03-18):
|
||||
# For now, assume the pattern holds for the indefinite future.
|
||||
# The decree says transitions occur at 24:00; in practice this appears
|
||||
# to mean 24:00 mainland time, not 24:00 local time, so that Easter
|
||||
# Island is always two hours behind the mainland.
|
||||
# From Tim Parenti (2025-03-22):
|
||||
# Decreto 253 of 2016 of the Ministry of the Interior and Public Security,
|
||||
# promulgated 2016-03-16 and published 2016-03-18.
|
||||
# https://www.diariooficial.interior.gob.cl/media/2016/03/18/do-20160318.pdf#page=1
|
||||
# https://www.bcn.cl/leychile/navegar?idNorma=1088502
|
||||
|
||||
# From Juan Correa (2016-12-04):
|
||||
# Magallanes region ... will keep DST (UTC -3) all year round....
|
||||
# http://www.soychile.cl/Santiago/Sociedad/2016/12/04/433428/Bachelet-firmo-el-decreto-para-establecer-un-horario-unico-para-la-Region-de-Magallanes.aspx
|
||||
# From Deborah Goldsmith (2017-01-19):
|
||||
# http://www.diariooficial.interior.gob.cl/publicaciones/2017/01/17/41660/01/1169626.pdf
|
||||
# From Tim Parenti (2025-03-22), via Deborah Goldsmith (2017-01-19):
|
||||
# Decreto 1820 of 2016 of the Ministry of the Interior and Public Security,
|
||||
# promulgated 2016-12-02 and published 2017-01-17:
|
||||
# https://www.diariooficial.interior.gob.cl/publicaciones/2017/01/17/41660/01/1169626.pdf
|
||||
# https://www.bcn.cl/leychile/Navegar?idNorma=1099217
|
||||
# Model this as a change to standard offset effective 2016-12-04.
|
||||
|
||||
# From Juan Correa (2018-08-13):
|
||||
# As of moments ago, the Ministry of Energy in Chile has announced the new
|
||||
@@ -1293,13 +1303,20 @@ Zone America/Rio_Branco -4:31:12 - LMT 1914
|
||||
# https://twitter.com/MinEnergia/status/1029009354001973248
|
||||
# "We will keep the new time policy unchanged for at least the next 4 years."
|
||||
# So we extend the new rules on Saturdays at 24:00 mainland time indefinitely.
|
||||
# From Juan Correa (2019-02-04):
|
||||
# http://www.diariooficial.interior.gob.cl/publicaciones/2018/11/23/42212/01/1498738.pdf
|
||||
# From Tim Parenti (2025-03-22), via Juan Correa (2019-02-04):
|
||||
# Decreto 1286 of 2018 of the Ministry of the Interior and Public Security,
|
||||
# promulgated 2018-09-21 and published 2018-11-23:
|
||||
# https://www.diariooficial.interior.gob.cl/publicaciones/2018/11/23/42212/01/1498738.pdf
|
||||
# https://www.bcn.cl/leychile/Navegar?idNorma=1125760
|
||||
|
||||
# From Juan Correa (2022-04-02):
|
||||
# I found there was a decree published last Thursday that will keep
|
||||
# Magallanes region to UTC -3 "indefinitely". The decree is available at
|
||||
# Magallanes region to UTC -3 "indefinitely".
|
||||
# From Tim Parenti (2025-03-22):
|
||||
# Decreto 143 of 2022 of the Ministry of the Interior and Public Security,
|
||||
# promulgated 2022-03-29 and published 2022-03-31:
|
||||
# https://www.diariooficial.interior.gob.cl/publicaciones/2022/03/31/43217-B/01/2108910.pdf
|
||||
# https://www.bcn.cl/leychile/Navegar?idNorma=1174342
|
||||
|
||||
# From Juan Correa (2022-08-09):
|
||||
# the Internal Affairs Ministry (Ministerio del Interior) informed DST
|
||||
@@ -1308,13 +1325,36 @@ Zone America/Rio_Branco -4:31:12 - LMT 1914
|
||||
# will keep UTC -3 "indefinitely"... This is because on September 4th
|
||||
# we will have a voting whether to approve a new Constitution.
|
||||
#
|
||||
# From Eduardo Romero Urra (2022-08-17):
|
||||
# From Tim Parenti (2025-03-22), via Eduardo Romero Urra (2022-08-17):
|
||||
# Decreto 224 of 2022 of the Ministry of the Interior and Public Security,
|
||||
# promulgated 2022-07-14 and published 2022-08-13:
|
||||
# https://www.diariooficial.interior.gob.cl/publicaciones/2022/08/13/43327/01/2172567.pdf
|
||||
# https://www.bcn.cl/leychile/navegar?idNorma=1179983
|
||||
#
|
||||
# From Paul Eggert (2022-08-17):
|
||||
# Although the presidential decree stops at fall 2026, assume that
|
||||
# similar DST rules will continue thereafter.
|
||||
|
||||
# From Paul Eggert (2025-01-15):
|
||||
# Diario Regional Aysén's Sebastián Martel reports that 94% of Aysén
|
||||
# citizens polled in November favored changing the rules from
|
||||
# -04/-03-with-DST to -03 all year...
|
||||
# https://www.diarioregionalaysen.cl/noticia/actualidad/2024/12/presentan-decision-que-gano-la-votacion-sobre-el-cambio-del-huso-horario-en-aysen
|
||||
#
|
||||
# From Yonathan Dossow (2025-03-20):
|
||||
# [T]oday we have more confirmation of the change. [Aysén] region will keep
|
||||
# UTC-3 all year...
|
||||
# https://www.cnnchile.com/pais/region-de-aysen-mantendra-horario-de-verano-todo-el-ano_20250320/
|
||||
# https://www.latercera.com/nacional/noticia/tras-consulta-ciudadana-region-de-aysen-mantendra-el-horario-de-verano-durante-todo-el-ano/
|
||||
# https://x.com/min_interior/status/1902692504270672098
|
||||
#
|
||||
# From Tim Parenti (2025-03-22), via Eduardo Romero Urra (2025-03-20):
|
||||
# Decreto 93 of 2025 of the Ministry of the Interior and Public Security,
|
||||
# promulgated 2025-03-11 and published 2025-03-20:
|
||||
# https://www.diariooficial.interior.gob.cl/publicaciones/2025/03/20/44104/01/2624263.pdf
|
||||
# https://www.bcn.cl/leychile/Navegar?idNorma=1211955
|
||||
# Model this as a change to standard offset effective 2025-03-20.
|
||||
|
||||
# Rule NAME FROM TO - IN ON AT SAVE LETTER/S
|
||||
Rule Chile 1927 1931 - Sep 1 0:00 1:00 -
|
||||
Rule Chile 1928 1932 - Apr 1 0:00 0 -
|
||||
@@ -1359,36 +1399,50 @@ Rule Chile 2023 max - Sep Sun>=2 4:00u 1:00 -
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Santiago -4:42:45 - LMT 1890
|
||||
-4:42:45 - SMT 1910 Jan 10 # Santiago Mean Time
|
||||
-5:00 - -05 1916 Jul 1
|
||||
-5:00 - %z 1916 Jul 1
|
||||
-4:42:45 - SMT 1918 Sep 10
|
||||
-4:00 - -04 1919 Jul 1
|
||||
-4:00 - %z 1919 Jul 1
|
||||
-4:42:45 - SMT 1927 Sep 1
|
||||
-5:00 Chile -05/-04 1932 Sep 1
|
||||
-4:00 - -04 1942 Jun 1
|
||||
-5:00 - -05 1942 Aug 1
|
||||
-4:00 - -04 1946 Jul 14 24:00
|
||||
-4:00 1:00 -03 1946 Aug 28 24:00 # central CL
|
||||
-5:00 1:00 -04 1947 Mar 31 24:00
|
||||
-5:00 - -05 1947 May 21 23:00
|
||||
-4:00 Chile -04/-03
|
||||
-5:00 Chile %z 1932 Sep 1
|
||||
-4:00 - %z 1942 Jun 1
|
||||
-5:00 - %z 1942 Aug 1
|
||||
-4:00 - %z 1946 Jul 14 24:00
|
||||
-4:00 1:00 %z 1946 Aug 28 24:00 # central CL
|
||||
-5:00 1:00 %z 1947 Mar 31 24:00
|
||||
-5:00 - %z 1947 May 21 23:00
|
||||
-4:00 Chile %z
|
||||
Zone America/Coyhaique -4:48:16 - LMT 1890
|
||||
-4:42:45 - SMT 1910 Jan 10
|
||||
-5:00 - %z 1916 Jul 1
|
||||
-4:42:45 - SMT 1918 Sep 10
|
||||
-4:00 - %z 1919 Jul 1
|
||||
-4:42:45 - SMT 1927 Sep 1
|
||||
-5:00 Chile %z 1932 Sep 1
|
||||
-4:00 - %z 1942 Jun 1
|
||||
-5:00 - %z 1942 Aug 1
|
||||
-4:00 - %z 1946 Aug 28 24:00
|
||||
-5:00 1:00 %z 1947 Mar 31 24:00
|
||||
-5:00 - %z 1947 May 21 23:00
|
||||
-4:00 Chile %z 2025 Mar 20
|
||||
-3:00 - %z
|
||||
Zone America/Punta_Arenas -4:43:40 - LMT 1890
|
||||
-4:42:45 - SMT 1910 Jan 10
|
||||
-5:00 - -05 1916 Jul 1
|
||||
-5:00 - %z 1916 Jul 1
|
||||
-4:42:45 - SMT 1918 Sep 10
|
||||
-4:00 - -04 1919 Jul 1
|
||||
-4:00 - %z 1919 Jul 1
|
||||
-4:42:45 - SMT 1927 Sep 1
|
||||
-5:00 Chile -05/-04 1932 Sep 1
|
||||
-4:00 - -04 1942 Jun 1
|
||||
-5:00 - -05 1942 Aug 1
|
||||
-4:00 - -04 1946 Aug 28 24:00
|
||||
-5:00 1:00 -04 1947 Mar 31 24:00
|
||||
-5:00 - -05 1947 May 21 23:00
|
||||
-4:00 Chile -04/-03 2016 Dec 4
|
||||
-3:00 - -03
|
||||
-5:00 Chile %z 1932 Sep 1
|
||||
-4:00 - %z 1942 Jun 1
|
||||
-5:00 - %z 1942 Aug 1
|
||||
-4:00 - %z 1946 Aug 28 24:00
|
||||
-5:00 1:00 %z 1947 Mar 31 24:00
|
||||
-5:00 - %z 1947 May 21 23:00
|
||||
-4:00 Chile %z 2016 Dec 4
|
||||
-3:00 - %z
|
||||
Zone Pacific/Easter -7:17:28 - LMT 1890
|
||||
-7:17:28 - EMT 1932 Sep # Easter Mean Time
|
||||
-7:00 Chile -07/-06 1982 Mar 14 3:00u # Easter Time
|
||||
-6:00 Chile -06/-05
|
||||
-7:00 Chile %z 1982 Mar 14 3:00u # Easter Time
|
||||
-6:00 Chile %z
|
||||
#
|
||||
# Salas y Gómez Island is uninhabited.
|
||||
# Other Chilean locations, including Juan Fernández Is, Desventuradas Is,
|
||||
@@ -1408,10 +1462,10 @@ Zone Pacific/Easter -7:17:28 - LMT 1890
|
||||
#
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Antarctica/Palmer 0 - -00 1965
|
||||
-4:00 Arg -04/-03 1969 Oct 5
|
||||
-3:00 Arg -03/-02 1982 May
|
||||
-4:00 Chile -04/-03 2016 Dec 4
|
||||
-3:00 - -03
|
||||
-4:00 Arg %z 1969 Oct 5
|
||||
-3:00 Arg %z 1982 May
|
||||
-4:00 Chile %z 2016 Dec 4
|
||||
-3:00 - %z
|
||||
|
||||
# Colombia
|
||||
|
||||
@@ -1430,7 +1484,7 @@ Rule CO 1993 only - Feb 6 24:00 0 -
|
||||
#STDOFF -4:56:16.4
|
||||
Zone America/Bogota -4:56:16 - LMT 1884 Mar 13
|
||||
-4:56:16 - BMT 1914 Nov 23 # Bogotá Mean Time
|
||||
-5:00 CO -05/-04
|
||||
-5:00 CO %z
|
||||
# Malpelo, Providencia, San Andres
|
||||
# no information; probably like America/Bogota
|
||||
|
||||
@@ -1461,10 +1515,10 @@ Rule Ecuador 1993 only - Feb 5 0:00 0 -
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Guayaquil -5:19:20 - LMT 1890
|
||||
-5:14:00 - QMT 1931 # Quito Mean Time
|
||||
-5:00 Ecuador -05/-04
|
||||
-5:00 Ecuador %z
|
||||
Zone Pacific/Galapagos -5:58:24 - LMT 1931 # Puerto Baquerizo Moreno
|
||||
-5:00 - -05 1986
|
||||
-6:00 Ecuador -06/-05
|
||||
-5:00 - %z 1986
|
||||
-6:00 Ecuador %z
|
||||
|
||||
# Falklands
|
||||
|
||||
@@ -1564,10 +1618,10 @@ Rule Falk 2001 2010 - Sep Sun>=1 2:00 1:00 -
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Atlantic/Stanley -3:51:24 - LMT 1890
|
||||
-3:51:24 - SMT 1912 Mar 12 # Stanley Mean Time
|
||||
-4:00 Falk -04/-03 1983 May
|
||||
-3:00 Falk -03/-02 1985 Sep 15
|
||||
-4:00 Falk -04/-03 2010 Sep 5 2:00
|
||||
-3:00 - -03
|
||||
-4:00 Falk %z 1983 May
|
||||
-3:00 Falk %z 1985 Sep 15
|
||||
-4:00 Falk %z 2010 Sep 5 2:00
|
||||
-3:00 - %z
|
||||
|
||||
# French Guiana
|
||||
# For the 1911/1912 establishment of standard time in French possessions, see:
|
||||
@@ -1575,8 +1629,8 @@ Zone Atlantic/Stanley -3:51:24 - LMT 1890
|
||||
# page 752, 18b.
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Cayenne -3:29:20 - LMT 1911 Jul 1
|
||||
-4:00 - -04 1967 Oct
|
||||
-3:00 - -03
|
||||
-4:00 - %z 1967 Oct
|
||||
-3:00 - %z
|
||||
|
||||
# Guyana
|
||||
|
||||
@@ -1610,10 +1664,10 @@ Zone America/Cayenne -3:29:20 - LMT 1911 Jul 1
|
||||
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Guyana -3:52:39 - LMT 1911 Aug 1 # Georgetown
|
||||
-4:00 - -04 1915 Mar 1
|
||||
-3:45 - -0345 1975 Aug 1
|
||||
-3:00 - -03 1992 Mar 29 1:00
|
||||
-4:00 - -04
|
||||
-4:00 - %z 1915 Mar 1
|
||||
-3:45 - %z 1975 Aug 1
|
||||
-3:00 - %z 1992 Mar 29 1:00
|
||||
-4:00 - %z
|
||||
|
||||
# Paraguay
|
||||
#
|
||||
@@ -1687,7 +1741,7 @@ Rule Para 2005 2009 - Mar Sun>=8 0:00 0 -
|
||||
# and that on the first Sunday of the month of October, it is to be set
|
||||
# forward 60 minutes, in all the territory of the Paraguayan Republic.
|
||||
# ...
|
||||
Rule Para 2010 max - Oct Sun>=1 0:00 1:00 -
|
||||
Rule Para 2010 2024 - Oct Sun>=1 0:00 1:00 -
|
||||
Rule Para 2010 2012 - Apr Sun>=8 0:00 0 -
|
||||
#
|
||||
# From Steffen Thorsen (2013-03-07):
|
||||
@@ -1706,14 +1760,35 @@ Rule Para 2010 2012 - Apr Sun>=8 0:00 0 -
|
||||
# https://www.abc.com.py/politica/2023/07/12/promulgacion-el-cambio-de-hora-sera-por-ley/
|
||||
# From Carlos Raúl Perasso (2023-07-27):
|
||||
# http://silpy.congreso.gov.py/descarga/ley-144138
|
||||
Rule Para 2013 max - Mar Sun>=22 0:00 0 -
|
||||
Rule Para 2013 2024 - Mar Sun>=22 0:00 0 -
|
||||
#
|
||||
# From Heitor David Pinto (2024-09-24):
|
||||
# Today the Congress of Paraguay passed a bill to observe UTC-3 permanently....
|
||||
# The text of the bill says that it would enter into force on the first
|
||||
# Sunday in October 2024, the same date currently scheduled to start DST....
|
||||
# https://silpy.congreso.gov.py/web/expediente/132531
|
||||
# (2024-10-14):
|
||||
# The president approved the law on 11 October 2024,
|
||||
# and it was officially published on 14 October 2024.
|
||||
# https://www.gacetaoficial.gov.py/index/detalle_publicacion/89723
|
||||
# The text of the law says that it enters into force on the first
|
||||
# Sunday in October 2024 (6 October 2024). But the constitution
|
||||
# prohibits retroactive effect, and the civil code says that laws
|
||||
# enter into force on the day after their publication or on the day
|
||||
# that they specify, and it also says that they don't have retroactive
|
||||
# effect. So I think that the time change on 6 October 2024 should
|
||||
# still be considered as DST according to the previous law, and
|
||||
# permanently UTC-3 from 15 October 2024 according to the new law....
|
||||
# https://www.constituteproject.org/constitution/Paraguay_2011
|
||||
# https://www.oas.org/dil/esp/codigo_civil_paraguay.pdf
|
||||
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Asuncion -3:50:40 - LMT 1890
|
||||
-3:50:40 - AMT 1931 Oct 10 # Asunción Mean Time
|
||||
-4:00 - -04 1972 Oct
|
||||
-3:00 - -03 1974 Apr
|
||||
-4:00 Para -04/-03
|
||||
-4:00 - %z 1972 Oct
|
||||
-3:00 - %z 1974 Apr
|
||||
-4:00 Para %z 2024 Oct 15
|
||||
-3:00 - %z
|
||||
|
||||
# Peru
|
||||
#
|
||||
@@ -1740,12 +1815,12 @@ Rule Peru 1994 only - Apr 1 0:00 0 -
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Lima -5:08:12 - LMT 1890
|
||||
-5:08:36 - LMT 1908 Jul 28 # Lima Mean Time?
|
||||
-5:00 Peru -05/-04
|
||||
-5:00 Peru %z
|
||||
|
||||
# South Georgia
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Atlantic/South_Georgia -2:26:08 - LMT 1890 # Grytviken
|
||||
-2:00 - -02
|
||||
-2:00 - %z
|
||||
|
||||
# South Sandwich Is
|
||||
# uninhabited; scientific personnel have wintered
|
||||
@@ -1755,8 +1830,8 @@ Zone Atlantic/South_Georgia -2:26:08 - LMT 1890 # Grytviken
|
||||
Zone America/Paramaribo -3:40:40 - LMT 1911
|
||||
-3:40:52 - PMT 1935 # Paramaribo Mean Time
|
||||
-3:40:36 - PMT 1945 Oct # The capital moved?
|
||||
-3:30 - -0330 1984 Oct
|
||||
-3:00 - -03
|
||||
-3:30 - %z 1984 Oct
|
||||
-3:00 - %z
|
||||
|
||||
# Uruguay
|
||||
# From Paul Eggert (1993-11-18):
|
||||
@@ -1971,15 +2046,15 @@ Rule Uruguay 2006 2014 - Oct Sun>=1 2:00 1:00 -
|
||||
# This Zone can be simplified once we assume zic %z.
|
||||
Zone America/Montevideo -3:44:51 - LMT 1908 Jun 10
|
||||
-3:44:51 - MMT 1920 May 1 # Montevideo MT
|
||||
-4:00 - -04 1923 Oct 1
|
||||
-3:30 Uruguay -0330/-03 1942 Dec 14
|
||||
-3:00 Uruguay -03/-0230 1960
|
||||
-3:00 Uruguay -03/-02 1968
|
||||
-3:00 Uruguay -03/-0230 1970
|
||||
-3:00 Uruguay -03/-02 1974
|
||||
-3:00 Uruguay -03/-0130 1974 Mar 10
|
||||
-3:00 Uruguay -03/-0230 1974 Dec 22
|
||||
-3:00 Uruguay -03/-02
|
||||
-4:00 - %z 1923 Oct 1
|
||||
-3:30 Uruguay %z 1942 Dec 14
|
||||
-3:00 Uruguay %z 1960
|
||||
-3:00 Uruguay %z 1968
|
||||
-3:00 Uruguay %z 1970
|
||||
-3:00 Uruguay %z 1974
|
||||
-3:00 Uruguay %z 1974 Mar 10
|
||||
-3:00 Uruguay %z 1974 Dec 22
|
||||
-3:00 Uruguay %z
|
||||
|
||||
# Venezuela
|
||||
#
|
||||
@@ -2013,7 +2088,7 @@ Zone America/Montevideo -3:44:51 - LMT 1908 Jun 10
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Caracas -4:27:44 - LMT 1890
|
||||
-4:27:40 - CMT 1912 Feb 12 # Caracas Mean Time?
|
||||
-4:30 - -0430 1965 Jan 1 0:00
|
||||
-4:00 - -04 2007 Dec 9 3:00
|
||||
-4:30 - -0430 2016 May 1 2:30
|
||||
-4:00 - -04
|
||||
-4:30 - %z 1965 Jan 1 0:00
|
||||
-4:00 - %z 2007 Dec 9 3:00
|
||||
-4:30 - %z 2016 May 1 2:30
|
||||
-4:00 - %z
|
||||
+169
-83
@@ -89,13 +89,15 @@ The <code><abbr>tz</abbr></code> code is upwards compatible with <a
|
||||
href="https://en.wikipedia.org/wiki/POSIX">POSIX</a>, an international
|
||||
standard for <a
|
||||
href="https://en.wikipedia.org/wiki/Unix">UNIX</a>-like systems.
|
||||
As of this writing, the current edition of POSIX is: <a
|
||||
As of this writing, the current edition of POSIX is POSIX.1-2024,
|
||||
which has been published but not yet in HTML form.
|
||||
Unlike its predecessor POSIX.1-2017 (<a
|
||||
href="https://pubs.opengroup.org/onlinepubs/9699919799/"> The Open
|
||||
Group Base Specifications Issue 7</a>, IEEE Std 1003.1-2017, 2018
|
||||
Edition.
|
||||
Because the database's scope encompasses real-world changes to civil
|
||||
timekeeping, its model for describing time is more complex than the
|
||||
standard and daylight saving times supported by POSIX.1-2017.
|
||||
Edition), POSIX.1-2024 requires support for the
|
||||
<code><abbr>tz</abbr></code> database, which has a
|
||||
model for describing civil time that is more complex than the
|
||||
standard and daylight saving times required by POSIX.1-2017.
|
||||
A <code><abbr>tz</abbr></code> timezone corresponds to a ruleset that can
|
||||
have more than two changes per year, these changes need not merely
|
||||
flip back and forth between two alternatives, and the rules themselves
|
||||
@@ -121,8 +123,9 @@ If geolocation information is available, a selection interface can
|
||||
locate the user on a timezone map or prioritize names that are
|
||||
geographically close. For an example selection interface, see the
|
||||
<code>tzselect</code> program in the <code><abbr>tz</abbr></code> code.
|
||||
The <a href="https://cldr.unicode.org">Unicode Common Locale Data
|
||||
Repository</a> contains data that may be useful for other selection
|
||||
Unicode's <a href="https://cldr.unicode.org">Common Locale Data
|
||||
Repository (<abbr>CLDR</abbr>)</a>
|
||||
contains data that may be useful for other selection
|
||||
interfaces; it maps timezone names like <code>Europe/Prague</code> to
|
||||
locale-dependent strings like "Prague", "Praha", "Прага", and "布拉格".
|
||||
</p>
|
||||
@@ -159,7 +162,7 @@ among the following goals:
|
||||
</ul>
|
||||
|
||||
<p>
|
||||
Names normally have the form
|
||||
Names normally have the format
|
||||
<var>AREA</var><code>/</code><var>LOCATION</var>, where
|
||||
<var>AREA</var> is a continent or ocean, and
|
||||
<var>LOCATION</var> is a specific location within the area.
|
||||
@@ -187,7 +190,7 @@ in decreasing order of importance:
|
||||
href="https://en.wikipedia.org/wiki/ASCII">ASCII</a> letters,
|
||||
'<code>.</code>', '<code>-</code>' and '<code>_</code>'.
|
||||
Do not use digits, as that might create an ambiguity with <a
|
||||
href="https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html#tag_08_03">POSIX.1-2017
|
||||
href="https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html#tag_08_03">POSIX's proleptic
|
||||
<code>TZ</code> strings</a>.
|
||||
A file name component must not exceed 14 characters or start with
|
||||
'<code>-</code>'.
|
||||
@@ -198,6 +201,8 @@ in decreasing order of importance:
|
||||
<li>
|
||||
A name must not be empty, or contain '<code>//</code>', or
|
||||
start or end with '<code>/</code>'.
|
||||
Also, a name must not be '<code>Etc/Unknown</code>', as
|
||||
<abbr>CLDR</abbr> uses that string for an unknown or invalid timezone.
|
||||
</li>
|
||||
<li>
|
||||
Do not use names that differ only in case.
|
||||
@@ -218,10 +223,18 @@ in decreasing order of importance:
|
||||
do not need locations, since local time is not defined there.
|
||||
</li>
|
||||
<li>
|
||||
If all the clocks in a timezone have agreed since 1970,
|
||||
do not bother to include more than one timezone
|
||||
even if some of the clocks disagreed before 1970.
|
||||
If all clocks in a region have agreed since 1970,
|
||||
give them just one name even if some of the clocks disagreed before 1970,
|
||||
or reside in different countries or in notable or faraway locations.
|
||||
Otherwise these tables would become annoyingly large.
|
||||
For example, do not create a name <code>Indian/Crozet</code>
|
||||
as a near-duplicate or alias of <code>Asia/Dubai</code>
|
||||
merely because they are different countries or territories,
|
||||
or their clocks disagreed before 1970, or the
|
||||
<a href="https://en.wikipedia.org/wiki/Crozet_Islands">Crozet Islands</a>
|
||||
are notable in their own right,
|
||||
or the Crozet Islands are not adjacent to other locations
|
||||
that use <code>Asia/Dubai</code>.
|
||||
</li>
|
||||
<li>
|
||||
If boundaries between regions are fluid, such as during a war or
|
||||
@@ -378,7 +391,8 @@ nowadays distributions typically use it
|
||||
and no great weight should be attached to whether a link
|
||||
is defined in <code>backward</code> or in some other file.
|
||||
The source file <code>etcetera</code> defines names that may be useful
|
||||
on platforms that do not support POSIX.1-2017-style <code>TZ</code> strings;
|
||||
on platforms that do not support proleptic <code>TZ</code> strings
|
||||
like <code><+08>-8</code>;
|
||||
no other source file other than <code>backward</code>
|
||||
contains links to its zones.
|
||||
One of <code>etcetera</code>'s names is <code>Etc/UTC</code>,
|
||||
@@ -425,8 +439,8 @@ in decreasing order of importance:
|
||||
In other words, in the C locale the POSIX extended regular
|
||||
expression <code>[-+[:alnum:]]{3,6}</code> should match the
|
||||
abbreviation.
|
||||
This guarantees that all abbreviations could have been specified by a
|
||||
POSIX.1-2017 <code>TZ</code> string.
|
||||
This guarantees that all abbreviations could have been specified
|
||||
explicitly by a POSIX proleptic <code>TZ</code> string.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
@@ -576,8 +590,13 @@ in decreasing order of importance:
|
||||
locations while uninhabited.
|
||||
The leading '<code>-</code>' is a flag that the <abbr>UT</abbr> offset is in
|
||||
some sense undefined; this notation is derived
|
||||
from <a href="https://datatracker.ietf.org/doc/html/rfc3339">Internet
|
||||
from <a href="https://www.rfc-editor.org/rfc/rfc3339">Internet
|
||||
<abbr title="Request For Comments">RFC</abbr> 3339</a>.
|
||||
(The abbreviation 'Z' that
|
||||
<a href="https://www.rfc-editor.org/rfc/rfc9557">Internet
|
||||
<abbr>RFC</abbr> 9557</a> uses for this concept
|
||||
would violate the POSIX requirement
|
||||
of at least three characters in an abbreviation.)
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
@@ -775,7 +794,7 @@ href="https://www.dissentmagazine.org/blog/booked-a-global-history-of-time-vanes
|
||||
the Western 06:00 to be 12:00. These practices are largely outside
|
||||
the scope of the <code><abbr>tz</abbr></code> code and data, which
|
||||
provide only limited support for date and time localization
|
||||
such as that required by POSIX.1-2017.
|
||||
such as that required by POSIX.
|
||||
If <abbr>DST</abbr> is not used a different time zone
|
||||
can often do the trick; for example, in Kenya a <code>TZ</code> setting
|
||||
like <code><-03>3</code> or <code>America/Cayenne</code> starts
|
||||
@@ -866,29 +885,62 @@ Code compatible with this package is already
|
||||
<a href="tz-link.html#tzdb">part of many platforms</a>, where the
|
||||
primary use of this package is to update obsolete time-related files.
|
||||
To do this, you may need to compile the time zone compiler
|
||||
'<code>zic</code>' supplied with this package instead of using the
|
||||
system '<code>zic</code>', since the format of <code>zic</code>'s
|
||||
<code>zic</code> supplied with this package instead of using the
|
||||
system <code>zic</code>, since the format of <code>zic</code>'s
|
||||
input is occasionally extended, and a platform may still be shipping
|
||||
an older <code>zic</code>.
|
||||
</p>
|
||||
|
||||
<h3 id="POSIX">POSIX.1-2017 properties and limitations</h3>
|
||||
<p>
|
||||
In POSIX, time display in a process is controlled by the
|
||||
environment variable <code>TZ</code>, which can have two forms:
|
||||
</p>
|
||||
<ul>
|
||||
<li>
|
||||
A <dfn>proleptic <code>TZ</code></dfn> value
|
||||
like <code>CET-1CEST,M3.5.0,M10.5.0/3</code> uses a complex
|
||||
notation that specifies a single standard time along with daylight
|
||||
saving rules that apply to all years past, present, and future.
|
||||
</li>
|
||||
<li>
|
||||
A <dfn>geographical <code>TZ</code></dfn> value
|
||||
like <code>Europe/Berlin</code> names a location that stands for
|
||||
civil time near that location, which can have more than
|
||||
one standard time and more than one set of daylight saving rules,
|
||||
to record timekeeping practice more accurately.
|
||||
These names are defined by the <code><abbr>tz</abbr></code> database.
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="POSIX.1-2017">POSIX.1-2017 properties and limitations</h3>
|
||||
<p>
|
||||
Some platforms support only the features required by POSIX.1-2017,
|
||||
and have not yet upgraded to POSIX.1-2024.
|
||||
Code intended to be portable to these platforms must deal
|
||||
with problems that were fixed in later POSIX editions.
|
||||
</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
POSIX.1-2017 does not require support for geographical <code>TZ</code>,
|
||||
and there is no convenient and efficient way to determine
|
||||
the <abbr>UT</abbr> offset and time zone abbreviation of arbitrary
|
||||
timestamps, particularly for timezones
|
||||
that do not fit into the POSIX model.
|
||||
</li>
|
||||
<li>
|
||||
<p>
|
||||
In POSIX.1-2017, time display in a process is controlled by the
|
||||
environment variable <code>TZ</code>.
|
||||
Unfortunately, the POSIX.1-2017
|
||||
<code>TZ</code> string takes a form that is hard to describe and
|
||||
is error-prone in practice.
|
||||
Also, POSIX.1-2017 <code>TZ</code> strings cannot deal with daylight
|
||||
The proleptic <code>TZ</code> string,
|
||||
which is all that POSIX.1-2017 requires,
|
||||
has a format that is hard to describe and is error-prone in practice.
|
||||
Also, proleptic <code>TZ</code> strings cannot deal with daylight
|
||||
saving time rules not based on the Gregorian calendar (as in
|
||||
Morocco), or with situations where more than two time zone
|
||||
abbreviations or <abbr>UT</abbr> offsets are used in an area.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The POSIX.1-2017 <code>TZ</code> string takes the following form:
|
||||
A proleptic <code>TZ</code> string has the following format:
|
||||
</p>
|
||||
|
||||
<p>
|
||||
@@ -955,7 +1007,7 @@ an older <code>zic</code>.
|
||||
</dl>
|
||||
|
||||
<p>
|
||||
Here is an example POSIX.1-2017 <code>TZ</code> string for New
|
||||
Here is an example proleptic <code>TZ</code> string for New
|
||||
Zealand after 2007.
|
||||
It says that standard time (<abbr>NZST</abbr>) is 12 hours ahead
|
||||
of <abbr>UT</abbr>, and that daylight saving time
|
||||
@@ -966,26 +1018,46 @@ an older <code>zic</code>.
|
||||
<pre><code>TZ='NZST-12NZDT,M9.5.0,M4.1.0/3'</code></pre>
|
||||
|
||||
<p>
|
||||
This POSIX.1-2017 <code>TZ</code> string is hard to remember, and
|
||||
This proleptic <code>TZ</code> string is hard to remember, and
|
||||
mishandles some timestamps before 2008.
|
||||
With this package you can use this instead:
|
||||
With this package you can use a geographical <code>TZ</code> instead:
|
||||
</p>
|
||||
|
||||
<pre><code>TZ='Pacific/Auckland'</code></pre>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>
|
||||
POSIX.1-2017 also has the limitations of POSIX.1-2024,
|
||||
discussed in the next section.
|
||||
</p>
|
||||
|
||||
<h3 id="POSIX.1-2024">POSIX.1-2024 properties and limitations</h3>
|
||||
<p>
|
||||
POSIX.1-2024 extends POSIX.1-2017 in the following significant ways:
|
||||
</p>
|
||||
<ul>
|
||||
<li>
|
||||
POSIX does not define the <abbr>DST</abbr> transitions
|
||||
for <code>TZ</code> values like
|
||||
"<code>EST5EDT</code>".
|
||||
Traditionally the current <abbr>US</abbr> <abbr>DST</abbr> rules
|
||||
were used to interpret such values, but this meant that the
|
||||
<abbr>US</abbr> <abbr>DST</abbr> rules were compiled into each
|
||||
time conversion package, and when
|
||||
<abbr>US</abbr> time conversion rules changed (as in the United
|
||||
States in 1987 and again in 2007), all packages that
|
||||
interpreted <code>TZ</code> values had to be updated
|
||||
to ensure proper results.
|
||||
POSIX.1-2024 requires support for geographical <code>TZ</code>.
|
||||
Earlier POSIX editions require support only for proleptic <code>TZ</code>.
|
||||
</li>
|
||||
<li>
|
||||
POSIX.1-2024 requires <code>struct tm</code>
|
||||
to have a <abbr>UT</abbr> offset member <code>tm_gmtoff</code>
|
||||
and a time zone abbreviation member <code>tm_zone</code>.
|
||||
Earlier POSIX editions lack this requirement.
|
||||
</li>
|
||||
<li>
|
||||
DST transition times can range from −167:59:59
|
||||
to 167:59:59 instead of merely from 00:00:00 to 24:59:59.
|
||||
This allows for proleptic TZ strings
|
||||
like <code>"<-02>2<-01>,M3.5.0/-1,M10.5.0/0"</code>
|
||||
where the transition time −1:00 means 23:00 the previous day.
|
||||
</li>
|
||||
</ul>
|
||||
<p>
|
||||
However POSIX.1-2024, like earlier POSIX editions, has some limitations:
|
||||
<ul>
|
||||
<li>
|
||||
The <code>TZ</code> environment variable is process-global, which
|
||||
makes it hard to write efficient, thread-safe applications that
|
||||
@@ -1003,16 +1075,34 @@ an older <code>zic</code>.
|
||||
handling daylight saving time shifts – as might be required to
|
||||
limit phone calls to off-peak hours.
|
||||
</li>
|
||||
<li>
|
||||
POSIX.1-2017 provides no convenient and efficient way to determine
|
||||
the <abbr>UT</abbr> offset and time zone abbreviation of arbitrary
|
||||
timestamps, particularly for timezones
|
||||
that do not fit into the POSIX model.
|
||||
</li>
|
||||
<li>
|
||||
POSIX requires that <code>time_t</code> clock counts exclude leap
|
||||
seconds.
|
||||
</li>
|
||||
<li>
|
||||
POSIX does not define the <abbr>DST</abbr> transitions
|
||||
for <code>TZ</code> values like
|
||||
"<code>EST5EDT</code>".
|
||||
Traditionally the current <abbr>US</abbr> <abbr>DST</abbr> rules
|
||||
were used to interpret such values, but this meant that the
|
||||
<abbr>US</abbr> <abbr>DST</abbr> rules were compiled into each
|
||||
time conversion package, and when
|
||||
<abbr>US</abbr> time conversion rules changed (as in the United
|
||||
States in 1987 and again in 2007), all packages that
|
||||
interpreted <code>TZ</code> values had to be updated
|
||||
to ensure proper results.
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="POSIX-extensions">Extensions to POSIX in the
|
||||
<code><abbr>tz</abbr></code> code</h3>
|
||||
<p>
|
||||
The <code><abbr>tz</abbr></code> code defines some properties
|
||||
left unspecified by POSIX, and attempts to support some
|
||||
extensions to POSIX.
|
||||
</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
The <code><abbr>tz</abbr></code> code attempts to support all the
|
||||
<code>time_t</code> implementations allowed by POSIX.
|
||||
@@ -1026,25 +1116,18 @@ an older <code>zic</code>.
|
||||
and 40-bit integers are also used occasionally.
|
||||
Although earlier POSIX versions allowed <code>time_t</code> to be a
|
||||
floating-point type, this was not supported by any practical system,
|
||||
and POSIX.1-2013 and the <code><abbr>tz</abbr></code> code both
|
||||
and POSIX.1-2013+ and the <code><abbr>tz</abbr></code> code both
|
||||
require <code>time_t</code> to be an integer type.
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="POSIX-extensions">Extensions to POSIX.1-2017 in the
|
||||
<code><abbr>tz</abbr></code> code</h3>
|
||||
<ul>
|
||||
<li>
|
||||
<p>
|
||||
The <code>TZ</code> environment variable is used in generating
|
||||
the name of a file from which time-related information is read
|
||||
(or is interpreted à la POSIX.1-2017); <code>TZ</code> is no longer
|
||||
constrained to be a string containing abbreviations
|
||||
and numeric data as described <a href="#POSIX">above</a>.
|
||||
If the <code>TZ</code> environment variable uses the geographical format,
|
||||
it is used in generating
|
||||
the name of a file from which time-related information is read.
|
||||
The file's format is <dfn><abbr>TZif</abbr></dfn>,
|
||||
a timezone information format that contains binary data; see
|
||||
<a href="https://datatracker.ietf.org/doc/html/8536">Internet
|
||||
<abbr>RFC</abbr> 8536</a>.
|
||||
<a href="https://www.rfc-editor.org/rfc/9636">Internet
|
||||
<abbr>RFC</abbr> 9636</a>.
|
||||
The daylight saving time rules to be used for a
|
||||
particular timezone are encoded in the
|
||||
<abbr>TZif</abbr> file; the format of the file allows <abbr>US</abbr>,
|
||||
@@ -1053,10 +1136,11 @@ an older <code>zic</code>.
|
||||
abbreviations are used.
|
||||
</p>
|
||||
<p>
|
||||
It was recognized that allowing the <code>TZ</code> environment
|
||||
When the <code><abbr>tz</abbr></code> code was developed in the 1980s,
|
||||
it was recognized that allowing the <code>TZ</code> environment
|
||||
variable to take on values such as '<code>America/New_York</code>'
|
||||
might cause "old" programs (that expect <code>TZ</code> to have a
|
||||
certain form) to operate incorrectly; consideration was given to using
|
||||
certain format) to operate incorrectly; consideration was given to using
|
||||
some other environment variable (for example, <code>TIMEZONE</code>)
|
||||
to hold the string used to generate the <abbr>TZif</abbr> file's name.
|
||||
In the end, however, it was decided to continue using
|
||||
@@ -1069,15 +1153,6 @@ an older <code>zic</code>.
|
||||
assume pre-POSIX <code>TZ</code> values.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
The code supports platforms with a <abbr>UT</abbr> offset member
|
||||
in <code>struct tm</code>, e.g., <code>tm_gmtoff</code>,
|
||||
or with a time zone abbreviation member in
|
||||
<code>struct tm</code>, e.g., <code>tm_zone</code>. As noted
|
||||
in <a href="https://austingroupbugs.net/view.php?id=1533">Austin
|
||||
Group defect 1533</a>, a future version of POSIX is planned to
|
||||
require <code>tm_gmtoff</code> and <code>tm_zone</code>.
|
||||
</li>
|
||||
<li>
|
||||
Functions <code>tzalloc</code>, <code>tzfree</code>,
|
||||
<code>localtime_rz</code>, and <code>mktime_z</code> for
|
||||
@@ -1088,7 +1163,7 @@ an older <code>zic</code>.
|
||||
and <code>localtime_rz</code> and <code>mktime_z</code> are
|
||||
like <code>localtime_r</code> and <code>mktime</code> with an
|
||||
extra <code>timezone_t</code> argument.
|
||||
The functions were inspired by <a href="https://netbsd.org/">NetBSD</a>.
|
||||
The functions were inspired by <a href="https://netbsd.org">NetBSD</a>.
|
||||
</li>
|
||||
<li>
|
||||
Negative <code>time_t</code> values are supported, on systems
|
||||
@@ -1116,6 +1191,7 @@ The vestigial <abbr>API</abbr>s are:
|
||||
<li>
|
||||
The POSIX <code>tzname</code> variable does not suffice and is no
|
||||
longer needed.
|
||||
It is planned to be removed in a future edition of POSIX.
|
||||
To get a timestamp's time zone abbreviation, consult
|
||||
the <code>tm_zone</code> member if available; otherwise,
|
||||
use <code>strftime</code>'s <code>"%Z"</code> conversion
|
||||
@@ -1124,6 +1200,7 @@ The vestigial <abbr>API</abbr>s are:
|
||||
<li>
|
||||
The POSIX <code>daylight</code> and <code>timezone</code>
|
||||
variables do not suffice and are no longer needed.
|
||||
They are planned to be removed in a future edition of POSIX.
|
||||
To get a timestamp's <abbr>UT</abbr> offset, consult
|
||||
the <code>tm_gmtoff</code> member if available; otherwise,
|
||||
subtract values returned by <code>localtime</code>
|
||||
@@ -1135,12 +1212,15 @@ The vestigial <abbr>API</abbr>s are:
|
||||
The <code>tm_isdst</code> member is almost never needed and most of
|
||||
its uses should be discouraged in favor of the abovementioned
|
||||
<abbr>API</abbr>s.
|
||||
It was intended as an index into the <code>tzname</code> variable,
|
||||
but as mentioned previously that usage is obsolete.
|
||||
Although it can still be used in arguments to
|
||||
<code>mktime</code> to disambiguate timestamps near
|
||||
a <abbr>DST</abbr> transition when the clock jumps back on
|
||||
platforms lacking <code>tm_gmtoff</code>, this
|
||||
disambiguation does not work when standard time itself jumps back,
|
||||
which can occur when a location changes to a time zone with a
|
||||
disambiguation works only for proleptic <code>TZ</code> strings;
|
||||
it does not work in general for geographical timezones,
|
||||
such as when a location changes to a time zone with a
|
||||
lesser <abbr>UT</abbr> offset.
|
||||
</li>
|
||||
</ul>
|
||||
@@ -1157,8 +1237,8 @@ The vestigial <abbr>API</abbr>s are:
|
||||
Programs that in the past used the <code>timezone</code> function
|
||||
may now examine <code>localtime(&clock)->tm_zone</code>
|
||||
(if <code>TM_ZONE</code> is defined) or
|
||||
<code>tzname[localtime(&clock)->tm_isdst]</code>
|
||||
(if <code>HAVE_TZNAME</code> is nonzero) to learn the correct time
|
||||
use <code>strftime</code> with a <code>%Z</code> conversion specification
|
||||
to learn the correct time
|
||||
zone abbreviation to use.
|
||||
</li>
|
||||
<li>
|
||||
@@ -1278,13 +1358,13 @@ between now and the future time.
|
||||
<p>
|
||||
Leap seconds were introduced in 1972 to accommodate the
|
||||
difference between atomic time and the less regular rotation of the earth.
|
||||
Unfortunately they caused so many problems with civil
|
||||
timekeeping that they
|
||||
are <a href="https://www.bipm.org/en/cgpm-2022/resolution-4">planned
|
||||
to be discontinued by 2035</a>, with some as-yet-undetermined
|
||||
mechanism replacing them, perhaps after the year 2135.
|
||||
Despite their impending obsolescence, a record of leap seconds is still
|
||||
needed to resolve timestamps from 1972 through 2035.
|
||||
Unfortunately they have caused so many problems with civil
|
||||
timekeeping that there are
|
||||
<a href="https://www.bipm.org/en/cgpm-2022/resolution-4">plans
|
||||
to discontinue them by 2035</a>.
|
||||
Even if these plans come to fruition, a record of leap seconds will still be
|
||||
needed to resolve timestamps from 1972 through 2035,
|
||||
and there may also be a need to record whatever mechanism replaces them.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
@@ -1374,6 +1454,12 @@ href='https://www.esa.int/Applications/Navigation/Telling_time_on_the_Moon'>cons
|
||||
the establishment of a reference timescale for the Moon, which has
|
||||
days roughly equivalent to 29.5 Earth days, and where relativistic
|
||||
effects cause clocks to tick slightly faster than on Earth.
|
||||
Also, <abbr title="National Aeronautics and Space Administration">NASA</abbr>
|
||||
has been <a
|
||||
href='https://www.whitehouse.gov/wp-content/uploads/2024/04/Celestial-Time-Standardization-Policy.pdf'>ordered</a>
|
||||
to consider the establishment of Coordinated Lunar Time (<abbr>LTC</abbr>).
|
||||
It is not yet known whether the US and European efforts will result in
|
||||
multiple timescales on the Moon.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
|
||||
@@ -1 +1 @@
|
||||
2024a
|
||||
2025b
|
||||
+14
-18
@@ -5,14 +5,10 @@
|
||||
# This is not a general-purpose converter; it is designed for current tzdata.
|
||||
# It just converts from current source to main, vanguard, and rearguard forms.
|
||||
# Although it might be nice for it to be idempotent, or to be useful
|
||||
# for converting back and forth between vanguard and rearguard formats,
|
||||
# for converting back and forth between formats,
|
||||
# it does not do these nonessential tasks now.
|
||||
#
|
||||
# Although main and vanguard forms are currently equivalent,
|
||||
# this need not always be the case. When the two forms differ,
|
||||
# this script can convert either from main to vanguard form (needed then),
|
||||
# or from vanguard to main form (this conversion would be needed later,
|
||||
# after main became rearguard and vanguard became main).
|
||||
# This script can convert from main to vanguard form and vice versa.
|
||||
# There is no need to convert rearguard to other forms.
|
||||
#
|
||||
# When converting to vanguard form, the output can use the line
|
||||
@@ -145,12 +141,12 @@ DATAFORM != "main" {
|
||||
}
|
||||
|
||||
# If this line should differ due to Portugal benefiting from %z if supported,
|
||||
# uncomment the desired version and comment out the undesired one.
|
||||
if ($0 ~ /^#?[\t ]+-[12]:00[\t ]+Port[\t ]+[%+-]/) {
|
||||
if (($0 ~ /%z/) == (DATAFORM == "vanguard")) {
|
||||
uncomment = in_comment
|
||||
} else {
|
||||
# comment out the undesired version and uncomment the desired one.
|
||||
if ($0 ~ /^#?[\t ]+-[12]:00[\t ]+((Port|W-Eur)[\t ]+[%+-]|-[\t ]+(%z|-01)[\t ]+1982 Mar 28)/) {
|
||||
if (($0 ~ /%z/) == (DATAFORM == "rearguard")) {
|
||||
comment_out = !in_comment
|
||||
} else {
|
||||
uncomment = in_comment
|
||||
}
|
||||
}
|
||||
|
||||
@@ -172,13 +168,8 @@ DATAFORM != "main" {
|
||||
sub(/^/, "#")
|
||||
}
|
||||
|
||||
# Prefer %z in vanguard form, explicit abbreviations otherwise.
|
||||
if (DATAFORM == "vanguard") {
|
||||
sub(/^(Zone[\t ]+[^\t ]+)?[\t ]+[^\t ]+[\t ]+[^\t ]+[\t ]+[-+][^\t ]+/, \
|
||||
"&CHANGE-TO-%z")
|
||||
sub(/-00CHANGE-TO-%z/, "-00")
|
||||
sub(/[-+][^\t ]+CHANGE-TO-/, "")
|
||||
} else {
|
||||
# Prefer explicit abbreviations in rearguard form, %z otherwise.
|
||||
if (DATAFORM == "rearguard") {
|
||||
if ($0 ~ /^[^#]*%z/) {
|
||||
stdoff_column = 2 * ($0 ~ /^Zone/) + 1
|
||||
rules_column = stdoff_column + 1
|
||||
@@ -216,6 +207,11 @@ DATAFORM != "main" {
|
||||
}
|
||||
sub(/%z/, abbr)
|
||||
}
|
||||
} else {
|
||||
sub(/^(Zone[\t ]+[^\t ]+)?[\t ]+[^\t ]+[\t ]+[^\t ]+[\t ]+[-+][^\t ]+/, \
|
||||
"&CHANGE-TO-%z")
|
||||
sub(/-00CHANGE-TO-%z/, "-00")
|
||||
sub(/[-+][^\t ]+CHANGE-TO-/, "")
|
||||
}
|
||||
|
||||
# Normally, prefer whole seconds. However, prefer subseconds
|
||||
|
||||
@@ -139,7 +139,8 @@ CH +4723+00832 Europe/Zurich
|
||||
CI +0519-00402 Africa/Abidjan
|
||||
CK -2114-15946 Pacific/Rarotonga
|
||||
CL -3327-07040 America/Santiago most of Chile
|
||||
CL -5309-07055 America/Punta_Arenas Region of Magallanes
|
||||
CL -4534-07204 America/Coyhaique Aysen Region
|
||||
CL -5309-07055 America/Punta_Arenas Magallanes Region
|
||||
CL -2709-10926 Pacific/Easter Easter Island
|
||||
CM +0403+00942 Africa/Douala
|
||||
CN +3114+12128 Asia/Shanghai Beijing Time
|
||||
@@ -264,8 +265,7 @@ MK +4159+02126 Europe/Skopje
|
||||
ML +1239-00800 Africa/Bamako
|
||||
MM +1647+09610 Asia/Yangon
|
||||
MN +4755+10653 Asia/Ulaanbaatar most of Mongolia
|
||||
MN +4801+09139 Asia/Hovd Bayan-Olgiy, Govi-Altai, Hovd, Uvs, Zavkhan
|
||||
MN +4804+11430 Asia/Choibalsan Dornod, Sukhbaatar
|
||||
MN +4801+09139 Asia/Hovd Bayan-Olgii, Hovd, Uvs
|
||||
MO +221150+1133230 Asia/Macau
|
||||
MP +1512+14545 Pacific/Saipan
|
||||
MQ +1436-06105 America/Martinique
|
||||
@@ -311,7 +311,7 @@ PF -0900-13930 Pacific/Marquesas Marquesas Islands
|
||||
PF -2308-13457 Pacific/Gambier Gambier Islands
|
||||
PG -0930+14710 Pacific/Port_Moresby most of Papua New Guinea
|
||||
PG -0613+15534 Pacific/Bougainville Bougainville
|
||||
PH +1435+12100 Asia/Manila
|
||||
PH +143512+1205804 Asia/Manila
|
||||
PK +2452+06703 Asia/Karachi
|
||||
PL +5215+02100 Europe/Warsaw
|
||||
PM +4703-05620 America/Miquelon
|
||||
|
||||
@@ -125,7 +125,8 @@ CH,DE,LI +4723+00832 Europe/Zurich Büsingen
|
||||
CI,BF,GH,GM,GN,IS,ML,MR,SH,SL,SN,TG +0519-00402 Africa/Abidjan
|
||||
CK -2114-15946 Pacific/Rarotonga
|
||||
CL -3327-07040 America/Santiago most of Chile
|
||||
CL -5309-07055 America/Punta_Arenas Region of Magallanes
|
||||
CL -4534-07204 America/Coyhaique Aysén Region
|
||||
CL -5309-07055 America/Punta_Arenas Magallanes Region
|
||||
CL -2709-10926 Pacific/Easter Easter Island
|
||||
CN +3114+12128 Asia/Shanghai Beijing Time
|
||||
CN +4348+08735 Asia/Urumqi Xinjiang Time
|
||||
@@ -184,7 +185,7 @@ IR +3540+05126 Asia/Tehran
|
||||
IT,SM,VA +4154+01229 Europe/Rome
|
||||
JM +175805-0764736 America/Jamaica
|
||||
JO +3157+03556 Asia/Amman
|
||||
JP +353916+1394441 Asia/Tokyo
|
||||
JP,AU +353916+1394441 Asia/Tokyo Eyre Bird Observatory
|
||||
KE,DJ,ER,ET,KM,MG,SO,TZ,UG,YT -0117+03649 Africa/Nairobi
|
||||
KG +4254+07436 Asia/Bishkek
|
||||
KI,MH,TV,UM,WF +0125+17300 Pacific/Tarawa Gilberts, Marshalls, Wake
|
||||
@@ -210,8 +211,7 @@ MD +4700+02850 Europe/Chisinau
|
||||
MH +0905+16720 Pacific/Kwajalein Kwajalein
|
||||
MM,CC +1647+09610 Asia/Yangon
|
||||
MN +4755+10653 Asia/Ulaanbaatar most of Mongolia
|
||||
MN +4801+09139 Asia/Hovd Bayan-Ölgii, Govi-Altai, Hovd, Uvs, Zavkhan
|
||||
MN +4804+11430 Asia/Choibalsan Dornod, Sükhbaatar
|
||||
MN +4801+09139 Asia/Hovd Bayan-Ölgii, Hovd, Uvs
|
||||
MO +221150+1133230 Asia/Macau
|
||||
MQ +1436-06105 America/Martinique
|
||||
MT +3554+01431 Europe/Malta
|
||||
@@ -248,7 +248,7 @@ PF -0900-13930 Pacific/Marquesas Marquesas Islands
|
||||
PF -2308-13457 Pacific/Gambier Gambier Islands
|
||||
PG,AQ,FM -0930+14710 Pacific/Port_Moresby Papua New Guinea (most areas), Chuuk, Yap, Dumont d'Urville
|
||||
PG -0613+15534 Pacific/Bougainville Bougainville
|
||||
PH +1435+12100 Asia/Manila
|
||||
PH +143512+1205804 Asia/Manila
|
||||
PK +2452+06703 Asia/Karachi
|
||||
PL +5215+02100 Europe/Warsaw
|
||||
PM +4703-05620 America/Miquelon
|
||||
@@ -295,7 +295,7 @@ RU +6445+17729 Asia/Anadyr MSK+09 - Bering Sea
|
||||
SA,AQ,KW,YE +2438+04643 Asia/Riyadh Syowa
|
||||
SB,FM -0932+16012 Pacific/Guadalcanal Pohnpei
|
||||
SD +1536+03232 Africa/Khartoum
|
||||
SG,MY +0117+10351 Asia/Singapore peninsular Malaysia
|
||||
SG,AQ,MY +0117+10351 Asia/Singapore peninsular Malaysia, Concordia
|
||||
SR +0550-05510 America/Paramaribo
|
||||
SS +0451+03137 Africa/Juba
|
||||
ST +0020+00644 Africa/Sao_Tome
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
# From Paul Eggert (2023-12-18):
|
||||
# This file contains a table where each row stands for a timezone
|
||||
# where civil timestamps are predicted to agree from now on.
|
||||
# This file is like zone1970.tab (see zone1970.tab's coments),
|
||||
# This file is like zone1970.tab (see zone1970.tab's comments),
|
||||
# but with the following changes:
|
||||
#
|
||||
# 1. Each timezone corresponds to a set of clocks that are planned
|
||||
@@ -97,9 +97,6 @@ XX +1828-06954 America/Santo_Domingo Atlantic Standard ("AST") - eastern Caribbe
|
||||
# -04/-03 (Chile DST)
|
||||
XX -3327-07040 America/Santiago most of Chile
|
||||
#
|
||||
# -04/-03 (Paraguay DST)
|
||||
XX -2516-05740 America/Asuncion Paraguay
|
||||
#
|
||||
# -04/-03 - AST/ADT (North America DST)
|
||||
XX +4439-06336 America/Halifax Atlantic ("AST/ADT") - Canada; Bermuda
|
||||
#
|
||||
@@ -107,7 +104,7 @@ XX +4439-06336 America/Halifax Atlantic ("AST/ADT") - Canada; Bermuda
|
||||
XX +4734-05243 America/St_Johns Newfoundland ("NST/NDT")
|
||||
#
|
||||
# -03
|
||||
XX -2332-04637 America/Sao_Paulo eastern South America
|
||||
XX -2332-04637 America/Sao_Paulo eastern and southern South America
|
||||
#
|
||||
# -03/-02 (North America DST)
|
||||
XX +4703-05620 America/Miquelon St Pierre & Miquelon
|
||||
@@ -123,8 +120,6 @@ XX +1455-02331 Atlantic/Cape_Verde Cape Verde
|
||||
#
|
||||
# -01/+00 (EU DST)
|
||||
XX +3744-02540 Atlantic/Azores Azores
|
||||
# -01/+00 (EU DST) until 2024-03-31; then -02/-01 (EU DST)
|
||||
XX +7029-02158 America/Scoresbysund Ittoqqortoormiit
|
||||
#
|
||||
# +00 - GMT
|
||||
XX +0519-00402 Africa/Abidjan far western Africa; Iceland ("GMT")
|
||||
@@ -199,7 +194,7 @@ XX +2518+05518 Asia/Dubai Russia; Caucasus; Persian Gulf; Seychelles; Réunion
|
||||
XX +3431+06912 Asia/Kabul Afghanistan
|
||||
#
|
||||
# +05
|
||||
XX +4120+06918 Asia/Tashkent Russia; west Kazakhstan; Tajikistan; Turkmenistan; Uzbekistan; Maldives
|
||||
XX +4120+06918 Asia/Tashkent Russia; Kazakhstan; Tajikistan; Turkmenistan; Uzbekistan; Maldives
|
||||
#
|
||||
# +05 - PKT
|
||||
XX +2452+06703 Asia/Karachi Pakistan ("PKT")
|
||||
@@ -215,8 +210,6 @@ XX +2743+08519 Asia/Kathmandu Nepal
|
||||
#
|
||||
# +06
|
||||
XX +2343+09025 Asia/Dhaka Russia; Kyrgyzstan; Bhutan; Bangladesh; Chagos
|
||||
# +06 until 2024-03-01; then +05
|
||||
XX +4315+07657 Asia/Almaty Kazakhstan (except western areas)
|
||||
#
|
||||
# +06:30
|
||||
XX +1647+09610 Asia/Yangon Myanmar; Cocos
|
||||
@@ -228,7 +221,7 @@ XX +1345+10031 Asia/Bangkok Russia; Indochina; Christmas Island
|
||||
XX -0610+10648 Asia/Jakarta Indonesia ("WIB")
|
||||
#
|
||||
# +08
|
||||
XX +0117+10351 Asia/Singapore Russia; Brunei; Malaysia; Singapore
|
||||
XX +0117+10351 Asia/Singapore Russia; Brunei; Malaysia; Singapore; Concordia
|
||||
#
|
||||
# +08 - AWST
|
||||
XX -3157+11551 Australia/Perth Western Australia ("AWST")
|
||||
@@ -240,7 +233,7 @@ XX +3114+12128 Asia/Shanghai China ("CST")
|
||||
XX +2217+11409 Asia/Hong_Kong Hong Kong ("HKT")
|
||||
#
|
||||
# +08 - PHT
|
||||
XX +1435+12100 Asia/Manila Philippines ("PHT")
|
||||
XX +143512+1205804 Asia/Manila Philippines ("PHT")
|
||||
#
|
||||
# +08 - WITA
|
||||
XX -0507+11924 Asia/Makassar Indonesia ("WITA")
|
||||
@@ -252,7 +245,7 @@ XX -3143+12852 Australia/Eucla Eucla
|
||||
XX +5203+11328 Asia/Chita Russia; Palau; East Timor
|
||||
#
|
||||
# +09 - JST
|
||||
XX +353916+1394441 Asia/Tokyo Japan ("JST")
|
||||
XX +353916+1394441 Asia/Tokyo Japan ("JST"); Eyre Bird Observatory
|
||||
#
|
||||
# +09 - KST
|
||||
XX +3733+12658 Asia/Seoul Korea ("KST")
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* $OpenBSD: krl.c,v 1.59 2023/07/17 05:22:30 djm Exp $ */
|
||||
/* $OpenBSD: krl.c,v 1.60 2025/02/18 08:02:48 djm Exp $ */
|
||||
/*
|
||||
* Copyright (c) 2012 Damien Miller <djm@mindrot.org>
|
||||
*
|
||||
@@ -674,6 +674,7 @@ revoked_certs_generate(struct revoked_certs *rc, struct sshbuf *buf)
|
||||
break;
|
||||
case KRL_SECTION_CERT_SERIAL_BITMAP:
|
||||
if (rs->lo - bitmap_start > INT_MAX) {
|
||||
r = SSH_ERR_INVALID_FORMAT;
|
||||
error_f("insane bitmap gap");
|
||||
goto out;
|
||||
}
|
||||
@@ -1059,6 +1060,7 @@ ssh_krl_from_blob(struct sshbuf *buf, struct ssh_krl **krlp)
|
||||
}
|
||||
|
||||
if ((krl = ssh_krl_init()) == NULL) {
|
||||
r = SSH_ERR_ALLOC_FAIL;
|
||||
error_f("alloc failed");
|
||||
goto out;
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* $OpenBSD: packet.c,v 1.313 2023/12/18 14:45:17 djm Exp $ */
|
||||
/* $OpenBSD: packet.c,v 1.318 2025/02/18 08:02:12 djm Exp $ */
|
||||
/*
|
||||
* Author: Tatu Ylonen <ylo@cs.hut.fi>
|
||||
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
|
||||
@@ -1774,6 +1774,14 @@ ssh_packet_read_poll_seqnr(struct ssh *ssh, u_char *typep, u_int32_t *seqnr_p)
|
||||
if ((r = sshpkt_get_string_direct(ssh, &d, &len)) != 0)
|
||||
return r;
|
||||
DBG(debug("Received SSH2_MSG_PING len %zu", len));
|
||||
if (!ssh->state->after_authentication) {
|
||||
DBG(debug("Won't reply to PING in preauth"));
|
||||
break;
|
||||
}
|
||||
if (ssh_packet_is_rekeying(ssh)) {
|
||||
DBG(debug("Won't reply to PING during KEX"));
|
||||
break;
|
||||
}
|
||||
if ((r = sshpkt_start(ssh, SSH2_MSG_PONG)) != 0 ||
|
||||
(r = sshpkt_put_string(ssh, d, len)) != 0 ||
|
||||
(r = sshpkt_send(ssh)) != 0)
|
||||
|
||||
@@ -1226,6 +1226,7 @@ parse_key_constraint_extension(struct sshbuf *m, char **sk_providerp,
|
||||
"[email protected]") == 0) {
|
||||
if (*dcsp != NULL) {
|
||||
error_f("%s already set", ext_name);
|
||||
r = SSH_ERR_INVALID_FORMAT;
|
||||
goto out;
|
||||
}
|
||||
if ((r = sshbuf_froms(m, &b)) != 0) {
|
||||
@@ -1235,6 +1236,7 @@ parse_key_constraint_extension(struct sshbuf *m, char **sk_providerp,
|
||||
while (sshbuf_len(b) != 0) {
|
||||
if (*ndcsp >= AGENT_MAX_DEST_CONSTRAINTS) {
|
||||
error_f("too many %s constraints", ext_name);
|
||||
r = SSH_ERR_INVALID_FORMAT;
|
||||
goto out;
|
||||
}
|
||||
*dcsp = xrecallocarray(*dcsp, *ndcsp, *ndcsp + 1,
|
||||
@@ -1252,6 +1254,7 @@ parse_key_constraint_extension(struct sshbuf *m, char **sk_providerp,
|
||||
}
|
||||
if (*certs != NULL) {
|
||||
error_f("%s already set", ext_name);
|
||||
r = SSH_ERR_INVALID_FORMAT;
|
||||
goto out;
|
||||
}
|
||||
if ((r = sshbuf_get_u8(m, &v)) != 0 ||
|
||||
@@ -1263,6 +1266,7 @@ parse_key_constraint_extension(struct sshbuf *m, char **sk_providerp,
|
||||
while (sshbuf_len(b) != 0) {
|
||||
if (*ncerts >= AGENT_MAX_EXT_CERTS) {
|
||||
error_f("too many %s constraints", ext_name);
|
||||
r = SSH_ERR_INVALID_FORMAT;
|
||||
goto out;
|
||||
}
|
||||
*certs = xrecallocarray(*certs, *ncerts, *ncerts + 1,
|
||||
@@ -1759,6 +1763,7 @@ process_ext_session_bind(SocketEntry *e)
|
||||
/* record new key/sid */
|
||||
if (e->nsession_ids >= AGENT_MAX_SESSION_IDS) {
|
||||
error_f("too many session IDs recorded");
|
||||
r = -1;
|
||||
goto out;
|
||||
}
|
||||
e->session_ids = xrecallocarray(e->session_ids, e->nsession_ids,
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* $OpenBSD: ssh-sk-client.c,v 1.12 2022/01/14 03:34:00 djm Exp $ */
|
||||
/* $OpenBSD: ssh-sk-client.c,v 1.13 2025/02/18 08:02:48 djm Exp $ */
|
||||
/*
|
||||
* Copyright (c) 2019 Google LLC
|
||||
*
|
||||
@@ -439,6 +439,7 @@ sshsk_load_resident(const char *provider_path, const char *device,
|
||||
}
|
||||
if ((srk = calloc(1, sizeof(*srk))) == NULL) {
|
||||
error_f("calloc failed");
|
||||
r = SSH_ERR_ALLOC_FAIL;
|
||||
goto out;
|
||||
}
|
||||
srk->key = key;
|
||||
@@ -450,6 +451,7 @@ sshsk_load_resident(const char *provider_path, const char *device,
|
||||
if ((tmp = recallocarray(srks, nsrks, nsrks + 1,
|
||||
sizeof(*srks))) == NULL) {
|
||||
error_f("recallocarray keys failed");
|
||||
r = SSH_ERR_ALLOC_FAIL;
|
||||
goto out;
|
||||
}
|
||||
debug_f("srks[%zu]: %s %s uidlen %zu", nsrks,
|
||||
|
||||
@@ -44,4 +44,4 @@
|
||||
# ProxyCommand ssh -q -W %h:%p gateway.example.com
|
||||
# RekeyLimit 1G 1h
|
||||
# UserKnownHostsFile ~/.ssh/known_hosts.d/%k
|
||||
# VersionAddendum FreeBSD-20240318
|
||||
# VersionAddendum FreeBSD-20250219
|
||||
@@ -2137,7 +2137,7 @@ in
|
||||
Specifies a string to append to the regular version string to identify
|
||||
OS- or site-specific modifications.
|
||||
The default is
|
||||
.Dq FreeBSD-20240318 .
|
||||
.Dq FreeBSD-20250219 .
|
||||
The value
|
||||
.Cm none
|
||||
may be used to disable this.
|
||||
|
||||
@@ -101,7 +101,7 @@ verify_host_key_callback(struct sshkey *hostkey, struct ssh *ssh)
|
||||
options.required_rsa_size)) != 0)
|
||||
fatal_r(r, "Bad server host key");
|
||||
if (verify_host_key(xxx_host, xxx_hostaddr, hostkey,
|
||||
xxx_conn_info) == -1)
|
||||
xxx_conn_info) != 0)
|
||||
fatal("Host key verification failed.");
|
||||
return 0;
|
||||
}
|
||||
@@ -700,6 +700,7 @@ input_userauth_pk_ok(int type, u_int32_t seq, struct ssh *ssh)
|
||||
|
||||
if ((pktype = sshkey_type_from_name(pkalg)) == KEY_UNSPEC) {
|
||||
debug_f("server sent unknown pkalg %s", pkalg);
|
||||
r = SSH_ERR_INVALID_FORMAT;
|
||||
goto done;
|
||||
}
|
||||
if ((r = sshkey_from_blob(pkblob, blen, &key)) != 0) {
|
||||
@@ -710,6 +711,7 @@ input_userauth_pk_ok(int type, u_int32_t seq, struct ssh *ssh)
|
||||
error("input_userauth_pk_ok: type mismatch "
|
||||
"for decoded key (received %d, expected %d)",
|
||||
key->type, pktype);
|
||||
r = SSH_ERR_INVALID_FORMAT;
|
||||
goto done;
|
||||
}
|
||||
|
||||
@@ -729,6 +731,7 @@ input_userauth_pk_ok(int type, u_int32_t seq, struct ssh *ssh)
|
||||
SSH_FP_DEFAULT);
|
||||
error_f("server replied with unknown key: %s %s",
|
||||
sshkey_type(key), fp == NULL ? "<ERROR>" : fp);
|
||||
r = SSH_ERR_INVALID_FORMAT;
|
||||
goto done;
|
||||
}
|
||||
ident = format_identity(id);
|
||||
|
||||
@@ -377,8 +377,6 @@ grace_alarm_handler(int sig)
|
||||
kill(0, SIGTERM);
|
||||
}
|
||||
|
||||
BLACKLIST_NOTIFY(the_active_state, BLACKLIST_AUTH_FAIL, "ssh");
|
||||
|
||||
/* Log error and exit. */
|
||||
sigdie("Timeout before authentication for %s port %d",
|
||||
ssh_remote_ipaddr(the_active_state),
|
||||
|
||||
@@ -105,7 +105,7 @@ AuthorizedKeysFile .ssh/authorized_keys
|
||||
#PermitTunnel no
|
||||
#ChrootDirectory none
|
||||
#UseBlacklist no
|
||||
#VersionAddendum FreeBSD-20240318
|
||||
#VersionAddendum FreeBSD-20250219
|
||||
|
||||
# no default banner path
|
||||
#Banner none
|
||||
|
||||
@@ -1947,7 +1947,7 @@ The default is
|
||||
Optionally specifies additional text to append to the SSH protocol banner
|
||||
sent by the server upon connection.
|
||||
The default is
|
||||
.Qq FreeBSD-20240318 .
|
||||
.Qq FreeBSD-20250219 .
|
||||
The value
|
||||
.Cm none
|
||||
may be used to disable this.
|
||||
|
||||
@@ -874,6 +874,7 @@ cert_filter_principals(const char *path, u_long linenum,
|
||||
}
|
||||
if ((principals = sshbuf_dup_string(nprincipals)) == NULL) {
|
||||
error_f("buffer error");
|
||||
r = SSH_ERR_ALLOC_FAIL;
|
||||
goto out;
|
||||
}
|
||||
/* success */
|
||||
|
||||
@@ -5,4 +5,4 @@
|
||||
#define SSH_PORTABLE "p1"
|
||||
#define SSH_RELEASE SSH_VERSION SSH_PORTABLE
|
||||
|
||||
#define SSH_VERSION_FREEBSD "FreeBSD-20240701"
|
||||
#define SSH_VERSION_FREEBSD "FreeBSD-20250219"
|
||||
@@ -1,7 +1,7 @@
|
||||
#
|
||||
# Execute the "real" sendmail program, named /usr/libexec/sendmail/sendmail
|
||||
#
|
||||
# If dma(8) is installed, an example mailer.conf that uses dma(8) instead can
|
||||
# If dma(8) is installed, an example mailer.conf that uses dma(8) instead
|
||||
# can be found in /usr/share/examples/dma.
|
||||
#
|
||||
sendmail /usr/libexec/sendmail/sendmail
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
.4byte NT_FREEBSD_ABI_TAG
|
||||
1: .asciz NOTE_FREEBSD_VENDOR
|
||||
2: .p2align 2
|
||||
3: .4byte __FreeBSD_version
|
||||
3: .4byte 1304000
|
||||
4:
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
||||
@@ -1,4 +1,3 @@
|
||||
|
||||
PACKAGE= runtime
|
||||
EXPAT= ${SRCTOP}/contrib/expat
|
||||
|
||||
|
||||
@@ -89,7 +89,7 @@
|
||||
#define PACKAGE_NAME "expat"
|
||||
|
||||
/* Define to the full name and version of this package. */
|
||||
#define PACKAGE_STRING "expat 2.6.0"
|
||||
#define PACKAGE_STRING "expat 2.7.1"
|
||||
|
||||
/* Define to the one symbol short name of this package. */
|
||||
#define PACKAGE_TARNAME "expat"
|
||||
@@ -98,7 +98,7 @@
|
||||
#define PACKAGE_URL ""
|
||||
|
||||
/* Define to the version of this package. */
|
||||
#define PACKAGE_VERSION "2.6.0"
|
||||
#define PACKAGE_VERSION "2.7.1"
|
||||
|
||||
/* Define to 1 if all of the C90 standard headers exist (not just the ones
|
||||
required in a freestanding environment). This macro is provided for
|
||||
@@ -106,7 +106,7 @@
|
||||
#define STDC_HEADERS 1
|
||||
|
||||
/* Version number of package */
|
||||
#define VERSION "2.6.0"
|
||||
#define VERSION "2.7.1"
|
||||
|
||||
/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
|
||||
significant byte first (like Motorola and SPARC, unlike Intel). */
|
||||
@@ -146,7 +146,4 @@
|
||||
/* Define to `long int' if <sys/types.h> does not define. */
|
||||
/* #undef off_t */
|
||||
|
||||
/* Define to `unsigned int' if <sys/types.h> does not define. */
|
||||
/* #undef size_t */
|
||||
|
||||
#endif // ndef EXPAT_CONFIG_H
|
||||
@@ -23,7 +23,7 @@
|
||||
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
.\" SUCH DAMAGE.
|
||||
.\"/
|
||||
.Dd February 17, 2024
|
||||
.Dd April 7, 2025
|
||||
.Dt LIBBSDXML 3
|
||||
.Os
|
||||
.Sh NAME
|
||||
@@ -34,7 +34,7 @@
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
.Nm
|
||||
library is a verbatim copy of the eXpat XML library version 2.6.0.
|
||||
library is a verbatim copy of the eXpat XML library version 2.7.1.
|
||||
.Pp
|
||||
The
|
||||
.Nm
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
release: {
|
||||
url: "pkg+http://pkg.FreeBSD.org/${ABI}/latest",
|
||||
url: "pkg+http://pkg.FreeBSD.org/${ABI}/release_4",
|
||||
mirror_type: "srv",
|
||||
signature_type: "fingerprints",
|
||||
fingerprints: "/usr/share/keys/pkg",
|
||||
|
||||
@@ -12,27 +12,26 @@ export ROOTDIR="$PWD/dvd"
|
||||
export PKGCMD="/usr/sbin/pkg -d --rootdir ${ROOTDIR}"
|
||||
export PORTSDIR="${PORTSDIR:-/usr/ports}"
|
||||
|
||||
_DVD_PACKAGES="archivers/unzip
|
||||
devel/git
|
||||
emulators/linux_base-c7
|
||||
_DVD_PACKAGES="devel/git@lite
|
||||
graphics/drm-kmod
|
||||
graphics/drm-510-kmod
|
||||
misc/freebsd-doc-all
|
||||
net/mpd5
|
||||
net/rsync
|
||||
ports-mgmt/pkg
|
||||
ports-mgmt/portmaster
|
||||
shells/bash
|
||||
shells/zsh
|
||||
security/sudo
|
||||
sysutils/screen
|
||||
sysutils/seatd
|
||||
sysutils/tmux
|
||||
www/firefox
|
||||
www/links
|
||||
x11-drivers/xf86-video-vmware
|
||||
x11/gnome
|
||||
x11/kde5
|
||||
x11/xorg"
|
||||
x11/sddm
|
||||
x11/xorg
|
||||
x11-wm/sway"
|
||||
|
||||
# If NOPORTS is set for the release, do not attempt to build pkg(8).
|
||||
if [ ! -f ${PORTSDIR}/Makefile ]; then
|
||||
@@ -59,10 +58,10 @@ fi
|
||||
# Ensure the ports listed in _DVD_PACKAGES exist to sanitize the
|
||||
# final list.
|
||||
for _P in ${_DVD_PACKAGES}; do
|
||||
if [ -d "${PORTSDIR}/${_P}" ]; then
|
||||
if [ -d "${PORTSDIR}/${_P%%@*}" ]; then
|
||||
DVD_PACKAGES="${DVD_PACKAGES} ${_P}"
|
||||
else
|
||||
echo "*** Skipping nonexistent port: ${_P}"
|
||||
echo "*** Skipping nonexistent port: ${_P%%@*}"
|
||||
fi
|
||||
done
|
||||
|
||||
|
||||
@@ -1,99 +0,0 @@
|
||||
##
|
||||
## AddTrust External Root
|
||||
##
|
||||
## This is a single X.509 certificate for a public Certificate
|
||||
## Authority (CA). It was automatically extracted from Mozilla's
|
||||
## root CA list (the file `certdata.txt' in security/nss).
|
||||
##
|
||||
## Extracted from nss
|
||||
## with $FreeBSD: head/secure/caroot/MAca-bundle.pl 352951 2019-10-02 01:27:50Z kevans $
|
||||
##
|
||||
## @generated
|
||||
##
|
||||
Certificate:
|
||||
Data:
|
||||
Version: 3 (0x2)
|
||||
Serial Number: 1 (0x1)
|
||||
Signature Algorithm: sha1WithRSAEncryption
|
||||
Issuer: C = SE, O = AddTrust AB, OU = AddTrust External TTP Network, CN = AddTrust External CA Root
|
||||
Validity
|
||||
Not Before: May 30 10:48:38 2000 GMT
|
||||
Not After : May 30 10:48:38 2020 GMT
|
||||
Subject: C = SE, O = AddTrust AB, OU = AddTrust External TTP Network, CN = AddTrust External CA Root
|
||||
Subject Public Key Info:
|
||||
Public Key Algorithm: rsaEncryption
|
||||
Public-Key: (2048 bit)
|
||||
Modulus:
|
||||
00:b7:f7:1a:33:e6:f2:00:04:2d:39:e0:4e:5b:ed:
|
||||
1f:bc:6c:0f:cd:b5:fa:23:b6:ce:de:9b:11:33:97:
|
||||
a4:29:4c:7d:93:9f:bd:4a:bc:93:ed:03:1a:e3:8f:
|
||||
cf:e5:6d:50:5a:d6:97:29:94:5a:80:b0:49:7a:db:
|
||||
2e:95:fd:b8:ca:bf:37:38:2d:1e:3e:91:41:ad:70:
|
||||
56:c7:f0:4f:3f:e8:32:9e:74:ca:c8:90:54:e9:c6:
|
||||
5f:0f:78:9d:9a:40:3c:0e:ac:61:aa:5e:14:8f:9e:
|
||||
87:a1:6a:50:dc:d7:9a:4e:af:05:b3:a6:71:94:9c:
|
||||
71:b3:50:60:0a:c7:13:9d:38:07:86:02:a8:e9:a8:
|
||||
69:26:18:90:ab:4c:b0:4f:23:ab:3a:4f:84:d8:df:
|
||||
ce:9f:e1:69:6f:bb:d7:42:d7:6b:44:e4:c7:ad:ee:
|
||||
6d:41:5f:72:5a:71:08:37:b3:79:65:a4:59:a0:94:
|
||||
37:f7:00:2f:0d:c2:92:72:da:d0:38:72:db:14:a8:
|
||||
45:c4:5d:2a:7d:b7:b4:d6:c4:ee:ac:cd:13:44:b7:
|
||||
c9:2b:dd:43:00:25:fa:61:b9:69:6a:58:23:11:b7:
|
||||
a7:33:8f:56:75:59:f5:cd:29:d7:46:b7:0a:2b:65:
|
||||
b6:d3:42:6f:15:b2:b8:7b:fb:ef:e9:5d:53:d5:34:
|
||||
5a:27
|
||||
Exponent: 65537 (0x10001)
|
||||
X509v3 extensions:
|
||||
X509v3 Subject Key Identifier:
|
||||
AD:BD:98:7A:34:B4:26:F7:FA:C4:26:54:EF:03:BD:E0:24:CB:54:1A
|
||||
X509v3 Key Usage:
|
||||
Certificate Sign, CRL Sign
|
||||
X509v3 Basic Constraints: critical
|
||||
CA:TRUE
|
||||
X509v3 Authority Key Identifier:
|
||||
keyid:AD:BD:98:7A:34:B4:26:F7:FA:C4:26:54:EF:03:BD:E0:24:CB:54:1A
|
||||
DirName:/C=SE/O=AddTrust AB/OU=AddTrust External TTP Network/CN=AddTrust External CA Root
|
||||
serial:01
|
||||
Signature Algorithm: sha1WithRSAEncryption
|
||||
Signature Value:
|
||||
b0:9b:e0:85:25:c2:d6:23:e2:0f:96:06:92:9d:41:98:9c:d9:
|
||||
84:79:81:d9:1e:5b:14:07:23:36:65:8f:b0:d8:77:bb:ac:41:
|
||||
6c:47:60:83:51:b0:f9:32:3d:e7:fc:f6:26:13:c7:80:16:a5:
|
||||
bf:5a:fc:87:cf:78:79:89:21:9a:e2:4c:07:0a:86:35:bc:f2:
|
||||
de:51:c4:d2:96:b7:dc:7e:4e:ee:70:fd:1c:39:eb:0c:02:51:
|
||||
14:2d:8e:bd:16:e0:c1:df:46:75:e7:24:ad:ec:f4:42:b4:85:
|
||||
93:70:10:67:ba:9d:06:35:4a:18:d3:2b:7a:cc:51:42:a1:7a:
|
||||
63:d1:e6:bb:a1:c5:2b:c2:36:be:13:0d:e6:bd:63:7e:79:7b:
|
||||
a7:09:0d:40:ab:6a:dd:8f:8a:c3:f6:f6:8c:1a:42:05:51:d4:
|
||||
45:f5:9f:a7:62:21:68:15:20:43:3c:99:e7:7c:bd:24:d8:a9:
|
||||
91:17:73:88:3f:56:1b:31:38:18:b4:71:0f:9a:cd:c8:0e:9e:
|
||||
8e:2e:1b:e1:8c:98:83:cb:1f:31:f1:44:4c:c6:04:73:49:76:
|
||||
60:0f:c7:f8:bd:17:80:6b:2e:e9:cc:4c:0e:5a:9a:79:0f:20:
|
||||
0a:2e:d5:9e:63:26:1e:55:92:94:d8:82:17:5a:7b:d0:bc:c7:
|
||||
8f:4e:86:04
|
||||
SHA1 Fingerprint=02:FA:F3:E2:91:43:54:68:60:78:57:69:4D:F5:E4:5B:68:85:18:68
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU
|
||||
MBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFs
|
||||
IFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290
|
||||
MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzELMAkGA1UEBhMCU0Ux
|
||||
FDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5h
|
||||
bCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9v
|
||||
dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvt
|
||||
H7xsD821+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9
|
||||
uMq/NzgtHj6RQa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzX
|
||||
mk6vBbOmcZSccbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LX
|
||||
a0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzN
|
||||
E0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0
|
||||
WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYD
|
||||
VR0PBAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0
|
||||
Jvf6xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRU
|
||||
cnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsx
|
||||
IjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJKoZIhvcN
|
||||
AQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZlj7DYd7usQWxH
|
||||
YINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5
|
||||
6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvC
|
||||
Nr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEX
|
||||
c4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5a
|
||||
mnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ=
|
||||
-----END CERTIFICATE-----
|
||||
@@ -1,98 +0,0 @@
|
||||
##
|
||||
## AddTrust Low-Value Services Root
|
||||
##
|
||||
## This is a single X.509 certificate for a public Certificate
|
||||
## Authority (CA). It was automatically extracted from Mozilla's
|
||||
## root CA list (the file `certdata.txt' in security/nss).
|
||||
##
|
||||
## Extracted from nss
|
||||
## with $FreeBSD: head/secure/caroot/MAca-bundle.pl 352951 2019-10-02 01:27:50Z kevans $
|
||||
##
|
||||
## @generated
|
||||
##
|
||||
Certificate:
|
||||
Data:
|
||||
Version: 3 (0x2)
|
||||
Serial Number: 1 (0x1)
|
||||
Signature Algorithm: sha1WithRSAEncryption
|
||||
Issuer: C = SE, O = AddTrust AB, OU = AddTrust TTP Network, CN = AddTrust Class 1 CA Root
|
||||
Validity
|
||||
Not Before: May 30 10:38:31 2000 GMT
|
||||
Not After : May 30 10:38:31 2020 GMT
|
||||
Subject: C = SE, O = AddTrust AB, OU = AddTrust TTP Network, CN = AddTrust Class 1 CA Root
|
||||
Subject Public Key Info:
|
||||
Public Key Algorithm: rsaEncryption
|
||||
Public-Key: (2048 bit)
|
||||
Modulus:
|
||||
00:96:96:d4:21:49:60:e2:6b:e8:41:07:0c:de:c4:
|
||||
e0:dc:13:23:cd:c1:35:c7:fb:d6:4e:11:0a:67:5e:
|
||||
f5:06:5b:6b:a5:08:3b:5b:29:16:3a:e7:87:b2:34:
|
||||
06:c5:bc:05:a5:03:7c:82:cb:29:10:ae:e1:88:81:
|
||||
bd:d6:9e:d3:fe:2d:56:c1:15:ce:e3:26:9d:15:2e:
|
||||
10:fb:06:8f:30:04:de:a7:b4:63:b4:ff:b1:9c:ae:
|
||||
3c:af:77:b6:56:c5:b5:ab:a2:e9:69:3a:3d:0e:33:
|
||||
79:32:3f:70:82:92:99:61:6d:8d:30:08:8f:71:3f:
|
||||
a6:48:57:19:f8:25:dc:4b:66:5c:a5:74:8f:98:ae:
|
||||
c8:f9:c0:06:22:e7:ac:73:df:a5:2e:fb:52:dc:b1:
|
||||
15:65:20:fa:35:66:69:de:df:2c:f1:6e:bc:30:db:
|
||||
2c:24:12:db:eb:35:35:68:90:cb:00:b0:97:21:3d:
|
||||
74:21:23:65:34:2b:bb:78:59:a3:d6:e1:76:39:9a:
|
||||
a4:49:8e:8c:74:af:6e:a4:9a:a3:d9:9b:d2:38:5c:
|
||||
9b:a2:18:cc:75:23:84:be:eb:e2:4d:33:71:8e:1a:
|
||||
f0:c2:f8:c7:1d:a2:ad:03:97:2c:f8:cf:25:c6:f6:
|
||||
b8:24:31:b1:63:5d:92:7f:63:f0:25:c9:53:2e:1f:
|
||||
bf:4d
|
||||
Exponent: 65537 (0x10001)
|
||||
X509v3 extensions:
|
||||
X509v3 Subject Key Identifier:
|
||||
95:B1:B4:F0:94:B6:BD:C7:DA:D1:11:09:21:BE:C1:AF:49:FD:10:7B
|
||||
X509v3 Key Usage:
|
||||
Certificate Sign, CRL Sign
|
||||
X509v3 Basic Constraints: critical
|
||||
CA:TRUE
|
||||
X509v3 Authority Key Identifier:
|
||||
keyid:95:B1:B4:F0:94:B6:BD:C7:DA:D1:11:09:21:BE:C1:AF:49:FD:10:7B
|
||||
DirName:/C=SE/O=AddTrust AB/OU=AddTrust TTP Network/CN=AddTrust Class 1 CA Root
|
||||
serial:01
|
||||
Signature Algorithm: sha1WithRSAEncryption
|
||||
Signature Value:
|
||||
2c:6d:64:1b:1f:cd:0d:dd:b9:01:fa:96:63:34:32:48:47:99:
|
||||
ae:97:ed:fd:72:16:a6:73:47:5a:f4:eb:dd:e9:f5:d6:fb:45:
|
||||
cc:29:89:44:5d:bf:46:39:3d:e8:ee:bc:4d:54:86:1e:1d:6c:
|
||||
e3:17:27:43:e1:89:56:2b:a9:6f:72:4e:49:33:e3:72:7c:2a:
|
||||
23:9a:bc:3e:ff:28:2a:ed:a3:ff:1c:23:ba:43:57:09:67:4d:
|
||||
4b:62:06:2d:f8:ff:6c:9d:60:1e:d8:1c:4b:7d:b5:31:2f:d9:
|
||||
d0:7c:5d:f8:de:6b:83:18:78:37:57:2f:e8:33:07:67:df:1e:
|
||||
c7:6b:2a:95:76:ae:8f:57:a3:f0:f4:52:b4:a9:53:08:cf:e0:
|
||||
4f:d3:7a:53:8b:fd:bb:1c:56:36:f2:fe:b2:b6:e5:76:bb:d5:
|
||||
22:65:a7:3f:fe:d1:66:ad:0b:bc:6b:99:86:ef:3f:7d:f3:18:
|
||||
32:ca:7b:c6:e3:ab:64:46:95:f8:26:69:d9:55:83:7b:2c:96:
|
||||
07:ff:59:2c:44:a3:c6:e5:e9:a9:dc:a1:63:80:5a:21:5e:21:
|
||||
cf:53:54:f0:ba:6f:89:db:a8:aa:95:cf:8b:e3:71:cc:1e:1b:
|
||||
20:44:08:c0:7a:b6:40:fd:c4:e4:35:e1:1d:16:1c:d0:bc:2b:
|
||||
8e:d6:71:d9
|
||||
SHA1 Fingerprint=CC:AB:0E:A0:4C:23:01:D6:69:7B:DD:37:9F:CD:12:EB:24:E3:94:9D
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEU
|
||||
MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3
|
||||
b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMw
|
||||
MTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
|
||||
QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYD
|
||||
VQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUA
|
||||
A4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ul
|
||||
CDtbKRY654eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6n
|
||||
tGO0/7Gcrjyvd7ZWxbWroulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyl
|
||||
dI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1Zmne3yzxbrww2ywkEtvrNTVokMsAsJch
|
||||
PXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJuiGMx1I4S+6+JNM3GOGvDC
|
||||
+Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8wHQYDVR0O
|
||||
BBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8E
|
||||
BTADAQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBl
|
||||
MQswCQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFk
|
||||
ZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENB
|
||||
IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxtZBsfzQ3duQH6lmM0MkhHma6X
|
||||
7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0PhiVYrqW9yTkkz
|
||||
43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY
|
||||
eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJl
|
||||
pz/+0WatC7xrmYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOA
|
||||
WiFeIc9TVPC6b4nbqKqVz4vjccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk=
|
||||
-----END CERTIFICATE-----
|
||||
@@ -1,99 +0,0 @@
|
||||
##
|
||||
## Cybertrust Global Root
|
||||
##
|
||||
## This is a single X.509 certificate for a public Certificate
|
||||
## Authority (CA). It was automatically extracted from Mozilla's
|
||||
## root CA list (the file `certdata.txt' in security/nss).
|
||||
##
|
||||
## It contains a certificate trusted for server authentication.
|
||||
##
|
||||
## Extracted from nss
|
||||
##
|
||||
## @generated
|
||||
##
|
||||
Certificate:
|
||||
Data:
|
||||
Version: 3 (0x2)
|
||||
Serial Number:
|
||||
04:00:00:00:00:01:0f:85:aa:2d:48
|
||||
Signature Algorithm: sha1WithRSAEncryption
|
||||
Issuer: O = "Cybertrust, Inc", CN = Cybertrust Global Root
|
||||
Validity
|
||||
Not Before: Dec 15 08:00:00 2006 GMT
|
||||
Not After : Dec 15 08:00:00 2021 GMT
|
||||
Subject: O = "Cybertrust, Inc", CN = Cybertrust Global Root
|
||||
Subject Public Key Info:
|
||||
Public Key Algorithm: rsaEncryption
|
||||
Public-Key: (2048 bit)
|
||||
Modulus:
|
||||
00:f8:c8:bc:bd:14:50:66:13:ff:f0:d3:79:ec:23:
|
||||
f2:b7:1a:c7:8e:85:f1:12:73:a6:19:aa:10:db:9c:
|
||||
a2:65:74:5a:77:3e:51:7d:56:f6:dc:23:b6:d4:ed:
|
||||
5f:58:b1:37:4d:d5:49:0e:6e:f5:6a:87:d6:d2:8c:
|
||||
d2:27:c6:e2:ff:36:9f:98:65:a0:13:4e:c6:2a:64:
|
||||
9b:d5:90:12:cf:14:06:f4:3b:e3:d4:28:be:e8:0e:
|
||||
f8:ab:4e:48:94:6d:8e:95:31:10:5c:ed:a2:2d:bd:
|
||||
d5:3a:6d:b2:1c:bb:60:c0:46:4b:01:f5:49:ae:7e:
|
||||
46:8a:d0:74:8d:a1:0c:02:ce:ee:fc:e7:8f:b8:6b:
|
||||
66:f3:7f:44:00:bf:66:25:14:2b:dd:10:30:1d:07:
|
||||
96:3f:4d:f6:6b:b8:8f:b7:7b:0c:a5:38:eb:de:47:
|
||||
db:d5:5d:39:fc:88:a7:f3:d7:2a:74:f1:e8:5a:a2:
|
||||
3b:9f:50:ba:a6:8c:45:35:c2:50:65:95:dc:63:82:
|
||||
ef:dd:bf:77:4d:9c:62:c9:63:73:16:d0:29:0f:49:
|
||||
a9:48:f0:b3:aa:b7:6c:c5:a7:30:39:40:5d:ae:c4:
|
||||
e2:5d:26:53:f0:ce:1c:23:08:61:a8:94:19:ba:04:
|
||||
62:40:ec:1f:38:70:77:12:06:71:a7:30:18:5d:25:
|
||||
27:a5
|
||||
Exponent: 65537 (0x10001)
|
||||
X509v3 extensions:
|
||||
X509v3 Key Usage: critical
|
||||
Certificate Sign, CRL Sign
|
||||
X509v3 Basic Constraints: critical
|
||||
CA:TRUE
|
||||
X509v3 Subject Key Identifier:
|
||||
B6:08:7B:0D:7A:CC:AC:20:4C:86:56:32:5E:CF:AB:6E:85:2D:70:57
|
||||
X509v3 CRL Distribution Points:
|
||||
Full Name:
|
||||
URI:http://www2.public-trust.com/crl/ct/ctroot.crl
|
||||
X509v3 Authority Key Identifier:
|
||||
B6:08:7B:0D:7A:CC:AC:20:4C:86:56:32:5E:CF:AB:6E:85:2D:70:57
|
||||
Signature Algorithm: sha1WithRSAEncryption
|
||||
Signature Value:
|
||||
56:ef:0a:23:a0:54:4e:95:97:c9:f8:89:da:45:c1:d4:a3:00:
|
||||
25:f4:1f:13:ab:b7:a3:85:58:69:c2:30:ad:d8:15:8a:2d:e3:
|
||||
c9:cd:81:5a:f8:73:23:5a:a7:7c:05:f3:fd:22:3b:0e:d1:06:
|
||||
c4:db:36:4c:73:04:8e:e5:b0:22:e4:c5:f3:2e:a5:d9:23:e3:
|
||||
b8:4e:4a:20:a7:6e:02:24:9f:22:60:67:7b:8b:1d:72:09:c5:
|
||||
31:5c:e9:79:9f:80:47:3d:ad:a1:0b:07:14:3d:47:ff:03:69:
|
||||
1a:0c:0b:44:e7:63:25:a7:7f:b2:c9:b8:76:84:ed:23:f6:7d:
|
||||
07:ab:45:7e:d3:df:b3:bf:e9:8a:b6:cd:a8:a2:67:2b:52:d5:
|
||||
b7:65:f0:39:4c:63:a0:91:79:93:52:0f:54:dd:83:bb:9f:d1:
|
||||
8f:a7:53:73:c3:cb:ff:30:ec:7c:04:b8:d8:44:1f:93:5f:71:
|
||||
09:22:b7:6e:3e:ea:1c:03:4e:9d:1a:20:61:fb:81:37:ec:5e:
|
||||
fc:0a:45:ab:d7:e7:17:55:d0:a0:ea:60:9b:a6:f6:e3:8c:5b:
|
||||
29:c2:06:60:14:9d:2d:97:4c:a9:93:15:9d:61:c4:01:5f:48:
|
||||
d6:58:bd:56:31:12:4e:11:c8:21:e0:b3:11:91:65:db:b4:a6:
|
||||
88:38:ce:55
|
||||
SHA1 Fingerprint=5F:43:E5:B1:BF:F8:78:8C:AC:1C:C7:CA:4A:9A:C6:22:2B:CC:34:C6
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYG
|
||||
A1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2Jh
|
||||
bCBSb290MB4XDTA2MTIxNTA4MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UE
|
||||
ChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBS
|
||||
b290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA+Mi8vRRQZhP/8NN5
|
||||
7CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW0ozS
|
||||
J8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2y
|
||||
HLtgwEZLAfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iP
|
||||
t3sMpTjr3kfb1V05/Iin89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNz
|
||||
FtApD0mpSPCzqrdsxacwOUBdrsTiXSZT8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAY
|
||||
XSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/
|
||||
MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2MDSgMqAw
|
||||
hi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3Js
|
||||
MB8GA1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUA
|
||||
A4IBAQBW7wojoFROlZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMj
|
||||
Wqd8BfP9IjsO0QbE2zZMcwSO5bAi5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUx
|
||||
XOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2hO0j9n0Hq0V+09+zv+mKts2o
|
||||
omcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+TX3EJIrduPuoc
|
||||
A06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW
|
||||
WL1WMRJOEcgh4LMRkWXbtKaIOM5V
|
||||
-----END CERTIFICATE-----
|
||||
@@ -1,92 +0,0 @@
|
||||
##
|
||||
## DST Root CA X3
|
||||
##
|
||||
## This is a single X.509 certificate for a public Certificate
|
||||
## Authority (CA). It was automatically extracted from Mozilla's
|
||||
## root CA list (the file `certdata.txt' in security/nss).
|
||||
##
|
||||
## It contains a certificate trusted for server authentication.
|
||||
##
|
||||
## Extracted from nss
|
||||
##
|
||||
## @generated
|
||||
##
|
||||
Certificate:
|
||||
Data:
|
||||
Version: 3 (0x2)
|
||||
Serial Number:
|
||||
44:af:b0:80:d6:a3:27:ba:89:30:39:86:2e:f8:40:6b
|
||||
Signature Algorithm: sha1WithRSAEncryption
|
||||
Issuer: O = Digital Signature Trust Co., CN = DST Root CA X3
|
||||
Validity
|
||||
Not Before: Sep 30 21:12:19 2000 GMT
|
||||
Not After : Sep 30 14:01:15 2021 GMT
|
||||
Subject: O = Digital Signature Trust Co., CN = DST Root CA X3
|
||||
Subject Public Key Info:
|
||||
Public Key Algorithm: rsaEncryption
|
||||
Public-Key: (2048 bit)
|
||||
Modulus:
|
||||
00:df:af:e9:97:50:08:83:57:b4:cc:62:65:f6:90:
|
||||
82:ec:c7:d3:2c:6b:30:ca:5b:ec:d9:c3:7d:c7:40:
|
||||
c1:18:14:8b:e0:e8:33:76:49:2a:e3:3f:21:49:93:
|
||||
ac:4e:0e:af:3e:48:cb:65:ee:fc:d3:21:0f:65:d2:
|
||||
2a:d9:32:8f:8c:e5:f7:77:b0:12:7b:b5:95:c0:89:
|
||||
a3:a9:ba:ed:73:2e:7a:0c:06:32:83:a2:7e:8a:14:
|
||||
30:cd:11:a0:e1:2a:38:b9:79:0a:31:fd:50:bd:80:
|
||||
65:df:b7:51:63:83:c8:e2:88:61:ea:4b:61:81:ec:
|
||||
52:6b:b9:a2:e2:4b:1a:28:9f:48:a3:9e:0c:da:09:
|
||||
8e:3e:17:2e:1e:dd:20:df:5b:c6:2a:8a:ab:2e:bd:
|
||||
70:ad:c5:0b:1a:25:90:74:72:c5:7b:6a:ab:34:d6:
|
||||
30:89:ff:e5:68:13:7b:54:0b:c8:d6:ae:ec:5a:9c:
|
||||
92:1e:3d:64:b3:8c:c6:df:bf:c9:41:70:ec:16:72:
|
||||
d5:26:ec:38:55:39:43:d0:fc:fd:18:5c:40:f1:97:
|
||||
eb:d5:9a:9b:8d:1d:ba:da:25:b9:c6:d8:df:c1:15:
|
||||
02:3a:ab:da:6e:f1:3e:2e:f5:5c:08:9c:3c:d6:83:
|
||||
69:e4:10:9b:19:2a:b6:29:57:e3:e5:3d:9b:9f:f0:
|
||||
02:5d
|
||||
Exponent: 65537 (0x10001)
|
||||
X509v3 extensions:
|
||||
X509v3 Basic Constraints: critical
|
||||
CA:TRUE
|
||||
X509v3 Key Usage: critical
|
||||
Certificate Sign, CRL Sign
|
||||
X509v3 Subject Key Identifier:
|
||||
C4:A7:B1:A4:7B:2C:71:FA:DB:E1:4B:90:75:FF:C4:15:60:85:89:10
|
||||
Signature Algorithm: sha1WithRSAEncryption
|
||||
Signature Value:
|
||||
a3:1a:2c:9b:17:00:5c:a9:1e:ee:28:66:37:3a:bf:83:c7:3f:
|
||||
4b:c3:09:a0:95:20:5d:e3:d9:59:44:d2:3e:0d:3e:bd:8a:4b:
|
||||
a0:74:1f:ce:10:82:9c:74:1a:1d:7e:98:1a:dd:cb:13:4b:b3:
|
||||
20:44:e4:91:e9:cc:fc:7d:a5:db:6a:e5:fe:e6:fd:e0:4e:dd:
|
||||
b7:00:3a:b5:70:49:af:f2:e5:eb:02:f1:d1:02:8b:19:cb:94:
|
||||
3a:5e:48:c4:18:1e:58:19:5f:1e:02:5a:f0:0c:f1:b1:ad:a9:
|
||||
dc:59:86:8b:6e:e9:91:f5:86:ca:fa:b9:66:33:aa:59:5b:ce:
|
||||
e2:a7:16:73:47:cb:2b:cc:99:b0:37:48:cf:e3:56:4b:f5:cf:
|
||||
0f:0c:72:32:87:c6:f0:44:bb:53:72:6d:43:f5:26:48:9a:52:
|
||||
67:b7:58:ab:fe:67:76:71:78:db:0d:a2:56:14:13:39:24:31:
|
||||
85:a2:a8:02:5a:30:47:e1:dd:50:07:bc:02:09:90:00:eb:64:
|
||||
63:60:9b:16:bc:88:c9:12:e6:d2:7d:91:8b:f9:3d:32:8d:65:
|
||||
b4:e9:7c:b1:57:76:ea:c5:b6:28:39:bf:15:65:1c:c8:f6:77:
|
||||
96:6a:0a:8d:77:0b:d8:91:0b:04:8e:07:db:29:b6:0a:ee:9d:
|
||||
82:35:35:10
|
||||
SHA1 Fingerprint=DA:C9:02:4F:54:D8:F6:DF:94:93:5F:B1:73:26:38:CA:6A:D7:7C:13
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/
|
||||
MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT
|
||||
DkRTVCBSb290IENBIFgzMB4XDTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVow
|
||||
PzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYDVQQD
|
||||
Ew5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
|
||||
AN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmTrE4O
|
||||
rz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEq
|
||||
OLl5CjH9UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9b
|
||||
xiqKqy69cK3FCxolkHRyxXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw
|
||||
7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40dutolucbY38EVAjqr2m7xPi71XAicPNaD
|
||||
aeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV
|
||||
HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQMA0GCSqG
|
||||
SIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69
|
||||
ikugdB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXr
|
||||
AvHRAosZy5Q6XkjEGB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZz
|
||||
R8srzJmwN0jP41ZL9c8PDHIyh8bwRLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5
|
||||
JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubSfZGL+T0yjWW06XyxV3bqxbYo
|
||||
Ob8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ
|
||||
-----END CERTIFICATE-----
|
||||
@@ -1,140 +0,0 @@
|
||||
##
|
||||
## E-Tugra Certification Authority
|
||||
##
|
||||
## This is a single X.509 certificate for a public Certificate
|
||||
## Authority (CA). It was automatically extracted from Mozilla's
|
||||
## root CA list (the file `certdata.txt' in security/nss).
|
||||
##
|
||||
## It contains a certificate trusted for server authentication.
|
||||
##
|
||||
## Extracted from nss
|
||||
##
|
||||
## @generated
|
||||
##
|
||||
Certificate:
|
||||
Data:
|
||||
Version: 3 (0x2)
|
||||
Serial Number: 7667447206703254355 (0x6a683e9c519bcb53)
|
||||
Signature Algorithm: sha256WithRSAEncryption
|
||||
Issuer: C = TR, L = Ankara, O = E-Tu\C4\9Fra EBG Bili\C5\9Fim Teknolojileri ve Hizmetleri A.\C5\9E., OU = E-Tugra Sertifikasyon Merkezi, CN = E-Tugra Certification Authority
|
||||
Validity
|
||||
Not Before: Mar 5 12:09:48 2013 GMT
|
||||
Not After : Mar 3 12:09:48 2023 GMT
|
||||
Subject: C = TR, L = Ankara, O = E-Tu\C4\9Fra EBG Bili\C5\9Fim Teknolojileri ve Hizmetleri A.\C5\9E., OU = E-Tugra Sertifikasyon Merkezi, CN = E-Tugra Certification Authority
|
||||
Subject Public Key Info:
|
||||
Public Key Algorithm: rsaEncryption
|
||||
Public-Key: (4096 bit)
|
||||
Modulus:
|
||||
00:e2:f5:3f:93:05:51:1e:85:62:54:5e:7a:0b:f5:
|
||||
18:07:83:ae:7e:af:7c:f7:d4:8a:6b:a5:63:43:39:
|
||||
b9:4b:f7:c3:c6:64:89:3d:94:2e:54:80:52:39:39:
|
||||
07:4b:4b:dd:85:07:76:87:cc:bf:2f:95:4c:cc:7d:
|
||||
a7:3d:bc:47:0f:98:70:f8:8c:85:1e:74:8e:92:6d:
|
||||
1b:40:d1:99:0d:bb:75:6e:c8:a9:6b:9a:c0:84:31:
|
||||
af:ca:43:cb:eb:2b:34:e8:8f:97:6b:01:9b:d5:0e:
|
||||
4a:08:aa:5b:92:74:85:43:d3:80:ae:a1:88:5b:ae:
|
||||
b3:ea:5e:cb:16:9a:77:44:c8:a1:f6:54:68:ce:de:
|
||||
8f:97:2b:ba:5b:40:02:0c:64:17:c0:b5:93:cd:e1:
|
||||
f1:13:66:ce:0c:79:ef:d1:91:28:ab:5f:a0:12:52:
|
||||
30:73:19:8e:8f:e1:8c:07:a2:c3:bb:4a:f0:ea:1f:
|
||||
15:a8:ee:25:cc:a4:46:f8:1b:22:ef:b3:0e:43:ba:
|
||||
2c:24:b8:c5:2c:5c:d4:1c:f8:5d:64:bd:c3:93:5e:
|
||||
28:a7:3f:27:f1:8e:1e:d3:2a:50:05:a3:55:d9:cb:
|
||||
e7:39:53:c0:98:9e:8c:54:62:8b:26:b0:f7:7d:8d:
|
||||
7c:e4:c6:9e:66:42:55:82:47:e7:b2:58:8d:66:f7:
|
||||
07:7c:2e:36:e6:50:1c:3f:db:43:24:c5:bf:86:47:
|
||||
79:b3:79:1c:f7:5a:f4:13:ec:6c:f8:3f:e2:59:1f:
|
||||
95:ee:42:3e:b9:ad:a8:32:85:49:97:46:fe:4b:31:
|
||||
8f:5a:cb:ad:74:47:1f:e9:91:b7:df:28:04:22:a0:
|
||||
d4:0f:5d:e2:79:4f:ea:6c:85:86:bd:a8:a6:ce:e4:
|
||||
fa:c3:e1:b3:ae:de:3c:51:ee:cb:13:7c:01:7f:84:
|
||||
0e:5d:51:94:9e:13:0c:b6:2e:a5:4c:f9:39:70:36:
|
||||
6f:96:ca:2e:0c:44:55:c5:ca:fa:5d:02:a3:df:d6:
|
||||
64:8c:5a:b3:01:0a:a9:b5:0a:47:17:ff:ef:91:40:
|
||||
2a:8e:a1:46:3a:31:98:e5:11:fc:cc:bb:49:56:8a:
|
||||
fc:b9:d0:61:9a:6f:65:6c:e6:c3:cb:3e:75:49:fe:
|
||||
8f:a7:e2:89:c5:67:d7:9d:46:13:4e:31:76:3b:24:
|
||||
b3:9e:11:65:86:ab:7f:ef:1d:d4:f8:bc:e7:ac:5a:
|
||||
5c:b7:5a:47:5c:55:ce:55:b4:22:71:5b:5b:0b:f0:
|
||||
cf:dc:a0:61:64:ea:a9:d7:68:0a:63:a7:e0:0d:3f:
|
||||
a0:af:d3:aa:d2:7e:ef:51:a0:e6:51:2b:55:92:15:
|
||||
17:53:cb:b7:66:0e:66:4c:f8:f9:75:4c:90:e7:12:
|
||||
70:c7:45
|
||||
Exponent: 65537 (0x10001)
|
||||
X509v3 extensions:
|
||||
X509v3 Subject Key Identifier:
|
||||
2E:E3:DB:B2:49:D0:9C:54:79:5C:FA:27:2A:FE:CC:4E:D2:E8:4E:54
|
||||
X509v3 Basic Constraints: critical
|
||||
CA:TRUE
|
||||
X509v3 Authority Key Identifier:
|
||||
2E:E3:DB:B2:49:D0:9C:54:79:5C:FA:27:2A:FE:CC:4E:D2:E8:4E:54
|
||||
X509v3 Key Usage: critical
|
||||
Certificate Sign, CRL Sign
|
||||
Signature Algorithm: sha256WithRSAEncryption
|
||||
Signature Value:
|
||||
05:37:3a:f4:4d:b7:45:e2:45:75:24:8f:b6:77:52:e8:1c:d8:
|
||||
10:93:65:f3:f2:59:06:a4:3e:1e:29:ec:5d:d1:d0:ab:7c:e0:
|
||||
0a:90:48:78:ed:4e:98:03:99:fe:28:60:91:1d:30:1d:b8:63:
|
||||
7c:a8:e6:35:b5:fa:d3:61:76:e6:d6:07:4b:ca:69:9a:b2:84:
|
||||
7a:77:93:45:17:15:9f:24:d0:98:13:12:ff:bb:a0:2e:fd:4e:
|
||||
4c:87:f8:ce:5c:aa:98:1b:05:e0:00:46:4a:82:80:a5:33:8b:
|
||||
28:dc:ed:38:d3:df:e5:3e:e9:fe:fb:59:dd:61:84:4f:d2:54:
|
||||
96:13:61:13:3e:8f:80:69:be:93:47:b5:35:43:d2:5a:bb:3d:
|
||||
5c:ef:b3:42:47:cd:3b:55:13:06:b0:09:db:fd:63:f6:3a:88:
|
||||
0a:99:6f:7e:e1:ce:1b:53:6a:44:66:23:51:08:7b:bc:5b:52:
|
||||
a2:fd:06:37:38:40:61:8f:4a:96:b8:90:37:f8:66:c7:78:90:
|
||||
00:15:2e:8b:ad:51:35:53:07:a8:6b:68:ae:f9:4e:3c:07:26:
|
||||
cd:08:05:70:cc:39:3f:76:bd:a5:d3:67:26:01:86:a6:53:d2:
|
||||
60:3b:7c:43:7f:55:8a:bc:95:1a:c1:28:39:4c:1f:43:d2:91:
|
||||
f4:72:59:8a:b9:56:fc:3f:b4:9d:da:70:9c:76:5a:8c:43:50:
|
||||
ee:8e:30:72:4d:df:ff:49:f7:c6:a9:67:d9:6d:ac:02:11:e2:
|
||||
3a:16:25:a7:58:08:cb:6f:53:41:9c:48:38:47:68:33:d1:d7:
|
||||
c7:8f:d4:74:21:d4:c3:05:90:7a:ff:ce:96:88:b1:15:29:5d:
|
||||
23:ab:d0:60:a1:12:4f:de:f4:17:cd:32:e5:c9:bf:c8:43:ad:
|
||||
fd:2e:8e:f1:af:e2:f4:98:fa:12:1f:20:d8:c0:a7:0c:85:c5:
|
||||
90:f4:3b:2d:96:26:b1:2c:be:4c:ab:eb:b1:d2:8a:c9:db:78:
|
||||
13:0f:1e:09:9d:6d:8f:00:9f:02:da:c1:fa:1f:7a:7a:09:c4:
|
||||
4a:e6:88:2a:97:9f:89:8b:fd:37:5f:5f:3a:ce:38:59:86:4b:
|
||||
af:71:0b:b4:d8:f2:70:4f:9f:32:13:e3:b0:a7:57:e5:da:da:
|
||||
43:cb:84:34:f2:28:c4:ea:6d:f4:2a:ef:c1:6b:76:da:fb:7e:
|
||||
bb:85:3c:d2:53:c2:4d:be:71:e1:45:d1:fd:23:67:0d:13:75:
|
||||
fb:cf:65:67:22:9d:ae:b0:09:d1:09:ff:1d:34:bf:fe:23:97:
|
||||
37:d2:39:fa:3d:0d:06:0b:b4:db:3b:a3:ab:6f:5c:1d:b6:7e:
|
||||
e8:b3:82:34:ed:06:5c:24
|
||||
SHA1 Fingerprint=51:C6:E7:08:49:06:6E:F3:92:D4:5C:A0:0D:6D:A3:62:8F:C3:52:39
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIGSzCCBDOgAwIBAgIIamg+nFGby1MwDQYJKoZIhvcNAQELBQAwgbIxCzAJBgNV
|
||||
BAYTAlRSMQ8wDQYDVQQHDAZBbmthcmExQDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBC
|
||||
aWxpxZ9pbSBUZWtub2xvamlsZXJpIHZlIEhpem1ldGxlcmkgQS7Fni4xJjAkBgNV
|
||||
BAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBNZXJrZXppMSgwJgYDVQQDDB9FLVR1
|
||||
Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTEzMDMwNTEyMDk0OFoXDTIz
|
||||
MDMwMzEyMDk0OFowgbIxCzAJBgNVBAYTAlRSMQ8wDQYDVQQHDAZBbmthcmExQDA+
|
||||
BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamlsZXJpIHZlIEhp
|
||||
em1ldGxlcmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBN
|
||||
ZXJrZXppMSgwJgYDVQQDDB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5
|
||||
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA4vU/kwVRHoViVF56C/UY
|
||||
B4Oufq9899SKa6VjQzm5S/fDxmSJPZQuVIBSOTkHS0vdhQd2h8y/L5VMzH2nPbxH
|
||||
D5hw+IyFHnSOkm0bQNGZDbt1bsipa5rAhDGvykPL6ys06I+XawGb1Q5KCKpbknSF
|
||||
Q9OArqGIW66z6l7LFpp3RMih9lRozt6Plyu6W0ACDGQXwLWTzeHxE2bODHnv0ZEo
|
||||
q1+gElIwcxmOj+GMB6LDu0rw6h8VqO4lzKRG+Bsi77MOQ7osJLjFLFzUHPhdZL3D
|
||||
k14opz8n8Y4e0ypQBaNV2cvnOVPAmJ6MVGKLJrD3fY185MaeZkJVgkfnsliNZvcH
|
||||
fC425lAcP9tDJMW/hkd5s3kc91r0E+xs+D/iWR+V7kI+ua2oMoVJl0b+SzGPWsut
|
||||
dEcf6ZG33ygEIqDUD13ieU/qbIWGvaimzuT6w+Gzrt48Ue7LE3wBf4QOXVGUnhMM
|
||||
ti6lTPk5cDZvlsouDERVxcr6XQKj39ZkjFqzAQqptQpHF//vkUAqjqFGOjGY5RH8
|
||||
zLtJVor8udBhmm9lbObDyz51Sf6Pp+KJxWfXnUYTTjF2OySznhFlhqt/7x3U+Lzn
|
||||
rFpct1pHXFXOVbQicVtbC/DP3KBhZOqp12gKY6fgDT+gr9Oq0n7vUaDmUStVkhUX
|
||||
U8u3Zg5mTPj5dUyQ5xJwx0UCAwEAAaNjMGEwHQYDVR0OBBYEFC7j27JJ0JxUeVz6
|
||||
Jyr+zE7S6E5UMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAULuPbsknQnFR5
|
||||
XPonKv7MTtLoTlQwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQAF
|
||||
Nzr0TbdF4kV1JI+2d1LoHNgQk2Xz8lkGpD4eKexd0dCrfOAKkEh47U6YA5n+KGCR
|
||||
HTAduGN8qOY1tfrTYXbm1gdLymmasoR6d5NFFxWfJNCYExL/u6Au/U5Mh/jOXKqY
|
||||
GwXgAEZKgoClM4so3O0409/lPun++1ndYYRP0lSWE2ETPo+Aab6TR7U1Q9Jauz1c
|
||||
77NCR807VRMGsAnb/WP2OogKmW9+4c4bU2pEZiNRCHu8W1Ki/QY3OEBhj0qWuJA3
|
||||
+GbHeJAAFS6LrVE1Uweoa2iu+U48BybNCAVwzDk/dr2l02cmAYamU9JgO3xDf1WK
|
||||
vJUawSg5TB9D0pH0clmKuVb8P7Sd2nCcdlqMQ1DujjByTd//SffGqWfZbawCEeI6
|
||||
FiWnWAjLb1NBnEg4R2gz0dfHj9R0IdTDBZB6/86WiLEVKV0jq9BgoRJP3vQXzTLl
|
||||
yb/IQ639Lo7xr+L0mPoSHyDYwKcMhcWQ9DstliaxLL5Mq+ux0orJ23gTDx4JnW2P
|
||||
AJ8C2sH6H3p6CcRK5ogql5+Ji/03X186zjhZhkuvcQu02PJwT58yE+Owp1fl2tpD
|
||||
y4Q08ijE6m30Ku/Ba3ba+367hTzSU8JNvnHhRdH9I2cNE3X7z2VnIp2usAnRCf8d
|
||||
NL/+I5c30jn6PQ0GC7TbO6Orb1wdtn7os4I07QZcJA==
|
||||
-----END CERTIFICATE-----
|
||||
File renamed without changes.
@@ -1,90 +0,0 @@
|
||||
##
|
||||
## GeoTrust Global CA
|
||||
##
|
||||
## This is a single X.509 certificate for a public Certificate
|
||||
## Authority (CA). It was automatically extracted from Mozilla's
|
||||
## root CA list (the file `certdata.txt' in security/nss).
|
||||
##
|
||||
## Extracted from nss
|
||||
## with $FreeBSD: head/secure/caroot/MAca-bundle.pl 352951 2019-10-02 01:27:50Z kevans $
|
||||
##
|
||||
## @generated
|
||||
##
|
||||
Certificate:
|
||||
Data:
|
||||
Version: 3 (0x2)
|
||||
Serial Number: 144470 (0x23456)
|
||||
Signature Algorithm: sha1WithRSAEncryption
|
||||
Issuer: C = US, O = GeoTrust Inc., CN = GeoTrust Global CA
|
||||
Validity
|
||||
Not Before: May 21 04:00:00 2002 GMT
|
||||
Not After : May 21 04:00:00 2022 GMT
|
||||
Subject: C = US, O = GeoTrust Inc., CN = GeoTrust Global CA
|
||||
Subject Public Key Info:
|
||||
Public Key Algorithm: rsaEncryption
|
||||
Public-Key: (2048 bit)
|
||||
Modulus:
|
||||
00:da:cc:18:63:30:fd:f4:17:23:1a:56:7e:5b:df:
|
||||
3c:6c:38:e4:71:b7:78:91:d4:bc:a1:d8:4c:f8:a8:
|
||||
43:b6:03:e9:4d:21:07:08:88:da:58:2f:66:39:29:
|
||||
bd:05:78:8b:9d:38:e8:05:b7:6a:7e:71:a4:e6:c4:
|
||||
60:a6:b0:ef:80:e4:89:28:0f:9e:25:d6:ed:83:f3:
|
||||
ad:a6:91:c7:98:c9:42:18:35:14:9d:ad:98:46:92:
|
||||
2e:4f:ca:f1:87:43:c1:16:95:57:2d:50:ef:89:2d:
|
||||
80:7a:57:ad:f2:ee:5f:6b:d2:00:8d:b9:14:f8:14:
|
||||
15:35:d9:c0:46:a3:7b:72:c8:91:bf:c9:55:2b:cd:
|
||||
d0:97:3e:9c:26:64:cc:df:ce:83:19:71:ca:4e:e6:
|
||||
d4:d5:7b:a9:19:cd:55:de:c8:ec:d2:5e:38:53:e5:
|
||||
5c:4f:8c:2d:fe:50:23:36:fc:66:e6:cb:8e:a4:39:
|
||||
19:00:b7:95:02:39:91:0b:0e:fe:38:2e:d1:1d:05:
|
||||
9a:f6:4d:3e:6f:0f:07:1d:af:2c:1e:8f:60:39:e2:
|
||||
fa:36:53:13:39:d4:5e:26:2b:db:3d:a8:14:bd:32:
|
||||
eb:18:03:28:52:04:71:e5:ab:33:3d:e1:38:bb:07:
|
||||
36:84:62:9c:79:ea:16:30:f4:5f:c0:2b:e8:71:6b:
|
||||
e4:f9
|
||||
Exponent: 65537 (0x10001)
|
||||
X509v3 extensions:
|
||||
X509v3 Basic Constraints: critical
|
||||
CA:TRUE
|
||||
X509v3 Subject Key Identifier:
|
||||
C0:7A:98:68:8D:89:FB:AB:05:64:0C:11:7D:AA:7D:65:B8:CA:CC:4E
|
||||
X509v3 Authority Key Identifier:
|
||||
C0:7A:98:68:8D:89:FB:AB:05:64:0C:11:7D:AA:7D:65:B8:CA:CC:4E
|
||||
Signature Algorithm: sha1WithRSAEncryption
|
||||
Signature Value:
|
||||
35:e3:29:6a:e5:2f:5d:54:8e:29:50:94:9f:99:1a:14:e4:8f:
|
||||
78:2a:62:94:a2:27:67:9e:d0:cf:1a:5e:47:e9:c1:b2:a4:cf:
|
||||
dd:41:1a:05:4e:9b:4b:ee:4a:6f:55:52:b3:24:a1:37:0a:eb:
|
||||
64:76:2a:2e:2c:f3:fd:3b:75:90:bf:fa:71:d8:c7:3d:37:d2:
|
||||
b5:05:95:62:b9:a6:de:89:3d:36:7b:38:77:48:97:ac:a6:20:
|
||||
8f:2e:a6:c9:0c:c2:b2:99:45:00:c7:ce:11:51:22:22:e0:a5:
|
||||
ea:b6:15:48:09:64:ea:5e:4f:74:f7:05:3e:c7:8a:52:0c:db:
|
||||
15:b4:bd:6d:9b:e5:c6:b1:54:68:a9:e3:69:90:b6:9a:a5:0f:
|
||||
b8:b9:3f:20:7d:ae:4a:b5:b8:9c:e4:1d:b6:ab:e6:94:a5:c1:
|
||||
c7:83:ad:db:f5:27:87:0e:04:6c:d5:ff:dd:a0:5d:ed:87:52:
|
||||
b7:2b:15:02:ae:39:a6:6a:74:e9:da:c4:e7:bc:4d:34:1e:a9:
|
||||
5c:4d:33:5f:92:09:2f:88:66:5d:77:97:c7:1d:76:13:a9:d5:
|
||||
e5:f1:16:09:11:35:d5:ac:db:24:71:70:2c:98:56:0b:d9:17:
|
||||
b4:d1:e3:51:2b:5e:75:e8:d5:d0:dc:4f:34:ed:c2:05:66:80:
|
||||
a1:cb:e6:33
|
||||
SHA1 Fingerprint=DE:28:F4:A4:FF:E5:B9:2F:A3:C5:03:D1:A3:49:A7:F9:96:2A:82:12
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT
|
||||
MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i
|
||||
YWwgQ0EwHhcNMDIwNTIxMDQwMDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQG
|
||||
EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UEAxMSR2VvVHJ1c3Qg
|
||||
R2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2swYYzD9
|
||||
9BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjoBbdq
|
||||
fnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDv
|
||||
iS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU
|
||||
1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+
|
||||
bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5aszPeE4uwc2hGKceeoW
|
||||
MPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTA
|
||||
ephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVkDBF9qn1l
|
||||
uMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKIn
|
||||
Z57QzxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfS
|
||||
tQWVYrmm3ok9Nns4d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcF
|
||||
PseKUgzbFbS9bZvlxrFUaKnjaZC2mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Un
|
||||
hw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6pXE0zX5IJL4hmXXeXxx12E6nV
|
||||
5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvmMw==
|
||||
-----END CERTIFICATE-----
|
||||
@@ -1,99 +0,0 @@
|
||||
##
|
||||
## GlobalSign Root CA - R2
|
||||
##
|
||||
## This is a single X.509 certificate for a public Certificate
|
||||
## Authority (CA). It was automatically extracted from Mozilla's
|
||||
## root CA list (the file `certdata.txt' in security/nss).
|
||||
##
|
||||
## It contains a certificate trusted for server authentication.
|
||||
##
|
||||
## Extracted from nss
|
||||
##
|
||||
## @generated
|
||||
##
|
||||
Certificate:
|
||||
Data:
|
||||
Version: 3 (0x2)
|
||||
Serial Number:
|
||||
04:00:00:00:00:01:0f:86:26:e6:0d
|
||||
Signature Algorithm: sha1WithRSAEncryption
|
||||
Issuer: OU = GlobalSign Root CA - R2, O = GlobalSign, CN = GlobalSign
|
||||
Validity
|
||||
Not Before: Dec 15 08:00:00 2006 GMT
|
||||
Not After : Dec 15 08:00:00 2021 GMT
|
||||
Subject: OU = GlobalSign Root CA - R2, O = GlobalSign, CN = GlobalSign
|
||||
Subject Public Key Info:
|
||||
Public Key Algorithm: rsaEncryption
|
||||
Public-Key: (2048 bit)
|
||||
Modulus:
|
||||
00:a6:cf:24:0e:be:2e:6f:28:99:45:42:c4:ab:3e:
|
||||
21:54:9b:0b:d3:7f:84:70:fa:12:b3:cb:bf:87:5f:
|
||||
c6:7f:86:d3:b2:30:5c:d6:fd:ad:f1:7b:dc:e5:f8:
|
||||
60:96:09:92:10:f5:d0:53:de:fb:7b:7e:73:88:ac:
|
||||
52:88:7b:4a:a6:ca:49:a6:5e:a8:a7:8c:5a:11:bc:
|
||||
7a:82:eb:be:8c:e9:b3:ac:96:25:07:97:4a:99:2a:
|
||||
07:2f:b4:1e:77:bf:8a:0f:b5:02:7c:1b:96:b8:c5:
|
||||
b9:3a:2c:bc:d6:12:b9:eb:59:7d:e2:d0:06:86:5f:
|
||||
5e:49:6a:b5:39:5e:88:34:ec:bc:78:0c:08:98:84:
|
||||
6c:a8:cd:4b:b4:a0:7d:0c:79:4d:f0:b8:2d:cb:21:
|
||||
ca:d5:6c:5b:7d:e1:a0:29:84:a1:f9:d3:94:49:cb:
|
||||
24:62:91:20:bc:dd:0b:d5:d9:cc:f9:ea:27:0a:2b:
|
||||
73:91:c6:9d:1b:ac:c8:cb:e8:e0:a0:f4:2f:90:8b:
|
||||
4d:fb:b0:36:1b:f6:19:7a:85:e0:6d:f2:61:13:88:
|
||||
5c:9f:e0:93:0a:51:97:8a:5a:ce:af:ab:d5:f7:aa:
|
||||
09:aa:60:bd:dc:d9:5f:df:72:a9:60:13:5e:00:01:
|
||||
c9:4a:fa:3f:a4:ea:07:03:21:02:8e:82:ca:03:c2:
|
||||
9b:8f
|
||||
Exponent: 65537 (0x10001)
|
||||
X509v3 extensions:
|
||||
X509v3 Key Usage: critical
|
||||
Certificate Sign, CRL Sign
|
||||
X509v3 Basic Constraints: critical
|
||||
CA:TRUE
|
||||
X509v3 Subject Key Identifier:
|
||||
9B:E2:07:57:67:1C:1E:C0:6A:06:DE:59:B4:9A:2D:DF:DC:19:86:2E
|
||||
X509v3 CRL Distribution Points:
|
||||
Full Name:
|
||||
URI:http://crl.globalsign.net/root-r2.crl
|
||||
X509v3 Authority Key Identifier:
|
||||
9B:E2:07:57:67:1C:1E:C0:6A:06:DE:59:B4:9A:2D:DF:DC:19:86:2E
|
||||
Signature Algorithm: sha1WithRSAEncryption
|
||||
Signature Value:
|
||||
99:81:53:87:1c:68:97:86:91:ec:e0:4a:b8:44:0b:ab:81:ac:
|
||||
27:4f:d6:c1:b8:1c:43:78:b3:0c:9a:fc:ea:2c:3c:6e:61:1b:
|
||||
4d:4b:29:f5:9f:05:1d:26:c1:b8:e9:83:00:62:45:b6:a9:08:
|
||||
93:b9:a9:33:4b:18:9a:c2:f8:87:88:4e:db:dd:71:34:1a:c1:
|
||||
54:da:46:3f:e0:d3:2a:ab:6d:54:22:f5:3a:62:cd:20:6f:ba:
|
||||
29:89:d7:dd:91:ee:d3:5c:a2:3e:a1:5b:41:f5:df:e5:64:43:
|
||||
2d:e9:d5:39:ab:d2:a2:df:b7:8b:d0:c0:80:19:1c:45:c0:2d:
|
||||
8c:e8:f8:2d:a4:74:56:49:c5:05:b5:4f:15:de:6e:44:78:39:
|
||||
87:a8:7e:bb:f3:79:18:91:bb:f4:6f:9d:c1:f0:8c:35:8c:5d:
|
||||
01:fb:c3:6d:b9:ef:44:6d:79:46:31:7e:0a:fe:a9:82:c1:ff:
|
||||
ef:ab:6e:20:c4:50:c9:5f:9d:4d:9b:17:8c:0c:e5:01:c9:a0:
|
||||
41:6a:73:53:fa:a5:50:b4:6e:25:0f:fb:4c:18:f4:fd:52:d9:
|
||||
8e:69:b1:e8:11:0f:de:88:d8:fb:1d:49:f7:aa:de:95:cf:20:
|
||||
78:c2:60:12:db:25:40:8c:6a:fc:7e:42:38:40:64:12:f7:9e:
|
||||
81:e1:93:2e
|
||||
SHA1 Fingerprint=75:E0:AB:B6:13:85:12:27:1C:04:F8:5F:DD:DE:38:E4:B7:24:2E:FE
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4G
|
||||
A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNp
|
||||
Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1
|
||||
MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMjETMBEG
|
||||
A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI
|
||||
hvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6ErPL
|
||||
v4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8
|
||||
eoLrvozps6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklq
|
||||
tTleiDTsvHgMCJiEbKjNS7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzd
|
||||
C9XZzPnqJworc5HGnRusyMvo4KD0L5CLTfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pa
|
||||
zq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6CygPCm48CAwEAAaOBnDCB
|
||||
mTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUm+IH
|
||||
V2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5n
|
||||
bG9iYWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG
|
||||
3lm0mi3f3BmGLjANBgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4Gs
|
||||
J0/WwbgcQ3izDJr86iw8bmEbTUsp9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO
|
||||
291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu01yiPqFbQfXf5WRDLenVOavS
|
||||
ot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG79G+dwfCMNYxd
|
||||
AfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7
|
||||
TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg==
|
||||
-----END CERTIFICATE-----
|
||||
Loaded 100 of 164 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user