diff --git a/8038636.patch b/8038636.patch new file mode 100644 index 0000000..7499277 --- /dev/null +++ b/8038636.patch @@ -0,0 +1,367 @@ +--- icedtea-3.8.0/openjdk/hotspot/src/share/vm/oops/instanceKlass.cpp 2018-09-18 09:01:41.412881903 +0200 ++++ icedtea-3.8.0/openjdk/hotspot/src/share/vm/oops/instanceKlass.cpp 2018-09-18 09:03:51.077559026 +0200 +@@ -3699,6 +3699,10 @@ + ("purge: %s(%s): prev method @%d in version @%d is alive", + method->name()->as_C_string(), + method->signature()->as_C_string(), j, i)); ++ if (method->method_data() != NULL) { ++ // Clean out any weak method links ++ method->method_data()->clean_weak_method_links(); ++ } + } + } + } +@@ -3708,6 +3712,14 @@ + ("purge: previous version stats: live=%d, deleted=%d", live_count, + deleted_count)); + } ++ ++ Array* methods = ik->methods(); ++ int num_methods = methods->length(); ++ for (int index2 = 0; index2 < num_methods; ++index2) { ++ if (methods->at(index2)->method_data() != NULL) { ++ methods->at(index2)->method_data()->clean_weak_method_links(); ++ } ++ } + } + + // External interface for use during class unloading. +--- icedtea-3.8.0/openjdk/hotspot/src/share/vm/oops/methodData.cpp 2018-09-18 09:01:41.412881903 +0200 ++++ icedtea-3.8.0/openjdk/hotspot/src/share/vm/oops/methodData.cpp 2018-09-18 09:03:51.077559026 +0200 +@@ -1559,9 +1559,35 @@ + } + } + +-// Remove SpeculativeTrapData entries that reference an unloaded +-// method +-void MethodData::clean_extra_data(BoolObjectClosure* is_alive) { ++class CleanExtraDataClosure : public StackObj { ++public: ++ virtual bool is_live(Method* m) = 0; ++}; ++ ++// Check for entries that reference an unloaded method ++class CleanExtraDataKlassClosure : public CleanExtraDataClosure { ++private: ++ BoolObjectClosure* _is_alive; ++public: ++ CleanExtraDataKlassClosure(BoolObjectClosure* is_alive) : _is_alive(is_alive) {} ++ bool is_live(Method* m) { ++ return m->method_holder()->is_loader_alive(_is_alive); ++ } ++}; ++ ++// Check for entries that reference a redefined method ++class CleanExtraDataMethodClosure : public CleanExtraDataClosure { ++public: ++ CleanExtraDataMethodClosure() {} ++ bool is_live(Method* m) { ++ return m->on_stack(); ++ } ++}; ++ ++ ++// Remove SpeculativeTrapData entries that reference an unloaded or ++// redefined method ++void MethodData::clean_extra_data(CleanExtraDataClosure* cl) { + DataLayout* dp = extra_data_base(); + DataLayout* end = extra_data_limit(); + +@@ -1572,7 +1598,7 @@ + SpeculativeTrapData* data = new SpeculativeTrapData(dp); + Method* m = data->method(); + assert(m != NULL, "should have a method"); +- if (!m->method_holder()->is_loader_alive(is_alive)) { ++ if (!cl->is_live(m)) { + // "shift" accumulates the number of cells for dead + // SpeculativeTrapData entries that have been seen so + // far. Following entries must be shifted left by that many +@@ -1603,9 +1629,9 @@ + } + } + +-// Verify there's no unloaded method referenced by a ++// Verify there's no unloaded or redefined method referenced by a + // SpeculativeTrapData entry +-void MethodData::verify_extra_data_clean(BoolObjectClosure* is_alive) { ++void MethodData::verify_extra_data_clean(CleanExtraDataClosure* cl) { + #ifdef ASSERT + DataLayout* dp = extra_data_base(); + DataLayout* end = extra_data_limit(); +@@ -1615,7 +1641,7 @@ + case DataLayout::speculative_trap_data_tag: { + SpeculativeTrapData* data = new SpeculativeTrapData(dp); + Method* m = data->method(); +- assert(m != NULL && m->method_holder()->is_loader_alive(is_alive), "Method should exist"); ++ assert(m != NULL && cl->is_live(m), "Method should exist"); + break; + } + case DataLayout::bit_data_tag: +@@ -1641,6 +1667,19 @@ + parameters->clean_weak_klass_links(is_alive); + } + +- clean_extra_data(is_alive); +- verify_extra_data_clean(is_alive); ++ CleanExtraDataKlassClosure cl(is_alive); ++ clean_extra_data(&cl); ++ verify_extra_data_clean(&cl); ++} ++ ++void MethodData::clean_weak_method_links() { ++ for (ProfileData* data = first_data(); ++ is_valid(data); ++ data = next_data(data)) { ++ data->clean_weak_method_links(); ++ } ++ ++ CleanExtraDataMethodClosure cl; ++ clean_extra_data(&cl); ++ verify_extra_data_clean(&cl); + } +--- icedtea-3.8.0/openjdk/hotspot/src/share/vm/oops/methodData.hpp 2018-09-18 09:01:41.412881903 +0200 ++++ icedtea-3.8.0/openjdk/hotspot/src/share/vm/oops/methodData.hpp 2018-09-18 09:03:51.077559026 +0200 +@@ -251,6 +251,9 @@ + + // GC support + void clean_weak_klass_links(BoolObjectClosure* cl); ++ ++ // Redefinition support ++ void clean_weak_method_links(); + }; + + +@@ -508,6 +511,9 @@ + // GC support + virtual void clean_weak_klass_links(BoolObjectClosure* is_alive_closure) {} + ++ // Redefinition support ++ virtual void clean_weak_method_links() {} ++ + // CI translation: ProfileData can represent both MethodDataOop data + // as well as CIMethodData data. This function is provided for translating + // an oop in a ProfileData to the ci equivalent. Generally speaking, +@@ -2030,6 +2036,7 @@ + // + + CC_INTERP_ONLY(class BytecodeInterpreter;) ++class CleanExtraDataClosure; + + class MethodData : public Metadata { + friend class VMStructs; +@@ -2183,9 +2190,9 @@ + static bool profile_parameters_jsr292_only(); + static bool profile_all_parameters(); + +- void clean_extra_data(BoolObjectClosure* is_alive); ++ void clean_extra_data(CleanExtraDataClosure* cl); + void clean_extra_data_helper(DataLayout* dp, int shift, bool reset = false); +- void verify_extra_data_clean(BoolObjectClosure* is_alive); ++ void verify_extra_data_clean(CleanExtraDataClosure* cl); + + public: + static int header_size() { +@@ -2477,6 +2484,8 @@ + static bool profile_return_jsr292_only(); + + void clean_method_data(BoolObjectClosure* is_alive); ++ ++ void clean_weak_method_links(); + }; + + #endif // SHARE_VM_OOPS_METHODDATAOOP_HPP +--- /dev/null Thu Jan 01 00:00:00 1970 +0000 ++++ icedtea-3.8.0/openjdk/hotspot/test/compiler/profiling/spectrapredefineclass/Agent.java Tue Apr 08 09:51:25 2014 +0200 +@@ -0,0 +1,142 @@ ++/* ++ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. ++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. ++ * ++ * This code is free software; you can redistribute it and/or modify it ++ * under the terms of the GNU General Public License version 2 only, as ++ * published by the Free Software Foundation. ++ * ++ * This code is distributed in the hope that it will be useful, but WITHOUT ++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or ++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ++ * version 2 for more details (a copy is included in the LICENSE file that ++ * accompanied this code). ++ * ++ * You should have received a copy of the GNU General Public License version ++ * 2 along with this work; if not, write to the Free Software Foundation, ++ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. ++ * ++ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA ++ * or visit www.oracle.com if you need additional information or have any ++ * questions. ++ */ ++ ++import java.security.*; ++import java.lang.instrument.*; ++import java.lang.reflect.*; ++import java.lang.management.ManagementFactory; ++import com.sun.tools.attach.VirtualMachine; ++ ++class A { ++ void m() { ++ } ++} ++ ++class B extends A { ++ void m() { ++ } ++} ++ ++class C extends A { ++ void m() { ++ } ++} ++ ++class Test { ++ ++ static public void m() throws Exception { ++ for (int i = 0; i < 20000; i++) { ++ m1(a); ++ } ++ for (int i = 0; i < 4; i++) { ++ m1(b); ++ } ++ } ++ ++ static boolean m1(A a) { ++ boolean res = Agent.m2(a); ++ return res; ++ } ++ ++ static public A a = new A(); ++ static public B b = new B(); ++ static public C c = new C(); ++} ++ ++public class Agent implements ClassFileTransformer { ++ ++ ++ static class MemoryChunk { ++ MemoryChunk other; ++ long[] array; ++ MemoryChunk(MemoryChunk other) { ++ other = other; ++ array = new long[1024 * 1024 * 1024]; ++ } ++ } ++ ++ static public boolean m2(A a) { ++ boolean res = false; ++ if (a.getClass() == B.class) { ++ a.m(); ++ } else { ++ res = true; ++ } ++ return res; ++ } ++ ++ static public void main(String[] args) throws Exception { ++ // Create speculative trap entries ++ Test.m(); ++ ++ String nameOfRunningVM = ManagementFactory.getRuntimeMXBean().getName(); ++ int p = nameOfRunningVM.indexOf('@'); ++ String pid = nameOfRunningVM.substring(0, p); ++ ++ // Make the nmethod go away ++ for (int i = 0; i < 10; i++) { ++ System.gc(); ++ } ++ ++ // Redefine class ++ try { ++ VirtualMachine vm = VirtualMachine.attach(pid); ++ vm.loadAgent(System.getProperty("test.classes",".") + "/agent.jar", ""); ++ vm.detach(); ++ } catch (Exception e) { ++ throw new RuntimeException(e); ++ } ++ ++ Test.m(); ++ // GC will hit dead method pointer ++ for (int i = 0; i < 10; i++) { ++ System.gc(); ++ } ++ } ++ ++ public synchronized byte[] transform(final ClassLoader classLoader, ++ final String className, ++ Class classBeingRedefined, ++ ProtectionDomain protectionDomain, ++ byte[] classfileBuffer) { ++ System.out.println("Transforming class " + className); ++ return classfileBuffer; ++ } ++ ++ public static void redefine(String agentArgs, Instrumentation instrumentation, Class to_redefine) { ++ ++ try { ++ instrumentation.retransformClasses(to_redefine); ++ } catch (Exception e) { ++ e.printStackTrace(); ++ } ++ ++ } ++ ++ public static void agentmain(String agentArgs, Instrumentation instrumentation) throws Exception { ++ Agent transformer = new Agent(); ++ instrumentation.addTransformer(transformer, true); ++ ++ redefine(agentArgs, instrumentation, Test.class); ++ } ++} +--- /dev/null Thu Jan 01 00:00:00 1970 +0000 ++++ icedtea-3.8.0/openjdk/hotspot/test/compiler/profiling/spectrapredefineclass/Launcher.java Tue Apr 08 09:51:25 2014 +0200 +@@ -0,0 +1,47 @@ ++/* ++ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. ++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. ++ * ++ * This code is free software; you can redistribute it and/or modify it ++ * under the terms of the GNU General Public License version 2 only, as ++ * published by the Free Software Foundation. ++ * ++ * This code is distributed in the hope that it will be useful, but WITHOUT ++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or ++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ++ * version 2 for more details (a copy is included in the LICENSE file that ++ * accompanied this code). ++ * ++ * You should have received a copy of the GNU General Public License version ++ * 2 along with this work; if not, write to the Free Software Foundation, ++ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. ++ * ++ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA ++ * or visit www.oracle.com if you need additional information or have any ++ * questions. ++ */ ++import java.io.PrintWriter; ++import com.oracle.java.testlibrary.*; ++ ++/* ++ * @test ++ * @bug 8038636 ++ * @library /testlibrary ++ * @build Agent ++ * @run main ClassFileInstaller Agent ++ * @run main Launcher ++ * @run main/othervm -XX:-TieredCompilation -XX:-BackgroundCompilation -XX:-UseOnStackReplacement -XX:TypeProfileLevel=222 -Xmx1M -XX:ReservedCodeCacheSize=3M Agent ++ */ ++public class Launcher { ++ public static void main(String[] args) throws Exception { ++ ++ PrintWriter pw = new PrintWriter("MANIFEST.MF"); ++ pw.println("Agent-Class: Agent"); ++ pw.println("Can-Retransform-Classes: true"); ++ pw.close(); ++ ++ ProcessBuilder pb = new ProcessBuilder(); ++ pb.command(new String[] { JDKToolFinder.getJDKTool("jar"), "cmf", "MANIFEST.MF", System.getProperty("test.classes",".") + "/agent.jar", "Agent.class"}); ++ pb.start().waitFor(); ++ } ++} diff --git a/8051972.patch b/8051972.patch new file mode 100644 index 0000000..01485b3 --- /dev/null +++ b/8051972.patch @@ -0,0 +1,18 @@ +--- icedtea-3.8.0/openjdk/jdk/test/sun/security/pkcs11/ec/ReadCertificates.java 2018-09-18 09:01:53.500945030 +0200 ++++ icedtea-3.8.0/openjdk/jdk/test/sun/security/pkcs11/ec/ReadCertificates.java 2018-09-18 09:08:14.826936408 +0200 +@@ -171,8 +171,14 @@ + signer = getRandomCert(certList); + } while (cert.getIssuerX500Principal().equals(signer.getSubjectX500Principal())); + try { +- cert.verify(signer.getPublicKey()); ++ PublicKey signerPublicKey = signer.getPublicKey(); ++ cert.verify(signerPublicKey); ++ // Ignore false positives ++ if (cert.getPublicKey().equals(signerPublicKey)) { ++ System.out.println("OK: self-signed certificate detected"); ++ } else { + throw new Exception("Verified invalid signature"); ++ } + } catch (SignatureException | InvalidKeyException e) { + System.out.println("OK: " + e); + } diff --git a/8055008.patch b/8055008.patch new file mode 100644 index 0000000..5174f1a --- /dev/null +++ b/8055008.patch @@ -0,0 +1,1109 @@ +--- icedtea-3.8.0/openjdk/hotspot/src/share/vm/classfile/metadataOnStackMark.cpp 2018-09-18 09:10:03.879505910 +0200 ++++ icedtea-3.8.0/openjdk/hotspot/src/share/vm/classfile/metadataOnStackMark.cpp 2018-09-18 09:11:09.647849381 +0200 +@@ -41,13 +41,13 @@ + // Walk metadata on the stack and mark it so that redefinition doesn't delete + // it. Class unloading also walks the previous versions and might try to + // delete it, so this class is used by class unloading also. +-MetadataOnStackMark::MetadataOnStackMark(bool visit_code_cache) { ++MetadataOnStackMark::MetadataOnStackMark(bool has_redefined_a_class) { + assert(SafepointSynchronize::is_at_safepoint(), "sanity check"); + assert(_used_buffers == NULL, "sanity check"); + NOT_PRODUCT(_is_active = true;) + + Threads::metadata_do(Metadata::mark_on_stack); +- if (visit_code_cache) { ++ if (has_redefined_a_class) { + CodeCache::alive_nmethods_do(nmethod::mark_on_stack); + } + CompileBroker::mark_on_stack(); +--- icedtea-3.8.0/openjdk/hotspot/src/share/vm/classfile/metadataOnStackMark.hpp 2018-09-18 09:10:03.879505910 +0200 ++++ icedtea-3.8.0/openjdk/hotspot/src/share/vm/classfile/metadataOnStackMark.hpp 2018-09-18 09:11:09.647849381 +0200 +@@ -47,7 +47,7 @@ + static void retire_buffer(MetadataOnStackBuffer* buffer); + + public: +- MetadataOnStackMark(bool visit_code_cache); ++ MetadataOnStackMark(bool has_redefined_a_class); + ~MetadataOnStackMark(); + + static void record(Metadata* m, Thread* thread); +--- icedtea-3.8.0/openjdk/hotspot/src/share/vm/code/nmethod.cpp 2018-09-18 09:10:03.879505910 +0200 ++++ icedtea-3.8.0/openjdk/hotspot/src/share/vm/code/nmethod.cpp 2018-09-18 09:11:09.651849402 +0200 +@@ -2193,7 +2193,7 @@ + "metadata must be found in exactly one place"); + if (r->metadata_is_immediate() && r->metadata_value() != NULL) { + Metadata* md = r->metadata_value(); +- f(md); ++ if (md != _method) f(md); + } + } else if (iter.type() == relocInfo::virtual_call_type) { + // Check compiledIC holders associated with this nmethod +@@ -2219,7 +2219,7 @@ + f(md); + } + +- // Visit metadata not embedded in the other places. ++ // Call function Method*, not embedded in these other places. + if (_method != NULL) f(_method); + } + +--- icedtea-3.8.0/openjdk/hotspot/src/share/vm/oops/instanceKlass.cpp 2018-09-18 09:10:03.891505972 +0200 ++++ icedtea-3.8.0/openjdk/hotspot/src/share/vm/oops/instanceKlass.cpp 2018-09-18 09:11:09.651849402 +0200 +@@ -2582,16 +2582,6 @@ + assert(breakpoints() == 0x0, "should have cleared breakpoints"); + } + +- // deallocate information about previous versions +- if (_previous_versions != NULL) { +- for (int i = _previous_versions->length() - 1; i >= 0; i--) { +- PreviousVersionNode * pv_node = _previous_versions->at(i); +- delete pv_node; +- } +- delete _previous_versions; +- _previous_versions = NULL; +- } +- + // deallocate the cached class file + if (_cached_class_file != NULL) { + os::free(_cached_class_file, mtClass); +@@ -3204,16 +3194,17 @@ + st->print(BULLET"field type annotations: "); fields_type_annotations()->print_value_on(st); st->cr(); + { + bool have_pv = false; +- PreviousVersionWalker pvw(Thread::current(), (InstanceKlass*)this); +- for (PreviousVersionNode * pv_node = pvw.next_previous_version(); +- pv_node != NULL; pv_node = pvw.next_previous_version()) { ++ // previous versions are linked together through the InstanceKlass ++ for (InstanceKlass* pv_node = _previous_versions; ++ pv_node != NULL; ++ pv_node = pv_node->previous_versions()) { + if (!have_pv) + st->print(BULLET"previous version: "); + have_pv = true; +- pv_node->prev_constant_pool()->print_value_on(st); ++ pv_node->constants()->print_value_on(st); + } + if (have_pv) st->cr(); +- } // pvw is cleaned up ++ } + + if (generic_signature() != NULL) { + st->print(BULLET"generic signature: "); +@@ -3627,92 +3618,93 @@ + // RedefineClasses() support for previous versions: + + // Purge previous versions +-static void purge_previous_versions_internal(InstanceKlass* ik, int emcp_method_count) { ++void InstanceKlass::purge_previous_versions(InstanceKlass* ik) { + if (ik->previous_versions() != NULL) { + // This klass has previous versions so see what we can cleanup + // while it is safe to do so. + + int deleted_count = 0; // leave debugging breadcrumbs + int live_count = 0; +- ClassLoaderData* loader_data = ik->class_loader_data() == NULL ? +- ClassLoaderData::the_null_class_loader_data() : +- ik->class_loader_data(); ++ ClassLoaderData* loader_data = ik->class_loader_data(); ++ assert(loader_data != NULL, "should never be null"); + + // RC_TRACE macro has an embedded ResourceMark +- RC_TRACE(0x00000200, ("purge: %s: previous version length=%d", +- ik->external_name(), ik->previous_versions()->length())); ++ RC_TRACE(0x00000200, ("purge: %s: previous versions", ik->external_name())); ++ ++ // previous versions are linked together through the InstanceKlass ++ InstanceKlass* pv_node = ik->previous_versions(); ++ InstanceKlass* last = ik; ++ int version = 0; ++ ++ // check the previous versions list ++ for (; pv_node != NULL; ) { ++ ++ ConstantPool* pvcp = pv_node->constants(); ++ assert(pvcp != NULL, "cp ref was unexpectedly cleared"); + +- for (int i = ik->previous_versions()->length() - 1; i >= 0; i--) { +- // check the previous versions array +- PreviousVersionNode * pv_node = ik->previous_versions()->at(i); +- ConstantPool* cp_ref = pv_node->prev_constant_pool(); +- assert(cp_ref != NULL, "cp ref was unexpectedly cleared"); + +- ConstantPool* pvcp = cp_ref; + if (!pvcp->on_stack()) { + // If the constant pool isn't on stack, none of the methods +- // are executing. Delete all the methods, the constant pool and +- // and this previous version node. +- GrowableArray* method_refs = pv_node->prev_EMCP_methods(); +- if (method_refs != NULL) { +- for (int j = method_refs->length() - 1; j >= 0; j--) { +- Method* method = method_refs->at(j); +- assert(method != NULL, "method ref was unexpectedly cleared"); +- method_refs->remove_at(j); +- // method will be freed with associated class. +- } +- } +- // Remove the constant pool +- delete pv_node; +- // Since we are traversing the array backwards, we don't have to +- // do anything special with the index. +- ik->previous_versions()->remove_at(i); ++ // are executing. Unlink this previous_version. ++ // The previous version InstanceKlass is on the ClassLoaderData deallocate list ++ // so will be deallocated during the next phase of class unloading. ++ pv_node = pv_node->previous_versions(); ++ last->link_previous_versions(pv_node); + deleted_count++; ++ version++; + continue; + } else { +- RC_TRACE(0x00000200, ("purge: previous version @%d is alive", i)); ++ RC_TRACE(0x00000200, ("purge: previous version " INTPTR_FORMAT " is alive", ++ pv_node)); + assert(pvcp->pool_holder() != NULL, "Constant pool with no holder"); + guarantee (!loader_data->is_unloading(), "unloaded classes can't be on the stack"); + live_count++; + } + +- // At least one method is live in this previous version, clean out +- // the others or mark them as obsolete. +- GrowableArray* method_refs = pv_node->prev_EMCP_methods(); ++ // At least one method is live in this previous version so clean its MethodData. ++ // Reset dead EMCP methods not to get breakpoints. ++ // All methods are deallocated when all of the methods for this class are no ++ // longer running. ++ Array* method_refs = pv_node->methods(); + if (method_refs != NULL) { + RC_TRACE(0x00000200, ("purge: previous methods length=%d", + method_refs->length())); +- for (int j = method_refs->length() - 1; j >= 0; j--) { ++ for (int j = 0; j < method_refs->length(); j++) { + Method* method = method_refs->at(j); +- assert(method != NULL, "method ref was unexpectedly cleared"); + +- // Remove the emcp method if it's not executing +- // If it's been made obsolete by a redefinition of a non-emcp +- // method, mark it as obsolete but leave it to clean up later. + if (!method->on_stack()) { +- method_refs->remove_at(j); +- } else if (emcp_method_count == 0) { +- method->set_is_obsolete(); ++ // no breakpoints for non-running methods ++ if (method->is_running_emcp()) { ++ method->set_running_emcp(false); ++ } + } else { ++ assert (method->is_obsolete() || method->is_running_emcp(), ++ "emcp method cannot run after emcp bit is cleared"); + // RC_TRACE macro has an embedded ResourceMark + RC_TRACE(0x00000200, + ("purge: %s(%s): prev method @%d in version @%d is alive", + method->name()->as_C_string(), +- method->signature()->as_C_string(), j, i)); ++ method->signature()->as_C_string(), j, version)); + if (method->method_data() != NULL) { +- // Clean out any weak method links ++ // Clean out any weak method links for running methods ++ // (also should include not EMCP methods) + method->method_data()->clean_weak_method_links(); + } + } + } + } ++ // next previous version ++ last = pv_node; ++ pv_node = pv_node->previous_versions(); ++ version++; + } +- assert(ik->previous_versions()->length() == live_count, "sanity check"); + RC_TRACE(0x00000200, + ("purge: previous version stats: live=%d, deleted=%d", live_count, + deleted_count)); + } + ++ // Clean MethodData of this class's methods so they don't refer to ++ // old methods that are no longer running. + Array* methods = ik->methods(); + int num_methods = methods->length(); + for (int index2 = 0; index2 < num_methods; ++index2) { +@@ -3722,122 +3714,30 @@ + } + } + +-// External interface for use during class unloading. +-void InstanceKlass::purge_previous_versions(InstanceKlass* ik) { +- // Call with >0 emcp methods since they are not currently being redefined. +- purge_previous_versions_internal(ik, 1); +-} +- +- +-// Potentially add an information node that contains pointers to the +-// interesting parts of the previous version of the_class. +-// This is also where we clean out any unused references. +-// Note that while we delete nodes from the _previous_versions +-// array, we never delete the array itself until the klass is +-// unloaded. The has_been_redefined() query depends on that fact. +-// +-void InstanceKlass::add_previous_version(instanceKlassHandle ikh, +- BitMap* emcp_methods, int emcp_method_count) { +- assert(Thread::current()->is_VM_thread(), +- "only VMThread can add previous versions"); +- +- if (_previous_versions == NULL) { +- // This is the first previous version so make some space. +- // Start with 2 elements under the assumption that the class +- // won't be redefined much. +- _previous_versions = new (ResourceObj::C_HEAP, mtClass) +- GrowableArray(2, true); +- } +- +- ConstantPool* cp_ref = ikh->constants(); +- +- // RC_TRACE macro has an embedded ResourceMark +- RC_TRACE(0x00000400, ("adding previous version ref for %s @%d, EMCP_cnt=%d " +- "on_stack=%d", +- ikh->external_name(), _previous_versions->length(), emcp_method_count, +- cp_ref->on_stack())); +- +- // If the constant pool for this previous version of the class +- // is not marked as being on the stack, then none of the methods +- // in this previous version of the class are on the stack so +- // we don't need to create a new PreviousVersionNode. However, +- // we still need to examine older previous versions below. +- Array* old_methods = ikh->methods(); +- +- if (cp_ref->on_stack()) { +- PreviousVersionNode * pv_node = NULL; +- if (emcp_method_count == 0) { +- // non-shared ConstantPool gets a reference +- pv_node = new PreviousVersionNode(cp_ref, NULL); +- RC_TRACE(0x00000400, +- ("add: all methods are obsolete; flushing any EMCP refs")); +- } else { +- int local_count = 0; +- GrowableArray* method_refs = new (ResourceObj::C_HEAP, mtClass) +- GrowableArray(emcp_method_count, true); +- for (int i = 0; i < old_methods->length(); i++) { +- if (emcp_methods->at(i)) { +- // this old method is EMCP. Save it only if it's on the stack +- Method* old_method = old_methods->at(i); +- if (old_method->on_stack()) { +- method_refs->append(old_method); +- } +- if (++local_count >= emcp_method_count) { +- // no more EMCP methods so bail out now +- break; +- } +- } +- } +- // non-shared ConstantPool gets a reference +- pv_node = new PreviousVersionNode(cp_ref, method_refs); +- } +- // append new previous version. +- _previous_versions->append(pv_node); +- } +- +- // Since the caller is the VMThread and we are at a safepoint, this +- // is a good time to clear out unused references. +- +- RC_TRACE(0x00000400, ("add: previous version length=%d", +- _previous_versions->length())); +- +- // Purge previous versions not executing on the stack +- purge_previous_versions_internal(this, emcp_method_count); +- ++void InstanceKlass::mark_newly_obsolete_methods(Array* old_methods, ++ int emcp_method_count) { + int obsolete_method_count = old_methods->length() - emcp_method_count; + + if (emcp_method_count != 0 && obsolete_method_count != 0 && +- _previous_versions->length() > 0) { ++ _previous_versions != NULL) { + // We have a mix of obsolete and EMCP methods so we have to + // clear out any matching EMCP method entries the hard way. + int local_count = 0; + for (int i = 0; i < old_methods->length(); i++) { +- if (!emcp_methods->at(i)) { +- // only obsolete methods are interesting + Method* old_method = old_methods->at(i); ++ if (old_method->is_obsolete()) { ++ // only obsolete methods are interesting + Symbol* m_name = old_method->name(); + Symbol* m_signature = old_method->signature(); + +- // we might not have added the last entry +- for (int j = _previous_versions->length() - 1; j >= 0; j--) { +- // check the previous versions array for non executing obsolete methods +- PreviousVersionNode * pv_node = _previous_versions->at(j); +- +- GrowableArray* method_refs = pv_node->prev_EMCP_methods(); +- if (method_refs == NULL) { +- // We have run into a PreviousVersion generation where +- // all methods were made obsolete during that generation's +- // RedefineClasses() operation. At the time of that +- // operation, all EMCP methods were flushed so we don't +- // have to go back any further. +- // +- // A NULL method_refs is different than an empty method_refs. +- // We cannot infer any optimizations about older generations +- // from an empty method_refs for the current generation. +- break; +- } ++ // previous versions are linked together through the InstanceKlass ++ int j = 0; ++ for (InstanceKlass* prev_version = _previous_versions; ++ prev_version != NULL; ++ prev_version = prev_version->previous_versions(), j++) { + +- for (int k = method_refs->length() - 1; k >= 0; k--) { ++ Array* method_refs = prev_version->methods(); ++ for (int k = 0; k < method_refs->length(); k++) { + Method* method = method_refs->at(k); + + if (!method->is_obsolete() && +@@ -3845,14 +3745,11 @@ + method->signature() == m_signature) { + // The current RedefineClasses() call has made all EMCP + // versions of this method obsolete so mark it as obsolete +- // and remove the reference. + RC_TRACE(0x00000400, + ("add: %s(%s): flush obsolete method @%d in version @%d", + m_name->as_C_string(), m_signature->as_C_string(), k, j)); + + method->set_is_obsolete(); +- // Leave obsolete methods on the previous version list to +- // clean up later. + break; + } + } +@@ -3860,9 +3757,9 @@ + // The previous loop may not find a matching EMCP method, but + // that doesn't mean that we can optimize and not go any + // further back in the PreviousVersion generations. The EMCP +- // method for this generation could have already been deleted, ++ // method for this generation could have already been made obsolete, + // but there still may be an older EMCP method that has not +- // been deleted. ++ // been made obsolete. + } + + if (++local_count >= obsolete_method_count) { +@@ -3872,30 +3769,67 @@ + } + } + } +-} // end add_previous_version() ++} + ++// Save the scratch_class as the previous version if any of the methods are running. ++// The previous_versions are used to set breakpoints in EMCP methods and they are ++// also used to clean MethodData links to redefined methods that are no longer running. ++void InstanceKlass::add_previous_version(instanceKlassHandle scratch_class, ++ int emcp_method_count) { ++ assert(Thread::current()->is_VM_thread(), ++ "only VMThread can add previous versions"); + +-// Determine if InstanceKlass has a previous version. +-bool InstanceKlass::has_previous_version() const { +- return (_previous_versions != NULL && _previous_versions->length() > 0); +-} // end has_previous_version() ++ // RC_TRACE macro has an embedded ResourceMark ++ RC_TRACE(0x00000400, ("adding previous version ref for %s, EMCP_cnt=%d", ++ scratch_class->external_name(), emcp_method_count)); + ++ // Clean out old previous versions ++ purge_previous_versions(this); + +-InstanceKlass* InstanceKlass::get_klass_version(int version) { +- if (constants()->version() == version) { +- return this; ++ // Mark newly obsolete methods in remaining previous versions. An EMCP method from ++ // a previous redefinition may be made obsolete by this redefinition. ++ Array* old_methods = scratch_class->methods(); ++ mark_newly_obsolete_methods(old_methods, emcp_method_count); ++ ++ // If the constant pool for this previous version of the class ++ // is not marked as being on the stack, then none of the methods ++ // in this previous version of the class are on the stack so ++ // we don't need to add this as a previous version. ++ ConstantPool* cp_ref = scratch_class->constants(); ++ if (!cp_ref->on_stack()) { ++ RC_TRACE(0x00000400, ("add: scratch class not added; no methods are running")); ++ return; + } +- PreviousVersionWalker pvw(Thread::current(), (InstanceKlass*)this); +- for (PreviousVersionNode * pv_node = pvw.next_previous_version(); +- pv_node != NULL; pv_node = pvw.next_previous_version()) { +- ConstantPool* prev_cp = pv_node->prev_constant_pool(); +- if (prev_cp->version() == version) { +- return prev_cp->pool_holder(); ++ ++ if (emcp_method_count != 0) { ++ // At least one method is still running, check for EMCP methods ++ for (int i = 0; i < old_methods->length(); i++) { ++ Method* old_method = old_methods->at(i); ++ if (!old_method->is_obsolete() && old_method->on_stack()) { ++ // if EMCP method (not obsolete) is on the stack, mark as EMCP so that ++ // we can add breakpoints for it. ++ ++ // We set the method->on_stack bit during safepoints for class redefinition and ++ // class unloading and use this bit to set the is_running_emcp bit. ++ // After the safepoint, the on_stack bit is cleared and the running emcp ++ // method may exit. If so, we would set a breakpoint in a method that ++ // is never reached, but this won't be noticeable to the programmer. ++ old_method->set_running_emcp(true); ++ RC_TRACE(0x00000400, ("add: EMCP method %s is on_stack " INTPTR_FORMAT, ++ old_method->name_and_sig_as_C_string(), old_method)); ++ } else if (!old_method->is_obsolete()) { ++ RC_TRACE(0x00000400, ("add: EMCP method %s is NOT on_stack " INTPTR_FORMAT, ++ old_method->name_and_sig_as_C_string(), old_method)); + } + } +- return NULL; // None found + } + ++ // Add previous version if any methods are still running. ++ RC_TRACE(0x00000400, ("add: scratch class added; one of its methods is on_stack")); ++ assert(scratch_class->previous_versions() == NULL, "shouldn't have a previous version"); ++ scratch_class->link_previous_versions(previous_versions()); ++ link_previous_versions(scratch_class()); ++} // end add_previous_version() + + Method* InstanceKlass::method_with_idnum(int idnum) { + Method* m = NULL; +@@ -3953,61 +3887,3 @@ + unsigned char * InstanceKlass::get_cached_class_file_bytes() { + return VM_RedefineClasses::get_cached_class_file_bytes(_cached_class_file); + } +- +- +-// Construct a PreviousVersionNode entry for the array hung off +-// the InstanceKlass. +-PreviousVersionNode::PreviousVersionNode(ConstantPool* prev_constant_pool, +- GrowableArray* prev_EMCP_methods) { +- +- _prev_constant_pool = prev_constant_pool; +- _prev_EMCP_methods = prev_EMCP_methods; +-} +- +- +-// Destroy a PreviousVersionNode +-PreviousVersionNode::~PreviousVersionNode() { +- if (_prev_constant_pool != NULL) { +- _prev_constant_pool = NULL; +- } +- +- if (_prev_EMCP_methods != NULL) { +- delete _prev_EMCP_methods; +- } +-} +- +-// Construct a helper for walking the previous versions array +-PreviousVersionWalker::PreviousVersionWalker(Thread* thread, InstanceKlass *ik) { +- _thread = thread; +- _previous_versions = ik->previous_versions(); +- _current_index = 0; +- _current_p = NULL; +- _current_constant_pool_handle = constantPoolHandle(thread, ik->constants()); +-} +- +- +-// Return the interesting information for the next previous version +-// of the klass. Returns NULL if there are no more previous versions. +-PreviousVersionNode* PreviousVersionWalker::next_previous_version() { +- if (_previous_versions == NULL) { +- // no previous versions so nothing to return +- return NULL; +- } +- +- _current_p = NULL; // reset to NULL +- _current_constant_pool_handle = NULL; +- +- int length = _previous_versions->length(); +- +- while (_current_index < length) { +- PreviousVersionNode * pv_node = _previous_versions->at(_current_index++); +- +- // Save a handle to the constant pool for this previous version, +- // which keeps all the methods from being deallocated. +- _current_constant_pool_handle = constantPoolHandle(_thread, pv_node->prev_constant_pool()); +- _current_p = pv_node; +- return pv_node; +- } +- +- return NULL; +-} // end next_previous_version() +--- icedtea-3.8.0/openjdk/hotspot/src/share/vm/oops/instanceKlass.hpp 2018-09-18 09:10:03.891505972 +0200 ++++ icedtea-3.8.0/openjdk/hotspot/src/share/vm/oops/instanceKlass.hpp 2018-09-18 09:11:09.651849402 +0200 +@@ -88,7 +88,6 @@ + class fieldDescriptor; + class DepChange; + class nmethodBucket; +-class PreviousVersionNode; + class JvmtiCachedClassFieldMap; + class MemberNameTable; + +@@ -235,7 +234,8 @@ + _misc_is_anonymous = 1 << 3, // has embedded _host_klass field + _misc_is_contended = 1 << 4, // marked with contended annotation + _misc_has_default_methods = 1 << 5, // class/superclass/implemented interfaces has default methods +- _misc_declares_default_methods = 1 << 6 // directly declares default methods (any access) ++ _misc_declares_default_methods = 1 << 6, // directly declares default methods (any access) ++ _misc_has_been_redefined = 1 << 7 // class has been redefined + }; + u2 _misc_flags; + u2 _minor_version; // minor version number of class file +@@ -250,9 +250,8 @@ + nmethodBucket* _dependencies; // list of dependent nmethods + nmethod* _osr_nmethods_head; // Head of list of on-stack replacement nmethods for this class + BreakpointInfo* _breakpoints; // bpt lists, managed by Method* +- // Array of interesting part(s) of the previous version(s) of this +- // InstanceKlass. See PreviousVersionWalker below. +- GrowableArray* _previous_versions; ++ // Linked instanceKlasses of previous versions ++ InstanceKlass* _previous_versions; + // JVMTI fields can be moved to their own structure - see 6315920 + // JVMTI: cached class file, before retransformable agent modified it in CFLH + JvmtiCachedClassFileData* _cached_class_file; +@@ -669,21 +668,31 @@ + } + + // RedefineClasses() support for previous versions: +- void add_previous_version(instanceKlassHandle ikh, BitMap *emcp_methods, +- int emcp_method_count); +- // If the _previous_versions array is non-NULL, then this klass +- // has been redefined at least once even if we aren't currently +- // tracking a previous version. +- bool has_been_redefined() const { return _previous_versions != NULL; } +- bool has_previous_version() const; ++ void add_previous_version(instanceKlassHandle ikh, int emcp_method_count); ++ ++ InstanceKlass* previous_versions() const { return _previous_versions; } ++ ++ bool has_been_redefined() const { ++ return (_misc_flags & _misc_has_been_redefined) != 0; ++ } ++ void set_has_been_redefined() { ++ _misc_flags |= _misc_has_been_redefined; ++ } ++ + void init_previous_versions() { + _previous_versions = NULL; + } +- GrowableArray* previous_versions() const { +- return _previous_versions; ++ ++ ++ InstanceKlass* get_klass_version(int version) { ++ for (InstanceKlass* ik = this; ik != NULL; ik = ik->previous_versions()) { ++ if (ik->constants()->version() == version) { ++ return ik; ++ } ++ } ++ return NULL; + } + +- InstanceKlass* get_klass_version(int version); + static void purge_previous_versions(InstanceKlass* ik); + + // JVMTI: Support for caching a class file before it is modified by an agent that can do retransformation +@@ -1124,6 +1133,10 @@ + + // Free CHeap allocated fields. + void release_C_heap_structures(); ++ ++ // RedefineClasses support ++ void link_previous_versions(InstanceKlass* pv) { _previous_versions = pv; } ++ void mark_newly_obsolete_methods(Array* old_methods, int emcp_method_count); + public: + // CDS support - remove and restore oops from metadata. Oops are not shared. + virtual void remove_unshareable_info(); +@@ -1222,62 +1235,6 @@ + }; + + +-// If breakpoints are more numerous than just JVMTI breakpoints, +-// consider compressing this data structure. +-// It is currently a simple linked list defined in method.hpp. +- +-class BreakpointInfo; +- +- +-// A collection point for interesting information about the previous +-// version(s) of an InstanceKlass. A GrowableArray of PreviousVersionNodes +-// is attached to the InstanceKlass as needed. See PreviousVersionWalker below. +-class PreviousVersionNode : public CHeapObj { +- private: +- ConstantPool* _prev_constant_pool; +- +- // If the previous version of the InstanceKlass doesn't have any +- // EMCP methods, then _prev_EMCP_methods will be NULL. If all the +- // EMCP methods have been collected, then _prev_EMCP_methods can +- // have a length of zero. +- GrowableArray* _prev_EMCP_methods; +- +-public: +- PreviousVersionNode(ConstantPool* prev_constant_pool, +- GrowableArray* prev_EMCP_methods); +- ~PreviousVersionNode(); +- ConstantPool* prev_constant_pool() const { +- return _prev_constant_pool; +- } +- GrowableArray* prev_EMCP_methods() const { +- return _prev_EMCP_methods; +- } +-}; +- +- +-// Helper object for walking previous versions. +-class PreviousVersionWalker : public StackObj { +- private: +- Thread* _thread; +- GrowableArray* _previous_versions; +- int _current_index; +- +- // A pointer to the current node object so we can handle the deletes. +- PreviousVersionNode* _current_p; +- +- // The constant pool handle keeps all the methods in this class from being +- // deallocated from the metaspace during class unloading. +- constantPoolHandle _current_constant_pool_handle; +- +- public: +- PreviousVersionWalker(Thread* thread, InstanceKlass *ik); +- +- // Return the interesting information for the next previous version +- // of the klass. Returns NULL if there are no more previous versions. +- PreviousVersionNode* next_previous_version(); +-}; +- +- + // + // nmethodBucket is used to record dependent nmethods for + // deoptimization. nmethod dependencies are actually +--- icedtea-3.8.0/openjdk/hotspot/src/share/vm/oops/klass.cpp 2018-09-18 09:10:03.891505972 +0200 ++++ icedtea-3.8.0/openjdk/hotspot/src/share/vm/oops/klass.cpp 2018-09-18 09:11:09.651849402 +0200 +@@ -468,6 +468,12 @@ + if (clean_alive_klasses && current->oop_is_instance()) { + InstanceKlass* ik = InstanceKlass::cast(current); + ik->clean_weak_instanceklass_links(is_alive); ++ ++ // JVMTI RedefineClasses creates previous versions that are not in ++ // the class hierarchy, so process them here. ++ while ((ik = ik->previous_versions()) != NULL) { ++ ik->clean_weak_instanceklass_links(is_alive); ++ } + } + } + } +--- icedtea-3.8.0/openjdk/hotspot/src/share/vm/oops/method.cpp 2018-09-18 09:10:03.891505972 +0200 ++++ icedtea-3.8.0/openjdk/hotspot/src/share/vm/oops/method.cpp 2018-09-18 09:11:09.655849423 +0200 +@@ -91,6 +91,7 @@ + set_hidden(false); + set_dont_inline(false); + set_has_injected_profile(false); ++ set_running_emcp(false); + set_method_data(NULL); + clear_method_counters(); + set_vtable_index(Method::garbage_vtable_index); +--- icedtea-3.8.0/openjdk/hotspot/src/share/vm/oops/method.hpp 2018-09-18 09:10:03.891505972 +0200 ++++ icedtea-3.8.0/openjdk/hotspot/src/share/vm/oops/method.hpp 2018-09-18 09:11:09.655849423 +0200 +@@ -110,6 +110,7 @@ + _caller_sensitive : 1, + _force_inline : 1, + _hidden : 1, ++ _running_emcp : 1, + _dont_inline : 1, + _has_injected_profile : 1, + : 2; +@@ -717,6 +718,21 @@ + void set_is_obsolete() { _access_flags.set_is_obsolete(); } + bool is_deleted() const { return access_flags().is_deleted(); } + void set_is_deleted() { _access_flags.set_is_deleted(); } ++ ++ bool is_running_emcp() const { ++ // EMCP methods are old but not obsolete or deleted. Equivalent ++ // Modulo Constant Pool means the method is equivalent except ++ // the constant pool and instructions that access the constant ++ // pool might be different. ++ // If a breakpoint is set in a redefined method, its EMCP methods that are ++ // still running must have a breakpoint also. ++ return _running_emcp; ++ } ++ ++ void set_running_emcp(bool x) { ++ _running_emcp = x; ++ } ++ + bool on_stack() const { return access_flags().on_stack(); } + void set_on_stack(const bool value); + +--- icedtea-3.8.0/openjdk/hotspot/src/share/vm/prims/jvmtiImpl.cpp 2018-09-18 09:10:03.895505993 +0200 ++++ icedtea-3.8.0/openjdk/hotspot/src/share/vm/prims/jvmtiImpl.cpp 2018-09-18 09:11:09.655849423 +0200 +@@ -282,39 +282,22 @@ + void JvmtiBreakpoint::each_method_version_do(method_action meth_act) { + ((Method*)_method->*meth_act)(_bci); + +- // add/remove breakpoint to/from versions of the method that +- // are EMCP. Directly or transitively obsolete methods are +- // not saved in the PreviousVersionNodes. ++ // add/remove breakpoint to/from versions of the method that are EMCP. + Thread *thread = Thread::current(); + instanceKlassHandle ikh = instanceKlassHandle(thread, _method->method_holder()); + Symbol* m_name = _method->name(); + Symbol* m_signature = _method->signature(); + + // search previous versions if they exist +- PreviousVersionWalker pvw(thread, (InstanceKlass *)ikh()); +- for (PreviousVersionNode * pv_node = pvw.next_previous_version(); +- pv_node != NULL; pv_node = pvw.next_previous_version()) { +- GrowableArray* methods = pv_node->prev_EMCP_methods(); +- +- if (methods == NULL) { +- // We have run into a PreviousVersion generation where +- // all methods were made obsolete during that generation's +- // RedefineClasses() operation. At the time of that +- // operation, all EMCP methods were flushed so we don't +- // have to go back any further. +- // +- // A NULL methods array is different than an empty methods +- // array. We cannot infer any optimizations about older +- // generations from an empty methods array for the current +- // generation. +- break; +- } ++ for (InstanceKlass* pv_node = ikh->previous_versions(); ++ pv_node != NULL; ++ pv_node = pv_node->previous_versions()) { ++ Array* methods = pv_node->methods(); + + for (int i = methods->length() - 1; i >= 0; i--) { + Method* method = methods->at(i); +- // obsolete methods that are running are not deleted from +- // previous version array, but they are skipped here. +- if (!method->is_obsolete() && ++ // Only set breakpoints in running EMCP methods. ++ if (method->is_running_emcp() && + method->name() == m_name && + method->signature() == m_signature) { + RC_TRACE(0x00000800, ("%sing breakpoint in %s(%s)", +--- icedtea-3.8.0/openjdk/hotspot/src/share/vm/prims/jvmtiRedefineClasses.cpp 2018-09-18 09:10:03.895505993 +0200 ++++ icedtea-3.8.0/openjdk/hotspot/src/share/vm/prims/jvmtiRedefineClasses.cpp 2018-09-18 09:11:09.655849423 +0200 +@@ -3435,13 +3435,12 @@ + } + + // the previous versions' constant pool caches may need adjustment +- PreviousVersionWalker pvw(_thread, ik); +- for (PreviousVersionNode * pv_node = pvw.next_previous_version(); +- pv_node != NULL; pv_node = pvw.next_previous_version()) { +- other_cp = pv_node->prev_constant_pool(); +- cp_cache = other_cp->cache(); ++ for (InstanceKlass* pv_node = ik->previous_versions(); ++ pv_node != NULL; ++ pv_node = pv_node->previous_versions()) { ++ cp_cache = pv_node->constants()->cache(); + if (cp_cache != NULL) { +- cp_cache->adjust_method_entries(other_cp->pool_holder(), &trace_name_printed); ++ cp_cache->adjust_method_entries(pv_node, &trace_name_printed); + } + } + } +@@ -3461,9 +3460,8 @@ + } + } + +-void VM_RedefineClasses::check_methods_and_mark_as_obsolete( +- BitMap *emcp_methods, int * emcp_method_count_p) { +- *emcp_method_count_p = 0; ++int VM_RedefineClasses::check_methods_and_mark_as_obsolete() { ++ int emcp_method_count = 0; + int obsolete_count = 0; + int old_index = 0; + for (int j = 0; j < _matching_methods_length; ++j, ++old_index) { +@@ -3537,9 +3535,9 @@ + // that we get from effectively overwriting the old methods + // when the new methods are attached to the_class. + +- // track which methods are EMCP for add_previous_version() call +- emcp_methods->set_bit(old_index); +- (*emcp_method_count_p)++; ++ // Count number of methods that are EMCP. The method will be marked ++ // old but not obsolete if it is EMCP. ++ emcp_method_count++; + + // An EMCP method is _not_ obsolete. An obsolete method has a + // different jmethodID than the current method. An EMCP method +@@ -3589,10 +3587,11 @@ + old_method->name()->as_C_string(), + old_method->signature()->as_C_string())); + } +- assert((*emcp_method_count_p + obsolete_count) == _old_methods->length(), ++ assert((emcp_method_count + obsolete_count) == _old_methods->length(), + "sanity check"); +- RC_TRACE(0x00000100, ("EMCP_cnt=%d, obsolete_cnt=%d", *emcp_method_count_p, ++ RC_TRACE(0x00000100, ("EMCP_cnt=%d, obsolete_cnt=%d", emcp_method_count, + obsolete_count)); ++ return emcp_method_count; + } + + // This internal class transfers the native function registration from old methods +@@ -3973,11 +3972,8 @@ + old_constants->set_pool_holder(scratch_class()); + #endif + +- // track which methods are EMCP for add_previous_version() call below +- BitMap emcp_methods(_old_methods->length()); +- int emcp_method_count = 0; +- emcp_methods.clear(); // clears 0..(length() - 1) +- check_methods_and_mark_as_obsolete(&emcp_methods, &emcp_method_count); ++ // track number of methods that are EMCP for add_previous_version() call below ++ int emcp_method_count = check_methods_and_mark_as_obsolete(); + transfer_old_native_function_registrations(the_class); + + // The class file bytes from before any retransformable agents mucked +@@ -4064,9 +4060,10 @@ + scratch_class->enclosing_method_method_index()); + scratch_class->set_enclosing_method_indices(old_class_idx, old_method_idx); + ++ the_class->set_has_been_redefined(); ++ + // keep track of previous versions of this class +- the_class->add_previous_version(scratch_class, &emcp_methods, +- emcp_method_count); ++ the_class->add_previous_version(scratch_class, emcp_method_count); + + RC_TIMER_STOP(_timer_rsc_phase1); + RC_TIMER_START(_timer_rsc_phase2); +--- icedtea-3.8.0/openjdk/hotspot/src/share/vm/prims/jvmtiRedefineClasses.hpp 2018-09-18 09:10:03.895505993 +0200 ++++ icedtea-3.8.0/openjdk/hotspot/src/share/vm/prims/jvmtiRedefineClasses.hpp 2018-09-18 09:11:09.655849423 +0200 +@@ -403,14 +403,9 @@ + // Change jmethodIDs to point to the new methods + void update_jmethod_ids(); + +- // In addition to marking methods as obsolete, this routine +- // records which methods are EMCP (Equivalent Module Constant +- // Pool) in the emcp_methods BitMap and returns the number of +- // EMCP methods via emcp_method_count_p. This information is +- // used when information about the previous version of the_class +- // is squirreled away. +- void check_methods_and_mark_as_obsolete(BitMap *emcp_methods, +- int * emcp_method_count_p); ++ // In addition to marking methods as old and/or obsolete, this routine ++ // counts the number of methods that are EMCP (Equivalent Module Constant Pool). ++ int check_methods_and_mark_as_obsolete(); + void transfer_old_native_function_registrations(instanceKlassHandle the_class); + + // Install the redefinition of a class +--- /dev/null Thu Jan 01 00:00:00 1970 +0000 ++++ icedtea-3.8.0/openjdk/hotspot/test/runtime/RedefineTests/RedefineFinalizer.java Mon Jan 08 08:32:04 2018 -0800 +@@ -0,0 +1,64 @@ ++/* ++ * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. ++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. ++ * ++ * This code is free software; you can redistribute it and/or modify it ++ * under the terms of the GNU General Public License version 2 only, as ++ * published by the Free Software Foundation. ++ * ++ * This code is distributed in the hope that it will be useful, but WITHOUT ++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or ++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ++ * version 2 for more details (a copy is included in the LICENSE file that ++ * accompanied this code). ++ * ++ * You should have received a copy of the GNU General Public License version ++ * 2 along with this work; if not, write to the Free Software Foundation, ++ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. ++ * ++ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA ++ * or visit www.oracle.com if you need additional information or have any ++ * questions. ++ */ ++ ++/* ++ * @test ++ * @bug 6904403 ++ * @summary Don't assert if we redefine finalize method ++ * @library /testlibrary ++ * @build RedefineClassHelper ++ * @run main RedefineClassHelper ++ * @run main/othervm -javaagent:redefineagent.jar RedefineFinalizer ++ */ ++ ++/* ++ * Regression test for hitting: ++ * ++ * assert(f == k->has_finalizer()) failed: inconsistent has_finalizer ++ * ++ * when redefining finalizer method ++ */ ++public class RedefineFinalizer { ++ ++ public static String newB = ++ "class RedefineFinalizer$B {" + ++ " protected void finalize() { " + ++ " System.out.println(\"Finalizer called\");" + ++ " }" + ++ "}"; ++ ++ public static void main(String[] args) throws Exception { ++ RedefineClassHelper.redefineClass(B.class, newB); ++ ++ A a = new A(); ++ } ++ ++ static class A extends B { ++ } ++ ++ static class B { ++ protected void finalize() { ++ // should be empty ++ } ++ } ++} +--- /dev/null Thu Jan 01 00:00:00 1970 +0000 ++++ icedtea-3.8.0/openjdk/hotspot/test/runtime/RedefineTests/RedefineRunningMethods.java Mon Jan 08 08:32:04 2018 -0800 +@@ -0,0 +1,143 @@ ++/* ++ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. ++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. ++ * ++ * This code is free software; you can redistribute it and/or modify it ++ * under the terms of the GNU General Public License version 2 only, as ++ * published by the Free Software Foundation. ++ * ++ * This code is distributed in the hope that it will be useful, but WITHOUT ++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or ++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ++ * version 2 for more details (a copy is included in the LICENSE file that ++ * accompanied this code). ++ * ++ * You should have received a copy of the GNU General Public License version ++ * 2 along with this work; if not, write to the Free Software Foundation, ++ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. ++ * ++ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA ++ * or visit www.oracle.com if you need additional information or have any ++ * questions. ++ */ ++ ++/* ++ * @test ++ * @bug 8055008 ++ * @summary Redefine EMCP and non-EMCP methods that are running in an infinite loop ++ * @library /testlibrary ++ * @build RedefineClassHelper ++ * @run main RedefineClassHelper ++ * @run main/othervm -javaagent:redefineagent.jar RedefineRunningMethods ++ */ ++public class RedefineRunningMethods { ++ ++ public static String newB = ++ "class RedefineRunningMethods$B {" + ++ " static int count1 = 0;" + ++ " static int count2 = 0;" + ++ " public static volatile boolean stop = false;" + ++ " static void localSleep() { " + ++ " try{ " + ++ " Thread.currentThread().sleep(10);" + ++ " } catch(InterruptedException ie) { " + ++ " } " + ++ " } " + ++ " public static void infinite() { " + ++ " System.out.println(\"infinite called\");" + ++ " }" + ++ " public static void infinite_emcp() { " + ++ " while (!stop) { count2++; localSleep(); }" + ++ " }" + ++ "}"; ++ ++ public static String evenNewerB = ++ "class RedefineRunningMethods$B {" + ++ " static int count1 = 0;" + ++ " static int count2 = 0;" + ++ " public static volatile boolean stop = false;" + ++ " static void localSleep() { " + ++ " try{ " + ++ " Thread.currentThread().sleep(1);" + ++ " } catch(InterruptedException ie) { " + ++ " } " + ++ " } " + ++ " public static void infinite() { }" + ++ " public static void infinite_emcp() { " + ++ " System.out.println(\"infinite_emcp now obsolete called\");" + ++ " }" + ++ "}"; ++ ++ static class B { ++ static int count1 = 0; ++ static int count2 = 0; ++ public static volatile boolean stop = false; ++ static void localSleep() { ++ try{ ++ Thread.currentThread().sleep(10);//sleep for 10 ms ++ } catch(InterruptedException ie) { ++ } ++ } ++ ++ public static void infinite() { ++ while (!stop) { count1++; localSleep(); } ++ } ++ public static void infinite_emcp() { ++ while (!stop) { count2++; localSleep(); } ++ } ++ } ++ ++ ++ public static void main(String[] args) throws Exception { ++ ++ new Thread() { ++ public void run() { ++ B.infinite(); ++ } ++ }.start(); ++ ++ new Thread() { ++ public void run() { ++ B.infinite_emcp(); ++ } ++ }.start(); ++ ++ RedefineClassHelper.redefineClass(B.class, newB); ++ ++ System.gc(); ++ ++ B.infinite(); ++ ++ // Start a thread with the second version of infinite_emcp running ++ new Thread() { ++ public void run() { ++ B.infinite_emcp(); ++ } ++ }.start(); ++ ++ for (int i = 0; i < 20 ; i++) { ++ String s = new String("some garbage"); ++ System.gc(); ++ } ++ ++ RedefineClassHelper.redefineClass(B.class, evenNewerB); ++ System.gc(); ++ ++ for (int i = 0; i < 20 ; i++) { ++ B.infinite(); ++ String s = new String("some garbage"); ++ System.gc(); ++ } ++ ++ B.infinite_emcp(); ++ ++ // purge should clean everything up. ++ B.stop = true; ++ ++ for (int i = 0; i < 20 ; i++) { ++ B.infinite(); ++ String s = new String("some garbage"); ++ System.gc(); ++ } ++ } ++} diff --git a/8074373.patch b/8074373.patch new file mode 100644 index 0000000..5a52231 --- /dev/null +++ b/8074373.patch @@ -0,0 +1,74 @@ +--- icedtea-3.8.0/openjdk/jdk/src/share/bin/java.c 2018-09-18 09:11:59.480109603 +0200 ++++ icedtea-3.8.0/openjdk/jdk/src/share/bin/java.c 2018-09-18 09:15:55.665368268 +0200 +@@ -660,16 +660,25 @@ + * arguments are for the application (i.e. the main class name, or + * the -jar argument). + */ +- if ((i > 0 && *arg != '-') ++ if (i > 0) { ++ char *prev = argv[i - 1]; ++ // skip non-dash arg preceded by class path specifiers ++ if (*arg != '-' && ++ ((JLI_StrCmp(prev, "-cp") == 0 ++ || JLI_StrCmp(prev, "-classpath") == 0))) { ++ continue; ++ } ++ ++ if (*arg != '-' + || JLI_StrCmp(arg, "-version") == 0 + || JLI_StrCmp(arg, "-fullversion") == 0 + || JLI_StrCmp(arg, "-help") == 0 + || JLI_StrCmp(arg, "-?") == 0 + || JLI_StrCmp(arg, "-jar") == 0 +- || JLI_StrCmp(arg, "-X") == 0 +- ) { ++ || JLI_StrCmp(arg, "-X") == 0) { + return; + } ++ } + /* + * The following case checks for "-XX:NativeMemoryTracking=value". + * If value is non null, an environmental variable set to this value +--- icedtea-3.8.0/openjdk/jdk/test/tools/launcher/TestSpecialArgs.java 2018-09-18 09:11:59.320108768 +0200 ++++ icedtea-3.8.0/openjdk/jdk/test/tools/launcher/TestSpecialArgs.java 2018-09-18 09:15:55.665368268 +0200 +@@ -23,7 +23,7 @@ + + /* + * @test +- * @bug 7124089 7131021 8042469 8066185 ++ * @bug 7124089 7131021 8042469 8066185 8074373 + * @summary Checks for Launcher special flags, such as MacOSX specific flags, + * and JVM NativeMemoryTracking flags. + * @compile -XDignore.symbol.file TestSpecialArgs.java EnvironmentVariables.java +@@ -270,6 +270,16 @@ + tr = doExec(envMap, javaCmd, "Foo", "-XX:NativeMemoryTracking=summary"); + checkTestResult(tr); + ++ // should accept with no warnings ++ tr = doExec(javaCmd, "-cp", jarFile.getName(), ++ "-XX:NativeMemoryTracking=summary", "Foo"); ++ ensureNoWarnings(tr); ++ ++ // should accept with no warnings ++ tr = doExec(javaCmd, "-classpath", jarFile.getName(), ++ "-XX:NativeMemoryTracking=summary", "Foo"); ++ ensureNoWarnings(tr); ++ + // make sure a missing class is handled correctly, because the class + // resolution is performed by the JVM. + tr = doExec(javaCmd, "AbsentClass", "-XX:NativeMemoryTracking=summary"); +@@ -277,6 +287,14 @@ + throw new RuntimeException("Test Fails"); + } + } ++ ++ void ensureNoWarnings(TestResult tr) { ++ checkTestResult(tr); ++ if (tr.contains("warning: Native Memory Tracking")) { ++ System.err.println(tr.toString()); ++ throw new RuntimeException("Test Fails"); ++ } ++ } + + void checkTestResult(TestResult tr) { + if (!tr.isOK()) { diff --git a/8076117.patch b/8076117.patch new file mode 100644 index 0000000..292c611 --- /dev/null +++ b/8076117.patch @@ -0,0 +1,390 @@ +--- icedtea-3.8.0/openjdk/jdk/src/share/classes/sun/security/validator/EndEntityChecker.java 2018-09-18 09:17:15.173802539 +0200 ++++ icedtea-3.8.0/openjdk/jdk/src/share/classes/sun/security/validator/EndEntityChecker.java 2018-09-18 09:17:34.745909443 +0200 +@@ -132,26 +132,33 @@ + return new EndEntityChecker(type, variant); + } + +- void check(X509Certificate cert, Object parameter) +- throws CertificateException { ++ void check(X509Certificate cert, Object parameter, ++ boolean checkUnresolvedCritExts) throws CertificateException { + if (variant.equals(Validator.VAR_GENERIC)) { +- // no checks +- return; +- } else if (variant.equals(Validator.VAR_TLS_SERVER)) { +- checkTLSServer(cert, (String)parameter); ++ return; // no checks ++ } ++ ++ Set exts = getCriticalExtensions(cert); ++ if (variant.equals(Validator.VAR_TLS_SERVER)) { ++ checkTLSServer(cert, (String)parameter, exts); + } else if (variant.equals(Validator.VAR_TLS_CLIENT)) { +- checkTLSClient(cert); ++ checkTLSClient(cert, exts); + } else if (variant.equals(Validator.VAR_CODE_SIGNING)) { +- checkCodeSigning(cert); ++ checkCodeSigning(cert, exts); + } else if (variant.equals(Validator.VAR_JCE_SIGNING)) { +- checkCodeSigning(cert); ++ checkCodeSigning(cert, exts); + } else if (variant.equals(Validator.VAR_PLUGIN_CODE_SIGNING)) { +- checkCodeSigning(cert); ++ checkCodeSigning(cert, exts); + } else if (variant.equals(Validator.VAR_TSA_SERVER)) { +- checkTSAServer(cert); ++ checkTSAServer(cert, exts); + } else { + throw new CertificateException("Unknown variant: " + variant); + } ++ ++ // if neither VAR_GENERIC variant nor unknown variant ++ if (checkUnresolvedCritExts) { ++ checkRemainingExtensions(exts); ++ } + } + + /** +@@ -219,10 +226,8 @@ + * authentication. + * @throws CertificateException if not. + */ +- private void checkTLSClient(X509Certificate cert) ++ private void checkTLSClient(X509Certificate cert, Set exts) + throws CertificateException { +- Set exts = getCriticalExtensions(cert); +- + if (checkKeyUsage(cert, KU_SIGNATURE) == false) { + throw new ValidatorException + ("KeyUsage does not allow digital signatures", +@@ -245,8 +250,6 @@ + exts.remove(SimpleValidator.OID_KEY_USAGE); + exts.remove(SimpleValidator.OID_EXTENDED_KEY_USAGE); + exts.remove(SimpleValidator.OID_NETSCAPE_CERT_TYPE); +- +- checkRemainingExtensions(exts); + } + + /** +@@ -255,10 +258,8 @@ + * specification for details. + * @throws CertificateException if not. + */ +- private void checkTLSServer(X509Certificate cert, String parameter) +- throws CertificateException { +- Set exts = getCriticalExtensions(cert); +- ++ private void checkTLSServer(X509Certificate cert, String parameter, ++ Set exts) throws CertificateException { + if (KU_SERVER_ENCRYPTION.contains(parameter)) { + if (checkKeyUsage(cert, KU_KEY_ENCIPHERMENT) == false) { + throw new ValidatorException +@@ -303,18 +304,14 @@ + exts.remove(SimpleValidator.OID_KEY_USAGE); + exts.remove(SimpleValidator.OID_EXTENDED_KEY_USAGE); + exts.remove(SimpleValidator.OID_NETSCAPE_CERT_TYPE); +- +- checkRemainingExtensions(exts); + } + + /** + * Check whether this certificate can be used for code signing. + * @throws CertificateException if not. + */ +- private void checkCodeSigning(X509Certificate cert) ++ private void checkCodeSigning(X509Certificate cert, Set exts) + throws CertificateException { +- Set exts = getCriticalExtensions(cert); +- + if (checkKeyUsage(cert, KU_SIGNATURE) == false) { + throw new ValidatorException + ("KeyUsage does not allow digital signatures", +@@ -341,8 +338,6 @@ + // remove extensions we checked + exts.remove(SimpleValidator.OID_KEY_USAGE); + exts.remove(SimpleValidator.OID_EXTENDED_KEY_USAGE); +- +- checkRemainingExtensions(exts); + } + + /** +@@ -350,10 +345,8 @@ + * server (see RFC 3161, section 2.3). + * @throws CertificateException if not. + */ +- private void checkTSAServer(X509Certificate cert) ++ private void checkTSAServer(X509Certificate cert, Set exts) + throws CertificateException { +- Set exts = getCriticalExtensions(cert); +- + if (checkKeyUsage(cert, KU_SIGNATURE) == false) { + throw new ValidatorException + ("KeyUsage does not allow digital signatures", +@@ -376,7 +369,5 @@ + // remove extensions we checked + exts.remove(SimpleValidator.OID_KEY_USAGE); + exts.remove(SimpleValidator.OID_EXTENDED_KEY_USAGE); +- +- checkRemainingExtensions(exts); + } + } +--- icedtea-3.8.0/openjdk/jdk/src/share/classes/sun/security/validator/Validator.java 2018-09-18 09:17:15.173802539 +0200 ++++ icedtea-3.8.0/openjdk/jdk/src/share/classes/sun/security/validator/Validator.java 2018-09-18 09:17:34.745909443 +0200 +@@ -143,6 +143,7 @@ + */ + public final static String VAR_PLUGIN_CODE_SIGNING = "plugin code signing"; + ++ private final String type; + final EndEntityChecker endEntityChecker; + final String variant; + +@@ -154,6 +155,7 @@ + volatile Date validationDate; + + Validator(String type, String variant) { ++ this.type = type; + this.variant = variant; + endEntityChecker = EndEntityChecker.getInstance(type, variant); + } +@@ -261,7 +263,16 @@ + + // omit EE extension check if EE cert is also trust anchor + if (chain.length > 1) { +- endEntityChecker.check(chain[0], parameter); ++ // EndEntityChecker does not need to check unresolved critical ++ // extensions when validating with a TYPE_PKIX Validator. ++ // A TYPE_PKIX Validator will already have run checks on all ++ // certs' extensions, including checks by any PKIXCertPathCheckers ++ // included in the PKIXParameters, so the extra checks would be ++ // redundant. ++ boolean checkUnresolvedCritExts = ++ (type == TYPE_PKIX) ? false : true; ++ endEntityChecker.check(chain[0], parameter, ++ checkUnresolvedCritExts); + } + + return chain; +--- /dev/null Thu Jan 01 00:00:00 1970 +0000 ++++ icedtea-3.8.0/openjdk/jdk/test/sun/security/validator/EndEntityExtensionCheck.java Fri Feb 16 09:43:14 2018 -0800 +@@ -0,0 +1,221 @@ ++/* ++ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. ++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. ++ * ++ * This code is free software; you can redistribute it and/or modify it ++ * under the terms of the GNU General Public License version 2 only, as ++ * published by the Free Software Foundation. ++ * ++ * This code is distributed in the hope that it will be useful, but WITHOUT ++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or ++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ++ * version 2 for more details (a copy is included in the LICENSE file that ++ * accompanied this code). ++ * ++ * You should have received a copy of the GNU General Public License version ++ * 2 along with this work; if not, write to the Free Software Foundation, ++ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. ++ * ++ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA ++ * or visit www.oracle.com if you need additional information or have any ++ * questions. ++ */ ++ ++/* ++ * @test ++ * @bug 8076117 ++ * @summary EndEntityChecker should not process custom extensions ++ * after PKIX validation ++ */ ++ ++import java.io.ByteArrayInputStream; ++import java.io.File; ++import java.io.FileInputStream; ++import java.security.KeyStore; ++import java.security.cert.CertPathValidatorException; ++import java.security.cert.Certificate; ++import java.security.cert.CertificateException; ++import java.security.cert.CertificateFactory; ++import java.security.cert.PKIXBuilderParameters; ++import java.security.cert.PKIXCertPathChecker; ++import java.security.cert.TrustAnchor; ++import java.security.cert.X509Certificate; ++import java.util.Collection; ++import java.util.Date; ++import java.util.HashSet; ++import java.util.Set; ++import sun.security.validator.KeyStores; ++import sun.security.validator.Validator; ++ ++ ++public class EndEntityExtensionCheck { ++ ++ /* ++ * Owner: CN=TestCA ++ * Issuer: CN=TestCA ++ */ ++ private static final String CA = ++ "-----BEGIN CERTIFICATE-----\n" + ++ "MIICgDCCAj2gAwIBAgIEC18hWjALBgcqhkjOOAQDBQAwETEPMA0GA1UEAxMGVGVz\n" + ++ "dENBMB4XDTE1MDQwNzIyMzUyMFoXDTI1MDQwNjIyMzUyMFowETEPMA0GA1UEAxMG\n" + ++ "VGVzdENBMIIBuDCCASwGByqGSM44BAEwggEfAoGBAP1/U4EddRIpUt9KnC7s5Of2\n" + ++ "EbdSPO9EAMMeP4C2USZpRV1AIlH7WT2NWPq/xfW6MPbLm1Vs14E7gB00b/JmYLdr\n" + ++ "mVClpJ+f6AR7ECLCT7up1/63xhv4O1fnxqimFQ8E+4P208UewwI1VBNaFpEy9nXz\n" + ++ "rith1yrv8iIDGZ3RSAHHAhUAl2BQjxUjC8yykrmCouuEC/BYHPUCgYEA9+Gghdab\n" + ++ "Pd7LvKtcNrhXuXmUr7v6OuqC+VdMCz0HgmdRWVeOutRZT+ZxBxCBgLRJFnEj6Ewo\n" + ++ "FhO3zwkyjMim4TwWeotUfI0o4KOuHiuzpnWRbqN/C/ohNWLx+2J6ASQ7zKTxvqhR\n" + ++ "kImog9/hWuWfBpKLZl6Ae1UlZAFMO/7PSSoDgYUAAoGBAJOWy2hVy4iNwsi/idWG\n" + ++ "oksr9IZxQIFR2YavoUmD+rIgfYUpiCihzftDLMMaNYqp9PPxuOyoIPGPbwmKpAs5\n" + ++ "nq6gLwH2lSsN+EwyV2SJ0J26PHiMuRNZWWfKR3cpEqbQVb0CmvqSpj8zYfamPzp7\n" + ++ "eXSWwahzgLCGJM3SgCfDFC0uoyEwHzAdBgNVHQ4EFgQU7tLD8FnWM+r6jBr+mCXs\n" + ++ "8G5yBpgwCwYHKoZIzjgEAwUAAzAAMC0CFQCHCtzC3S0ST0EZBucikVui4WXD8QIU\n" + ++ "L3Oxy6989/FhZlZWJlhqc1ungEQ=\n" + ++ "-----END CERTIFICATE-----"; ++ ++ /* ++ * Owner: CN=TestEE ++ * Issuer: CN=TestCA ++ * Contains a custom critical extension with OID 1.2.3.4: ++ * #1: ObjectId: 1.2.3.4 Criticality=true ++ * 0000: 00 00 ++ */ ++ private static final String EE = ++ "-----BEGIN CERTIFICATE-----\n" + ++ "MIICrTCCAmugAwIBAgIELjciKzALBgcqhkjOOAQDBQAwETEPMA0GA1UEAxMGVGVz\n" + ++ "dENBMB4XDTE1MDQwNzIzMDA1OFoXDTE1MDcwNjIzMDA1OFowETEPMA0GA1UEAxMG\n" + ++ "VGVzdEVFMIIBtzCCASwGByqGSM44BAEwggEfAoGBAP1/U4EddRIpUt9KnC7s5Of2\n" + ++ "EbdSPO9EAMMeP4C2USZpRV1AIlH7WT2NWPq/xfW6MPbLm1Vs14E7gB00b/JmYLdr\n" + ++ "mVClpJ+f6AR7ECLCT7up1/63xhv4O1fnxqimFQ8E+4P208UewwI1VBNaFpEy9nXz\n" + ++ "rith1yrv8iIDGZ3RSAHHAhUAl2BQjxUjC8yykrmCouuEC/BYHPUCgYEA9+Gghdab\n" + ++ "Pd7LvKtcNrhXuXmUr7v6OuqC+VdMCz0HgmdRWVeOutRZT+ZxBxCBgLRJFnEj6Ewo\n" + ++ "FhO3zwkyjMim4TwWeotUfI0o4KOuHiuzpnWRbqN/C/ohNWLx+2J6ASQ7zKTxvqhR\n" + ++ "kImog9/hWuWfBpKLZl6Ae1UlZAFMO/7PSSoDgYQAAoGAN97otrAJEuUg/O97vScI\n" + ++ "01xs1jqTz5o0PGpKiDDJNB3tCCUbLqXoBQBvSefQ8vYL3mmlEJLxlwfbajRmJQp0\n" + ++ "tUy5SUCZHk3MdoKxSvrqYnVpYwJHFXKWs6lAawxfuWbkm9SREuepOWnVzy2ecf5z\n" + ++ "hvy9mgEBfi4E9Cy8Byq2TpyjUDBOMAwGAyoDBAEB/wQCAAAwHwYDVR0jBBgwFoAU\n" + ++ "7tLD8FnWM+r6jBr+mCXs8G5yBpgwHQYDVR0OBBYEFNRVqt5F+EAuJ5x1IZLDkoMs\n" + ++ "mDj4MAsGByqGSM44BAMFAAMvADAsAhQyNGhxIp5IshN1zqLs4pUY214IMAIUMmTL\n" + ++ "3ZMpMAjITbuHHlFNUqZ7A9s=\n" + ++ "-----END CERTIFICATE-----"; ++ ++ public static void main(String[] args) throws Exception { ++ X509Certificate[] chain = createChain(); ++ ++ /* Test 1: Test SimpleValidator ++ * SimpleValidator doesn't check for unsupported critical ++ * extensions in the end entity certificate, and leaves that up ++ * to EndEntityChecker, which should catch such extensions. ++ */ ++ KeyStore ks = KeyStore.getInstance("JKS"); ++ ks.load(null, null); ++ ks.setCertificateEntry("testca", chain[chain.length - 1]); ++ ++ Validator v = Validator.getInstance(Validator.TYPE_SIMPLE, ++ Validator.VAR_TLS_CLIENT, ++ KeyStores.getTrustedCerts(ks)); ++ try { ++ v.validate(chain); ++ throw new Exception("Chain should not have validated " + ++ "successfully."); ++ } catch (CertificateException ex) { ++ // EE cert has an unsupported critical extension that is not ++ // checked by SimpleValidator's extension checks, so this ++ // failure is expected ++ } ++ ++ /* Test 2: Test PKIXValidator without custom checker ++ * PKIXValidator accepts PKIXParameters that can contain ++ * custom PKIXCertPathCheckers, which would be run against ++ * each cert in the chain, including EE certs. ++ * Check that if PKIXValidator is not provided a custom ++ * PKIXCertPathChecker for an unknown critical extension in ++ * the EE cert, chain validation will fail. ++ */ ++ TrustAnchor ta = new TrustAnchor(chain[chain.length - 1], null); ++ Set tas = new HashSet<>(); ++ tas.add(ta); ++ PKIXBuilderParameters params = new PKIXBuilderParameters(tas, null); ++ params.setDate(new Date(115, 5, 1)); // 2015-05-01 ++ params.setRevocationEnabled(false); ++ ++ v = Validator.getInstance(Validator.TYPE_PKIX, ++ Validator.VAR_TLS_CLIENT, ++ params); ++ try { ++ v.validate(chain); ++ throw new Exception("Chain should not have validated " + ++ "successfully."); ++ } catch (CertificateException ex) { ++ // EE cert has an unsupported critical extension and ++ // PKIXValidator was not provided any custom checker ++ // for it, so this failure ie expected. ++ } ++ ++ /* Test 3: Test PKIXValidator with custom checker ++ * Check that PKIXValidator will successfully validate a chain ++ * containing an EE cert with a critical custom extension, given ++ * a corresponding PKIXCertPathChecker for the extension. ++ */ ++ params = new PKIXBuilderParameters(tas, null); ++ params.addCertPathChecker(new CustomChecker()); ++ params.setDate(new Date(115, 5, 1)); // 2015-05-01 ++ params.setRevocationEnabled(false); ++ ++ v = Validator.getInstance(Validator.TYPE_PKIX, ++ Validator.VAR_TLS_CLIENT, ++ params); ++ v.validate(chain); // This should validate successfully ++ ++ System.out.println("Tests passed."); ++ } ++ ++ public static X509Certificate[] createChain() throws Exception { ++ CertificateFactory cf = CertificateFactory.getInstance("X.509"); ++ X509Certificate ee = (X509Certificate) ++ cf.generateCertificate((new ByteArrayInputStream(EE.getBytes()))); ++ X509Certificate ca = (X509Certificate) ++ cf.generateCertificate((new ByteArrayInputStream(CA.getBytes()))); ++ ++ X509Certificate[] chain = {ee, ca}; ++ return chain; ++ } ++ ++ /* ++ * A custom PKIXCertPathChecker. Looks for a critical extension ++ * in an end entity certificate with the OID 1.2.3.4. ++ */ ++ static class CustomChecker extends PKIXCertPathChecker { ++ ++ @Override ++ public void init(boolean forward) throws CertPathValidatorException { ++ // nothing to do ++ } ++ ++ @Override ++ public boolean isForwardCheckingSupported() { ++ return false; ++ } ++ ++ @Override ++ public Set getSupportedExtensions() { ++ Set exts = new HashSet<>(); ++ exts.add("1.2.3.4"); ++ return exts; ++ } ++ ++ @Override ++ public void check(Certificate cert, ++ Collection unresolvedCritExts) ++ throws CertPathValidatorException { ++ X509Certificate currCert = (X509Certificate)cert; ++ // check that this is an EE cert ++ if (currCert.getBasicConstraints() == -1) { ++ if (unresolvedCritExts != null && ++ !unresolvedCritExts.isEmpty()) { ++ unresolvedCritExts.remove("1.2.3.4"); ++ } ++ } ++ } ++ ++ } ++} diff --git a/8078628.patch b/8078628.patch new file mode 100644 index 0000000..fd615c8 --- /dev/null +++ b/8078628.patch @@ -0,0 +1,102 @@ +--- icedtea-3.8.0/openjdk/hotspot/src/cpu/zero/vm/entry_zero.hpp 2018-09-18 09:18:59.322369639 +0200 ++++ icedtea-3.8.0/openjdk/hotspot/src/cpu/zero/vm/entry_zero.hpp 2018-09-18 09:19:28.666529064 +0200 +@@ -28,6 +28,8 @@ + + #include "interpreter/cppInterpreter.hpp" + ++#include "interpreter/cppInterpreter.hpp" ++ + class ZeroEntry { + public: + ZeroEntry() { +--- icedtea-3.8.0/openjdk/hotspot/src/cpu/zero/vm/nativeInst_zero.cpp 2018-09-18 09:18:59.322369639 +0200 ++++ icedtea-3.8.0/openjdk/hotspot/src/cpu/zero/vm/nativeInst_zero.cpp 2018-09-18 09:20:49.778969734 +0200 +@@ -26,6 +26,7 @@ + #include "precompiled.hpp" + #include "assembler_zero.inline.hpp" + #include "entry_zero.hpp" ++#include "interpreter/cppInterpreter.hpp" + #include "memory/resourceArea.hpp" + #include "nativeInst_zero.hpp" + #include "oops/oop.inline.hpp" +--- icedtea-3.8.0/openjdk/hotspot/src/share/vm/code/codeCache.cpp 2018-09-18 09:18:59.346369770 +0200 ++++ icedtea-3.8.0/openjdk/hotspot/src/share/vm/code/codeCache.cpp 2018-09-18 09:19:28.670529085 +0200 +@@ -41,6 +41,7 @@ + #include "oops/oop.inline.hpp" + #include "runtime/handles.inline.hpp" + #include "runtime/arguments.hpp" ++#include "runtime/deoptimization.hpp" + #include "runtime/icache.hpp" + #include "runtime/java.hpp" + #include "runtime/mutexLocker.hpp" +--- icedtea-3.8.0/openjdk/hotspot/src/share/vm/interpreter/cppInterpreterGenerator.hpp 2018-09-18 09:18:59.354369813 +0200 ++++ icedtea-3.8.0/openjdk/hotspot/src/share/vm/interpreter/cppInterpreterGenerator.hpp 2018-09-18 09:19:28.670529085 +0200 +@@ -34,6 +34,9 @@ + #endif + + #ifdef CC_INTERP ++#ifdef TARGET_ARCH_zero ++# include "entry_zero.hpp" ++#endif + + class CppInterpreterGenerator: public AbstractInterpreterGenerator { + protected: +--- icedtea-3.8.0/openjdk/hotspot/src/share/vm/interpreter/interpreter.hpp 2018-09-18 09:18:59.354369813 +0200 ++++ icedtea-3.8.0/openjdk/hotspot/src/share/vm/interpreter/interpreter.hpp 2018-09-18 09:19:28.670529085 +0200 +@@ -28,11 +28,9 @@ + #include "code/stubs.hpp" + #include "interpreter/cppInterpreter.hpp" + #include "interpreter/templateInterpreter.hpp" +-#ifdef ZERO + #ifdef TARGET_ARCH_zero + # include "entry_zero.hpp" + #endif +-#endif + + // This file contains the platform-independent parts + // of the interpreter and the interpreter generator. +--- icedtea-3.8.0/openjdk/hotspot/src/share/vm/runtime/frame.hpp 2018-09-18 09:18:59.362369857 +0200 ++++ icedtea-3.8.0/openjdk/hotspot/src/share/vm/runtime/frame.hpp 2018-09-18 09:19:28.670529085 +0200 +@@ -47,11 +47,9 @@ + # include "adfiles/adGlobals_ppc_64.hpp" + #endif + #endif // COMPILER2 +-#ifdef ZERO + #ifdef TARGET_ARCH_zero + # include "stack_zero.hpp" + #endif +-#endif + + typedef class BytecodeInterpreter* interpreterState; + +--- icedtea-3.8.0/openjdk/hotspot/src/share/vm/runtime/frame.inline.hpp 2018-09-18 09:18:59.362369857 +0200 ++++ icedtea-3.8.0/openjdk/hotspot/src/share/vm/runtime/frame.inline.hpp 2018-09-18 09:19:28.670529085 +0200 +@@ -49,14 +49,12 @@ + #ifdef TARGET_ARCH_ppc + # include "jniTypes_ppc.hpp" + #endif +-#ifdef ZERO + #ifdef TARGET_ARCH_zero + # include "entryFrame_zero.hpp" + # include "fakeStubFrame_zero.hpp" + # include "interpreterFrame_zero.hpp" + # include "sharkFrame_zero.hpp" + #endif +-#endif + + // This file holds platform-independent bodies of inline functions for frames. + +--- icedtea-3.8.0/openjdk/hotspot/src/share/vm/runtime/thread.hpp 2018-09-18 09:18:59.366369878 +0200 ++++ icedtea-3.8.0/openjdk/hotspot/src/share/vm/runtime/thread.hpp 2018-09-18 09:19:28.670529085 +0200 +@@ -51,11 +51,9 @@ + #include "gc_implementation/g1/dirtyCardQueue.hpp" + #include "gc_implementation/g1/satbQueue.hpp" + #endif // INCLUDE_ALL_GCS +-#ifdef ZERO + #ifdef TARGET_ARCH_zero + # include "stack_zero.hpp" + #endif +-#endif + + class ThreadSafepointState; + class ThreadProfiler; diff --git a/8157898.patch b/8157898.patch new file mode 100644 index 0000000..79aa25c --- /dev/null +++ b/8157898.patch @@ -0,0 +1,11 @@ +--- icedtea-3.8.0/openjdk/jdk/test/sun/security/provider/DSA/SupportedDSAParamGen.java 2018-09-18 09:22:44.275591748 +0200 ++++ icedtea-3.8.0/openjdk/jdk/test/sun/security/provider/DSA/SupportedDSAParamGen.java 2018-09-18 09:29:52.621918745 +0200 +@@ -29,7 +29,7 @@ + * @run main/timeout=300 SupportedDSAParamGen 1024 160 + * @run main/timeout=300 SupportedDSAParamGen 2048 224 + * @run main/timeout=300 SupportedDSAParamGen 2048 256 +- * @run main/timeout=450 SupportedDSAParamGen 3072 256 ++ * @run main/timeout=700 SupportedDSAParamGen 3072 256 + */ + import java.security.*; + import java.security.spec.*; diff --git a/8169201.patch b/8169201.patch new file mode 100644 index 0000000..f5a7a6d --- /dev/null +++ b/8169201.patch @@ -0,0 +1,11 @@ +--- icedtea-3.8.0/openjdk/hotspot/src/share/vm/opto/library_call.cpp 2018-09-18 09:31:47.690543877 +0200 ++++ icedtea-3.8.0/openjdk/hotspot/src/share/vm/opto/library_call.cpp 2018-09-18 09:32:09.874664406 +0200 +@@ -6026,7 +6026,7 @@ + } + + assert(UseMontgomeryMultiplyIntrinsic, "not implemented on this platform"); +- const char* stubName = "montgomery_square"; ++ const char* stubName = "montgomery_multiply"; + + assert(callee()->signature()->size() == 7, "montgomeryMultiply has 7 parameters"); + diff --git a/8170035.patch b/8170035.patch new file mode 100644 index 0000000..4a51f0b --- /dev/null +++ b/8170035.patch @@ -0,0 +1,16 @@ +--- icedtea-3.8.0/openjdk/jdk/src/share/classes/sun/security/ssl/SSLContextImpl.java 2018-09-18 09:32:55.266910998 +0200 ++++ icedtea-3.8.0/openjdk/jdk/src/share/classes/sun/security/ssl/SSLContextImpl.java 2018-09-18 09:34:25.091398982 +0200 +@@ -308,6 +308,13 @@ + EnumSet.of(CryptoPrimitive.KEY_AGREEMENT), + suite.name, null)) { + suites.add(suite); ++ } else { ++ if (debug != null && Debug.isOn("sslctx") && ++ Debug.isOn("verbose")) { ++ System.out.println( ++ "Ignoring disabled cipher suite: " + ++ suite.name); ++ } + } + } else if (debug != null && + Debug.isOn("sslctx") && Debug.isOn("verbose")) { diff --git a/8176183.patch b/8176183.patch new file mode 100644 index 0000000..c179f25 --- /dev/null +++ b/8176183.patch @@ -0,0 +1,37 @@ +--- icedtea-3.8.0/openjdk/jdk/test/java/security/SignedObject/Chain.java 2018-09-18 09:35:10.475645535 +0200 ++++ icedtea-3.8.0/openjdk/jdk/test/java/security/SignedObject/Chain.java 2018-09-18 09:36:00.147915474 +0200 +@@ -142,8 +142,17 @@ + PrivateKey[] privKeys = new PrivateKey[N]; + PublicKey[] pubKeys = new PublicKey[N]; + PublicKey[] anotherPubKeys = new PublicKey[N]; +- KeyPairGenerator kpg = KeyPairGenerator.getInstance( +- test.keyAlg.name); ++ Signature signature; ++ KeyPairGenerator kpg; ++ if (test.provider != Provider.Default) { ++ signature = Signature.getInstance(test.sigAlg.name, ++ test.provider.name); ++ kpg = KeyPairGenerator.getInstance( ++ test.keyAlg.name, test.provider.name); ++ } else { ++ signature = Signature.getInstance(test.sigAlg.name); ++ kpg = KeyPairGenerator.getInstance(test.keyAlg.name); ++ } + for (int j=0; j < N; j++) { + if (test.keySize != -1) { + kpg.initialize(test.keySize); +@@ -162,14 +171,6 @@ + } + } + +- Signature signature; +- if (test.provider != Provider.Default) { +- signature = Signature.getInstance(test.sigAlg.name, +- test.provider.name); +- } else { +- signature = Signature.getInstance(test.sigAlg.name); +- } +- + // Create a chain of signed objects + SignedObject[] objects = new SignedObject[N]; + objects[0] = new SignedObject(str, privKeys[0], signature); diff --git a/8187635.patch b/8187635.patch new file mode 100644 index 0000000..d84d532 --- /dev/null +++ b/8187635.patch @@ -0,0 +1,10 @@ +--- icedtea-3.8.0/openjdk/jdk/src/windows/native/sun/windows/awt_Component.cpp 2018-09-18 09:36:56.656222554 +0200 ++++ icedtea-3.8.0/openjdk/jdk/src/windows/native/sun/windows/awt_Component.cpp 2018-09-18 09:40:29.073376896 +0200 +@@ -1809,6 +1809,7 @@ + "new = 0x%08X", + GetHWnd(), GetClassName(), (UINT)lParam); + mr = WmInputLangChange(static_cast(wParam), reinterpret_cast(lParam)); ++ g_bUserHasChangedInputLang = TRUE; + CallProxyDefWindowProc(message, wParam, lParam, retValue, mr); + // should return non-zero if we process this message + retValue = 1; diff --git a/8188223.patch b/8188223.patch new file mode 100644 index 0000000..2d7ff1e --- /dev/null +++ b/8188223.patch @@ -0,0 +1,12 @@ +--- icedtea-3.8.0/openjdk/hotspot/src/share/vm/opto/ifnode.cpp 2018-09-18 09:41:17.285638920 +0200 ++++ icedtea-3.8.0/openjdk/hotspot/src/share/vm/opto/ifnode.cpp 2018-09-18 09:42:24.554004489 +0200 +@@ -453,6 +453,9 @@ + // offset. Return 2 if we had to negate the test. Index is NULL if the check + // is versus a constant. + int IfNode::is_range_check(Node* &range, Node* &index, jint &offset) { ++ if (outcnt() != 2) { ++ return 0; ++ } + Node* b = in(1); + if (b == NULL || !b->is_Bool()) return 0; + BoolNode* bn = b->as_Bool(); diff --git a/8191239.patch b/8191239.patch new file mode 100644 index 0000000..6c7fd53 --- /dev/null +++ b/8191239.patch @@ -0,0 +1,41 @@ +--- icedtea-3.8.0/openjdk/jdk/src/share/classes/java/awt/Desktop.java 2018-09-18 09:42:59.506194441 +0200 ++++ icedtea-3.8.0/openjdk/jdk/src/share/classes/java/awt/Desktop.java 2018-09-18 09:43:52.086480202 +0200 +@@ -203,14 +203,10 @@ + * @throws IllegalArgumentException if file doesn't exist + */ + private static void checkFileValidation(File file){ +- if (file == null) throw new NullPointerException("File must not be null"); +- + if (!file.exists()) { + throw new IllegalArgumentException("The file: " + + file.getPath() + " doesn't exist."); + } +- +- file.canRead(); + } + + /** +@@ -264,6 +260,7 @@ + * @see java.awt.AWTPermission + */ + public void open(File file) throws IOException { ++ file = new File(file.getPath()); + checkAWTPermission(); + checkExec(); + checkActionSupport(Action.OPEN); +@@ -295,6 +292,7 @@ + * @see java.awt.AWTPermission + */ + public void edit(File file) throws IOException { ++ file = new File(file.getPath()); + checkAWTPermission(); + checkExec(); + checkActionSupport(Action.EDIT); +@@ -325,6 +323,7 @@ + * allowed to create a subprocess + */ + public void print(File file) throws IOException { ++ file = new File(file.getPath()); + checkExec(); + SecurityManager sm = System.getSecurityManager(); + if (sm != null) { diff --git a/8193419.patch b/8193419.patch new file mode 100644 index 0000000..a57f214 --- /dev/null +++ b/8193419.patch @@ -0,0 +1,600 @@ +--- icedtea-3.8.0/openjdk/jdk/src/share/native/common/jni_util.h 2018-09-18 09:42:59.678195376 +0200 ++++ icedtea-3.8.0/openjdk/jdk/src/share/native/common/jni_util.h 2018-09-18 09:45:28.239002753 +0200 +@@ -297,6 +297,22 @@ + } \ + } while (0) \ + ++#define CHECK_NULL_THROW_NPE(env, x, msg) \ ++ do { \ ++ if ((x) == NULL) { \ ++ JNU_ThrowNullPointerException((env), (msg));\ ++ return; \ ++ } \ ++ } while(0) \ ++ ++#define CHECK_NULL_THROW_NPE_RETURN(env, x, msg, z)\ ++ do { \ ++ if ((x) == NULL) { \ ++ JNU_ThrowNullPointerException((env), (msg));\ ++ return (z); \ ++ } \ ++ } while(0) \ ++ + #define CHECK_NULL_RETURN(x, y) \ + do { \ + if ((x) == NULL) { \ +--- icedtea-3.8.0/openjdk/jdk/src/share/native/java/net/net_util.c 2018-09-18 09:42:59.682195399 +0200 ++++ icedtea-3.8.0/openjdk/jdk/src/share/native/java/net/net_util.c 2018-09-18 09:45:28.239002753 +0200 +@@ -163,32 +163,38 @@ + + void setInetAddress_addr(JNIEnv *env, jobject iaObj, int address) { + jobject holder = (*env)->GetObjectField(env, iaObj, ia_holderID); ++ CHECK_NULL_THROW_NPE(env, holder, "InetAddress holder is null"); + (*env)->SetIntField(env, holder, iac_addressID, address); + } + + void setInetAddress_family(JNIEnv *env, jobject iaObj, int family) { + jobject holder = (*env)->GetObjectField(env, iaObj, ia_holderID); ++ CHECK_NULL_THROW_NPE(env, holder, "InetAddress holder is null"); + (*env)->SetIntField(env, holder, iac_familyID, family); + } + + void setInetAddress_hostName(JNIEnv *env, jobject iaObj, jobject host) { + jobject holder = (*env)->GetObjectField(env, iaObj, ia_holderID); ++ CHECK_NULL_THROW_NPE(env, holder, "InetAddress holder is null"); + (*env)->SetObjectField(env, holder, iac_hostNameID, host); + (*env)->SetObjectField(env, holder, iac_origHostNameID, host); + } + + int getInetAddress_addr(JNIEnv *env, jobject iaObj) { + jobject holder = (*env)->GetObjectField(env, iaObj, ia_holderID); ++ CHECK_NULL_THROW_NPE_RETURN(env, holder, "InetAddress holder is null", -1); + return (*env)->GetIntField(env, holder, iac_addressID); + } + + int getInetAddress_family(JNIEnv *env, jobject iaObj) { + jobject holder = (*env)->GetObjectField(env, iaObj, ia_holderID); ++ CHECK_NULL_THROW_NPE_RETURN(env, holder, "InetAddress holder is null", -1); + return (*env)->GetIntField(env, holder, iac_familyID); + } + + jobject getInetAddress_hostName(JNIEnv *env, jobject iaObj) { + jobject holder = (*env)->GetObjectField(env, iaObj, ia_holderID); ++ CHECK_NULL_THROW_NPE_RETURN(env, holder, "InetAddress holder is null", NULL); + return (*env)->GetObjectField(env, holder, iac_hostNameID); + } + +@@ -209,7 +215,9 @@ + CHECK_NULL_RETURN(iaObj, NULL); + address = NET_IPv4MappedToIPv4(caddr); + setInetAddress_addr(env, iaObj, address); ++ JNU_CHECK_EXCEPTION_RETURN(env, NULL); + setInetAddress_family(env, iaObj, IPv4); ++ JNU_CHECK_EXCEPTION_RETURN(env, NULL); + } else { + jint scope; + jboolean ret; +@@ -219,6 +227,7 @@ + if (ret == JNI_FALSE) + return NULL; + setInetAddress_family(env, iaObj, IPv6); ++ JNU_CHECK_EXCEPTION_RETURN(env, NULL); + scope = getScopeID(him); + setInet6Address_scopeid(env, iaObj, scope); + } +@@ -230,7 +239,9 @@ + iaObj = (*env)->NewObject(env, ia4_class, ia4_ctrID); + CHECK_NULL_RETURN(iaObj, NULL); + setInetAddress_family(env, iaObj, IPv4); ++ JNU_CHECK_EXCEPTION_RETURN(env, NULL); + setInetAddress_addr(env, iaObj, ntohl(him4->sin_addr.s_addr)); ++ JNU_CHECK_EXCEPTION_RETURN(env, NULL); + *port = ntohs(him4->sin_port); + } + return iaObj; +@@ -243,6 +254,7 @@ + + #ifdef AF_INET6 + family = getInetAddress_family(env, iaObj) == IPv4? AF_INET : AF_INET6; ++ JNU_CHECK_EXCEPTION_RETURN(env, JNI_FALSE); + if (him->sa_family == AF_INET6) { + #ifdef WIN32 + struct SOCKADDR_IN6 *him6 = (struct SOCKADDR_IN6 *)him; +@@ -258,6 +270,7 @@ + } + addrNew = NET_IPv4MappedToIPv4(caddrNew); + addrCur = getInetAddress_addr(env, iaObj); ++ JNU_CHECK_EXCEPTION_RETURN(env, JNI_FALSE); + if (addrNew == addrCur) { + return JNI_TRUE; + } else { +@@ -288,6 +301,7 @@ + } + addrNew = ntohl(him4->sin_addr.s_addr); + addrCur = getInetAddress_addr(env, iaObj); ++ JNU_CHECK_EXCEPTION_RETURN(env, JNI_FALSE); + if (addrNew == addrCur) { + return JNI_TRUE; + } else { +--- icedtea-3.8.0/openjdk/jdk/src/solaris/native/java/net/Inet4AddressImpl.c 2018-09-18 09:42:59.458194181 +0200 ++++ icedtea-3.8.0/openjdk/jdk/src/solaris/native/java/net/Inet4AddressImpl.c 2018-09-18 09:45:28.239002753 +0200 +@@ -236,7 +236,11 @@ + goto cleanupAndReturn; + } + setInetAddress_addr(env, iaObj, ntohl(((struct sockaddr_in*)(iterator->ai_addr))->sin_addr.s_addr)); ++ if ((*env)->ExceptionCheck(env)) ++ goto cleanupAndReturn; + setInetAddress_hostName(env, iaObj, name); ++ if ((*env)->ExceptionCheck(env)) ++ goto cleanupAndReturn; + (*env)->SetObjectArrayElement(env, ret, retLen - i -1, iaObj); + i++; + iterator = iterator->ai_next; +@@ -479,7 +483,11 @@ + goto cleanupAndReturn; + } + setInetAddress_addr(env, iaObj, ntohl(((struct sockaddr_in*)iterator->ai_addr)->sin_addr.s_addr)); ++ if ((*env)->ExceptionCheck(env)) ++ goto cleanupAndReturn; + setInetAddress_hostName(env, iaObj, host); ++ if ((*env)->ExceptionCheck(env)) ++ goto cleanupAndReturn; + (*env)->SetObjectArrayElement(env, ret, i++, iaObj); + iterator = iterator->ai_next; + } +--- icedtea-3.8.0/openjdk/jdk/src/solaris/native/java/net/Inet6AddressImpl.c 2018-09-18 09:42:59.458194181 +0200 ++++ icedtea-3.8.0/openjdk/jdk/src/solaris/native/java/net/Inet6AddressImpl.c 2018-09-18 09:45:28.239002753 +0200 +@@ -226,6 +226,8 @@ + return NULL; + } + setInetAddress_hostName(env, o, name); ++ if ((*env)->ExceptionCheck(env)) ++ goto done; + (*env)->SetObjectArrayElement(env, result, index, o); + (*env)->DeleteLocalRef(env, o); + } +@@ -416,7 +418,11 @@ + goto cleanupAndReturn; + } + setInetAddress_addr(env, iaObj, ntohl(((struct sockaddr_in*)iterator->ai_addr)->sin_addr.s_addr)); ++ if ((*env)->ExceptionCheck(env)) ++ goto cleanupAndReturn; + setInetAddress_hostName(env, iaObj, host); ++ if ((*env)->ExceptionCheck(env)) ++ goto cleanupAndReturn; + (*env)->SetObjectArrayElement(env, ret, inetIndex, iaObj); + inetIndex++; + } else if (iterator->ai_family == AF_INET6) { +@@ -438,6 +444,8 @@ + setInet6Address_scopeid(env, iaObj, scope); + } + setInetAddress_hostName(env, iaObj, host); ++ if ((*env)->ExceptionCheck(env)) ++ goto cleanupAndReturn; + (*env)->SetObjectArrayElement(env, ret, inet6Index, iaObj); + inet6Index++; + } +--- icedtea-3.8.0/openjdk/jdk/src/solaris/native/java/net/net_util_md.c 2018-09-18 09:42:59.458194181 +0200 ++++ icedtea-3.8.0/openjdk/jdk/src/solaris/native/java/net/net_util_md.c 2018-09-18 09:45:28.243002775 +0200 +@@ -807,6 +807,7 @@ + int *len, jboolean v4MappedAddress) { + jint family; + family = getInetAddress_family(env, iaObj); ++ JNU_CHECK_EXCEPTION_RETURN(env, -1); + #ifdef AF_INET6 + /* needs work. 1. family 2. clean up him6 etc deallocate memory */ + if (ipv6_available() && !(family == IPv4 && v4MappedAddress == JNI_FALSE)) { +@@ -818,6 +819,7 @@ + if (family == IPv4) { /* will convert to IPv4-mapped address */ + memset((char *) caddr, 0, 16); + address = getInetAddress_addr(env, iaObj); ++ JNU_CHECK_EXCEPTION_RETURN(env, -1); + if (address == INADDR_ANY) { + /* we would always prefer IPv6 wildcard address + caddr[10] = 0xff; +@@ -926,6 +928,7 @@ + } + memset((char *) him4, 0, sizeof(struct sockaddr_in)); + address = getInetAddress_addr(env, iaObj); ++ JNU_CHECK_EXCEPTION_RETURN(env, -1); + him4->sin_port = htons((short) port); + him4->sin_addr.s_addr = (uint32_t) htonl(address); + him4->sin_family = AF_INET; +--- icedtea-3.8.0/openjdk/jdk/src/solaris/native/java/net/NetworkInterface.c 2018-09-18 09:42:59.458194181 +0200 ++++ icedtea-3.8.0/openjdk/jdk/src/solaris/native/java/net/NetworkInterface.c 2018-09-18 09:45:28.239002753 +0200 +@@ -332,14 +332,14 @@ + (JNIEnv *env, jclass cls, jobject iaObj) + { + netif *ifs, *curr; ++ jobject obj = NULL; ++ jboolean match = JNI_FALSE; + #if defined(AF_INET6) + int family = (getInetAddress_family(env, iaObj) == IPv4) ? AF_INET : AF_INET6; ++ JNU_CHECK_EXCEPTION_RETURN(env, NULL); + #else + int family = AF_INET; + #endif +- jobject obj = NULL; +- jboolean match = JNI_FALSE; +- + ifs = enumInterfaces(env); + if (ifs == NULL) { + return NULL; +@@ -357,7 +357,7 @@ + int address1 = htonl( + ((struct sockaddr_in *)addrP->addr)->sin_addr.s_addr); + int address2 = getInetAddress_addr(env, iaObj); +- ++ JNU_CHECK_EXCEPTION_RETURN(env, NULL); + if (address1 == address2) { + match = JNI_TRUE; + break; +@@ -703,6 +703,7 @@ + if (iaObj) { + setInetAddress_addr(env, iaObj, htonl( + ((struct sockaddr_in*)addrP->addr)->sin_addr.s_addr)); ++ JNU_CHECK_EXCEPTION_RETURN(env, NULL); + } else { + return NULL; + } +@@ -715,6 +716,7 @@ + if (ia2Obj) { + setInetAddress_addr(env, ia2Obj, htonl( + ((struct sockaddr_in*)addrP->brdcast)->sin_addr.s_addr)); ++ JNU_CHECK_EXCEPTION_RETURN(env, NULL); + (*env)->SetObjectField(env, ibObj, ni_ib4broadcastID, ia2Obj); + } else { + return NULL; +--- icedtea-3.8.0/openjdk/jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c 2018-09-18 09:42:59.458194181 +0200 ++++ icedtea-3.8.0/openjdk/jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c 2018-09-18 09:46:37.219377628 +0200 +@@ -552,12 +552,15 @@ + iaObj = NET_SockaddrToInetAddress(env, (struct sockaddr *)&remote_addr, &port); + #ifdef AF_INET6 + family = getInetAddress_family(env, iaObj) == IPv4? AF_INET : AF_INET6; ++ JNU_CHECK_EXCEPTION_RETURN(env, -1); + #else + family = AF_INET; + #endif + if (family == AF_INET) { /* this API can't handle IPV6 addresses */ + int address = getInetAddress_addr(env, iaObj); ++ JNU_CHECK_EXCEPTION_RETURN(env, -1); + setInetAddress_addr(env, addressObj, address); ++ JNU_CHECK_EXCEPTION_RETURN(env, -1); + } + return port; + } +@@ -1072,7 +1075,9 @@ + for (i = 0; i < len; i++) { + addr = (*env)->GetObjectArrayElement(env, addrArray, i); + if (getInetAddress_family(env, addr) == IPv4) { ++ JNU_CHECK_EXCEPTION(env); + in.s_addr = htonl(getInetAddress_addr(env, addr)); ++ JNU_CHECK_EXCEPTION(env); + break; + } + } +@@ -1126,6 +1131,7 @@ + + in.s_addr = htonl( getInetAddress_addr(env, value) ); + ++ JNU_CHECK_EXCEPTION(env); + if (setsockopt(fd, IPPROTO_IP, IP_MULTICAST_IF, + (const char*)&in, sizeof(in)) < 0) { + NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", +@@ -1492,6 +1498,7 @@ + CHECK_NULL_RETURN(addr, NULL); + + setInetAddress_addr(env, addr, ntohl(in.s_addr)); ++ JNU_CHECK_EXCEPTION_RETURN(env, NULL); + + /* + * For IP_MULTICAST_IF return InetAddress +@@ -1954,6 +1961,7 @@ + + #ifdef __linux__ + if (getInetAddress_family(env, iaObj) == IPv4) { ++ JNU_CHECK_EXCEPTION(env); + ipv6_join_leave = JNI_FALSE; + } + #endif +@@ -2001,6 +2009,7 @@ + } + + mname.imr_multiaddr.s_addr = htonl(getInetAddress_addr(env, iaObj)); ++ JNU_CHECK_EXCEPTION(env); + mname.imr_address.s_addr = 0; + mname.imr_ifindex = (*env)->GetIntField(env, niObj, ni_indexID); + mname_len = sizeof(struct ip_mreqn); +@@ -2019,10 +2028,13 @@ + addr = (*env)->GetObjectArrayElement(env, addrArray, 0); + + mname.imr_multiaddr.s_addr = htonl(getInetAddress_addr(env, iaObj)); ++ JNU_CHECK_EXCEPTION(env); + #ifdef __linux__ + mname.imr_address.s_addr = htonl(getInetAddress_addr(env, addr)); ++ JNU_CHECK_EXCEPTION(env); + #else + mname.imr_interface.s_addr = htonl(getInetAddress_addr(env, addr)); ++ JNU_CHECK_EXCEPTION(env); + #endif + mname_len = sizeof(struct ip_mreq); + } +@@ -2058,6 +2070,7 @@ + } + + mname.imr_multiaddr.s_addr = htonl(getInetAddress_addr(env, iaObj)); ++ JNU_CHECK_EXCEPTION(env); + mname.imr_address.s_addr = 0 ; + mname.imr_ifindex = index; + mname_len = sizeof(struct ip_mreqn); +@@ -2080,6 +2093,7 @@ + mname.imr_interface.s_addr = in.s_addr; + #endif + mname.imr_multiaddr.s_addr = htonl(getInetAddress_addr(env, iaObj)); ++ JNU_CHECK_EXCEPTION(env); + mname_len = sizeof(struct ip_mreq); + } + } +@@ -2145,10 +2159,12 @@ + jint family; + jint address; + family = getInetAddress_family(env, iaObj) == IPv4? AF_INET : AF_INET6; ++ JNU_CHECK_EXCEPTION(env); + if (family == AF_INET) { /* will convert to IPv4-mapped address */ + memset((char *) caddr, 0, 16); + address = getInetAddress_addr(env, iaObj); + ++ JNU_CHECK_EXCEPTION(env); + caddr[10] = 0xff; + caddr[11] = 0xff; + +--- icedtea-3.8.0/openjdk/jdk/src/windows/native/java/net/Inet4AddressImpl.c 2018-09-18 09:42:59.698195486 +0200 ++++ icedtea-3.8.0/openjdk/jdk/src/windows/native/java/net/Inet4AddressImpl.c 2018-09-18 09:45:28.243002775 +0200 +@@ -195,6 +195,8 @@ + goto cleanupAndReturn; + } + setInetAddress_addr(env, iaObj, ntohl(address)); ++ if ((*env)->ExceptionCheck(env)) ++ goto cleanupAndReturn; + (*env)->SetObjectArrayElement(env, ret, 0, iaObj); + JNU_ReleaseStringPlatformChars(env, host, hostname); + return ret; +@@ -228,7 +230,11 @@ + goto cleanupAndReturn; + } + setInetAddress_addr(env, iaObj, ntohl((*addrp)->s_addr)); ++ if ((*env)->ExceptionCheck(env)) ++ goto cleanupAndReturn; + setInetAddress_hostName(env, iaObj, host); ++ if ((*env)->ExceptionCheck(env)) ++ goto cleanupAndReturn; + (*env)->SetObjectArrayElement(env, ret, i, iaObj); + addrp++; + i++; +--- icedtea-3.8.0/openjdk/jdk/src/windows/native/java/net/Inet6AddressImpl.c 2018-09-18 09:42:59.698195486 +0200 ++++ icedtea-3.8.0/openjdk/jdk/src/windows/native/java/net/Inet6AddressImpl.c 2018-09-18 09:45:28.243002775 +0200 +@@ -219,7 +219,11 @@ + goto cleanupAndReturn; + } + setInetAddress_addr(env, iaObj, ntohl(((struct sockaddr_in*)iterator->ai_addr)->sin_addr.s_addr)); ++ if ((*env)->ExceptionCheck(env)) ++ goto cleanupAndReturn; + setInetAddress_hostName(env, iaObj, host); ++ if ((*env)->ExceptionCheck(env)) ++ goto cleanupAndReturn; + (*env)->SetObjectArrayElement(env, ret, inetIndex, iaObj); + inetIndex ++; + } else if (iterator->ai_family == AF_INET6) { +@@ -240,6 +244,8 @@ + setInet6Address_scopeid(env, iaObj, scope); + } + setInetAddress_hostName(env, iaObj, host); ++ if ((*env)->ExceptionCheck(env)) ++ goto cleanupAndReturn; + (*env)->SetObjectArrayElement(env, ret, inet6Index, iaObj); + inet6Index ++; + } +--- icedtea-3.8.0/openjdk/jdk/src/windows/native/java/net/net_util_md.c 2018-09-18 09:42:59.698195486 +0200 ++++ icedtea-3.8.0/openjdk/jdk/src/windows/native/java/net/net_util_md.c 2018-09-18 09:45:28.247002797 +0200 +@@ -875,6 +875,7 @@ + int *len, jboolean v4MappedAddress) { + jint family, iafam; + iafam = getInetAddress_family(env, iaObj); ++ JNU_CHECK_EXCEPTION_RETURN(env, -1); + family = (iafam == IPv4)? AF_INET : AF_INET6; + if (ipv6_available() && !(family == AF_INET && v4MappedAddress == JNI_FALSE)) { + struct SOCKADDR_IN6 *him6 = (struct SOCKADDR_IN6 *)him; +@@ -885,6 +886,7 @@ + if (family == AF_INET) { /* will convert to IPv4-mapped address */ + memset((char *) caddr, 0, 16); + address = getInetAddress_addr(env, iaObj); ++ JNU_CHECK_EXCEPTION_RETURN(env, -1); + if (address == INADDR_ANY) { + /* we would always prefer IPv6 wildcard address + caddr[10] = 0xff; +@@ -923,6 +925,7 @@ + } + memset((char *) him4, 0, sizeof(struct sockaddr_in)); + address = getInetAddress_addr(env, iaObj); ++ JNU_CHECK_EXCEPTION_RETURN(env, -1); + him4->sin_port = htons((short) port); + him4->sin_addr.s_addr = (u_long) htonl(address); + him4->sin_family = AF_INET; +--- icedtea-3.8.0/openjdk/jdk/src/windows/native/java/net/NetworkInterface.c 2018-09-18 09:42:59.698195486 +0200 ++++ icedtea-3.8.0/openjdk/jdk/src/windows/native/java/net/NetworkInterface.c 2018-09-18 09:45:28.243002775 +0200 +@@ -593,6 +593,7 @@ + /* default ctor will set family to AF_INET */ + + setInetAddress_addr(env, iaObj, ntohl(addrs->addr.him4.sin_addr.s_addr)); ++ JNU_CHECK_EXCEPTION_RETURN(env, NULL); + if (addrs->mask != -1) { + ibObj = (*env)->NewObject(env, ni_ibcls, ni_ibctrID); + if (ibObj == NULL) { +@@ -606,6 +607,7 @@ + return NULL; + } + setInetAddress_addr(env, ia2Obj, ntohl(addrs->brdcast.him4.sin_addr.s_addr)); ++ JNU_CHECK_EXCEPTION_RETURN(env, NULL); + (*env)->SetObjectField(env, ibObj, ni_ibbroadcastID, ia2Obj); + (*env)->SetShortField(env, ibObj, ni_ibmaskID, addrs->mask); + (*env)->SetObjectArrayElement(env, bindsArr, bind_index++, ibObj); +@@ -761,8 +763,9 @@ + (JNIEnv *env, jclass cls, jobject iaObj) + { + netif *ifList, *curr; +- jint addr = getInetAddress_addr(env, iaObj); + jobject netifObj = NULL; ++ jint addr = getInetAddress_addr(env, iaObj); ++ JNU_CHECK_EXCEPTION_RETURN(env, NULL); + + // Retained for now to support IPv4 only stack, java.net.preferIPv4Stack + if (ipv6_available()) { +--- icedtea-3.8.0/openjdk/jdk/src/windows/native/java/net/NetworkInterface_winXP.c 2018-09-18 09:42:59.698195486 +0200 ++++ icedtea-3.8.0/openjdk/jdk/src/windows/native/java/net/NetworkInterface_winXP.c 2018-09-18 09:45:28.243002775 +0200 +@@ -545,6 +545,7 @@ + + setInetAddress_addr(env, iaObj, ntohl(addrs->addr.him4.sin_addr.s_addr)); + ++ JNU_CHECK_EXCEPTION_RETURN(env, NULL); + ibObj = (*env)->NewObject(env, ni_ibcls, ni_ibctrID); + if (ibObj == NULL) { + free_netaddr(netaddrP); +@@ -557,6 +558,7 @@ + return NULL; + } + setInetAddress_addr(env, ia2Obj, ntohl(addrs->brdcast.him4.sin_addr.s_addr)); ++ JNU_CHECK_EXCEPTION_RETURN(env, NULL); + (*env)->SetObjectField(env, ibObj, ni_ibbroadcastID, ia2Obj); + (*env)->SetShortField(env, ibObj, ni_ibmaskID, addrs->mask); + (*env)->SetObjectArrayElement(env, bindsArr, bind_index++, ibObj); +--- icedtea-3.8.0/openjdk/jdk/src/windows/native/java/net/TwoStacksPlainDatagramSocketImpl.c 2018-09-18 09:42:59.698195486 +0200 ++++ icedtea-3.8.0/openjdk/jdk/src/windows/native/java/net/TwoStacksPlainDatagramSocketImpl.c 2018-09-18 09:45:28.247002797 +0200 +@@ -439,12 +439,13 @@ + memset((char *)&lcladdr, 0, sizeof(lcladdr)); + + family = getInetAddress_family(env, addressObj); ++ JNU_CHECK_EXCEPTION(env); + if (family == IPv6 && !ipv6_supported) { + JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", + "Protocol family not supported"); + return; + } +- ++ JNU_CHECK_EXCEPTION(env); + if (IS_NULL(fdObj) || (ipv6_supported && IS_NULL(fd1Obj))) { + JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "socket closed"); + return; +@@ -459,6 +460,7 @@ + return; + } else { + address = getInetAddress_addr(env, addressObj); ++ JNU_CHECK_EXCEPTION(env); + } + + if (NET_InetAddressToSockaddr(env, addressObj, port, (struct sockaddr *)&lcladdr, &lcladdrlen, JNI_FALSE) != 0) { +@@ -562,8 +564,9 @@ + } + + addr = getInetAddress_addr(env, address); +- ++ JNU_CHECK_EXCEPTION(env); + family = getInetAddress_family(env, address); ++ JNU_CHECK_EXCEPTION(env); + if (family == IPv6 && !ipv6_supported) { + JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", + "Protocol family not supported"); +@@ -681,6 +684,7 @@ + } + + family = getInetAddress_family(env, iaObj); ++ JNU_CHECK_EXCEPTION(env); + if (family == IPv4) { + fdObj = (*env)->GetObjectField(env, this, pdsi_fdID); + } else { +@@ -731,6 +735,7 @@ + * Check is not necessary on these OSes */ + if (connected) { + address = getInetAddress_addr(env, iaObj); ++ JNU_CHECK_EXCEPTION(env); + } else { + address = ntohl(rmtaddr.him4.sin_addr.s_addr); + } +@@ -835,6 +840,7 @@ + return -1; + } else { + address = getInetAddress_addr(env, addressObj); ++ JNU_CHECK_EXCEPTION_RETURN(env, -1); + /* We only handle IPv4 for now. Will support IPv6 once its in the os */ + family = AF_INET; + } +@@ -909,7 +915,9 @@ + return 0; + } + setInetAddress_addr(env, addressObj, ntohl(remote_addr.sin_addr.s_addr)); ++ JNU_CHECK_EXCEPTION_RETURN(env, -1); + setInetAddress_family(env, addressObj, IPv4); ++ JNU_CHECK_EXCEPTION_RETURN(env, -1); + + /* return port */ + return ntohs(remote_addr.sin_port); +@@ -1601,6 +1609,7 @@ + int fam; + addr = (*env)->GetObjectArrayElement(env, addrArray, i); + fam = getInetAddress_family(env, addr); ++ JNU_CHECK_EXCEPTION_RETURN(env, -1); + if (fam == family) { + *iaddr = addr; + return 0; +@@ -1619,6 +1628,7 @@ + } + + iaddr->s_addr = htonl(getInetAddress_addr(env, addr)); ++ JNU_CHECK_EXCEPTION_RETURN(env, -1); + return 0; + } + +@@ -1724,6 +1734,7 @@ + struct in_addr in; + + in.s_addr = htonl(getInetAddress_addr(env, value)); ++ JNU_CHECK_EXCEPTION(env); + if (setsockopt(fd, IPPROTO_IP, IP_MULTICAST_IF, + (const char*)&in, sizeof(in)) < 0) { + NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", +@@ -1965,7 +1976,7 @@ + CHECK_NULL_RETURN(addr, NULL); + + setInetAddress_addr(env, addr, ntohl(in.s_addr)); +- ++ JNU_CHECK_EXCEPTION_RETURN(env, NULL); + /* + * For IP_MULTICAST_IF return InetAddress + */ +--- icedtea-3.8.0/openjdk/jdk/src/windows/native/java/net/TwoStacksPlainSocketImpl.c 2018-09-18 09:42:59.698195486 +0200 ++++ icedtea-3.8.0/openjdk/jdk/src/windows/native/java/net/TwoStacksPlainSocketImpl.c 2018-09-18 09:45:28.247002797 +0200 +@@ -413,6 +413,7 @@ + fd1Obj = (*env)->GetObjectField(env, this, psi_fd1ID); + + family = getInetAddress_family(env, iaObj); ++ JNU_CHECK_EXCEPTION(env); + + if (family == IPv6 && !ipv6_supported) { + JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", +@@ -729,7 +730,9 @@ + } + + setInetAddress_addr(env, socketAddressObj, ntohl(him.him4.sin_addr.s_addr)); ++ JNU_CHECK_EXCEPTION(env); + setInetAddress_family(env, socketAddressObj, IPv4); ++ JNU_CHECK_EXCEPTION(env); + (*env)->SetObjectField(env, socket, psi_addressID, socketAddressObj); + } else { + /* AF_INET6 -> Inet6Address */ +@@ -756,6 +759,7 @@ + } + setInet6Address_ipaddress(env, socketAddressObj, (char *)&him.him6.sin6_addr); + setInetAddress_family(env, socketAddressObj, IPv6); ++ JNU_CHECK_EXCEPTION(env); + setInet6Address_scopeid(env, socketAddressObj, him.him6.sin6_scope_id); + + } diff --git a/8196224.patch b/8196224.patch new file mode 100644 index 0000000..08a4b00 --- /dev/null +++ b/8196224.patch @@ -0,0 +1,40 @@ +--- icedtea-3.8.0/openjdk/jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c 2018-09-18 09:49:08.188198047 +0200 ++++ icedtea-3.8.0/openjdk/jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c 2018-09-18 09:49:25.544292368 +0200 +@@ -1045,6 +1045,7 @@ + struct in_addr in; + jobjectArray addrArray; + jsize len; ++ jint family; + jobject addr; + int i; + +@@ -1074,7 +1075,9 @@ + */ + for (i = 0; i < len; i++) { + addr = (*env)->GetObjectArrayElement(env, addrArray, i); +- if (getInetAddress_family(env, addr) == IPv4) { ++ family = getInetAddress_family(env, addr); ++ JNU_CHECK_EXCEPTION(env); ++ if (family == IPv4) { + JNU_CHECK_EXCEPTION(env); + in.s_addr = htonl(getInetAddress_addr(env, addr)); + JNU_CHECK_EXCEPTION(env); +@@ -1939,6 +1942,7 @@ + + jobject fdObj = (*env)->GetObjectField(env, this, pdsi_fdID); + jint fd; ++ jint family; + jint ipv6_join_leave; + + if (IS_NULL(fdObj)) { +@@ -1960,7 +1964,9 @@ + ipv6_join_leave = ipv6_available(); + + #ifdef __linux__ +- if (getInetAddress_family(env, iaObj) == IPv4) { ++ family = getInetAddress_family(env, iaObj); ++ JNU_CHECK_EXCEPTION(env); ++ if (family == IPv4) { + JNU_CHECK_EXCEPTION(env); + ipv6_join_leave = JNI_FALSE; + } diff --git a/8196491.patch b/8196491.patch new file mode 100644 index 0000000..fae791c --- /dev/null +++ b/8196491.patch @@ -0,0 +1,239 @@ +--- icedtea-3.8.0/openjdk/jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/output/XMLStreamWriterOutput.java 2018-09-18 09:50:10.008533991 +0200 ++++ icedtea-3.8.0/openjdk/jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/output/XMLStreamWriterOutput.java 2018-09-18 09:50:56.928788967 +0200 +@@ -33,6 +33,7 @@ + import javax.xml.stream.XMLStreamWriter; + + import com.sun.xml.internal.bind.marshaller.CharacterEscapeHandler; ++import com.sun.xml.internal.bind.marshaller.NoEscapeHandler; + import com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl; + import com.sun.xml.internal.bind.v2.runtime.XMLSerializer; + +@@ -71,7 +72,7 @@ + } + + CharacterEscapeHandler xmlStreamEscapeHandler = escapeHandler != null ? +- escapeHandler : NewLineEscapeHandler.theInstance; ++ escapeHandler : NoEscapeHandler.theInstance; + + // otherwise the normal writer. + return new XMLStreamWriterOutput(out, xmlStreamEscapeHandler); +@@ -217,45 +218,6 @@ + } + } + +- +- /** +- * Performs character escaping only for new lines. +- */ +- private static class NewLineEscapeHandler implements CharacterEscapeHandler { +- +- public static final NewLineEscapeHandler theInstance = new NewLineEscapeHandler(); +- +- @Override +- public void escape(char[] ch, int start, int length, boolean isAttVal, Writer out) throws IOException { +- int limit = start+length; +- int lastEscaped = start; +- +- for (int i = start; i < limit; i++) { +- char c = ch[i]; +- if (c == '\r' || c == '\n') { +- if (i != lastEscaped) { +- out.write(ch, lastEscaped, i - lastEscaped); +- } +- lastEscaped = i + 1; +- if (out instanceof XmlStreamOutWriterAdapter) { +- try { +- ((XmlStreamOutWriterAdapter)out).writeEntityRef("#x" + Integer.toHexString(c)); +- } catch (XMLStreamException e) { +- throw new IOException("Error writing xml stream", e); +- } +- } else { +- out.write("&#x"); +- out.write(Integer.toHexString(c)); +- out.write(';'); +- } +- } +- } +- if (lastEscaped != limit) { +- out.write(ch, lastEscaped, length - lastEscaped); +- } +- } +- } +- + private static final class XmlStreamOutWriterAdapter extends Writer { + + private final XMLStreamWriter writer; +--- icedtea-3.8.0/openjdk/jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/api/streaming/XMLStreamWriterFactory.java 2018-09-18 09:50:10.028534099 +0200 ++++ icedtea-3.8.0/openjdk/jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/api/streaming/XMLStreamWriterFactory.java 2018-09-18 09:50:56.928788967 +0200 +@@ -386,7 +386,7 @@ + + } + +- private static class HasEncodingWriter extends XMLStreamWriterFilter implements HasEncoding { ++ public static class HasEncodingWriter extends XMLStreamWriterFilter implements HasEncoding { + private final String encoding; + + HasEncodingWriter(XMLStreamWriter writer, String encoding) { +@@ -399,7 +399,7 @@ + return encoding; + } + +- XMLStreamWriter getWriter() { ++ public XMLStreamWriter getWriter() { + return writer; + } + } +--- icedtea-3.8.0/openjdk/jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/streaming/XMLStreamWriterUtil.java 2018-09-18 09:50:10.044534187 +0200 ++++ icedtea-3.8.0/openjdk/jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/streaming/XMLStreamWriterUtil.java 2018-09-18 09:50:56.928788967 +0200 +@@ -26,6 +26,7 @@ + package com.sun.xml.internal.ws.streaming; + + import com.sun.istack.internal.Nullable; ++import com.sun.xml.internal.ws.api.streaming.XMLStreamWriterFactory; + import com.sun.xml.internal.ws.encoding.HasEncoding; + import com.sun.xml.internal.ws.encoding.SOAPBindingCodec; + +@@ -57,9 +58,15 @@ + public static @Nullable OutputStream getOutputStream(XMLStreamWriter writer) throws XMLStreamException { + Object obj = null; + ++ XMLStreamWriter xmlStreamWriter = ++ writer instanceof XMLStreamWriterFactory.HasEncodingWriter ? ++ ((XMLStreamWriterFactory.HasEncodingWriter) writer).getWriter() ++ : writer; ++ ++ + // Hack for JDK6's SJSXP +- if (writer instanceof Map) { +- obj = ((Map) writer).get("sjsxp-outputstream"); ++ if (xmlStreamWriter instanceof Map) { ++ obj = ((Map) xmlStreamWriter).get("sjsxp-outputstream"); + } + + // woodstox +--- icedtea-3.8.0/openjdk/jdk/test/javax/xml/ws/8172297/Main.java 2018-09-18 09:50:09.468531057 +0200 ++++ icedtea-3.8.0/openjdk/jdk/test/javax/xml/ws/8172297/Main.java 2018-09-18 09:51:20.328916131 +0200 +@@ -23,7 +23,7 @@ + + /* + * @test +- * @bug 8172297 ++ * @bug 8172297 8196491 + * @summary Test that carriage-return and new-line characters + * are preserved in webservice parameters + * @compile ws/HelloWorld.java ws/HelloWorldImpl.java Main.java +@@ -33,13 +33,21 @@ + import java.io.IOException; + import java.net.ServerSocket; + import java.net.URL; ++import java.util.Collections; ++import java.util.Set; + import java.util.concurrent.CountDownLatch; + + import javax.xml.namespace.QName; ++import javax.xml.soap.SOAPMessage; + import javax.xml.ws.Endpoint; + import javax.xml.ws.Service; ++import javax.xml.ws.handler.Handler; ++import javax.xml.ws.handler.MessageContext; ++import javax.xml.ws.handler.soap.SOAPHandler; ++import javax.xml.ws.handler.soap.SOAPMessageContext; + + import org.testng.Assert; ++import org.testng.annotations.DataProvider; + import org.testng.annotations.Test; + + import ws.HelloWorld; +@@ -47,9 +55,8 @@ + + public class Main { + +- @Test +- public void runTest() throws Exception { +- // ++ @Test(dataProvider="callHandlerDataProvider") ++ public void runTest(boolean callGetMessageInHandler) throws Exception { + CountDownLatch serverInitSignal = new CountDownLatch(1); + CountDownLatch testDoneSignal = new CountDownLatch(1); + +@@ -58,23 +65,31 @@ + + serverInitSignal.await(); + +- boolean paramModified = runClientCode(serverThread.getPort()); ++ boolean paramModified = runClientCode(serverThread.getPort(), callGetMessageInHandler); + + testDoneSignal.countDown(); + +- Assert.assertFalse(paramModified, "WS parameter was modified during round trip."); ++ Assert.assertEquals(callGetMessageInHandler, paramModified, ++ "WS parameter has not been processed as expected"); ++ } ++ ++ @DataProvider ++ public Object[][] callHandlerDataProvider() { ++ return new Object[][]{{true}, {false}}; + } + + /* + * Connects to launched web service endpoint, sends message with CR/NL symbols and + * checks if it was modified during the round trip client/server communication. + */ +- private boolean runClientCode(int port) throws Exception { ++ private boolean runClientCode(int port, boolean callGetMessage) throws Exception { + System.out.println("Launching WS client connection on " + port + " port"); + URL url = new URL("http://localhost:" + port + "/ws/hello?wsdl"); + QName qname = new QName("http://ws/", "HelloWorldImplService"); + Service service = Service.create(url, qname); + ++ registerHandler(service, callGetMessage); ++ + HelloWorld hello = (HelloWorld) service.getPort(HelloWorld.class); + + logStringContent("Client input parameter", WS_PARAM_VALUE); +@@ -86,6 +101,45 @@ + } + + /* ++ * Register message handler and call SOAPMessageContext.getMessage ++ * to emulate issue reported in JDK-8196491 ++ */ ++ private void registerHandler(Service service, final boolean callGetMessage) { ++ System.out.printf( "Client %s call getMessage inside message handler%n", ++ callGetMessage ? "will" : "will not" ); ++ // Set custom SOAP message handler resolver ++ service.setHandlerResolver(portInfo -> { ++ Handler h = new SOAPHandler() { ++ ++ @Override ++ public boolean handleMessage(SOAPMessageContext context) { ++ if (callGetMessage) { ++ // Trigger exception from JDK-8196491 ++ SOAPMessage msg = context.getMessage(); ++ } ++ return true; ++ } ++ ++ @Override ++ public boolean handleFault(SOAPMessageContext context) { ++ return true; ++ } ++ ++ @Override ++ public void close(MessageContext context) { ++ } ++ ++ @Override ++ public Set getHeaders() { ++ return null; ++ } ++ ++ }; ++ return Collections.singletonList(h); ++ }); ++ } ++ ++ /* + * Outputs the parameter value with newline and carriage-return symbols + * replaced with #CR and #NL text abbreviations. + */ diff --git a/8196854.patch b/8196854.patch new file mode 100644 index 0000000..c705b25 --- /dev/null +++ b/8196854.patch @@ -0,0 +1,28 @@ +--- icedtea-3.8.0/openjdk/jdk/test/java/util/zip/InflateIn_DeflateOut.java 2018-09-18 09:55:59.118433163 +0200 ++++ icedtea-3.8.0/openjdk/jdk/test/java/util/zip/InflateIn_DeflateOut.java 2018-09-18 09:56:21.186553300 +0200 +@@ -23,7 +23,7 @@ + + /** + * @test +- * @bug 4206909 4813885 8189789 ++ * @bug 4206909 4813885 8189789 8196854 + * @summary Test basic functionality of DeflaterOutputStream/InflaterInputStream and GZIPOutputStream/GZIPInputStream, including flush + * @key randomness + */ +@@ -154,7 +154,6 @@ + OutputStream output = new FlushableGZIPOutputStream(byteOutStream); + + byte[] data = new byte[random.nextInt(1024 * 1024)]; +- byte[] buf = new byte[data.length]; + random.nextBytes(data); + + output.write(data); +@@ -176,7 +175,7 @@ + int numRead; + byte[] b = new byte[4 * 1024]; + try { +- while ((numRead = gzis.read(buf)) >= 0) { ++ while ((numRead = gzis.read(b)) >= 0) { + baos.write(b, 0, numRead); + } + } finally { diff --git a/8197871.patch b/8197871.patch new file mode 100644 index 0000000..0d3a488 --- /dev/null +++ b/8197871.patch @@ -0,0 +1,72 @@ +--- icedtea-3.8.0/openjdk/jdk/make/CompileDemos.gmk 2018-09-18 09:57:38.246972802 +0200 ++++ icedtea-3.8.0/openjdk/jdk/make/CompileDemos.gmk 2018-09-18 09:58:10.947150824 +0200 +@@ -455,29 +455,6 @@ + + ################################################################################################## + +-ifndef OPENJDK +- DB_DEMO_ZIPFILE := $(wildcard $(JDK_TOPDIR)/src/closed/share/db/db-derby-*-bin.zip) +- +- $(JDK_OUTPUTDIR)/demo/_the.db.unzipped: $(DB_DEMO_ZIPFILE) +- $(MKDIR) -p $(@D) +- $(RM) -r $(JDK_OUTPUTDIR)/demo/db $(JDK_OUTPUTDIR)/demo/demo +- $(CD) $(JDK_OUTPUTDIR)/demo && $(UNZIP) -q -o $< +- $(MV) $(JDK_OUTPUTDIR)/demo/db-derby-*-bin/demo $(JDK_OUTPUTDIR)/demo/db +- $(CD) $(JDK_OUTPUTDIR)/demo && $(RM) -r db-derby-*-bin +- $(TOUCH) $@ +- +- # Copy this after the unzip above to avoid race with directory creation and mv command. +- $(JDK_OUTPUTDIR)/demo/db/README-JDK-DEMOS.html: \ +- $(JDK_TOPDIR)/src/closed/share/db/README-JDK-DEMOS.html \ +- | $(JDK_OUTPUTDIR)/demo/_the.db.unzipped +- $(MKDIR) -p $(@D) +- $(CAT) $< | $(SED) "s/XXXX/$(shell cat $(JDK_TOPDIR)/src/closed/share/db/COPYRIGHTYEAR)/" > $@ +- +- BUILD_DEMOS += $(JDK_OUTPUTDIR)/demo/_the.db.unzipped $(JDK_OUTPUTDIR)/demo/db/README-JDK-DEMOS.html +-endif +- +-################################################################################################## +- + all: $(BUILD_DEMOS) + + .PHONY: all +--- icedtea-3.8.0/openjdk/jdk/make/Images.gmk 2018-09-18 09:57:38.246972802 +0200 ++++ icedtea-3.8.0/openjdk/jdk/make/Images.gmk 2018-09-18 09:58:11.103151672 +0200 +@@ -542,37 +542,6 @@ + $(eval $(call AddFileToCopy,$(JDK_OUTPUTDIR),$(JDK_IMAGE_DIR),$f,JDK_SAMPLE_TARGETS))) + + ################################################################################ +-# /db dir +- +-ifndef OPENJDK +- $(IMAGES_OUTPUTDIR)/_unzip/%.unzipped: $(JDK_TOPDIR)/src/closed/share/db/% +- $(ECHO) Unzipping $(patsubst $(SRC_ROOT)/%,%,$<) +- $(MKDIR) -p $(JDK_IMAGE_DIR)/db +- cd $(JDK_IMAGE_DIR)/db && $(UNZIP) -q -o $< -x */index.html */KEYS */test/* *javadoc/* */docs/* */demo/* 2> /dev/null +- cd $(JDK_IMAGE_DIR)/db && $(MV) db-derby-*-bin/* . && $(RM) -r db-derby-*-bin +-ifneq ($(OPENJDK_TARGET_OS), windows) +- $(RM) $(JDK_IMAGE_DIR)/db/bin/*.bat +-endif +- $(MKDIR) -p $(@D) +- $(TOUCH) $@ +- +- $(JDK_IMAGE_DIR)/db/README-JDK.html: $(JDK_TOPDIR)/src/closed/share/db/README-JDK.html +- $(ECHO) $(LOG_INFO) Copying '$(patsubst $(OUTPUT_ROOT)/%,%,$@)' +- $(MKDIR) -p $(@D) +- $(CAT) $< | $(SED) "s/XXXX/$(shell cat $(JDK_TOPDIR)/src/closed/share/db/COPYRIGHTYEAR)/" > $@ +- +- $(JDK_IMAGE_DIR)/db/3RDPARTY: $(JDK_TOPDIR)/src/closed/share/db/3RDPARTY +- $(ECHO) $(LOG_INFO) Copying '$(patsubst $(OUTPUT_ROOT)/%,%,$@)' +- $(MKDIR) -p $(@D) +- $(CAT) $< | $(SED) "s/XXXX/$(shell cat $(JDK_TOPDIR)/src/closed/share/db/COPYRIGHTYEAR)/" > $@ +- +- JDK_DB_TARGETS := $(patsubst $(JDK_TOPDIR)/src/closed/share/db/%, $(IMAGES_OUTPUTDIR)/_unzip/%.unzipped, \ +- $(wildcard $(JDK_TOPDIR)/src/closed/share/db/db-derby-*-bin.zip)) \ +- $(JDK_IMAGE_DIR)/db/README-JDK.html $(JDK_IMAGE_DIR)/db/3RDPARTY +- +-endif +- +-################################################################################ + # /include dir + + $(foreach f,$(call CacheFind,$(JDK_OUTPUTDIR)/include), \ diff --git a/8197925.patch b/8197925.patch new file mode 100644 index 0000000..4225ee6 --- /dev/null +++ b/8197925.patch @@ -0,0 +1,79 @@ +--- icedtea-3.8.0/openjdk/jdk/src/share/classes/java/io/ObjectStreamClass.java 2018-09-18 09:59:41.495643758 +0200 ++++ icedtea-3.8.0/openjdk/jdk/src/share/classes/java/io/ObjectStreamClass.java 2018-09-18 09:59:57.923733188 +0200 +@@ -86,6 +86,18 @@ + private static final ObjectStreamField[] serialPersistentFields = + NO_FIELDS; + ++ /** true if deserialization constructor checking is disabled */ ++ private static boolean disableSerialConstructorChecks = ++ AccessController.doPrivileged( ++ new PrivilegedAction() { ++ public Boolean run() { ++ String prop = "jdk.disableSerialConstructorChecks"; ++ return "true".equals(System.getProperty(prop)) ++ ? Boolean.TRUE : Boolean.FALSE; ++ } ++ } ++ ).booleanValue(); ++ + /** reflection factory for obtaining serialization constructors */ + private static final ReflectionFactory reflFactory = + AccessController.doPrivileged( +@@ -1497,6 +1509,46 @@ + } + + /** ++ * Given a class, determines whether its superclass has ++ * any constructors that are accessible from the class. ++ * This is a special purpose method intended to do access ++ * checking for a serializable class and its superclasses ++ * up to, but not including, the first non-serializable ++ * superclass. This also implies that the superclass is ++ * always non-null, because a serializable class must be a ++ * class (not an interface) and Object is not serializable. ++ * ++ * @param cl the class from which access is checked ++ * @return whether the superclass has a constructor accessible from cl ++ */ ++ private static boolean superHasAccessibleConstructor(Class cl) { ++ Class superCl = cl.getSuperclass(); ++ assert Serializable.class.isAssignableFrom(cl); ++ assert superCl != null; ++ if (packageEquals(cl, superCl)) { ++ // accessible if any non-private constructor is found ++ for (Constructor ctor : superCl.getDeclaredConstructors()) { ++ if ((ctor.getModifiers() & Modifier.PRIVATE) == 0) { ++ return true; ++ } ++ } ++ return false; ++ } else { ++ // accessible if the parent is public and any constructor ++ // is protected or public ++ if ((superCl.getModifiers() & Modifier.PUBLIC) == 0) { ++ return false; ++ } ++ for (Constructor ctor : superCl.getDeclaredConstructors()) { ++ if ((ctor.getModifiers() & (Modifier.PROTECTED | Modifier.PUBLIC)) != 0) { ++ return true; ++ } ++ } ++ return false; ++ } ++ } ++ ++ /** + * Returns subclass-accessible no-arg constructor of first non-serializable + * superclass, or null if none found. Access checks are disabled on the + * returned constructor (if any). +@@ -1504,7 +1556,9 @@ + private static Constructor getSerializableConstructor(Class cl) { + Class initCl = cl; + while (Serializable.class.isAssignableFrom(initCl)) { +- if ((initCl = initCl.getSuperclass()) == null) { ++ Class prev = initCl; ++ if ((initCl = initCl.getSuperclass()) == null || ++ (!disableSerialConstructorChecks && !superHasAccessibleConstructor(prev))) { + return null; + } + } diff --git a/8197943.patch b/8197943.patch new file mode 100644 index 0000000..02474e3 --- /dev/null +++ b/8197943.patch @@ -0,0 +1,45 @@ +--- icedtea-3.8.0/openjdk/jdk/src/share/classes/com/sun/tools/jdi/VirtualMachineImpl.java 2018-09-18 10:01:25.012207276 +0200 ++++ icedtea-3.8.0/openjdk/jdk/src/share/classes/com/sun/tools/jdi/VirtualMachineImpl.java 2018-09-18 10:01:45.616319435 +0200 +@@ -674,20 +674,18 @@ + versionInfo().jdwpMinor >= 6; + } + public boolean canGetInstanceInfo() { +- if (versionInfo().jdwpMajor < 1 || +- versionInfo().jdwpMinor < 6) { +- return false; +- } ++ if (versionInfo().jdwpMajor > 1 || ++ versionInfo().jdwpMinor >= 6) { + validateVM(); + return hasNewCapabilities() && + capabilitiesNew().canGetInstanceInfo; +- } +- public boolean canUseSourceNameFilters() { +- if (versionInfo().jdwpMajor < 1 || +- versionInfo().jdwpMinor < 6) { ++ } else { + return false; + } +- return true; ++ } ++ public boolean canUseSourceNameFilters() { ++ return versionInfo().jdwpMajor > 1 || ++ versionInfo().jdwpMinor >= 6; + } + public boolean canForceEarlyReturn() { + validateVM(); +@@ -703,12 +701,8 @@ + capabilitiesNew().canGetSourceDebugExtension; + } + public boolean canGetClassFileVersion() { +- if ( versionInfo().jdwpMajor < 1 && +- versionInfo().jdwpMinor < 6) { +- return false; +- } else { +- return true; +- } ++ return versionInfo().jdwpMajor > 1 || ++ versionInfo().jdwpMinor >= 6; + } + public boolean canGetConstantPool() { + validateVM(); diff --git a/8198794.patch b/8198794.patch new file mode 100644 index 0000000..cbfd167 --- /dev/null +++ b/8198794.patch @@ -0,0 +1,32 @@ +--- icedtea-3.8.0/openjdk/hotspot/src/os/linux/vm/os_linux.hpp 2018-09-18 10:03:21.160839536 +0200 ++++ icedtea-3.8.0/openjdk/hotspot/src/os/linux/vm/os_linux.hpp 2018-09-18 10:16:17.285065419 +0200 +@@ -287,8 +287,8 @@ + static void set_numa_bitmask_isbitset(numa_bitmask_isbitset_func_t func) { _numa_bitmask_isbitset = func; } + static void set_numa_distance(numa_distance_func_t func) { _numa_distance = func; } + static void set_numa_all_nodes(unsigned long* ptr) { _numa_all_nodes = ptr; } +- static void set_numa_all_nodes_ptr(struct bitmask **ptr) { _numa_all_nodes_ptr = *ptr; } +- static void set_numa_nodes_ptr(struct bitmask **ptr) { _numa_nodes_ptr = *ptr; } ++ static void set_numa_all_nodes_ptr(struct bitmask **ptr) { _numa_all_nodes_ptr = (ptr == NULL ? NULL : *ptr); } ++ static void set_numa_nodes_ptr(struct bitmask **ptr) { _numa_nodes_ptr = (ptr == NULL ? NULL : *ptr); } + static int sched_getcpu_syscall(void); + public: + static int sched_getcpu() { return _sched_getcpu != NULL ? _sched_getcpu() : -1; } +@@ -332,6 +332,18 @@ + static bool isnode_in_existing_nodes(unsigned int n) { + if (_numa_bitmask_isbitset != NULL && _numa_nodes_ptr != NULL) { + return _numa_bitmask_isbitset(_numa_nodes_ptr, n); ++ } else if (_numa_bitmask_isbitset != NULL && _numa_all_nodes_ptr != NULL) { ++ // Not all libnuma API v2 implement numa_nodes_ptr, so it's not possible ++ // to trust the API version for checking its absence. On the other hand, ++ // numa_nodes_ptr found in libnuma 2.0.9 and above is the only way to get ++ // a complete view of all numa nodes in the system, hence numa_nodes_ptr ++ // is used to handle CPU and nodes on architectures (like PowerPC) where ++ // there can exist nodes with CPUs but no memory or vice-versa and the ++ // nodes may be non-contiguous. For most of the architectures, like ++ // x86_64, numa_node_ptr presents the same node set as found in ++ // numa_all_nodes_ptr so it's possible to use numa_all_nodes_ptr as a ++ // substitute. ++ return _numa_bitmask_isbitset(_numa_all_nodes_ptr, n); + } else + return 0; + } diff --git a/8199406.patch b/8199406.patch new file mode 100644 index 0000000..1ae132c --- /dev/null +++ b/8199406.patch @@ -0,0 +1,223 @@ +--- icedtea-3.8.0/openjdk/hotspot/src/share/vm/code/codeBlob.cpp 2018-09-18 10:17:46.065548902 +0200 ++++ icedtea-3.8.0/openjdk/hotspot/src/share/vm/code/codeBlob.cpp 2018-09-18 10:18:04.537649500 +0200 +@@ -292,6 +292,28 @@ + return blob; + } + ++VtableBlob::VtableBlob(const char* name, int size) : ++ BufferBlob(name, size) { ++} ++ ++VtableBlob* VtableBlob::create(const char* name, int buffer_size) { ++ ThreadInVMfromUnknown __tiv; // get to VM state in case we block on CodeCache_lock ++ ++ VtableBlob* blob = NULL; ++ unsigned int size = sizeof(VtableBlob); ++ // align the size to CodeEntryAlignment ++ size = align_code_offset(size); ++ size += round_to(buffer_size, oopSize); ++ assert(name != NULL, "must provide a name"); ++ { ++ MutexLockerEx mu(CodeCache_lock, Mutex::_no_safepoint_check_flag); ++ blob = new (size) VtableBlob(name, size); ++ } ++ // Track memory usage statistic after releasing CodeCache_lock ++ MemoryService::track_code_cache_memory_usage(); ++ ++ return blob; ++} + + //---------------------------------------------------------------------------------------------------- + // Implementation of MethodHandlesAdapterBlob +--- icedtea-3.8.0/openjdk/hotspot/src/share/vm/code/codeBlob.hpp 2018-09-18 10:17:46.065548902 +0200 ++++ icedtea-3.8.0/openjdk/hotspot/src/share/vm/code/codeBlob.hpp 2018-09-18 10:18:04.537649500 +0200 +@@ -101,6 +101,7 @@ + virtual bool is_exception_stub() const { return false; } + virtual bool is_safepoint_stub() const { return false; } + virtual bool is_adapter_blob() const { return false; } ++ virtual bool is_vtable_blob() const { return false; } + virtual bool is_method_handles_adapter_blob() const { return false; } + + virtual bool is_compiled_by_c2() const { return false; } +@@ -202,6 +203,7 @@ + class BufferBlob: public CodeBlob { + friend class VMStructs; + friend class AdapterBlob; ++ friend class VtableBlob; + friend class MethodHandlesAdapterBlob; + + private: +@@ -246,6 +248,18 @@ + virtual bool is_adapter_blob() const { return true; } + }; + ++//--------------------------------------------------------------------------------------------------- ++class VtableBlob: public BufferBlob { ++private: ++ VtableBlob(const char*, int); ++ ++public: ++ // Creation ++ static VtableBlob* create(const char* name, int buffer_size); ++ ++ // Typing ++ virtual bool is_vtable_blob() const { return true; } ++}; + + //---------------------------------------------------------------------------------------------------- + // MethodHandlesAdapterBlob: used to hold MethodHandles adapters +--- icedtea-3.8.0/openjdk/hotspot/src/share/vm/code/compiledIC.cpp 2018-09-18 10:17:46.065548902 +0200 ++++ icedtea-3.8.0/openjdk/hotspot/src/share/vm/code/compiledIC.cpp 2018-09-18 10:18:04.585649761 +0200 +@@ -232,7 +232,7 @@ + assert(k->verify_itable_index(itable_index), "sanity check"); + #endif //ASSERT + CompiledICHolder* holder = new CompiledICHolder(call_info->resolved_method()->method_holder(), +- call_info->resolved_klass()()); ++ call_info->resolved_klass()(), false); + holder->claim(); + InlineCacheBuffer::create_transition_stub(this, holder, entry); + } else { +@@ -270,7 +270,7 @@ + assert(!is_optimized(), "an optimized call cannot be megamorphic"); + + // Cannot rely on cached_value. It is either an interface or a method. +- return VtableStubs::is_entry_point(ic_destination()); ++ return VtableStubs::entry_point(ic_destination()) != NULL; + } + + bool CompiledIC::is_call_to_compiled() const { +@@ -534,9 +534,11 @@ + return true; + } + // itable stubs also use CompiledICHolder +- if (VtableStubs::is_entry_point(entry) && VtableStubs::stub_containing(entry)->is_itable_stub()) { +- return true; ++ if (cb != NULL && cb->is_vtable_blob()) { ++ VtableStub* s = VtableStubs::entry_point(entry); ++ return (s != NULL) && s->is_itable_stub(); + } ++ + return false; + } + +--- icedtea-3.8.0/openjdk/hotspot/src/share/vm/code/vtableStubs.cpp 2018-09-18 10:17:46.065548902 +0200 ++++ icedtea-3.8.0/openjdk/hotspot/src/share/vm/code/vtableStubs.cpp 2018-09-18 10:18:04.585649761 +0200 +@@ -60,7 +60,7 @@ + + // There is a dependency on the name of the blob in src/share/vm/prims/jvmtiCodeBlobEvents.cpp + // If changing the name, update the other file accordingly. +- BufferBlob* blob = BufferBlob::create("vtable chunks", bytes); ++ VtableBlob* blob = VtableBlob::create("vtable chunks", bytes); + if (blob == NULL) { + return NULL; + } +@@ -167,16 +167,17 @@ + _number_of_vtable_stubs++; + } + +- +-bool VtableStubs::is_entry_point(address pc) { ++VtableStub* VtableStubs::entry_point(address pc) { + MutexLocker ml(VtableStubs_lock); + VtableStub* stub = (VtableStub*)(pc - VtableStub::entry_offset()); + uint hash = VtableStubs::hash(stub->is_vtable_stub(), stub->index()); + VtableStub* s; + for (s = _table[hash]; s != NULL && s != stub; s = s->next()) {} +- return s == stub; ++ if (s == stub) { ++ return s; ++ } ++ return NULL; + } +- + + bool VtableStubs::contains(address pc) { + // simple solution for now - we may want to use +--- icedtea-3.8.0/openjdk/hotspot/src/share/vm/code/vtableStubs.hpp 2018-09-18 10:17:46.065548902 +0200 ++++ icedtea-3.8.0/openjdk/hotspot/src/share/vm/code/vtableStubs.hpp 2018-09-18 10:18:04.585649761 +0200 +@@ -126,7 +126,7 @@ + public: + static address find_vtable_stub(int vtable_index) { return find_stub(true, vtable_index); } + static address find_itable_stub(int itable_index) { return find_stub(false, itable_index); } +- static bool is_entry_point(address pc); // is pc a vtable stub entry point? ++ static VtableStub* entry_point(address pc); // vtable stub entry point for a pc + static bool contains(address pc); // is pc within any stub? + static VtableStub* stub_containing(address pc); // stub containing pc or NULL + static int number_of_vtable_stubs() { return _number_of_vtable_stubs; } +--- icedtea-3.8.0/openjdk/hotspot/src/share/vm/oops/compiledICHolder.cpp 2018-09-18 10:17:46.073548946 +0200 ++++ icedtea-3.8.0/openjdk/hotspot/src/share/vm/oops/compiledICHolder.cpp 2018-09-18 10:18:04.585649761 +0200 +@@ -24,30 +24,12 @@ + + #include "precompiled.hpp" + #include "oops/compiledICHolder.hpp" +-#include "oops/klass.hpp" +-#include "oops/method.hpp" + #include "oops/oop.inline2.hpp" + + volatile int CompiledICHolder::_live_count; + volatile int CompiledICHolder::_live_not_claimed_count; + + +-bool CompiledICHolder::is_loader_alive(BoolObjectClosure* is_alive) { +- if (_holder_metadata->is_method()) { +- if (!((Method*)_holder_metadata)->method_holder()->is_loader_alive(is_alive)) { +- return false; +- } +- } else if (_holder_metadata->is_klass()) { +- if (!((Klass*)_holder_metadata)->is_loader_alive(is_alive)) { +- return false; +- } +- } +- if (!_holder_klass->is_loader_alive(is_alive)) { +- return false; +- } +- return true; +-} +- + // Printing + + void CompiledICHolder::print_on(outputStream* st) const { +--- icedtea-3.8.0/openjdk/hotspot/src/share/vm/oops/compiledICHolder.hpp 2018-09-18 10:17:46.073548946 +0200 ++++ icedtea-3.8.0/openjdk/hotspot/src/share/vm/oops/compiledICHolder.hpp 2018-09-18 10:18:04.585649761 +0200 +@@ -26,6 +26,8 @@ + #define SHARE_VM_OOPS_COMPILEDICHOLDEROOP_HPP + + #include "oops/oop.hpp" ++#include "oops/klass.hpp" ++#include "oops/method.hpp" + + // A CompiledICHolder* is a helper object for the inline cache implementation. + // It holds: +@@ -48,11 +50,12 @@ + Metadata* _holder_metadata; + Klass* _holder_klass; // to avoid name conflict with oopDesc::_klass + CompiledICHolder* _next; ++ bool _is_metadata_method; + + public: + // Constructor +- CompiledICHolder(Metadata* metadata, Klass* klass) +- : _holder_metadata(metadata), _holder_klass(klass) { ++ CompiledICHolder(Metadata* metadata, Klass* klass, bool is_method = true) ++ : _holder_metadata(metadata), _holder_klass(klass), _is_metadata_method(is_method) { + #ifdef ASSERT + Atomic::inc(&_live_count); + Atomic::inc(&_live_not_claimed_count); +@@ -82,7 +85,16 @@ + CompiledICHolder* next() { return _next; } + void set_next(CompiledICHolder* n) { _next = n; } + +- bool is_loader_alive(BoolObjectClosure* is_alive); ++ inline bool is_loader_alive(BoolObjectClosure* is_alive) { ++ Klass* k = _is_metadata_method ? ((Method*)_holder_metadata)->method_holder() : (Klass*)_holder_metadata; ++ if (!k->is_loader_alive(is_alive)) { ++ return false; ++ } ++ if (!_holder_klass->is_loader_alive(is_alive)) { ++ return false; ++ } ++ return true; ++ } + + // Verify + void verify_on(outputStream* st); diff --git a/8199547.patch b/8199547.patch new file mode 100644 index 0000000..f4d1719 --- /dev/null +++ b/8199547.patch @@ -0,0 +1,11 @@ +--- icedtea-3.8.0/openjdk/jdk/src/share/classes/java/util/regex/PatternSyntaxException.java 2018-09-18 10:20:24.942414144 +0200 ++++ icedtea-3.8.0/openjdk/jdk/src/share/classes/java/util/regex/PatternSyntaxException.java 2018-09-18 10:21:21.026719597 +0200 +@@ -113,7 +113,7 @@ + } + sb.append(nl); + sb.append(pattern); +- if (index >= 0) { ++ if (index >= 0 && pattern != null && index < pattern.length()) { + sb.append(nl); + for (int i = 0; i < index; i++) sb.append(' '); + sb.append('^'); diff --git a/8200359.patch b/8200359.patch new file mode 100644 index 0000000..b08ced9 --- /dev/null +++ b/8200359.patch @@ -0,0 +1,3577 @@ +--- icedtea-3.8.0/openjdk/jdk/make/data/tzdata/africa 2018-09-18 10:22:19.723039231 +0200 ++++ icedtea-3.8.0/openjdk/jdk/make/data/tzdata/africa 2018-09-18 10:25:01.663921124 +0200 +@@ -138,13 +138,13 @@ + + # Cape Verde / Cabo Verde + # ++# From Paul Eggert (2018-02-16): + # Shanks gives 1907 for the transition to +02. +-# Perhaps the 1911-05-26 Portuguese decree +-# https://dre.pt/pdf1sdip/1911/05/12500/23132313.pdf +-# merely made it official? ++# For now, ignore that and follow the 1911-05-26 Portuguese decree ++# (see Europe/Lisbon). + # + # Zone NAME GMTOFF RULES FORMAT [UNTIL] +-Zone Atlantic/Cape_Verde -1:34:04 - LMT 1907 # Praia ++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 +@@ -393,15 +393,34 @@ + # See Africa/Abidjan. + + # Ghana +-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S ++ ++# From Paul Eggert (2018-01-30): + # Whitman says DST was observed from 1931 to "the present"; +-# Shanks & Pottenger say 1936 to 1942; +-# and September 1 to January 1 is given by: +-# Scott Keltie J, Epstein M (eds), The Statesman's Year-Book, +-# 57th ed. Macmillan, London (1920), OCLC 609408015, pp xxviii. +-# For lack of better info, assume DST was observed from 1920 to 1942. +-Rule Ghana 1920 1942 - Sep 1 0:00 0:20 GHST +-Rule Ghana 1920 1942 - Dec 31 0:00 0 GMT ++# Shanks & Pottenger say 1936 to 1942 with 20 minutes of DST, ++# with transitions on 09-01 and 12-31 at 00:00. ++# Page 33 of Parish GCB, Colonial Reports - Annual. No. 1066. Gold ++# Coast. Report for 1919. (March 1921), OCLC 784024077 ++# http://libsysdigi.library.illinois.edu/ilharvest/africana/books2011-05/5530214/5530214_1919/5530214_1919_opt.pdf ++# lists the Determination of the Time Ordinance, 1919, No. 18, ++# "to advance the time observed locally by the space of twenty minutes ++# during the last four months of each year; the object in view being ++# to extend during those months the period of daylight-time available ++# for evening recreation after office hours." ++# Vanessa Ogle, The Global Transformation of Time, 1870-1950 (2015), p 33, ++# writes "In 1919, the Gold Coast (Ghana as of 1957) made Greenwich ++# time its legal time and simultaneously legalized a summer time of ++# UTC - 00:20 minutes from March to October."; a footnote lists ++# the ordinance as being dated 1919-11-24. ++# The Crown Colonist, Volume 12 (1942), p 176, says "the Government ++# intend advancing Gold Coast time half an hour ahead of G.M.T. ++# The actual date of the alteration has not yet been announced." ++# These sources are incomplete and contradictory. Possibly what is ++# now Ghana observed different DST regimes in different years. For ++# lack of better info, use Shanks except treat the minus sign as a ++# typo, and assume DST started in 1920 not 1936. ++# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S ++Rule Ghana 1920 1942 - Sep 1 0:00 0:20 - ++Rule Ghana 1920 1942 - Dec 31 0:00 0 - + # Zone NAME GMTOFF RULES FORMAT [UNTIL] + Zone Africa/Accra -0:00:52 - LMT 1918 + 0:00 Ghana GMT/+0020 +@@ -411,13 +430,13 @@ + + # 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 +-# https://dre.pt/pdf1sdip/1911/05/12500/23132313.pdf +-# with the date that it took effect, namely 1912-01-01. ++# (see Europe/Lisbon) with the date that it took effect. + # + # Zone NAME GMTOFF RULES FORMAT [UNTIL] +-Zone Africa/Bissau -1:02:20 - LMT 1912 Jan 1 ++Zone Africa/Bissau -1:02:20 - LMT 1912 Jan 1 1:00u + -1:00 - -01 1975 + 0:00 - GMT + +@@ -613,9 +632,9 @@ + # at 2am (or 02:00) local time..." + + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +-Rule Mauritius 1982 only - Oct 10 0:00 1:00 S ++Rule Mauritius 1982 only - Oct 10 0:00 1:00 - + Rule Mauritius 1983 only - Mar 21 0:00 0 - +-Rule Mauritius 2008 only - Oct lastSun 2:00 1:00 S ++Rule Mauritius 2008 only - Oct lastSun 2:00 1:00 - + Rule Mauritius 2009 only - Mar lastSun 2:00 0 - + # Zone NAME GMTOFF RULES FORMAT [UNTIL] + Zone Indian/Mauritius 3:50:00 - LMT 1907 # Port Louis +@@ -1060,6 +1079,8 @@ + + # São Tomé and Príncipe + ++# See Europe/Lisbon for info about the 1912 transition. ++ + # From Steffen Thorsen (2018-01-08): + # Multiple sources tell that São Tomé changed from UTC to UTC+1 as + # they entered the year 2018. +@@ -1068,7 +1089,7 @@ + # http://www.mnec.gov.st/index.php/publicacoes/documentos/file/90-decreto-lei-n-25-2017 + + Zone Africa/Sao_Tome 0:26:56 - LMT 1884 +- -0:36:45 - LMT 1912 # Lisbon Mean Time ++ -0:36:45 - LMT 1912 Jan 1 00:00u # Lisbon MT + 0:00 - GMT 2018 Jan 1 01:00 + 1:00 - WAT + +--- icedtea-3.8.0/openjdk/jdk/make/data/tzdata/antarctica 2018-09-18 10:22:19.723039231 +0200 ++++ icedtea-3.8.0/openjdk/jdk/make/data/tzdata/antarctica 2018-09-18 10:25:01.663921124 +0200 +@@ -98,7 +98,8 @@ + 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 ++ 11:00 - +11 2018 Mar 11 4:00 ++ 8:00 - +08 + Zone Antarctica/Davis 0 - -00 1957 Jan 13 + 7:00 - +07 1964 Nov + 0 - -00 1969 Feb +--- icedtea-3.8.0/openjdk/jdk/make/data/tzdata/asia 2018-09-18 10:22:19.723039231 +0200 ++++ icedtea-3.8.0/openjdk/jdk/make/data/tzdata/asia 2018-09-18 10:25:01.663921124 +0200 +@@ -92,13 +92,13 @@ + Rule EUAsia 1981 max - Mar lastSun 1:00u 1:00 S + Rule EUAsia 1979 1995 - Sep lastSun 1:00u 0 - + Rule EUAsia 1996 max - Oct lastSun 1:00u 0 - +-Rule E-EurAsia 1981 max - Mar lastSun 0:00 1:00 S ++Rule E-EurAsia 1981 max - Mar lastSun 0:00 1:00 - + Rule E-EurAsia 1979 1995 - Sep lastSun 0:00 0 - + Rule E-EurAsia 1996 max - Oct lastSun 0:00 0 - +-Rule RussiaAsia 1981 1984 - Apr 1 0:00 1:00 S ++Rule RussiaAsia 1981 1984 - Apr 1 0:00 1:00 - + Rule RussiaAsia 1981 1983 - Oct 1 0:00 0 - + Rule RussiaAsia 1984 1995 - Sep lastSun 2:00s 0 - +-Rule RussiaAsia 1985 2010 - Mar lastSun 2:00s 1:00 S ++Rule RussiaAsia 1985 2010 - Mar lastSun 2:00s 1:00 - + Rule RussiaAsia 1996 2010 - Oct lastSun 2:00s 0 - + + # Afghanistan +@@ -133,7 +133,7 @@ + # (brief) + # http://www.worldtimezone.com/dst_news/dst_news_armenia03.html + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +-Rule Armenia 2011 only - Mar lastSun 2:00s 1:00 S ++Rule Armenia 2011 only - Mar lastSun 2:00s 1:00 - + Rule Armenia 2011 only - Oct lastSun 2:00s 0 - + # Zone NAME GMTOFF RULES FORMAT [UNTIL] + Zone Asia/Yerevan 2:58:00 - LMT 1924 May 2 +@@ -159,7 +159,7 @@ + # http://en.apa.az/xeber_azerbaijan_abolishes_daylight_savings_ti_240862.html + + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +-Rule Azer 1997 2015 - Mar lastSun 4:00 1:00 S ++Rule Azer 1997 2015 - Mar lastSun 4:00 1:00 - + Rule Azer 1997 2015 - Oct lastSun 5:00 0 - + # Zone NAME GMTOFF RULES FORMAT [UNTIL] + Zone Asia/Baku 3:19:24 - LMT 1924 May 2 +@@ -246,7 +246,7 @@ + # http://www.worldtimezone.com/dst_news/dst_news_bangladesh06.html + + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +-Rule Dhaka 2009 only - Jun 19 23:00 1:00 S ++Rule Dhaka 2009 only - Jun 19 23:00 1:00 - + Rule Dhaka 2009 only - Dec 31 24:00 0 - + + # Zone NAME GMTOFF RULES FORMAT [UNTIL] +@@ -787,8 +787,9 @@ + Rule Macau 1975 1977 - Apr Sun>=15 3:30 1:00 D + Rule Macau 1978 1980 - Apr Sun>=15 0:00 1:00 D + Rule Macau 1978 1980 - Oct Sun>=15 0:00 0 S ++# See Europe/Lisbon for info about the 1912 transition. + # Zone NAME GMTOFF RULES FORMAT [UNTIL] +-Zone Asia/Macau 7:34:20 - LMT 1912 Jan 1 ++Zone Asia/Macau 7:34:20 - LMT 1911 Dec 31 16:00u + 8:00 Macau C%sT + + +@@ -1129,61 +1130,61 @@ + # thirtieth day of Shahrivar. + # + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +-Rule Iran 1978 1980 - Mar 21 0:00 1:00 D +-Rule Iran 1978 only - Oct 21 0:00 0 S +-Rule Iran 1979 only - Sep 19 0:00 0 S +-Rule Iran 1980 only - Sep 23 0:00 0 S +-Rule Iran 1991 only - May 3 0:00 1:00 D +-Rule Iran 1992 1995 - Mar 22 0:00 1:00 D +-Rule Iran 1991 1995 - Sep 22 0:00 0 S +-Rule Iran 1996 only - Mar 21 0:00 1:00 D +-Rule Iran 1996 only - Sep 21 0:00 0 S +-Rule Iran 1997 1999 - Mar 22 0:00 1:00 D +-Rule Iran 1997 1999 - Sep 22 0:00 0 S +-Rule Iran 2000 only - Mar 21 0:00 1:00 D +-Rule Iran 2000 only - Sep 21 0:00 0 S +-Rule Iran 2001 2003 - Mar 22 0:00 1:00 D +-Rule Iran 2001 2003 - Sep 22 0:00 0 S +-Rule Iran 2004 only - Mar 21 0:00 1:00 D +-Rule Iran 2004 only - Sep 21 0:00 0 S +-Rule Iran 2005 only - Mar 22 0:00 1:00 D +-Rule Iran 2005 only - Sep 22 0:00 0 S +-Rule Iran 2008 only - Mar 21 0:00 1:00 D +-Rule Iran 2008 only - Sep 21 0:00 0 S +-Rule Iran 2009 2011 - Mar 22 0:00 1:00 D +-Rule Iran 2009 2011 - Sep 22 0:00 0 S +-Rule Iran 2012 only - Mar 21 0:00 1:00 D +-Rule Iran 2012 only - Sep 21 0:00 0 S +-Rule Iran 2013 2015 - Mar 22 0:00 1:00 D +-Rule Iran 2013 2015 - Sep 22 0:00 0 S +-Rule Iran 2016 only - Mar 21 0:00 1:00 D +-Rule Iran 2016 only - Sep 21 0:00 0 S +-Rule Iran 2017 2019 - Mar 22 0:00 1:00 D +-Rule Iran 2017 2019 - Sep 22 0:00 0 S +-Rule Iran 2020 only - Mar 21 0:00 1:00 D +-Rule Iran 2020 only - Sep 21 0:00 0 S +-Rule Iran 2021 2023 - Mar 22 0:00 1:00 D +-Rule Iran 2021 2023 - Sep 22 0:00 0 S +-Rule Iran 2024 only - Mar 21 0:00 1:00 D +-Rule Iran 2024 only - Sep 21 0:00 0 S +-Rule Iran 2025 2027 - Mar 22 0:00 1:00 D +-Rule Iran 2025 2027 - Sep 22 0:00 0 S +-Rule Iran 2028 2029 - Mar 21 0:00 1:00 D +-Rule Iran 2028 2029 - Sep 21 0:00 0 S +-Rule Iran 2030 2031 - Mar 22 0:00 1:00 D +-Rule Iran 2030 2031 - Sep 22 0:00 0 S +-Rule Iran 2032 2033 - Mar 21 0:00 1:00 D +-Rule Iran 2032 2033 - Sep 21 0:00 0 S +-Rule Iran 2034 2035 - Mar 22 0:00 1:00 D +-Rule Iran 2034 2035 - Sep 22 0:00 0 S ++Rule Iran 1978 1980 - Mar 21 0:00 1:00 - ++Rule Iran 1978 only - Oct 21 0:00 0 - ++Rule Iran 1979 only - Sep 19 0:00 0 - ++Rule Iran 1980 only - Sep 23 0:00 0 - ++Rule Iran 1991 only - May 3 0:00 1:00 - ++Rule Iran 1992 1995 - Mar 22 0:00 1:00 - ++Rule Iran 1991 1995 - Sep 22 0:00 0 - ++Rule Iran 1996 only - Mar 21 0:00 1:00 - ++Rule Iran 1996 only - Sep 21 0:00 0 - ++Rule Iran 1997 1999 - Mar 22 0:00 1:00 - ++Rule Iran 1997 1999 - Sep 22 0:00 0 - ++Rule Iran 2000 only - Mar 21 0:00 1:00 - ++Rule Iran 2000 only - Sep 21 0:00 0 - ++Rule Iran 2001 2003 - Mar 22 0:00 1:00 - ++Rule Iran 2001 2003 - Sep 22 0:00 0 - ++Rule Iran 2004 only - Mar 21 0:00 1:00 - ++Rule Iran 2004 only - Sep 21 0:00 0 - ++Rule Iran 2005 only - Mar 22 0:00 1:00 - ++Rule Iran 2005 only - Sep 22 0:00 0 - ++Rule Iran 2008 only - Mar 21 0:00 1:00 - ++Rule Iran 2008 only - Sep 21 0:00 0 - ++Rule Iran 2009 2011 - Mar 22 0:00 1:00 - ++Rule Iran 2009 2011 - Sep 22 0:00 0 - ++Rule Iran 2012 only - Mar 21 0:00 1:00 - ++Rule Iran 2012 only - Sep 21 0:00 0 - ++Rule Iran 2013 2015 - Mar 22 0:00 1:00 - ++Rule Iran 2013 2015 - Sep 22 0:00 0 - ++Rule Iran 2016 only - Mar 21 0:00 1:00 - ++Rule Iran 2016 only - Sep 21 0:00 0 - ++Rule Iran 2017 2019 - Mar 22 0:00 1:00 - ++Rule Iran 2017 2019 - Sep 22 0:00 0 - ++Rule Iran 2020 only - Mar 21 0:00 1:00 - ++Rule Iran 2020 only - Sep 21 0:00 0 - ++Rule Iran 2021 2023 - Mar 22 0:00 1:00 - ++Rule Iran 2021 2023 - Sep 22 0:00 0 - ++Rule Iran 2024 only - Mar 21 0:00 1:00 - ++Rule Iran 2024 only - Sep 21 0:00 0 - ++Rule Iran 2025 2027 - Mar 22 0:00 1:00 - ++Rule Iran 2025 2027 - Sep 22 0:00 0 - ++Rule Iran 2028 2029 - Mar 21 0:00 1:00 - ++Rule Iran 2028 2029 - Sep 21 0:00 0 - ++Rule Iran 2030 2031 - Mar 22 0:00 1:00 - ++Rule Iran 2030 2031 - Sep 22 0:00 0 - ++Rule Iran 2032 2033 - Mar 21 0:00 1:00 - ++Rule Iran 2032 2033 - Sep 21 0:00 0 - ++Rule Iran 2034 2035 - Mar 22 0:00 1:00 - ++Rule Iran 2034 2035 - Sep 22 0:00 0 - + # + # The following rules are approximations starting in the year 2038. + # These are the best post-2037 approximations available, given the + # restrictions of a single rule using a Gregorian-based data format. + # At some point this table will need to be extended, though quite + # possibly Iran will change the rules first. +-Rule Iran 2036 max - Mar 21 0:00 1:00 D +-Rule Iran 2036 max - Sep 21 0:00 0 S ++Rule Iran 2036 max - Mar 21 0:00 1:00 - ++Rule Iran 2036 max - Sep 21 0:00 0 - + + # Zone NAME GMTOFF RULES FORMAT [UNTIL] + Zone Asia/Tehran 3:25:44 - LMT 1916 +@@ -1219,17 +1220,17 @@ + # https://www.timeanddate.com/news/time/iraq-dumps-daylight-saving.html + + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +-Rule Iraq 1982 only - May 1 0:00 1:00 D +-Rule Iraq 1982 1984 - Oct 1 0:00 0 S +-Rule Iraq 1983 only - Mar 31 0:00 1:00 D +-Rule Iraq 1984 1985 - Apr 1 0:00 1:00 D +-Rule Iraq 1985 1990 - Sep lastSun 1:00s 0 S +-Rule Iraq 1986 1990 - Mar lastSun 1:00s 1:00 D ++Rule Iraq 1982 only - May 1 0:00 1:00 - ++Rule Iraq 1982 1984 - Oct 1 0:00 0 - ++Rule Iraq 1983 only - Mar 31 0:00 1:00 - ++Rule Iraq 1984 1985 - Apr 1 0:00 1:00 - ++Rule Iraq 1985 1990 - Sep lastSun 1:00s 0 - ++Rule Iraq 1986 1990 - Mar lastSun 1:00s 1:00 - + # IATA SSIM (1991/1996) says Apr 1 12:01am UTC; guess the ':01' is a typo. + # Shanks & Pottenger say Iraq did not observe DST 1992/1997; ignore this. + # +-Rule Iraq 1991 2007 - Apr 1 3:00s 1:00 D +-Rule Iraq 1991 2007 - Oct 1 3:00s 0 S ++Rule Iraq 1991 2007 - Apr 1 3:00s 1:00 - ++Rule Iraq 1991 2007 - Oct 1 3:00s 0 - + # Zone NAME GMTOFF RULES FORMAT [UNTIL] + Zone Asia/Baghdad 2:57:40 - LMT 1890 + 2:57:36 - BMT 1918 # Baghdad Mean Time? +@@ -1501,8 +1502,7 @@ + + # From Hideyuki Suzuki (1998-11-09): + # 'Tokyo' usually stands for the former location of Tokyo Astronomical +-# Observatory: 139 degrees 44' 40.90" E (9h 18m 58.727s), +-# 35 degrees 39' 16.0" N. ++# Observatory: 139° 44' 40.90" E (9h 18m 58.727s), 35° 39' 16.0" N. + # This data is from 'Rika Nenpyou (Chronological Scientific Tables) 1996' + # edited by National Astronomical Observatory of Japan.... + # JST (Japan Standard Time) has been used since 1888-01-01 00:00 (JST). +@@ -1510,10 +1510,10 @@ + + # From Hideyuki Suzuki (1998-11-16): + # The ordinance No. 51 (1886) established "standard time" in Japan, +-# which stands for the time on 135 degrees E. ++# which stands for the time on 135° E. + # In the ordinance No. 167 (1895), "standard time" was renamed to "central + # standard time". And the same ordinance also established "western standard +-# time", which stands for the time on 120 degrees E.... But "western standard ++# time", which stands for the time on 120° E.... But "western standard + # time" was abolished in the ordinance No. 529 (1937). In the ordinance No. + # 167, there is no mention regarding for what place western standard time is + # standard.... +@@ -1926,9 +1926,9 @@ + # From 2005-08-12 our GMT-offset is +6, w/o any daylight saving. + + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +-Rule Kyrgyz 1992 1996 - Apr Sun>=7 0:00s 1:00 S ++Rule Kyrgyz 1992 1996 - Apr Sun>=7 0:00s 1:00 - + Rule Kyrgyz 1992 1996 - Sep lastSun 0:00 0 - +-Rule Kyrgyz 1997 2005 - Mar lastSun 2:30 1:00 S ++Rule Kyrgyz 1997 2005 - Mar lastSun 2:30 1:00 - + Rule Kyrgyz 1997 2004 - Oct lastSun 2:30 0 - + # Zone NAME GMTOFF RULES FORMAT [UNTIL] + Zone Asia/Bishkek 4:58:24 - LMT 1924 May 2 +@@ -2060,7 +2060,7 @@ + + # Malaysia + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +-Rule NBorneo 1935 1941 - Sep 14 0:00 0:20 TS # one-Third Summer ++Rule NBorneo 1935 1941 - Sep 14 0:00 0:20 - + Rule NBorneo 1935 1941 - Dec 14 0:00 0 - + # + # peninsular Malaysia +@@ -2205,7 +2205,7 @@ + # http://zasag.mn/news/view/8969 + + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +-Rule Mongol 1983 1984 - Apr 1 0:00 1:00 S ++Rule Mongol 1983 1984 - Apr 1 0:00 1:00 - + Rule Mongol 1983 only - Oct 1 0:00 0 - + # Shanks & Pottenger and IATA SSIM say 1990s switches occurred at 00:00, + # but McDow says the 2001 switches occurred at 02:00. Also, IATA SSIM +@@ -2222,13 +2222,13 @@ + # Mongolian Government meeting has concluded today to cancel daylight + # saving time adoption in Mongolia. Source: http://zasag.mn/news/view/16192 + +-Rule Mongol 1985 1998 - Mar lastSun 0:00 1:00 S ++Rule Mongol 1985 1998 - Mar lastSun 0:00 1:00 - + Rule Mongol 1984 1998 - Sep lastSun 0:00 0 - + # IATA SSIM (1999-09) says Mongolia no longer observes DST. +-Rule Mongol 2001 only - Apr lastSat 2:00 1:00 S ++Rule Mongol 2001 only - Apr lastSat 2:00 1:00 - + Rule Mongol 2001 2006 - Sep lastSat 2:00 0 - +-Rule Mongol 2002 2006 - Mar lastSat 2:00 1:00 S +-Rule Mongol 2015 2016 - Mar lastSat 2:00 1:00 S ++Rule Mongol 2002 2006 - Mar lastSat 2:00 1:00 - ++Rule Mongol 2015 2016 - Mar lastSat 2:00 1:00 - + Rule Mongol 2015 2016 - Sep lastSat 0:00 0 - + + # Zone NAME GMTOFF RULES FORMAT [UNTIL] +@@ -2662,9 +2662,6 @@ + # [Google translation]: "The Council also decided to start daylight + # saving in Palestine as of one o'clock on Saturday morning, + # 2016-03-26, to provide the clock 60 minutes ahead." +-# +-# From Paul Eggert (2016-03-12): +-# Predict spring transitions on March's last Saturday at 01:00 from now on. + + # From Sharef Mustafa (2016-10-19): + # [T]he Palestinian cabinet decision (Mar 8th 2016) published on +@@ -2681,6 +2678,16 @@ + # https://www.timeanddate.com/time/change/gaza-strip/gaza + # https://www.timeanddate.com/time/change/west-bank/hebron + ++# From Sharef Mustafa (2018-03-16): ++# Palestine summer time will start on Mar 24th 2018 by advancing the ++# clock by 60 minutes as per Palestinian cabinet decision published on ++# the offical website, though the decree did not specify the exact ++# time of the time shift. ++# http://www.palestinecabinet.gov.ps/Website/AR/NDecrees/ViewFile.ashx?ID=e7a42ab7-ee23-435a-b9c8-a4f7e81f3817 ++# ++# From Paul Eggert (2018-03-16): ++# For 2016 on, predict spring transitions on March's fourth Saturday at 01:00. ++ + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S + Rule EgyptAsia 1957 only - May 10 0:00 1:00 S + Rule EgyptAsia 1957 1958 - Oct 1 0:00 0 - +@@ -2710,7 +2717,7 @@ + Rule Palestine 2013 only - Sep Fri>=21 0:00 0 - + Rule Palestine 2014 2015 - Oct Fri>=21 0:00 0 - + Rule Palestine 2015 only - Mar lastFri 24:00 1:00 S +-Rule Palestine 2016 max - Mar lastSat 1:00 1:00 S ++Rule Palestine 2016 max - Mar Sat>=22 1:00 1:00 S + Rule Palestine 2016 max - Oct lastSat 1:00 0 - + + # Zone NAME GMTOFF RULES FORMAT [UNTIL] +@@ -2760,11 +2767,11 @@ + # http://www.philstar.com/headlines/2014/08/05/1354152/pnoy-urged-declare-use-daylight-saving-time + + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +-Rule Phil 1936 only - Nov 1 0:00 1:00 S ++Rule Phil 1936 only - Nov 1 0:00 1:00 - + Rule Phil 1937 only - Feb 1 0:00 0 - +-Rule Phil 1954 only - Apr 12 0:00 1:00 S ++Rule Phil 1954 only - Apr 12 0:00 1:00 - + Rule Phil 1954 only - Jul 1 0:00 0 - +-Rule Phil 1978 only - Mar 22 0:00 1:00 S ++Rule Phil 1978 only - Mar 22 0:00 1:00 - + Rule Phil 1978 only - Sep 21 0:00 0 - + # Zone NAME GMTOFF RULES FORMAT [UNTIL] + Zone Asia/Manila -15:56:00 - LMT 1844 Dec 31 +@@ -3120,9 +3127,9 @@ + # and is the basis for the information below. + # + # The 1906 transition was effective July 1 and standardized Indochina to +-# Phù Liễn Observatory, legally 104 deg. 17'17" east of Paris. ++# Phù Liễn Observatory, legally 104° 17' 17" east of Paris. + # It's unclear whether this meant legal Paris Mean Time (00:09:21) or +-# the Paris Meridian (2 deg. 20'14.03" E); the former yields 07:06:30.1333... ++# the Paris Meridian (2° 20' 14.03" E); the former yields 07:06:30.1333... + # and the latter 07:06:29.333... so either way it rounds to 07:06:30, + # which is used below even though the modern-day Phù Liễn Observatory + # is closer to 07:06:31. Abbreviate Phù Liễn Mean Time as PLMT. +--- icedtea-3.8.0/openjdk/jdk/make/data/tzdata/australasia 2018-09-18 10:22:19.723039231 +0200 ++++ icedtea-3.8.0/openjdk/jdk/make/data/tzdata/australasia 2018-09-18 10:25:01.667921146 +0200 +@@ -219,20 +219,20 @@ + + # Lord Howe Island + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +-Rule LH 1981 1984 - Oct lastSun 2:00 1:00 D +-Rule LH 1982 1985 - Mar Sun>=1 2:00 0 S +-Rule LH 1985 only - Oct lastSun 2:00 0:30 D +-Rule LH 1986 1989 - Mar Sun>=15 2:00 0 S +-Rule LH 1986 only - Oct 19 2:00 0:30 D +-Rule LH 1987 1999 - Oct lastSun 2:00 0:30 D +-Rule LH 1990 1995 - Mar Sun>=1 2:00 0 S +-Rule LH 1996 2005 - Mar lastSun 2:00 0 S +-Rule LH 2000 only - Aug lastSun 2:00 0:30 D +-Rule LH 2001 2007 - Oct lastSun 2:00 0:30 D +-Rule LH 2006 only - Apr Sun>=1 2:00 0 S +-Rule LH 2007 only - Mar lastSun 2:00 0 S +-Rule LH 2008 max - Apr Sun>=1 2:00 0 S +-Rule LH 2008 max - Oct Sun>=1 2:00 0:30 D ++Rule LH 1981 1984 - Oct lastSun 2:00 1:00 - ++Rule LH 1982 1985 - Mar Sun>=1 2:00 0 - ++Rule LH 1985 only - Oct lastSun 2:00 0:30 - ++Rule LH 1986 1989 - Mar Sun>=15 2:00 0 - ++Rule LH 1986 only - Oct 19 2:00 0:30 - ++Rule LH 1987 1999 - Oct lastSun 2:00 0:30 - ++Rule LH 1990 1995 - Mar Sun>=1 2:00 0 - ++Rule LH 1996 2005 - Mar lastSun 2:00 0 - ++Rule LH 2000 only - Aug lastSun 2:00 0:30 - ++Rule LH 2001 2007 - Oct lastSun 2:00 0:30 - ++Rule LH 2006 only - Apr Sun>=1 2:00 0 - ++Rule LH 2007 only - Mar lastSun 2:00 0 - ++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 +@@ -390,15 +390,15 @@ + # practice than guessing no DST. + + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +-Rule Fiji 1998 1999 - Nov Sun>=1 2:00 1:00 S ++Rule Fiji 1998 1999 - Nov Sun>=1 2:00 1:00 - + Rule Fiji 1999 2000 - Feb lastSun 3:00 0 - +-Rule Fiji 2009 only - Nov 29 2:00 1:00 S ++Rule Fiji 2009 only - Nov 29 2:00 1:00 - + Rule Fiji 2010 only - Mar lastSun 3:00 0 - +-Rule Fiji 2010 2013 - Oct Sun>=21 2:00 1:00 S ++Rule Fiji 2010 2013 - Oct Sun>=21 2:00 1:00 - + Rule Fiji 2011 only - Mar Sun>=1 3:00 0 - + Rule Fiji 2012 2013 - Jan Sun>=18 3:00 0 - + Rule Fiji 2014 only - Jan Sun>=18 2:00 0 - +-Rule Fiji 2014 max - Nov Sun>=1 2:00 1:00 S ++Rule Fiji 2014 max - Nov Sun>=1 2:00 1:00 - + Rule Fiji 2015 max - Jan Sun>=14 3:00 0 - + # Zone NAME GMTOFF RULES FORMAT [UNTIL] + Zone Pacific/Fiji 11:55:44 - LMT 1915 Oct 26 # Suva +@@ -429,11 +429,11 @@ + 12:00 - +12 + Zone Pacific/Enderbury -11:24:20 - LMT 1901 + -12:00 - -12 1979 Oct +- -11:00 - -11 1995 ++ -11:00 - -11 1994 Dec 31 + 13:00 - +13 + Zone Pacific/Kiritimati -10:29:20 - LMT 1901 + -10:40 - -1040 1979 Oct +- -10:00 - -10 1995 ++ -10:00 - -10 1994 Dec 31 + 14:00 - +14 + + # N Mariana Is +@@ -470,9 +470,9 @@ + + # New Caledonia + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +-Rule NC 1977 1978 - Dec Sun>=1 0:00 1:00 S ++Rule NC 1977 1978 - Dec Sun>=1 0:00 1:00 - + Rule NC 1978 1979 - Feb 27 0:00 0 - +-Rule NC 1996 only - Dec 1 2:00s 1:00 S ++Rule NC 1996 only - Dec 1 2:00s 1:00 - + # Shanks & Pottenger say the following was at 2:00; go with IATA. + Rule NC 1997 only - Mar 2 2:00s 0 - + # Zone NAME GMTOFF RULES FORMAT [UNTIL] +@@ -492,27 +492,28 @@ + Rule NZ 1934 1940 - Apr lastSun 2:00 0 M + Rule NZ 1934 1940 - Sep lastSun 2:00 0:30 S + Rule NZ 1946 only - Jan 1 0:00 0 S +-# Since 1957 Chatham has been 45 minutes ahead of NZ, but there's no +-# convenient single notation for the date and time of this transition +-# so we must duplicate the Rule lines. ++# Since 1957 Chatham has been 45 minutes ahead of NZ, but until 2018a ++# there was no documented single notation for the date and time of this ++# transition. Duplicate the Rule lines for now, to give the 2018a change ++# time to percolate out. + Rule NZ 1974 only - Nov Sun>=1 2:00s 1:00 D +-Rule Chatham 1974 only - Nov Sun>=1 2:45s 1:00 D ++Rule Chatham 1974 only - Nov Sun>=1 2:45s 1:00 - + Rule NZ 1975 only - Feb lastSun 2:00s 0 S +-Rule Chatham 1975 only - Feb lastSun 2:45s 0 S ++Rule Chatham 1975 only - Feb lastSun 2:45s 0 - + Rule NZ 1975 1988 - Oct lastSun 2:00s 1:00 D +-Rule Chatham 1975 1988 - Oct lastSun 2:45s 1:00 D ++Rule Chatham 1975 1988 - Oct lastSun 2:45s 1:00 - + Rule NZ 1976 1989 - Mar Sun>=1 2:00s 0 S +-Rule Chatham 1976 1989 - Mar Sun>=1 2:45s 0 S ++Rule Chatham 1976 1989 - Mar Sun>=1 2:45s 0 - + Rule NZ 1989 only - Oct Sun>=8 2:00s 1:00 D +-Rule Chatham 1989 only - Oct Sun>=8 2:45s 1:00 D ++Rule Chatham 1989 only - Oct Sun>=8 2:45s 1:00 - + Rule NZ 1990 2006 - Oct Sun>=1 2:00s 1:00 D +-Rule Chatham 1990 2006 - Oct Sun>=1 2:45s 1:00 D ++Rule Chatham 1990 2006 - Oct Sun>=1 2:45s 1:00 - + Rule NZ 1990 2007 - Mar Sun>=15 2:00s 0 S +-Rule Chatham 1990 2007 - Mar Sun>=15 2:45s 0 S ++Rule Chatham 1990 2007 - Mar Sun>=15 2:45s 0 - + Rule NZ 2007 max - Sep lastSun 2:00s 1:00 D +-Rule Chatham 2007 max - Sep lastSun 2:45s 1:00 D ++Rule Chatham 2007 max - Sep lastSun 2:45s 1:00 - + Rule NZ 2008 max - Apr Sun>=1 2:00s 0 S +-Rule Chatham 2008 max - Apr Sun>=1 2:45s 0 S ++Rule Chatham 2008 max - Apr Sun>=1 2:45s 0 - + # Zone NAME GMTOFF RULES FORMAT [UNTIL] + Zone Pacific/Auckland 11:39:04 - LMT 1868 Nov 2 + 11:30 NZ NZ%sT 1946 Jan 1 +@@ -536,9 +537,9 @@ + # Cook Is + # From Shanks & Pottenger: + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +-Rule Cook 1978 only - Nov 12 0:00 0:30 HS ++Rule Cook 1978 only - Nov 12 0:00 0:30 - + Rule Cook 1979 1991 - Mar Sun>=1 0:00 0 - +-Rule Cook 1979 1990 - Oct lastSun 0:00 0:30 HS ++Rule Cook 1979 1990 - Oct lastSun 0:00 0:30 - + # Zone NAME GMTOFF RULES FORMAT [UNTIL] + Zone Pacific/Rarotonga -10:39:04 - LMT 1901 # Avarua + -10:30 - -1030 1978 Nov 12 +@@ -679,11 +680,11 @@ + # Assume the pattern instituted in 2012 will continue indefinitely. + + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +-Rule WS 2010 only - Sep lastSun 0:00 1 D +-Rule WS 2011 only - Apr Sat>=1 4:00 0 S +-Rule WS 2011 only - Sep lastSat 3:00 1 D +-Rule WS 2012 max - Apr Sun>=1 4:00 0 S +-Rule WS 2012 max - Sep lastSun 3:00 1 D ++Rule WS 2010 only - Sep lastSun 0:00 1 - ++Rule WS 2011 only - Apr Sat>=1 4:00 0 - ++Rule WS 2011 only - Sep lastSat 3:00 1 - ++Rule WS 2012 max - Apr Sun>=1 4:00 0 - ++Rule WS 2012 max - Sep lastSun 3:00 1 - + # Zone NAME GMTOFF RULES FORMAT [UNTIL] + Zone Pacific/Apia 12:33:04 - LMT 1892 Jul 5 + -11:26:56 - LMT 1911 +@@ -723,11 +724,11 @@ + + # Tonga + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +-Rule Tonga 1999 only - Oct 7 2:00s 1:00 S ++Rule Tonga 1999 only - Oct 7 2:00s 1:00 - + Rule Tonga 2000 only - Mar 19 2:00s 0 - +-Rule Tonga 2000 2001 - Nov Sun>=1 2:00 1:00 S ++Rule Tonga 2000 2001 - Nov Sun>=1 2:00 1:00 - + Rule Tonga 2001 2002 - Jan lastSun 2:00 0 - +-Rule Tonga 2016 only - Nov Sun>=1 2:00 1:00 S ++Rule Tonga 2016 only - Nov Sun>=1 2:00 1:00 - + Rule Tonga 2017 only - Jan Sun>=15 3:00 0 - + # Zone NAME GMTOFF RULES FORMAT [UNTIL] + Zone Pacific/Tongatapu 12:19:20 - LMT 1901 +@@ -804,12 +805,12 @@ + + # Vanuatu + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +-Rule Vanuatu 1983 only - Sep 25 0:00 1:00 S ++Rule Vanuatu 1983 only - Sep 25 0:00 1:00 - + Rule Vanuatu 1984 1991 - Mar Sun>=23 0:00 0 - +-Rule Vanuatu 1984 only - Oct 23 0:00 1:00 S +-Rule Vanuatu 1985 1991 - Sep Sun>=23 0:00 1:00 S ++Rule Vanuatu 1984 only - Oct 23 0:00 1:00 - ++Rule Vanuatu 1985 1991 - Sep Sun>=23 0:00 1:00 - + Rule Vanuatu 1992 1993 - Jan Sun>=23 0:00 0 - +-Rule Vanuatu 1992 only - Oct Sun>=23 0:00 1:00 S ++Rule Vanuatu 1992 only - Oct Sun>=23 0:00 1:00 - + # Zone NAME GMTOFF RULES FORMAT [UNTIL] + Zone Pacific/Efate 11:13:16 - LMT 1912 Jan 13 # Vila + 11:00 Vanuatu +11/+12 +@@ -1108,6 +1109,13 @@ + # South Australian time even though it's located in Western Australia. + + # 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 ] +@@ -1534,6 +1542,12 @@ + # "declared it the same day [throughout] the country as of Jan. 1, 1995" + # as part of the competition to be first into the 21st century. + ++# From Kerry Shetline (2018-02-03): ++# December 31 was the day that was skipped, so that the transition ++# would be from Friday December 30, 1994 to Sunday January 1, 1995. ++# From Paul Eggert (2018-02-04): ++# One source for this is page 202 of: Bartky IR. One Time Fits All: ++# The Campaigns for Global Uniformity (2007). + + # Kwajalein + +@@ -1626,7 +1640,7 @@ + + # From Howie Phelps (1999-11-10), who talked to a Pitcairner via shortwave: + # Betty Christian told me yesterday that their local time is the same as +-# Pacific Standard Time. They used to be 1/2 hour different from us here in ++# Pacific Standard Time. They used to be ½ hour different from us here in + # Sacramento but it was changed a couple of years ago. + + +@@ -1665,7 +1679,7 @@ + # 12 hours and 20 minutes ahead of GMT. When New Zealand adjusted its + # standard time in 1940s, Tonga had the choice of subtracting from its + # local time to come on the same standard time as New Zealand or of +-# advancing its time to maintain the differential of 13 degrees ++# advancing its time to maintain the differential of 13° + # (approximately 50 minutes ahead of New Zealand time). + # + # Because His Majesty King Tāufaʻāhau Tupou IV, then Crown Prince +--- icedtea-3.8.0/openjdk/jdk/make/data/tzdata/europe 2018-09-18 10:22:19.723039231 +0200 ++++ icedtea-3.8.0/openjdk/jdk/make/data/tzdata/europe 2018-09-18 10:25:01.667921146 +0200 +@@ -140,8 +140,8 @@ + # along the towpath within a few yards of it.' + # + # I have a one inch to one mile map of London and my estimate of the stone's +-# position is 51 degrees 28' 30" N, 0 degrees 18' 45" W. The longitude should +-# be within about +-2". The Ordnance Survey grid reference is TQ172761. ++# position is 51° 28' 30" N, 0° 18' 45" W. The longitude should ++# be within about ±2". The Ordnance Survey grid reference is TQ172761. + # + # [This yields GMTOFF = -0:01:15 for London LMT in the 18th century.] + +@@ -181,7 +181,7 @@ + # after-hours daylight in which to pursue his research. + # In 1895 he presented a paper to the Wellington Philosophical Society + # that proposed a two-hour daylight-saving shift. See: +-# Hudson GV. On seasonal time-adjustment in countries south of lat. 30 deg. ++# Hudson GV. On seasonal time-adjustment in countries south of lat. 30°. + # Transactions and Proceedings of the New Zealand Institute. 1895;28:734 + # http://rsnz.natlib.govt.nz/volume/rsnz_28/rsnz_28_00_006110.html + # Although some interest was expressed in New Zealand, his proposal +@@ -531,11 +531,25 @@ + Link Europe/London Europe/Guernsey + Link Europe/London Europe/Isle_of_Man + +-# From Paul Eggert (2018-01-19): ++# From Paul Eggert (2018-02-15): ++# In January 2018 we discovered that the negative SAVE values in the ++# Eire rules cause problems with tests for ICU: ++# https://mm.icann.org/pipermail/tz/2018-January/025825.html ++# and with tests for OpenJDK: ++# https://mm.icann.org/pipermail/tz/2018-January/025822.html ++# ++# To work around this problem, the build procedure can translate the ++# following data into two forms, one with negative SAVE values and the ++# other form with a traditional approximation for Irish time stamps ++# after 1971-10-31 02:00 UTC; although this approximation has tm_isdst ++# flags that are reversed, its UTC offsets are correct and this often ++# suffices. This source file currently uses only nonnegative SAVE ++# values, but this is intended to change and downstream code should ++# not rely on it. ++# + # The following is like GB-Eire and EU, except with standard time in +-# summer and negative daylight saving time in winter. +-# Although currently commented out, this will need to become uncommented +-# once the ICU/OpenJDK workaround is removed; see below. ++# summer and negative daylight saving time in winter. It is for when ++# negative SAVE values are used. + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S + #Rule Eire 1971 only - Oct 31 2:00u -1:00 GMT + #Rule Eire 1972 1980 - Mar Sun>=16 2:00u 0 IST +@@ -556,24 +570,12 @@ + 0:00 1:00 IST 1947 Nov 2 2:00s + 0:00 - GMT 1948 Apr 18 2:00s + 0:00 GB-Eire GMT/IST 1968 Oct 27 +-# From Paul Eggert (2018-01-18): +-# The next line should look like this: ++# The next line is for when negative SAVE values are used. + # 1:00 Eire IST/GMT +-# However, in January 2018 we discovered that the Eire rules cause +-# problems with tests for ICU: +-# https://mm.icann.org/pipermail/tz/2018-January/025825.html +-# and with tests for OpenJDK: +-# https://mm.icann.org/pipermail/tz/2018-January/025822.html +-# To work around this problem, use a traditional approximation for +-# time stamps after 1971-10-31 02:00 UTC, to give ICU and OpenJDK +-# developers breathing room to fix bugs. This approximation has +-# correct UTC offsets, but results in tm_isdst flags are the reverse +-# of what they should be. This workaround is temporary and should be +-# removed reasonably soon. ++# These three lines are for when SAVE values are always nonnegative. + 1:00 - IST 1971 Oct 31 2:00u + 0:00 GB-Eire GMT/IST 1996 + 0:00 EU GMT/IST +-# End of workaround for ICU and OpenJDK bugs. + + + ############################################################################### +@@ -1557,21 +1559,21 @@ + # http://www.almanak.hi.is/klukkan.html + # + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +-Rule Iceland 1917 1919 - Feb 19 23:00 1:00 S ++Rule Iceland 1917 1919 - Feb 19 23:00 1:00 - + Rule Iceland 1917 only - Oct 21 1:00 0 - + Rule Iceland 1918 1919 - Nov 16 1:00 0 - +-Rule Iceland 1921 only - Mar 19 23:00 1:00 S ++Rule Iceland 1921 only - Mar 19 23:00 1:00 - + Rule Iceland 1921 only - Jun 23 1:00 0 - +-Rule Iceland 1939 only - Apr 29 23:00 1:00 S ++Rule Iceland 1939 only - Apr 29 23:00 1:00 - + Rule Iceland 1939 only - Oct 29 2:00 0 - +-Rule Iceland 1940 only - Feb 25 2:00 1:00 S ++Rule Iceland 1940 only - Feb 25 2:00 1:00 - + Rule Iceland 1940 1941 - Nov Sun>=2 1:00s 0 - +-Rule Iceland 1941 1942 - Mar Sun>=2 1:00s 1:00 S ++Rule Iceland 1941 1942 - Mar Sun>=2 1:00s 1:00 - + # 1943-1946 - first Sunday in March until first Sunday in winter +-Rule Iceland 1943 1946 - Mar Sun>=1 1:00s 1:00 S ++Rule Iceland 1943 1946 - Mar Sun>=1 1:00s 1:00 - + Rule Iceland 1942 1948 - Oct Sun>=22 1:00s 0 - + # 1947-1967 - first Sunday in April until first Sunday in winter +-Rule Iceland 1947 1967 - Apr Sun>=1 1:00s 1:00 S ++Rule Iceland 1947 1967 - Apr Sun>=1 1:00s 1:00 - + # 1949 and 1967 Oct transitions delayed by 1 week + Rule Iceland 1949 only - Oct 30 1:00s 0 - + Rule Iceland 1950 1966 - Oct Sun>=22 1:00s 0 - +@@ -2161,15 +2163,19 @@ + 1:00 EU CE%sT + + # 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. +-# Round the old offset to -0:36:45. This agrees with Willett but disagrees +-# with Shanks, who says the transition occurred on 1911-05-24 at 00:00 for +-# Europe/Lisbon, Atlantic/Azores, and Atlantic/Madeira. ++# Round the old offset to -0:36:45. This agrees with Willett.... + # ++# From Michael Deckers (2018-02-15): ++# article 5 [of the 1911 decree; Deckers's translation] ...: ++# These dispositions shall enter into force at the instant at which, ++# 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. +@@ -2252,7 +2258,7 @@ + # + # Zone NAME GMTOFF RULES FORMAT [UNTIL] + Zone Europe/Lisbon -0:36:45 - LMT 1884 +- -0:36:45 - LMT 1912 Jan 1 # Lisbon Mean Time ++ -0:36:45 - LMT 1912 Jan 1 0:00u # Lisbon MT + 0:00 Port WE%sT 1966 Apr 3 2:00 + 1:00 - CET 1976 Sep 26 1:00 + 0:00 Port WE%sT 1983 Sep 25 1:00s +@@ -2261,7 +2267,7 @@ + 0:00 EU WE%sT + # This Zone can be simplified once we assume zic %z. + Zone Atlantic/Azores -1:42:40 - LMT 1884 # Ponta Delgada +- -1:54:32 - HMT 1912 Jan 1 # Horta Mean Time ++ -1:54:32 - HMT 1912 Jan 1 2:00u # Horta MT + -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 +@@ -2277,7 +2283,7 @@ + -1:00 EU -01/+00 + # This Zone can be simplified once we assume zic %z. + Zone Atlantic/Madeira -1:07:36 - LMT 1884 # Funchal +- -1:07:36 - FMT 1912 Jan 1 # Funchal Mean Time ++ -1:07:36 - FMT 1912 Jan 1 1:00u # Funchal MT + -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 +@@ -2615,13 +2621,13 @@ + + # From Vladimir Karpinsky (2014-07-08): + # LMT in Moscow (before Jul 3, 1916) is 2:30:17, that was defined by Moscow +-# Observatory (coordinates: 55 deg. 45'29.70", 37 deg. 34'05.30").... ++# Observatory (coordinates: 55° 45' 29.70", 37° 34' 05.30").... + # LMT in Moscow since Jul 3, 1916 is 2:31:01 as a result of new standard. + # (The info is from the book by Byalokoz ... p. 18.) + # The time in St. Petersburg as capital of Russia was defined by + # Pulkov observatory, near St. Petersburg. In 1916 LMT Moscow + # was synchronized with LMT St. Petersburg (+30 minutes), (Pulkov observatory +-# coordinates: 59 deg. 46'18.70", 30 deg. 19'40.70") so 30 deg. 19'40.70" > ++# coordinates: 59° 46' 18.70", 30° 19' 40.70") so 30° 19' 40.70" > + # 2h01m18.7s = 2:01:19. LMT Moscow = LMT St.Petersburg + 30m 2:01:19 + 0:30 = + # 2:31:19 ... + # +@@ -3450,7 +3456,7 @@ + # three degrees, or twelve minutes of time, to the west of the + # meridian of the Observatory of Stockholm". The law is dated 1878-05-31. + # +-# The observatory at that time had the meridian 18 degrees 03' 30" ++# The observatory at that time had the meridian 18° 03' 30" + # eastern longitude = 01:12:14 in time. Less 12 minutes gives the + # national standard time as 01:00:14 ahead of GMT.... + # +@@ -3554,7 +3560,7 @@ + # From Alois Treindl (2013-09-11): + # The Federal regulations say + # https://www.admin.ch/opc/de/classified-compilation/20071096/index.html +-# ... the meridian for Bern mean time ... is 7 degrees 26' 22.50". ++# ... the meridian for Bern mean time ... is 7° 26' 22.50". + # Expressed in time, it is 0h29m45.5s. + + # From Pierre-Yves Berger (2013-09-11): +--- icedtea-3.8.0/openjdk/jdk/make/data/tzdata/northamerica 2018-09-18 10:22:19.723039231 +0200 ++++ icedtea-3.8.0/openjdk/jdk/make/data/tzdata/northamerica 2018-09-18 10:25:01.667921146 +0200 +@@ -48,7 +48,7 @@ + # 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 (2016-09-21): ++# From Paul Eggert (2018-03-20): + # Dowd's proposal left many details unresolved, such as where to draw + # lines between time zones. The key individual who made time zones + # work in the US was William Frederick Allen - railway engineer, +@@ -59,10 +59,9 @@ + # to the General Time Convention on 1883-04-11, saying that his plan + # meant "local time would be practically abolished" - a plus for + # railway scheduling. By the next convention on 1883-10-11 nearly all +-# railroads had agreed and it took effect on 1883-11-18 at 12:00. +-# That Sunday was called the "day of two noons", as the eastern parts +-# of the new zones observed noon twice. Allen witnessed the +-# transition in New York City, writing: ++# railroads had agreed and it took effect on 1883-11-18. That Sunday ++# was called the "day of two noons", as some locations observed noon ++# twice. Allen witnessed the transition in New York City, writing: + # + # I heard the bells of St. Paul's strike on the old time. Four + # minutes later, obedient to the electrical signal from the Naval +@@ -447,8 +446,7 @@ + # ...according to the Census Bureau, the largest city is Beulah (although + # it's commonly referred to as Beulah-Hazen, with Hazen being the next + # largest city in Mercer County). Google Maps places Beulah's city hall +-# at 47 degrees 15' 51" N, 101 degrees 46' 40" W, which yields an offset +-# of 6h47'07". ++# at 47° 15' 51" N, 101° 46' 40" W, which yields an offset of 6h47'07". + + Zone America/North_Dakota/Beulah -6:47:07 - LMT 1883 Nov 18 12:12:53 + -7:00 US M%sT 2010 Nov 7 2:00 +@@ -481,7 +479,7 @@ + # California, northern Idaho (Benewah, Bonner, Boundary, Clearwater, + # Kootenai, Latah, Lewis, Nez Perce, and Shoshone counties, Idaho county + # north of the Salmon River, and the towns of Burgdorf and Warren), +-# Nevada (except West Wendover), Oregon (except the northern 3/4 of ++# Nevada (except West Wendover), Oregon (except the northern ¾ of + # Malheur county), and Washington + + # From Paul Eggert (2016-08-20): +@@ -979,6 +977,13 @@ + -5:00 - EST 2006 + -5:00 US E%sT + ++# From Paul Eggert (2018-03-20): ++# The Louisville & Nashville Railroad's 1883-11-18 change occurred at ++# 10:00 old local time; train were supposed to come to a standstill ++# for precisely 18 minutes. See Bartky Fig. 1 (page 50). It is not ++# clear how this matched civil time in Louisville, so for now continue ++# to assume Louisville switched at noon new local time, like New York. ++# + # Part of Kentucky left its clocks alone in 1974. + # This also includes Clark, Floyd, and Harrison counties in Indiana. + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER +@@ -3287,8 +3292,8 @@ + # http://www.jamaicaobserver.com/columns/The-politician-in-all-of-us_17573647 + # + # Zone NAME GMTOFF RULES FORMAT [UNTIL] +-Zone America/Jamaica -5:07:11 - LMT 1890 # Kingston +- -5:07:11 - KMT 1912 Feb # Kingston Mean Time ++Zone America/Jamaica -5:07:10 - LMT 1890 # Kingston ++ -5:07:10 - KMT 1912 Feb # Kingston Mean Time + -5:00 - EST 1974 + -5:00 US E%sT 1984 + -5:00 - EST +@@ -3438,7 +3443,7 @@ + # + # Zone NAME GMTOFF RULES FORMAT [UNTIL] + Zone America/Grand_Turk -4:44:32 - LMT 1890 +- -5:07:11 - KMT 1912 Feb # Kingston Mean Time ++ -5:07:10 - KMT 1912 Feb # Kingston Mean Time + -5:00 - EST 1979 + -5:00 US E%sT 2015 Nov Sun>=1 2:00 + -4:00 - AST 2018 Mar 11 3:00 +--- icedtea-3.8.0/openjdk/jdk/make/data/tzdata/southamerica 2018-09-18 10:22:19.723039231 +0200 ++++ icedtea-3.8.0/openjdk/jdk/make/data/tzdata/southamerica 2018-09-18 10:25:01.667921146 +0200 +@@ -70,28 +70,28 @@ + # AR was chosen because they are the ISO letters that represent Argentina. + + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +-Rule Arg 1930 only - Dec 1 0:00 1:00 S ++Rule Arg 1930 only - Dec 1 0:00 1:00 - + Rule Arg 1931 only - Apr 1 0:00 0 - +-Rule Arg 1931 only - Oct 15 0:00 1:00 S ++Rule Arg 1931 only - Oct 15 0:00 1:00 - + Rule Arg 1932 1940 - Mar 1 0:00 0 - +-Rule Arg 1932 1939 - Nov 1 0:00 1:00 S +-Rule Arg 1940 only - Jul 1 0:00 1:00 S ++Rule Arg 1932 1939 - Nov 1 0:00 1:00 - ++Rule Arg 1940 only - Jul 1 0:00 1:00 - + Rule Arg 1941 only - Jun 15 0:00 0 - +-Rule Arg 1941 only - Oct 15 0:00 1:00 S ++Rule Arg 1941 only - Oct 15 0:00 1:00 - + Rule Arg 1943 only - Aug 1 0:00 0 - +-Rule Arg 1943 only - Oct 15 0:00 1:00 S ++Rule Arg 1943 only - Oct 15 0:00 1:00 - + Rule Arg 1946 only - Mar 1 0:00 0 - +-Rule Arg 1946 only - Oct 1 0:00 1:00 S ++Rule Arg 1946 only - Oct 1 0:00 1:00 - + Rule Arg 1963 only - Oct 1 0:00 0 - +-Rule Arg 1963 only - Dec 15 0:00 1:00 S ++Rule Arg 1963 only - Dec 15 0:00 1:00 - + Rule Arg 1964 1966 - Mar 1 0:00 0 - +-Rule Arg 1964 1966 - Oct 15 0:00 1:00 S ++Rule Arg 1964 1966 - Oct 15 0:00 1:00 - + Rule Arg 1967 only - Apr 2 0:00 0 - +-Rule Arg 1967 1968 - Oct Sun>=1 0:00 1:00 S ++Rule Arg 1967 1968 - Oct Sun>=1 0:00 1:00 - + Rule Arg 1968 1969 - Apr Sun>=1 0:00 0 - +-Rule Arg 1974 only - Jan 23 0:00 1:00 S ++Rule Arg 1974 only - Jan 23 0:00 1:00 - + Rule Arg 1974 only - May 1 0:00 0 - +-Rule Arg 1988 only - Dec 1 0:00 1:00 S ++Rule Arg 1988 only - Dec 1 0:00 1:00 - + # + # From Hernan G. Otero (1995-06-26): + # These corrections were contributed by InterSoft Argentina S.A., +@@ -99,7 +99,7 @@ + # Talleres de Hidrografía Naval Argentina + # (Argentine Naval Hydrography Institute) + Rule Arg 1989 1993 - Mar Sun>=1 0:00 0 - +-Rule Arg 1989 1992 - Oct Sun>=15 0:00 1:00 S ++Rule Arg 1989 1992 - Oct Sun>=15 0:00 1:00 - + # + # From Hernan G. Otero (1995-06-26): + # From this moment on, the law that mandated the daylight saving +@@ -110,7 +110,7 @@ + # On October 3, 1999, 0:00 local, Argentina implemented daylight savings time, + # which did not result in the switch of a time zone, as they stayed 9 hours + # from the International Date Line. +-Rule Arg 1999 only - Oct Sun>=1 0:00 1:00 S ++Rule Arg 1999 only - Oct Sun>=1 0:00 1:00 - + # From Paul Eggert (2007-12-28): + # DST was set to expire on March 5, not March 3, but since it was converted + # to standard time on March 3 it's more convenient for us to pretend that +@@ -213,9 +213,9 @@ + # la modificación del huso horario, ya que 2009 nos encuentra con + # crecimiento en la producción y distribución energética." + +-Rule Arg 2007 only - Dec 30 0:00 1:00 S ++Rule Arg 2007 only - Dec 30 0:00 1:00 - + Rule Arg 2008 2009 - Mar Sun>=15 0:00 0 - +-Rule Arg 2008 only - Oct Sun>=15 0:00 1:00 S ++Rule Arg 2008 only - Oct Sun>=15 0:00 1:00 - + + # From Mariano Absatz (2004-05-21): + # Today it was officially published that the Province of Mendoza is changing +@@ -225,12 +225,14 @@ + # It's Law No. 7,210. This change is due to a public power emergency, so for + # now we'll assume it's for this year only. + # +-# From Paul Eggert (2014-08-09): ++# From Paul Eggert (2018-01-31): + # Hora de verano para la República Argentina + # http://buenasiembra.com.ar/esoterismo/astrologia/hora-de-verano-de-la-republica-argentina-27.html + # says that standard time in Argentina from 1894-10-31 + # to 1920-05-01 was -4:16:48.25. Go with this more-precise value +-# over Shanks & Pottenger. ++# over Shanks & Pottenger. It is upward compatible with Milne, who ++# says Córdoba time was -4:16:48.2. ++ + # + # From Mariano Absatz (2004-06-05): + # These media articles from a major newspaper mostly cover the current state: +@@ -404,9 +406,9 @@ + # rules...San Luis is still using "Western ARgentina Time" and it got + # stuck on Summer daylight savings time even though the summer is over. + +-# From Paul Eggert (2013-09-05): ++# From Paul Eggert (2018-01-23): + # Perhaps San Luis operates on the legal fiction that it is at -04 +-# with perpetual summer time, but ordinary usage typically seems to ++# with perpetual daylight saving time, but ordinary usage typically seems to + # just say it's at -03; see, for example, + # https://es.wikipedia.org/wiki/Hora_oficial_argentina + # We've documented similar situations as being plain changes to +@@ -415,9 +417,6 @@ + # plus is that this silences a zic complaint that there's no POSIX TZ + # setting for time stamps past 2038. + +-# From Paul Eggert (2013-02-21): +-# Milne says Córdoba time was -4:16:48.2. Round to the nearest second. +- + # Zone NAME GMTOFF RULES FORMAT [UNTIL] + # + # Buenos Aires (BA), Capital Federal (CF), +@@ -552,7 +551,7 @@ + # San Luis (SL) + + Rule SanLuis 2008 2009 - Mar Sun>=8 0:00 0 - +-Rule SanLuis 2007 2008 - Oct Sun>=8 0:00 1:00 S ++Rule SanLuis 2007 2008 - Oct Sun>=8 0:00 1:00 - + + Zone America/Argentina/San_Luis -4:25:24 - LMT 1894 Oct 31 + -4:16:48 - CMT 1920 May +@@ -794,14 +793,14 @@ + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S + # Decree 20,466 (1931-10-01) + # Decree 21,896 (1932-01-10) +-Rule Brazil 1931 only - Oct 3 11:00 1:00 S ++Rule Brazil 1931 only - Oct 3 11:00 1:00 - + Rule Brazil 1932 1933 - Apr 1 0:00 0 - +-Rule Brazil 1932 only - Oct 3 0:00 1:00 S ++Rule Brazil 1932 only - Oct 3 0:00 1:00 - + # Decree 23,195 (1933-10-10) + # revoked DST. + # Decree 27,496 (1949-11-24) + # Decree 27,998 (1950-04-13) +-Rule Brazil 1949 1952 - Dec 1 0:00 1:00 S ++Rule Brazil 1949 1952 - Dec 1 0:00 1:00 - + Rule Brazil 1950 only - Apr 16 1:00 0 - + Rule Brazil 1951 1952 - Apr 1 0:00 0 - + # Decree 32,308 (1953-02-24) +@@ -813,51 +812,51 @@ + # in SP, RJ, GB, MG, ES, due to the prolongation of the drought. + # Decree 53,071 (1963-12-03) + # extended the above decree to all of the national territory on 12-09. +-Rule Brazil 1963 only - Dec 9 0:00 1:00 S ++Rule Brazil 1963 only - Dec 9 0:00 1:00 - + # Decree 53,604 (1964-02-25) + # extended summer time by one day to 1964-03-01 00:00 (start of school). + Rule Brazil 1964 only - Mar 1 0:00 0 - + # Decree 55,639 (1965-01-27) +-Rule Brazil 1965 only - Jan 31 0:00 1:00 S ++Rule Brazil 1965 only - Jan 31 0:00 1:00 - + Rule Brazil 1965 only - Mar 31 0:00 0 - + # Decree 57,303 (1965-11-22) +-Rule Brazil 1965 only - Dec 1 0:00 1:00 S ++Rule Brazil 1965 only - Dec 1 0:00 1:00 - + # Decree 57,843 (1966-02-18) + Rule Brazil 1966 1968 - Mar 1 0:00 0 - +-Rule Brazil 1966 1967 - Nov 1 0:00 1:00 S ++Rule Brazil 1966 1967 - Nov 1 0:00 1:00 - + # Decree 63,429 (1968-10-15) + # revoked DST. + # Decree 91,698 (1985-09-27) +-Rule Brazil 1985 only - Nov 2 0:00 1:00 S ++Rule Brazil 1985 only - Nov 2 0:00 1:00 - + # Decree 92,310 (1986-01-21) + # Decree 92,463 (1986-03-13) + Rule Brazil 1986 only - Mar 15 0:00 0 - + # Decree 93,316 (1986-10-01) +-Rule Brazil 1986 only - Oct 25 0:00 1:00 S ++Rule Brazil 1986 only - Oct 25 0:00 1:00 - + Rule Brazil 1987 only - Feb 14 0:00 0 - + # Decree 94,922 (1987-09-22) +-Rule Brazil 1987 only - Oct 25 0:00 1:00 S ++Rule Brazil 1987 only - Oct 25 0:00 1:00 - + Rule Brazil 1988 only - Feb 7 0:00 0 - + # Decree 96,676 (1988-09-12) + # except for the states of AC, AM, PA, RR, RO, and AP (then a territory) +-Rule Brazil 1988 only - Oct 16 0:00 1:00 S ++Rule Brazil 1988 only - Oct 16 0:00 1:00 - + Rule Brazil 1989 only - Jan 29 0:00 0 - + # Decree 98,077 (1989-08-21) + # with the same exceptions +-Rule Brazil 1989 only - Oct 15 0:00 1:00 S ++Rule Brazil 1989 only - Oct 15 0:00 1:00 - + Rule Brazil 1990 only - Feb 11 0:00 0 - + # Decree 99,530 (1990-09-17) + # adopted by RS, SC, PR, SP, RJ, ES, MG, GO, MS, DF. + # Decree 99,629 (1990-10-19) adds BA, MT. +-Rule Brazil 1990 only - Oct 21 0:00 1:00 S ++Rule Brazil 1990 only - Oct 21 0:00 1:00 - + Rule Brazil 1991 only - Feb 17 0:00 0 - + # Unnumbered decree (1991-09-25) + # adopted by RS, SC, PR, SP, RJ, ES, MG, BA, GO, MT, MS, DF. +-Rule Brazil 1991 only - Oct 20 0:00 1:00 S ++Rule Brazil 1991 only - Oct 20 0:00 1:00 - + Rule Brazil 1992 only - Feb 9 0:00 0 - + # Unnumbered decree (1992-10-16) + # adopted by same states. +-Rule Brazil 1992 only - Oct 25 0:00 1:00 S ++Rule Brazil 1992 only - Oct 25 0:00 1:00 - + Rule Brazil 1993 only - Jan 31 0:00 0 - + # Decree 942 (1993-09-28) + # adopted by same states, plus AM. +@@ -867,12 +866,12 @@ + # adopted by same states, plus MT and TO. + # Decree 1,674 (1995-10-13) + # adds AL, SE. +-Rule Brazil 1993 1995 - Oct Sun>=11 0:00 1:00 S ++Rule Brazil 1993 1995 - Oct Sun>=11 0:00 1:00 - + Rule Brazil 1994 1995 - Feb Sun>=15 0:00 0 - + Rule Brazil 1996 only - Feb 11 0:00 0 - + # Decree 2,000 (1996-09-04) + # adopted by same states, minus AL, SE. +-Rule Brazil 1996 only - Oct 6 0:00 1:00 S ++Rule Brazil 1996 only - Oct 6 0:00 1:00 - + Rule Brazil 1997 only - Feb 16 0:00 0 - + # From Daniel C. Sobral (1998-02-12): + # In 1997, the DS began on October 6. The stated reason was that +@@ -882,19 +881,19 @@ + # to help dealing with the shortages of electric power. + # + # Decree 2,317 (1997-09-04), adopted by same states. +-Rule Brazil 1997 only - Oct 6 0:00 1:00 S ++Rule Brazil 1997 only - Oct 6 0:00 1:00 - + # Decree 2,495 + # (1998-02-10) + Rule Brazil 1998 only - Mar 1 0:00 0 - + # Decree 2,780 (1998-09-11) + # adopted by the same states as before. +-Rule Brazil 1998 only - Oct 11 0:00 1:00 S ++Rule Brazil 1998 only - Oct 11 0:00 1:00 - + Rule Brazil 1999 only - Feb 21 0:00 0 - + # Decree 3,150 + # (1999-08-23) adopted by same states. + # Decree 3,188 (1999-09-30) + # adds SE, AL, PB, PE, RN, CE, PI, MA and RR. +-Rule Brazil 1999 only - Oct 3 0:00 1:00 S ++Rule Brazil 1999 only - Oct 3 0:00 1:00 - + Rule Brazil 2000 only - Feb 27 0:00 0 - + # Decree 3,592 (2000-09-06) + # adopted by the same states as before. +@@ -904,34 +903,34 @@ + # repeals DST in SE, AL, PB, RN, CE, PI and MA, effective 2000-10-22 00:00. + # Decree 3,916 + # (2001-09-13) reestablishes DST in AL, CE, MA, PB, PE, PI, RN, SE. +-Rule Brazil 2000 2001 - Oct Sun>=8 0:00 1:00 S ++Rule Brazil 2000 2001 - Oct Sun>=8 0:00 1:00 - + Rule Brazil 2001 2006 - Feb Sun>=15 0:00 0 - + # Decree 4,399 (2002-10-01) repeals DST in AL, CE, MA, PB, PE, PI, RN, SE. + # 4,399 +-Rule Brazil 2002 only - Nov 3 0:00 1:00 S ++Rule Brazil 2002 only - Nov 3 0:00 1:00 - + # Decree 4,844 (2003-09-24; corrected 2003-09-26) repeals DST in BA, MT, TO. + # 4,844 +-Rule Brazil 2003 only - Oct 19 0:00 1:00 S ++Rule Brazil 2003 only - Oct 19 0:00 1:00 - + # Decree 5,223 (2004-10-01) reestablishes DST in MT. + # 5,223 +-Rule Brazil 2004 only - Nov 2 0:00 1:00 S ++Rule Brazil 2004 only - Nov 2 0:00 1:00 - + # Decree 5,539 (2005-09-19), + # adopted by the same states as before. +-Rule Brazil 2005 only - Oct 16 0:00 1:00 S ++Rule Brazil 2005 only - Oct 16 0:00 1:00 - + # Decree 5,920 (2006-10-03), + # adopted by the same states as before. +-Rule Brazil 2006 only - Nov 5 0:00 1:00 S ++Rule Brazil 2006 only - Nov 5 0:00 1:00 - + Rule Brazil 2007 only - Feb 25 0:00 0 - + # Decree 6,212 (2007-09-26), + # adopted by the same states as before. +-Rule Brazil 2007 only - Oct Sun>=8 0:00 1:00 S ++Rule Brazil 2007 only - Oct Sun>=8 0:00 1:00 - + # From Frederico A. C. Neves (2008-09-10): + # According to this decree + # http://www.planalto.gov.br/ccivil_03/_Ato2007-2010/2008/Decreto/D6558.htm + # [t]he DST period in Brazil now on will be from the 3rd Oct Sunday to the + # 3rd Feb Sunday. There is an exception on the return date when this is + # the Carnival Sunday then the return date will be the next Sunday... +-Rule Brazil 2008 2017 - Oct Sun>=15 0:00 1:00 S ++Rule Brazil 2008 2017 - Oct Sun>=15 0:00 1:00 - + Rule Brazil 2008 2011 - Feb Sun>=15 0:00 0 - + # Decree 7,584 (2011-10-13) + # added Bahia. +@@ -949,7 +948,7 @@ + # ... https://www.timeanddate.com/news/time/brazil-delays-dst-2018.html + # From Steffen Thorsen (2017-12-20): + # http://www.planalto.gov.br/ccivil_03/_ato2015-2018/2017/decreto/D9242.htm +-Rule Brazil 2018 max - Nov Sun>=1 0:00 1:00 S ++Rule Brazil 2018 max - Nov Sun>=1 0:00 1:00 - + Rule Brazil 2023 only - Feb Sun>=22 0:00 0 - + Rule Brazil 2024 2025 - Feb Sun>=15 0:00 0 - + Rule Brazil 2026 only - Feb Sun>=22 0:00 0 - +@@ -1256,28 +1255,28 @@ + # For now, assume that they will not revert. + + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +-Rule Chile 1927 1931 - Sep 1 0:00 1:00 S ++Rule Chile 1927 1931 - Sep 1 0:00 1:00 - + Rule Chile 1928 1932 - Apr 1 0:00 0 - +-Rule Chile 1968 only - Nov 3 4:00u 1:00 S ++Rule Chile 1968 only - Nov 3 4:00u 1:00 - + Rule Chile 1969 only - Mar 30 3:00u 0 - +-Rule Chile 1969 only - Nov 23 4:00u 1:00 S ++Rule Chile 1969 only - Nov 23 4:00u 1:00 - + Rule Chile 1970 only - Mar 29 3:00u 0 - + Rule Chile 1971 only - Mar 14 3:00u 0 - +-Rule Chile 1970 1972 - Oct Sun>=9 4:00u 1:00 S ++Rule Chile 1970 1972 - Oct Sun>=9 4:00u 1:00 - + Rule Chile 1972 1986 - Mar Sun>=9 3:00u 0 - +-Rule Chile 1973 only - Sep 30 4:00u 1:00 S +-Rule Chile 1974 1987 - Oct Sun>=9 4:00u 1:00 S ++Rule Chile 1973 only - Sep 30 4:00u 1:00 - ++Rule Chile 1974 1987 - Oct Sun>=9 4:00u 1:00 - + Rule Chile 1987 only - Apr 12 3:00u 0 - + Rule Chile 1988 1990 - Mar Sun>=9 3:00u 0 - +-Rule Chile 1988 1989 - Oct Sun>=9 4:00u 1:00 S +-Rule Chile 1990 only - Sep 16 4:00u 1:00 S ++Rule Chile 1988 1989 - Oct Sun>=9 4:00u 1:00 - ++Rule Chile 1990 only - Sep 16 4:00u 1:00 - + Rule Chile 1991 1996 - Mar Sun>=9 3:00u 0 - +-Rule Chile 1991 1997 - Oct Sun>=9 4:00u 1:00 S ++Rule Chile 1991 1997 - Oct Sun>=9 4:00u 1:00 - + Rule Chile 1997 only - Mar 30 3:00u 0 - + Rule Chile 1998 only - Mar Sun>=9 3:00u 0 - +-Rule Chile 1998 only - Sep 27 4:00u 1:00 S ++Rule Chile 1998 only - Sep 27 4:00u 1:00 - + Rule Chile 1999 only - Apr 4 3:00u 0 - +-Rule Chile 1999 2010 - Oct Sun>=9 4:00u 1:00 S ++Rule Chile 1999 2010 - Oct Sun>=9 4:00u 1:00 - + Rule Chile 2000 2007 - Mar Sun>=9 3:00u 0 - + # N.B.: the end of March 29 in Chile is March 30 in Universal time, + # which is used below in specifying the transition. +@@ -1285,11 +1284,11 @@ + Rule Chile 2009 only - Mar Sun>=9 3:00u 0 - + Rule Chile 2010 only - Apr Sun>=1 3:00u 0 - + Rule Chile 2011 only - May Sun>=2 3:00u 0 - +-Rule Chile 2011 only - Aug Sun>=16 4:00u 1:00 S ++Rule Chile 2011 only - Aug Sun>=16 4:00u 1:00 - + Rule Chile 2012 2014 - Apr Sun>=23 3:00u 0 - +-Rule Chile 2012 2014 - Sep Sun>=2 4:00u 1:00 S ++Rule Chile 2012 2014 - Sep Sun>=2 4:00u 1:00 - + Rule Chile 2016 max - May Sun>=9 3:00u 0 - +-Rule Chile 2016 max - Aug Sun>=9 4:00u 1:00 S ++Rule Chile 2016 max - Aug Sun>=9 4:00u 1:00 - + # IATA SSIM anomalies: (1992-02) says 1992-03-14; + # (1996-09) says 1998-03-08. Ignore these. + # Zone NAME GMTOFF RULES FORMAT [UNTIL] +@@ -1354,7 +1353,7 @@ + # "A variation of fifteen minutes in the public clocks of Bogota is not rare." + + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +-Rule CO 1992 only - May 3 0:00 1:00 S ++Rule CO 1992 only - May 3 0:00 1:00 - + Rule CO 1993 only - Apr 4 0:00 0 - + # Zone NAME GMTOFF RULES FORMAT [UNTIL] + Zone America/Bogota -4:56:16 - LMT 1884 Mar 13 +@@ -1414,7 +1413,7 @@ + # repeated. For now, assume transitions were at 00:00 local time country-wide. + # + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +-Rule Ecuador 1992 only - Nov 28 0:00 1:00 S ++Rule Ecuador 1992 only - Nov 28 0:00 1:00 - + Rule Ecuador 1993 only - Feb 5 0:00 0 - + # + # Zone NAME GMTOFF RULES FORMAT [UNTIL] +@@ -1504,22 +1503,22 @@ + # the maintainers of the database to inform them we're adopting + # the same policy this year and suggest recommendations for future years. + # +-# For now we will assume permanent summer time for the Falklands ++# For now we will assume permanent -03 for the Falklands + # until advised differently (to apply for 2012 and beyond, after the 2011 + # experiment was apparently successful.) + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +-Rule Falk 1937 1938 - Sep lastSun 0:00 1:00 S ++Rule Falk 1937 1938 - Sep lastSun 0:00 1:00 - + Rule Falk 1938 1942 - Mar Sun>=19 0:00 0 - +-Rule Falk 1939 only - Oct 1 0:00 1:00 S +-Rule Falk 1940 1942 - Sep lastSun 0:00 1:00 S ++Rule Falk 1939 only - Oct 1 0:00 1:00 - ++Rule Falk 1940 1942 - Sep lastSun 0:00 1:00 - + Rule Falk 1943 only - Jan 1 0:00 0 - +-Rule Falk 1983 only - Sep lastSun 0:00 1:00 S ++Rule Falk 1983 only - Sep lastSun 0:00 1:00 - + Rule Falk 1984 1985 - Apr lastSun 0:00 0 - +-Rule Falk 1984 only - Sep 16 0:00 1:00 S +-Rule Falk 1985 2000 - Sep Sun>=9 0:00 1:00 S ++Rule Falk 1984 only - Sep 16 0:00 1:00 - ++Rule Falk 1985 2000 - Sep Sun>=9 0:00 1:00 - + Rule Falk 1986 2000 - Apr Sun>=16 0:00 0 - + Rule Falk 2001 2010 - Apr Sun>=15 2:00 0 - +-Rule Falk 2001 2010 - Sep Sun>=1 2:00 1:00 S ++Rule Falk 2001 2010 - Sep Sun>=1 2:00 1:00 - + # Zone NAME GMTOFF RULES FORMAT [UNTIL] + Zone Atlantic/Stanley -3:51:24 - LMT 1890 + -3:51:24 - SMT 1912 Mar 12 # Stanley Mean Time +@@ -1554,16 +1553,16 @@ + # adjust their clocks at 0 hour of the given dates. + # + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +-Rule Para 1975 1988 - Oct 1 0:00 1:00 S ++Rule Para 1975 1988 - Oct 1 0:00 1:00 - + Rule Para 1975 1978 - Mar 1 0:00 0 - + Rule Para 1979 1991 - Apr 1 0:00 0 - +-Rule Para 1989 only - Oct 22 0:00 1:00 S +-Rule Para 1990 only - Oct 1 0:00 1:00 S +-Rule Para 1991 only - Oct 6 0:00 1:00 S ++Rule Para 1989 only - Oct 22 0:00 1:00 - ++Rule Para 1990 only - Oct 1 0:00 1:00 - ++Rule Para 1991 only - Oct 6 0:00 1:00 - + Rule Para 1992 only - Mar 1 0:00 0 - +-Rule Para 1992 only - Oct 5 0:00 1:00 S ++Rule Para 1992 only - Oct 5 0:00 1:00 - + Rule Para 1993 only - Mar 31 0:00 0 - +-Rule Para 1993 1995 - Oct 1 0:00 1:00 S ++Rule Para 1993 1995 - Oct 1 0:00 1:00 - + Rule Para 1994 1995 - Feb lastSun 0:00 0 - + Rule Para 1996 only - Mar 1 0:00 0 - + # IATA SSIM (2000-02) says 1999-10-10; ignore this for now. +@@ -1581,7 +1580,7 @@ + # year, the time will change on the first Sunday of October; likewise, the + # clock will be set back on the first Sunday of March. + # +-Rule Para 1996 2001 - Oct Sun>=1 0:00 1:00 S ++Rule Para 1996 2001 - Oct Sun>=1 0:00 1:00 - + # IATA SSIM (1997-09) says Mar 1; go with Shanks & Pottenger. + Rule Para 1997 only - Feb lastSun 0:00 0 - + # Shanks & Pottenger say 1999-02-28; IATA SSIM (1999-02) says 1999-02-27, but +@@ -1592,7 +1591,7 @@ + # dst method to be from the first Sunday in September to the first Sunday in + # April. + Rule Para 2002 2004 - Apr Sun>=1 0:00 0 - +-Rule Para 2002 2003 - Sep Sun>=1 0:00 1:00 S ++Rule Para 2002 2003 - Sep Sun>=1 0:00 1:00 - + # + # From Jesper Nørgaard Welen (2005-01-02): + # There are several sources that claim that Paraguay made +@@ -1601,7 +1600,7 @@ + # Decree 1,867 (2004-03-05) + # From Carlos Raúl Perasso via Jesper Nørgaard Welen (2006-10-13) + # http://www.presidencia.gov.py/decretos/D1867.pdf +-Rule Para 2004 2009 - Oct Sun>=15 0:00 1:00 S ++Rule Para 2004 2009 - Oct Sun>=15 0:00 1:00 - + Rule Para 2005 2009 - Mar Sun>=8 0:00 0 - + # From Carlos Raúl Perasso (2010-02-18): + # By decree number 3958 issued yesterday +@@ -1614,7 +1613,7 @@ + # 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 S ++Rule Para 2010 max - Oct Sun>=1 0:00 1:00 - + Rule Para 2010 2012 - Apr Sun>=8 0:00 0 - + # + # From Steffen Thorsen (2013-03-07): +@@ -1647,16 +1646,16 @@ + # Shanks & Pottenger don't have this transition. Assume 1986 was like 1987. + + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +-Rule Peru 1938 only - Jan 1 0:00 1:00 S ++Rule Peru 1938 only - Jan 1 0:00 1:00 - + Rule Peru 1938 only - Apr 1 0:00 0 - +-Rule Peru 1938 1939 - Sep lastSun 0:00 1:00 S ++Rule Peru 1938 1939 - Sep lastSun 0:00 1:00 - + Rule Peru 1939 1940 - Mar Sun>=24 0:00 0 - +-Rule Peru 1986 1987 - Jan 1 0:00 1:00 S ++Rule Peru 1986 1987 - Jan 1 0:00 1:00 - + Rule Peru 1986 1987 - Apr 1 0:00 0 - +-Rule Peru 1990 only - Jan 1 0:00 1:00 S ++Rule Peru 1990 only - Jan 1 0:00 1:00 - + Rule Peru 1990 only - Apr 1 0:00 0 - + # IATA is ambiguous for 1993/1995; go with Shanks & Pottenger. +-Rule Peru 1994 only - Jan 1 0:00 1:00 S ++Rule Peru 1994 only - Jan 1 0:00 1:00 - + Rule Peru 1994 only - Apr 1 0:00 0 - + # Zone NAME GMTOFF RULES FORMAT [UNTIL] + Zone America/Lima -5:08:12 - LMT 1890 +@@ -1702,72 +1701,201 @@ + # Uruguay + # From Paul Eggert (1993-11-18): + # Uruguay wins the prize for the strangest peacetime manipulation of the rules. +-# From Shanks & Pottenger: ++# ++# From Tim Parenti (2018-02-20), per Jeremie Bonjour (2018-01-31) and Michael ++# Deckers (2018-02-20): ++# ... At least they kept good records... ++# ++# http://www.armada.mil.uy/ContenidosPDFs/sohma/web/almanaque/almanaque_2018.pdf#page=36 ++# Page 36 of Almanaque 2018, published by the Oceanography, Hydrography, and ++# Meteorology Service of the Uruguayan Navy, seems to give many transitions ++# with greater clarity than we've had before. It directly references many laws ++# and decrees which are, in turn, referenced below. They can be viewed in the ++# public archives of the Diario Oficial (in Spanish) at ++# http://www.impo.com.uy/diariooficial/ ++# ++# Ley No. 3920 of 1908-06-10 placed the determination of legal time under the ++# auspices of the National Institute for the Prediction of Time. It is unclear ++# exactly what offset was used during this period, though Ley No. 7200 of ++# 1920-04-23 used the Observatory of the National Meteorological Institute in ++# Montevideo (34° 54' 33" S, 56° 12' 45" W) as its reference meridian, ++# retarding legal time by 15 minutes 9 seconds from 1920-04-30 24:00, ++# resulting in UT-04. Assume the corresponding LMT of UT-03:44:51 (given on ++# page 725 of the Proceedings of the Second Pan-American Scientific Congress, ++# 1915-1916) was in use, and merely became official from 1908-06-10. ++# https://www.impo.com.uy/diariooficial/1908/06/18/12 ++# https://www.impo.com.uy/diariooficial/1920/04/27/9 ++# ++# Ley No. 7594 of 1923-06-28 specified legal time as Observatory time advanced ++# by 44 minutes 51 seconds (UT-03) "from 30 September to 31 March", and by 14 ++# minutes 51 seconds (UT-03:30) "the rest of the year"; a message from the ++# National Council of Administration the same day, published directly below the ++# law in the Diario Oficial, specified the first transition to be 1923-09-30 ++# 24:00. This effectively established standard time at UT-03:30 with 30 ++# minutes DST. Assume transitions at 24:00 on the specified days until Ley No. ++# 7919 of 1926-03-05 ended this arrangement, repealing all "laws and other ++# provisions which oppose" it, resulting in year-round UT-03:30; a Resolución ++# of 1926-03-11 puts the final transition at 1926-03-31 24:00, the same as it ++# would have been under the previous law. ++# https://www.impo.com.uy/diariooficial/1923/07/02/2 ++# https://www.impo.com.uy/diariooficial/1926/03/10/2 ++# https://www.impo.com.uy/diariooficial/1926/03/18/2 ++# + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +-# Whitman gives 1923 Oct 1; go with Shanks & Pottenger. +-Rule Uruguay 1923 only - Oct 2 0:00 0:30 HS ++Rule Uruguay 1923 1925 - Oct 1 0:00 0:30 - + Rule Uruguay 1924 1926 - Apr 1 0:00 0 - +-Rule Uruguay 1924 1925 - Oct 1 0:00 0:30 HS +-Rule Uruguay 1933 1935 - Oct lastSun 0:00 0:30 HS +-# Shanks & Pottenger give 1935 Apr 1 0:00 & 1936 Mar 30 0:00; go with Whitman. +-Rule Uruguay 1934 1936 - Mar Sat>=25 23:30s 0 - +-Rule Uruguay 1936 only - Nov 1 0:00 0:30 HS +-Rule Uruguay 1937 1941 - Mar lastSun 0:00 0 - +-# Whitman gives 1937 Oct 3; go with Shanks & Pottenger. +-Rule Uruguay 1937 1940 - Oct lastSun 0:00 0:30 HS +-# Whitman gives 1941 Oct 24 - 1942 Mar 27, 1942 Dec 14 - 1943 Apr 13, +-# and 1943 Apr 13 "to present time"; go with Shanks & Pottenger. +-Rule Uruguay 1941 only - Aug 1 0:00 0:30 HS +-Rule Uruguay 1942 only - Jan 1 0:00 0 - +-Rule Uruguay 1942 only - Dec 14 0:00 1:00 S ++# From Tim Parenti (2018-02-15): ++# http://www.impo.com.uy/diariooficial/1933/10/27/6 ++# ++# It appears Ley No. 9122 of 1933 was never published as such in the Diario ++# Oficial, but instead appeared as Document 26 in the Diario on Friday ++# 1933-10-27 as a decree made Monday 1933-10-23 and filed under the Ministry of ++# National Defense. It reinstituted a DST of 30 minutes (to UT-03) "from the ++# last Sunday of October...until the last Saturday of March." In accordance ++# with this provision, the first transition was explicitly specified in Article ++# 2 of the decree as Saturday 1933-10-28 at 24:00; that is, Sunday 1933-10-29 ++# at 00:00. Assume transitions at 00:00 Sunday throughout. ++# ++# Departing from the matter-of-fact nature of previous timekeeping laws, the ++# 1933 decree "consider[s] the advantages of...the advance of legal time": ++# ++# "Whereas: The measure adopted by almost all nations at the time of the last ++# World War still persists in North America and Europe, precisely because of ++# the economic, hygienic, and social advantages derived from such an ++# emergency measure... ++# ++# Whereas: The advance of the legal time during the summer seasons, by ++# displacing social activity near sunrise, favors the citizen populations ++# and especially the society that creates and works..." ++# ++# It further specified that "necessary measures" be taken to ensure that ++# "public spectacles finish, in general, before [01:00]." ++Rule Uruguay 1933 1938 - Oct lastSun 0:00 0:30 - ++Rule Uruguay 1934 1941 - Mar lastSat 24:00 0 - ++# From Tim Parenti (2018-02-15): ++# Most of the Rules below, and their contemporaneous Zone lines, have been ++# updated simply to match the Almanaque 2018. Although the document does not ++# list exact transition times, midnight transitions were already present in our ++# data here for all transitions through 2004-09, and this is both consistent ++# with prior transitions and verified in several decrees marked below between ++# 1939-09 and 2004-09, wherein the relevant text was typically of the form: ++# ++# "From 0 hours on [date], the legal time of the entire Republic will be... ++# ++# In accordance with [the preceding], on [previous date] at 24 hours, all ++# clocks throughout the Republic will be [advanced/retarded] by..." ++# ++# It is possible that there is greater specificity to be found for the Rules ++# below, but it is buried in no fewer than 40 different decrees individually ++# referenced by the Almanaque for the period from 1939-09 to 2014-09. ++# Four-fifths of these were promulgated less than two weeks before taking ++# effect; more than half within a week and none more than 5 weeks. Only the ++# handful with comments below have been checked with any thoroughness. ++Rule Uruguay 1939 only - Oct 1 0:00 0:30 - ++Rule Uruguay 1940 only - Oct 27 0:00 0:30 - ++# From Tim Parenti (2018-02-15): ++# Decreto 1145 of the Ministry of National Defense, dated 1941-07-26, specified ++# UT-03 from Friday 1941-08-01 00:00, citing an "urgent...need to save fuel". ++# http://www.impo.com.uy/diariooficial/1941/08/04/1 ++Rule Uruguay 1941 only - Aug 1 0:00 0:30 - ++# From Tim Parenti (2018-02-15): ++# Decreto 1866 of the Ministry of National Defense, dated 1942-12-09, specified ++# further advancement (to UT-02:30) from Sunday 1942-12-13 24:00. Since clocks ++# never went back to UT-03:30 thereafter, this is modeled as advancing standard ++# time by 30 minutes to UT-03, while retaining 30 minutes of DST. ++# http://www.impo.com.uy/diariooficial/1942/12/16/3 ++Rule Uruguay 1942 only - Dec 14 0:00 0:30 - + Rule Uruguay 1943 only - Mar 14 0:00 0 - +-Rule Uruguay 1959 only - May 24 0:00 1:00 S ++Rule Uruguay 1959 only - May 24 0:00 0:30 - + Rule Uruguay 1959 only - Nov 15 0:00 0 - +-Rule Uruguay 1960 only - Jan 17 0:00 1:00 S ++Rule Uruguay 1960 only - Jan 17 0:00 1:00 - + Rule Uruguay 1960 only - Mar 6 0:00 0 - +-Rule Uruguay 1965 1967 - Apr Sun>=1 0:00 1:00 S ++Rule Uruguay 1965 only - Apr 4 0:00 1:00 - + Rule Uruguay 1965 only - Sep 26 0:00 0 - +-Rule Uruguay 1966 1967 - Oct 31 0:00 0 - +-Rule Uruguay 1968 1970 - May 27 0:00 0:30 HS +-Rule Uruguay 1968 1970 - Dec 2 0:00 0 - +-Rule Uruguay 1972 only - Apr 24 0:00 1:00 S +-Rule Uruguay 1972 only - Aug 15 0:00 0 - +-Rule Uruguay 1974 only - Mar 10 0:00 0:30 HS +-Rule Uruguay 1974 only - Dec 22 0:00 1:00 S +-Rule Uruguay 1976 only - Oct 1 0:00 0 - +-Rule Uruguay 1977 only - Dec 4 0:00 1:00 S +-Rule Uruguay 1978 only - Apr 1 0:00 0 - +-Rule Uruguay 1979 only - Oct 1 0:00 1:00 S +-Rule Uruguay 1980 only - May 1 0:00 0 - +-Rule Uruguay 1987 only - Dec 14 0:00 1:00 S +-Rule Uruguay 1988 only - Mar 14 0:00 0 - +-Rule Uruguay 1988 only - Dec 11 0:00 1:00 S +-Rule Uruguay 1989 only - Mar 12 0:00 0 - +-Rule Uruguay 1989 only - Oct 29 0:00 1:00 S +-# Shanks & Pottenger say no DST was observed in 1990/1 and 1991/2, +-# and that 1992/3's DST was from 10-25 to 03-01. Go with IATA. +-Rule Uruguay 1990 1992 - Mar Sun>=1 0:00 0 - +-Rule Uruguay 1990 1991 - Oct Sun>=21 0:00 1:00 S +-Rule Uruguay 1992 only - Oct 18 0:00 1:00 S ++# From Tim Parenti (2018-02-15): ++# Decreto 321/968 of 1968-05-25, citing emergency drought measures decreed the ++# day before, brought clocks forward 30 minutes from Monday 1968-05-27 00:00. ++# http://www.impo.com.uy/diariooficial/1968/05/30/5 ++Rule Uruguay 1968 only - May 27 0:00 0:30 - ++Rule Uruguay 1968 only - Dec 1 0:00 0 - ++# From Tim Parenti (2018-02-15): ++# Decreto 188/970 of 1970-04-23 instituted restrictions on electricity ++# consumption "as a consequence of the current rainfall regime in the country". ++# Articles 13 and 14 advanced clocks by an hour from Saturday 1970-04-25 00:00. ++# http://www.impo.com.uy/diariooficial/1970/04/29/4 ++Rule Uruguay 1970 only - Apr 25 0:00 1:00 - ++Rule Uruguay 1970 only - Jun 14 0:00 0 - ++Rule Uruguay 1972 only - Apr 23 0:00 1:00 - ++Rule Uruguay 1972 only - Jul 16 0:00 0 - ++# From Tim Parenti (2018-02-15): ++# Decreto 29/974 of 1974-01-11, citing "the international rise in the price of ++# oil", advanced clocks by 90 minutes (to UT-01:30). Decreto 163/974 of ++# 1974-03-04 returned 60 of those minutes (to UT-02:30), and the remaining 30 ++# minutes followed in Decreto 679/974 of 1974-08-29. ++# http://www.impo.com.uy/diariooficial/1974/01/22/11 ++# http://www.impo.com.uy/diariooficial/1974/03/14/3 ++# http://www.impo.com.uy/diariooficial/1974/09/04/6 ++Rule Uruguay 1974 only - Jan 13 0:00 1:30 - ++Rule Uruguay 1974 only - Mar 10 0:00 0:30 - ++Rule Uruguay 1974 only - Sep 1 0:00 0 - ++Rule Uruguay 1974 only - Dec 22 0:00 1:00 - ++Rule Uruguay 1975 only - Mar 30 0:00 0 - ++Rule Uruguay 1976 only - Dec 19 0:00 1:00 - ++Rule Uruguay 1977 only - Mar 6 0:00 0 - ++Rule Uruguay 1977 only - Dec 4 0:00 1:00 - ++Rule Uruguay 1978 1979 - Mar Sun>=1 0:00 0 - ++Rule Uruguay 1978 only - Dec 17 0:00 1:00 - ++Rule Uruguay 1979 only - Apr 29 0:00 1:00 - ++Rule Uruguay 1980 only - Mar 16 0:00 0 - ++# From Tim Parenti (2018-02-15): ++# Decreto 725/987 of 1987-12-04 cited "better use of national tourist ++# attractions" to advance clocks one hour from Monday 1987-12-14 00:00. ++# http://www.impo.com.uy/diariooficial/1988/01/25/1 ++Rule Uruguay 1987 only - Dec 14 0:00 1:00 - ++Rule Uruguay 1988 only - Feb 28 0:00 0 - ++Rule Uruguay 1988 only - Dec 11 0:00 1:00 - ++Rule Uruguay 1989 only - Mar 5 0:00 0 - ++Rule Uruguay 1989 only - Oct 29 0:00 1:00 - ++Rule Uruguay 1990 only - Feb 25 0:00 0 - ++# From Tim Parenti (2018-02-15), per Paul Eggert (1999-11-04): ++# IATA agrees as below for 1990-10 through 1993-02. Per Almanaque 2018, the ++# 1992/1993 season appears to be the first in over half a century where DST ++# both began and ended pursuant to the same decree. ++Rule Uruguay 1990 1991 - Oct Sun>=21 0:00 1:00 - ++Rule Uruguay 1991 1992 - Mar Sun>=1 0:00 0 - ++Rule Uruguay 1992 only - Oct 18 0:00 1:00 - + Rule Uruguay 1993 only - Feb 28 0:00 0 - + # From Eduardo Cota (2004-09-20): + # The Uruguayan government has decreed a change in the local time.... +-# http://www.presidencia.gub.uy/decretos/2004091502.htm +-Rule Uruguay 2004 only - Sep 19 0:00 1:00 S ++# From Tim Parenti (2018-02-15): ++# Decreto 328/004 of 2004-09-15. ++# http://www.impo.com.uy/diariooficial/2004/09/23/documentos.pdf#page=1 ++Rule Uruguay 2004 only - Sep 19 0:00 1:00 - + # From Steffen Thorsen (2005-03-11): + # Uruguay's DST was scheduled to end on Sunday, 2005-03-13, but in order to + # save energy ... it was postponed two weeks.... +-# http://www.presidencia.gub.uy/_Web/noticias/2005/03/2005031005.htm ++# From Tim Parenti (2018-02-15): ++# This 2005 postponement is not in Almanaque 2018. Go with the contemporaneous ++# reporting, which is confirmed by Decreto 107/005 of 2005-03-10 amending ++# Decreto 328/004: ++# http://www.impo.com.uy/diariooficial/2005/03/15/documentos.pdf#page=1 ++# The original decree specified a transition of 2005-03-12 24:00, but the new ++# one specified 2005-03-27 02:00. + Rule Uruguay 2005 only - Mar 27 2:00 0 - + # From Eduardo Cota (2005-09-27): +-# http://www.presidencia.gub.uy/_Web/decretos/2005/09/CM%20119_09%2009%202005_00001.PDF +-# This means that from 2005-10-09 at 02:00 local time, until 2006-03-12 at +-# 02:00 local time, official time in Uruguay will be at GMT -2. +-Rule Uruguay 2005 only - Oct 9 2:00 1:00 S +-Rule Uruguay 2006 only - Mar 12 2:00 0 - +-# From Jesper Nørgaard Welen (2006-09-06): +-# http://www.presidencia.gub.uy/_web/decretos/2006/09/CM%20210_08%2006%202006_00001.PDF +-# ++# ...from 2005-10-09 at 02:00 local time, until 2006-03-12 at 02:00 local time, ++# official time in Uruguay will be at GMT -2. ++# From Tim Parenti (2018-02-15): ++# Decreto 318/005 of 2005-09-19. ++# http://www.impo.com.uy/diariooficial/2005/09/23/documentos.pdf#page=1 ++Rule Uruguay 2005 only - Oct 9 2:00 1:00 - ++Rule Uruguay 2006 2015 - Mar Sun>=8 2:00 0 - ++# From Tim Parenti (2018-02-15), per Jesper Nørgaard Welen (2006-09-06): ++# Decreto 311/006 of 2006-09-04 established regular DST from the first Sunday ++# of October at 02:00 through the second Sunday of March at 02:00. Almanaque ++# 2018 appears to have a few typoed dates through this period; ignore them. ++# http://www.impo.com.uy/diariooficial/2006/09/08/documentos.pdf#page=1 ++Rule Uruguay 2006 2014 - Oct Sun>=1 2:00 1:00 - + # From Steffen Thorsen (2015-06-30): + # ... it looks like they will not be using DST the coming summer: + # http://www.elobservador.com.uy/gobierno-resolvio-que-no-habra-cambio-horario-verano-n656787 +@@ -1777,17 +1905,19 @@ + # instead of out to dinner. + # From Pablo Camargo (2015-07-13): + # http://archivo.presidencia.gub.uy/sci/decretos/2015/06/cons_min_201.pdf +-# [dated 2015-06-29; repeals Decree 311/006 dated 2006-09-04] +-Rule Uruguay 2006 2014 - Oct Sun>=1 2:00 1:00 S +-Rule Uruguay 2007 2015 - Mar Sun>=8 2:00 0 - ++# From Tim Parenti (2018-02-15): ++# Decreto 178/015 of 2015-06-29; repeals Decreto 311/006. + + # This Zone can be simplified once we assume zic %z. +-Zone America/Montevideo -3:44:44 - LMT 1898 Jun 28 +- -3:44:44 - MMT 1920 May 1 # Montevideo MT ++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 1971 ++ -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 + +--- icedtea-3.8.0/openjdk/jdk/make/data/tzdata/VERSION 2018-09-18 10:22:19.723039231 +0200 ++++ icedtea-3.8.0/openjdk/jdk/make/data/tzdata/VERSION 2018-09-18 10:25:01.663921124 +0200 +@@ -21,4 +21,4 @@ + # or visit www.oracle.com if you need additional information or have any + # questions. + # +-tzdata2018c ++tzdata2018d +--- icedtea-3.8.0/openjdk/jdk/make/data/tzdata/zone.tab 2018-09-18 10:22:19.723039231 +0200 ++++ icedtea-3.8.0/openjdk/jdk/make/data/tzdata/zone.tab 2018-09-18 10:25:01.667921146 +0200 +@@ -452,7 +452,7 @@ + US +643004-1652423 America/Nome Alaska (west) + US +515248-1763929 America/Adak Aleutian Islands + US +211825-1575130 Pacific/Honolulu Hawaii +-UY -3453-05611 America/Montevideo ++UY -345433-0561245 America/Montevideo + UZ +3940+06648 Asia/Samarkand Uzbekistan (west) + UZ +4120+06918 Asia/Tashkent Uzbekistan (east) + VA +415408+0122711 Europe/Vatican +--- icedtea-3.8.0/openjdk/jdk/src/share/classes/sun/util/resources/de/TimeZoneNames_de.java 2018-09-18 10:22:20.179041715 +0200 ++++ icedtea-3.8.0/openjdk/jdk/src/share/classes/sun/util/resources/de/TimeZoneNames_de.java 2018-09-18 10:25:01.671921167 +0200 +@@ -446,7 +446,7 @@ + "Westgr\u00f6nl\u00e4ndische Sommerzeit", "WGST", + "Westgr\u00F6nl\u00E4ndische Zeit", "WGT"}}, + {"America/Goose_Bay", AST}, +- {"America/Grand_Turk", AST}, ++ {"America/Grand_Turk", EST}, + {"America/Grenada", AST}, + {"America/Guadeloupe", AST}, + {"America/Guatemala", CST}, +--- icedtea-3.8.0/openjdk/jdk/src/share/classes/sun/util/resources/es/TimeZoneNames_es.java 2018-09-18 10:22:20.179041715 +0200 ++++ icedtea-3.8.0/openjdk/jdk/src/share/classes/sun/util/resources/es/TimeZoneNames_es.java 2018-09-18 10:25:01.671921167 +0200 +@@ -446,7 +446,7 @@ + "Hora de verano de Groenlandia Occidental", "WGST", + "Hora de Groenlandia Occidental", "WGT"}}, + {"America/Goose_Bay", AST}, +- {"America/Grand_Turk", AST}, ++ {"America/Grand_Turk", EST}, + {"America/Grenada", AST}, + {"America/Guadeloupe", AST}, + {"America/Guatemala", CST}, +--- icedtea-3.8.0/openjdk/jdk/src/share/classes/sun/util/resources/fr/TimeZoneNames_fr.java 2018-09-18 10:22:20.179041715 +0200 ++++ icedtea-3.8.0/openjdk/jdk/src/share/classes/sun/util/resources/fr/TimeZoneNames_fr.java 2018-09-18 10:25:01.671921167 +0200 +@@ -446,7 +446,7 @@ + "Heure d'\u00e9t\u00e9 du Groenland de l'Ouest", "WGST", + "Heure du Groenland de l'Ouest", "WGT"}}, + {"America/Goose_Bay", AST}, +- {"America/Grand_Turk", AST}, ++ {"America/Grand_Turk", EST}, + {"America/Grenada", AST}, + {"America/Guadeloupe", AST}, + {"America/Guatemala", CST}, +--- icedtea-3.8.0/openjdk/jdk/src/share/classes/sun/util/resources/it/TimeZoneNames_it.java 2018-09-18 10:22:20.179041715 +0200 ++++ icedtea-3.8.0/openjdk/jdk/src/share/classes/sun/util/resources/it/TimeZoneNames_it.java 2018-09-18 10:25:01.671921167 +0200 +@@ -446,7 +446,7 @@ + "Ora estiva della Groenlandia occidentale", "WGST", + "Ora della Groenlandia occidentale", "WGT"}}, + {"America/Goose_Bay", AST}, +- {"America/Grand_Turk", AST}, ++ {"America/Grand_Turk", EST}, + {"America/Grenada", AST}, + {"America/Guadeloupe", AST}, + {"America/Guatemala", CST}, +--- icedtea-3.8.0/openjdk/jdk/src/share/classes/sun/util/resources/ja/TimeZoneNames_ja.java 2018-09-18 10:22:20.183041737 +0200 ++++ icedtea-3.8.0/openjdk/jdk/src/share/classes/sun/util/resources/ja/TimeZoneNames_ja.java 2018-09-18 10:25:01.671921167 +0200 +@@ -446,7 +446,7 @@ + "\u897f\u30b0\u30ea\u30fc\u30f3\u30e9\u30f3\u30c9\u590f\u6642\u9593", "WGST", + "\u897F\u90E8\u30B0\u30EA\u30FC\u30F3\u30E9\u30F3\u30C9\u6642\u9593", "WGT"}}, + {"America/Goose_Bay", AST}, +- {"America/Grand_Turk", AST}, ++ {"America/Grand_Turk", EST}, + {"America/Grenada", AST}, + {"America/Guadeloupe", AST}, + {"America/Guatemala", CST}, +--- icedtea-3.8.0/openjdk/jdk/src/share/classes/sun/util/resources/ko/TimeZoneNames_ko.java 2018-09-18 10:22:20.183041737 +0200 ++++ icedtea-3.8.0/openjdk/jdk/src/share/classes/sun/util/resources/ko/TimeZoneNames_ko.java 2018-09-18 10:25:01.671921167 +0200 +@@ -446,7 +446,7 @@ + "\uc11c\ubd80 \uadf8\ub9b0\ub79c\ub4dc \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "WGST", + "\uC11C\uBD80 \uADF8\uB9B0\uB780\uB4DC \uD45C\uC900\uC2DC", "WGT"}}, + {"America/Goose_Bay", AST}, +- {"America/Grand_Turk", AST}, ++ {"America/Grand_Turk", EST}, + {"America/Grenada", AST}, + {"America/Guadeloupe", AST}, + {"America/Guatemala", CST}, +--- icedtea-3.8.0/openjdk/jdk/src/share/classes/sun/util/resources/pt/TimeZoneNames_pt_BR.java 2018-09-18 10:22:20.183041737 +0200 ++++ icedtea-3.8.0/openjdk/jdk/src/share/classes/sun/util/resources/pt/TimeZoneNames_pt_BR.java 2018-09-18 10:25:01.671921167 +0200 +@@ -446,7 +446,7 @@ + "Fuso hor\u00e1rio de ver\u00e3o da Groenl\u00e2ndia Ocidental", "WGST", + "Hor\u00E1rio da Groenl\u00E2ndia Ocidental", "WGT"}}, + {"America/Goose_Bay", AST}, +- {"America/Grand_Turk", AST}, ++ {"America/Grand_Turk", EST}, + {"America/Grenada", AST}, + {"America/Guadeloupe", AST}, + {"America/Guatemala", CST}, +--- icedtea-3.8.0/openjdk/jdk/src/share/classes/sun/util/resources/sv/TimeZoneNames_sv.java 2018-09-18 10:22:20.183041737 +0200 ++++ icedtea-3.8.0/openjdk/jdk/src/share/classes/sun/util/resources/sv/TimeZoneNames_sv.java 2018-09-18 10:25:01.671921167 +0200 +@@ -446,7 +446,7 @@ + "V\u00e4stra Gr\u00f6nland, sommartid", "WGST", + "V\u00E4stgr\u00F6nl\u00E4ndsk tid", "WGT"}}, + {"America/Goose_Bay", AST}, +- {"America/Grand_Turk", AST}, ++ {"America/Grand_Turk", EST}, + {"America/Grenada", AST}, + {"America/Guadeloupe", AST}, + {"America/Guatemala", CST}, +--- icedtea-3.8.0/openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames.java 2018-09-18 10:22:20.179041715 +0200 ++++ icedtea-3.8.0/openjdk/jdk/src/share/classes/sun/util/resources/TimeZoneNames.java 2018-09-18 10:25:01.667921146 +0200 +@@ -445,7 +445,7 @@ + "Western Greenland Summer Time", "WGST", + "Western Greenland Time", "WGT"}}, + {"America/Goose_Bay", AST}, +- {"America/Grand_Turk", AST}, ++ {"America/Grand_Turk", EST}, + {"America/Grenada", AST}, + {"America/Guadeloupe", AST}, + {"America/Guatemala", CST}, +--- icedtea-3.8.0/openjdk/jdk/src/share/classes/sun/util/resources/zh/TimeZoneNames_zh_CN.java 2018-09-18 10:22:20.183041737 +0200 ++++ icedtea-3.8.0/openjdk/jdk/src/share/classes/sun/util/resources/zh/TimeZoneNames_zh_CN.java 2018-09-18 10:25:01.671921167 +0200 +@@ -446,7 +446,7 @@ + "\u897f\u683c\u6797\u5170\u5c9b\u590f\u4ee4\u65f6", "WGST", + "\u897F\u683C\u6797\u5170\u5C9B\u65F6\u95F4", "WGT"}}, + {"America/Goose_Bay", AST}, +- {"America/Grand_Turk", AST}, ++ {"America/Grand_Turk", EST}, + {"America/Grenada", AST}, + {"America/Guadeloupe", AST}, + {"America/Guatemala", CST}, +--- icedtea-3.8.0/openjdk/jdk/src/share/classes/sun/util/resources/zh/TimeZoneNames_zh_TW.java 2018-09-18 10:22:20.183041737 +0200 ++++ icedtea-3.8.0/openjdk/jdk/src/share/classes/sun/util/resources/zh/TimeZoneNames_zh_TW.java 2018-09-18 10:25:01.671921167 +0200 +@@ -446,7 +446,7 @@ + "\u897f\u683c\u6797\u862d\u5cf6\u590f\u4ee4\u6642\u9593", "WGST", + "\u897F\u683C\u9675\u862D\u6642\u9593", "WGT"}}, + {"America/Goose_Bay", AST}, +- {"America/Grand_Turk", AST}, ++ {"America/Grand_Turk", EST}, + {"America/Grenada", AST}, + {"America/Guadeloupe", AST}, + {"America/Guatemala", CST}, +--- icedtea-3.8.0/openjdk/jdk/test/sun/util/calendar/zi/tzdata/africa 2018-09-18 10:22:19.807039690 +0200 ++++ icedtea-3.8.0/openjdk/jdk/test/sun/util/calendar/zi/tzdata/africa 2018-09-18 10:25:01.675921189 +0200 +@@ -138,13 +138,13 @@ + + # Cape Verde / Cabo Verde + # ++# From Paul Eggert (2018-02-16): + # Shanks gives 1907 for the transition to +02. +-# Perhaps the 1911-05-26 Portuguese decree +-# https://dre.pt/pdf1sdip/1911/05/12500/23132313.pdf +-# merely made it official? ++# For now, ignore that and follow the 1911-05-26 Portuguese decree ++# (see Europe/Lisbon). + # + # Zone NAME GMTOFF RULES FORMAT [UNTIL] +-Zone Atlantic/Cape_Verde -1:34:04 - LMT 1907 # Praia ++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 +@@ -393,15 +393,34 @@ + # See Africa/Abidjan. + + # Ghana +-# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S ++ ++# From Paul Eggert (2018-01-30): + # Whitman says DST was observed from 1931 to "the present"; +-# Shanks & Pottenger say 1936 to 1942; +-# and September 1 to January 1 is given by: +-# Scott Keltie J, Epstein M (eds), The Statesman's Year-Book, +-# 57th ed. Macmillan, London (1920), OCLC 609408015, pp xxviii. +-# For lack of better info, assume DST was observed from 1920 to 1942. +-Rule Ghana 1920 1942 - Sep 1 0:00 0:20 GHST +-Rule Ghana 1920 1942 - Dec 31 0:00 0 GMT ++# Shanks & Pottenger say 1936 to 1942 with 20 minutes of DST, ++# with transitions on 09-01 and 12-31 at 00:00. ++# Page 33 of Parish GCB, Colonial Reports - Annual. No. 1066. Gold ++# Coast. Report for 1919. (March 1921), OCLC 784024077 ++# http://libsysdigi.library.illinois.edu/ilharvest/africana/books2011-05/5530214/5530214_1919/5530214_1919_opt.pdf ++# lists the Determination of the Time Ordinance, 1919, No. 18, ++# "to advance the time observed locally by the space of twenty minutes ++# during the last four months of each year; the object in view being ++# to extend during those months the period of daylight-time available ++# for evening recreation after office hours." ++# Vanessa Ogle, The Global Transformation of Time, 1870-1950 (2015), p 33, ++# writes "In 1919, the Gold Coast (Ghana as of 1957) made Greenwich ++# time its legal time and simultaneously legalized a summer time of ++# UTC - 00:20 minutes from March to October."; a footnote lists ++# the ordinance as being dated 1919-11-24. ++# The Crown Colonist, Volume 12 (1942), p 176, says "the Government ++# intend advancing Gold Coast time half an hour ahead of G.M.T. ++# The actual date of the alteration has not yet been announced." ++# These sources are incomplete and contradictory. Possibly what is ++# now Ghana observed different DST regimes in different years. For ++# lack of better info, use Shanks except treat the minus sign as a ++# typo, and assume DST started in 1920 not 1936. ++# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S ++Rule Ghana 1920 1942 - Sep 1 0:00 0:20 - ++Rule Ghana 1920 1942 - Dec 31 0:00 0 - + # Zone NAME GMTOFF RULES FORMAT [UNTIL] + Zone Africa/Accra -0:00:52 - LMT 1918 + 0:00 Ghana GMT/+0020 +@@ -411,13 +430,13 @@ + + # 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 +-# https://dre.pt/pdf1sdip/1911/05/12500/23132313.pdf +-# with the date that it took effect, namely 1912-01-01. ++# (see Europe/Lisbon) with the date that it took effect. + # + # Zone NAME GMTOFF RULES FORMAT [UNTIL] +-Zone Africa/Bissau -1:02:20 - LMT 1912 Jan 1 ++Zone Africa/Bissau -1:02:20 - LMT 1912 Jan 1 1:00u + -1:00 - -01 1975 + 0:00 - GMT + +@@ -613,9 +632,9 @@ + # at 2am (or 02:00) local time..." + + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +-Rule Mauritius 1982 only - Oct 10 0:00 1:00 S ++Rule Mauritius 1982 only - Oct 10 0:00 1:00 - + Rule Mauritius 1983 only - Mar 21 0:00 0 - +-Rule Mauritius 2008 only - Oct lastSun 2:00 1:00 S ++Rule Mauritius 2008 only - Oct lastSun 2:00 1:00 - + Rule Mauritius 2009 only - Mar lastSun 2:00 0 - + # Zone NAME GMTOFF RULES FORMAT [UNTIL] + Zone Indian/Mauritius 3:50:00 - LMT 1907 # Port Louis +@@ -1060,6 +1079,8 @@ + + # São Tomé and Príncipe + ++# See Europe/Lisbon for info about the 1912 transition. ++ + # From Steffen Thorsen (2018-01-08): + # Multiple sources tell that São Tomé changed from UTC to UTC+1 as + # they entered the year 2018. +@@ -1068,7 +1089,7 @@ + # http://www.mnec.gov.st/index.php/publicacoes/documentos/file/90-decreto-lei-n-25-2017 + + Zone Africa/Sao_Tome 0:26:56 - LMT 1884 +- -0:36:45 - LMT 1912 # Lisbon Mean Time ++ -0:36:45 - LMT 1912 Jan 1 00:00u # Lisbon MT + 0:00 - GMT 2018 Jan 1 01:00 + 1:00 - WAT + +--- icedtea-3.8.0/openjdk/jdk/test/sun/util/calendar/zi/tzdata/antarctica 2018-09-18 10:22:19.807039690 +0200 ++++ icedtea-3.8.0/openjdk/jdk/test/sun/util/calendar/zi/tzdata/antarctica 2018-09-18 10:25:01.675921189 +0200 +@@ -98,7 +98,8 @@ + 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 ++ 11:00 - +11 2018 Mar 11 4:00 ++ 8:00 - +08 + Zone Antarctica/Davis 0 - -00 1957 Jan 13 + 7:00 - +07 1964 Nov + 0 - -00 1969 Feb +--- icedtea-3.8.0/openjdk/jdk/test/sun/util/calendar/zi/tzdata/asia 2018-09-18 10:22:19.811039711 +0200 ++++ icedtea-3.8.0/openjdk/jdk/test/sun/util/calendar/zi/tzdata/asia 2018-09-18 10:25:01.675921189 +0200 +@@ -92,13 +92,13 @@ + Rule EUAsia 1981 max - Mar lastSun 1:00u 1:00 S + Rule EUAsia 1979 1995 - Sep lastSun 1:00u 0 - + Rule EUAsia 1996 max - Oct lastSun 1:00u 0 - +-Rule E-EurAsia 1981 max - Mar lastSun 0:00 1:00 S ++Rule E-EurAsia 1981 max - Mar lastSun 0:00 1:00 - + Rule E-EurAsia 1979 1995 - Sep lastSun 0:00 0 - + Rule E-EurAsia 1996 max - Oct lastSun 0:00 0 - +-Rule RussiaAsia 1981 1984 - Apr 1 0:00 1:00 S ++Rule RussiaAsia 1981 1984 - Apr 1 0:00 1:00 - + Rule RussiaAsia 1981 1983 - Oct 1 0:00 0 - + Rule RussiaAsia 1984 1995 - Sep lastSun 2:00s 0 - +-Rule RussiaAsia 1985 2010 - Mar lastSun 2:00s 1:00 S ++Rule RussiaAsia 1985 2010 - Mar lastSun 2:00s 1:00 - + Rule RussiaAsia 1996 2010 - Oct lastSun 2:00s 0 - + + # Afghanistan +@@ -133,7 +133,7 @@ + # (brief) + # http://www.worldtimezone.com/dst_news/dst_news_armenia03.html + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +-Rule Armenia 2011 only - Mar lastSun 2:00s 1:00 S ++Rule Armenia 2011 only - Mar lastSun 2:00s 1:00 - + Rule Armenia 2011 only - Oct lastSun 2:00s 0 - + # Zone NAME GMTOFF RULES FORMAT [UNTIL] + Zone Asia/Yerevan 2:58:00 - LMT 1924 May 2 +@@ -159,7 +159,7 @@ + # http://en.apa.az/xeber_azerbaijan_abolishes_daylight_savings_ti_240862.html + + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +-Rule Azer 1997 2015 - Mar lastSun 4:00 1:00 S ++Rule Azer 1997 2015 - Mar lastSun 4:00 1:00 - + Rule Azer 1997 2015 - Oct lastSun 5:00 0 - + # Zone NAME GMTOFF RULES FORMAT [UNTIL] + Zone Asia/Baku 3:19:24 - LMT 1924 May 2 +@@ -246,7 +246,7 @@ + # http://www.worldtimezone.com/dst_news/dst_news_bangladesh06.html + + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +-Rule Dhaka 2009 only - Jun 19 23:00 1:00 S ++Rule Dhaka 2009 only - Jun 19 23:00 1:00 - + Rule Dhaka 2009 only - Dec 31 24:00 0 - + + # Zone NAME GMTOFF RULES FORMAT [UNTIL] +@@ -787,8 +787,9 @@ + Rule Macau 1975 1977 - Apr Sun>=15 3:30 1:00 D + Rule Macau 1978 1980 - Apr Sun>=15 0:00 1:00 D + Rule Macau 1978 1980 - Oct Sun>=15 0:00 0 S ++# See Europe/Lisbon for info about the 1912 transition. + # Zone NAME GMTOFF RULES FORMAT [UNTIL] +-Zone Asia/Macau 7:34:20 - LMT 1912 Jan 1 ++Zone Asia/Macau 7:34:20 - LMT 1911 Dec 31 16:00u + 8:00 Macau C%sT + + +@@ -1129,61 +1130,61 @@ + # thirtieth day of Shahrivar. + # + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +-Rule Iran 1978 1980 - Mar 21 0:00 1:00 D +-Rule Iran 1978 only - Oct 21 0:00 0 S +-Rule Iran 1979 only - Sep 19 0:00 0 S +-Rule Iran 1980 only - Sep 23 0:00 0 S +-Rule Iran 1991 only - May 3 0:00 1:00 D +-Rule Iran 1992 1995 - Mar 22 0:00 1:00 D +-Rule Iran 1991 1995 - Sep 22 0:00 0 S +-Rule Iran 1996 only - Mar 21 0:00 1:00 D +-Rule Iran 1996 only - Sep 21 0:00 0 S +-Rule Iran 1997 1999 - Mar 22 0:00 1:00 D +-Rule Iran 1997 1999 - Sep 22 0:00 0 S +-Rule Iran 2000 only - Mar 21 0:00 1:00 D +-Rule Iran 2000 only - Sep 21 0:00 0 S +-Rule Iran 2001 2003 - Mar 22 0:00 1:00 D +-Rule Iran 2001 2003 - Sep 22 0:00 0 S +-Rule Iran 2004 only - Mar 21 0:00 1:00 D +-Rule Iran 2004 only - Sep 21 0:00 0 S +-Rule Iran 2005 only - Mar 22 0:00 1:00 D +-Rule Iran 2005 only - Sep 22 0:00 0 S +-Rule Iran 2008 only - Mar 21 0:00 1:00 D +-Rule Iran 2008 only - Sep 21 0:00 0 S +-Rule Iran 2009 2011 - Mar 22 0:00 1:00 D +-Rule Iran 2009 2011 - Sep 22 0:00 0 S +-Rule Iran 2012 only - Mar 21 0:00 1:00 D +-Rule Iran 2012 only - Sep 21 0:00 0 S +-Rule Iran 2013 2015 - Mar 22 0:00 1:00 D +-Rule Iran 2013 2015 - Sep 22 0:00 0 S +-Rule Iran 2016 only - Mar 21 0:00 1:00 D +-Rule Iran 2016 only - Sep 21 0:00 0 S +-Rule Iran 2017 2019 - Mar 22 0:00 1:00 D +-Rule Iran 2017 2019 - Sep 22 0:00 0 S +-Rule Iran 2020 only - Mar 21 0:00 1:00 D +-Rule Iran 2020 only - Sep 21 0:00 0 S +-Rule Iran 2021 2023 - Mar 22 0:00 1:00 D +-Rule Iran 2021 2023 - Sep 22 0:00 0 S +-Rule Iran 2024 only - Mar 21 0:00 1:00 D +-Rule Iran 2024 only - Sep 21 0:00 0 S +-Rule Iran 2025 2027 - Mar 22 0:00 1:00 D +-Rule Iran 2025 2027 - Sep 22 0:00 0 S +-Rule Iran 2028 2029 - Mar 21 0:00 1:00 D +-Rule Iran 2028 2029 - Sep 21 0:00 0 S +-Rule Iran 2030 2031 - Mar 22 0:00 1:00 D +-Rule Iran 2030 2031 - Sep 22 0:00 0 S +-Rule Iran 2032 2033 - Mar 21 0:00 1:00 D +-Rule Iran 2032 2033 - Sep 21 0:00 0 S +-Rule Iran 2034 2035 - Mar 22 0:00 1:00 D +-Rule Iran 2034 2035 - Sep 22 0:00 0 S ++Rule Iran 1978 1980 - Mar 21 0:00 1:00 - ++Rule Iran 1978 only - Oct 21 0:00 0 - ++Rule Iran 1979 only - Sep 19 0:00 0 - ++Rule Iran 1980 only - Sep 23 0:00 0 - ++Rule Iran 1991 only - May 3 0:00 1:00 - ++Rule Iran 1992 1995 - Mar 22 0:00 1:00 - ++Rule Iran 1991 1995 - Sep 22 0:00 0 - ++Rule Iran 1996 only - Mar 21 0:00 1:00 - ++Rule Iran 1996 only - Sep 21 0:00 0 - ++Rule Iran 1997 1999 - Mar 22 0:00 1:00 - ++Rule Iran 1997 1999 - Sep 22 0:00 0 - ++Rule Iran 2000 only - Mar 21 0:00 1:00 - ++Rule Iran 2000 only - Sep 21 0:00 0 - ++Rule Iran 2001 2003 - Mar 22 0:00 1:00 - ++Rule Iran 2001 2003 - Sep 22 0:00 0 - ++Rule Iran 2004 only - Mar 21 0:00 1:00 - ++Rule Iran 2004 only - Sep 21 0:00 0 - ++Rule Iran 2005 only - Mar 22 0:00 1:00 - ++Rule Iran 2005 only - Sep 22 0:00 0 - ++Rule Iran 2008 only - Mar 21 0:00 1:00 - ++Rule Iran 2008 only - Sep 21 0:00 0 - ++Rule Iran 2009 2011 - Mar 22 0:00 1:00 - ++Rule Iran 2009 2011 - Sep 22 0:00 0 - ++Rule Iran 2012 only - Mar 21 0:00 1:00 - ++Rule Iran 2012 only - Sep 21 0:00 0 - ++Rule Iran 2013 2015 - Mar 22 0:00 1:00 - ++Rule Iran 2013 2015 - Sep 22 0:00 0 - ++Rule Iran 2016 only - Mar 21 0:00 1:00 - ++Rule Iran 2016 only - Sep 21 0:00 0 - ++Rule Iran 2017 2019 - Mar 22 0:00 1:00 - ++Rule Iran 2017 2019 - Sep 22 0:00 0 - ++Rule Iran 2020 only - Mar 21 0:00 1:00 - ++Rule Iran 2020 only - Sep 21 0:00 0 - ++Rule Iran 2021 2023 - Mar 22 0:00 1:00 - ++Rule Iran 2021 2023 - Sep 22 0:00 0 - ++Rule Iran 2024 only - Mar 21 0:00 1:00 - ++Rule Iran 2024 only - Sep 21 0:00 0 - ++Rule Iran 2025 2027 - Mar 22 0:00 1:00 - ++Rule Iran 2025 2027 - Sep 22 0:00 0 - ++Rule Iran 2028 2029 - Mar 21 0:00 1:00 - ++Rule Iran 2028 2029 - Sep 21 0:00 0 - ++Rule Iran 2030 2031 - Mar 22 0:00 1:00 - ++Rule Iran 2030 2031 - Sep 22 0:00 0 - ++Rule Iran 2032 2033 - Mar 21 0:00 1:00 - ++Rule Iran 2032 2033 - Sep 21 0:00 0 - ++Rule Iran 2034 2035 - Mar 22 0:00 1:00 - ++Rule Iran 2034 2035 - Sep 22 0:00 0 - + # + # The following rules are approximations starting in the year 2038. + # These are the best post-2037 approximations available, given the + # restrictions of a single rule using a Gregorian-based data format. + # At some point this table will need to be extended, though quite + # possibly Iran will change the rules first. +-Rule Iran 2036 max - Mar 21 0:00 1:00 D +-Rule Iran 2036 max - Sep 21 0:00 0 S ++Rule Iran 2036 max - Mar 21 0:00 1:00 - ++Rule Iran 2036 max - Sep 21 0:00 0 - + + # Zone NAME GMTOFF RULES FORMAT [UNTIL] + Zone Asia/Tehran 3:25:44 - LMT 1916 +@@ -1219,17 +1220,17 @@ + # https://www.timeanddate.com/news/time/iraq-dumps-daylight-saving.html + + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +-Rule Iraq 1982 only - May 1 0:00 1:00 D +-Rule Iraq 1982 1984 - Oct 1 0:00 0 S +-Rule Iraq 1983 only - Mar 31 0:00 1:00 D +-Rule Iraq 1984 1985 - Apr 1 0:00 1:00 D +-Rule Iraq 1985 1990 - Sep lastSun 1:00s 0 S +-Rule Iraq 1986 1990 - Mar lastSun 1:00s 1:00 D ++Rule Iraq 1982 only - May 1 0:00 1:00 - ++Rule Iraq 1982 1984 - Oct 1 0:00 0 - ++Rule Iraq 1983 only - Mar 31 0:00 1:00 - ++Rule Iraq 1984 1985 - Apr 1 0:00 1:00 - ++Rule Iraq 1985 1990 - Sep lastSun 1:00s 0 - ++Rule Iraq 1986 1990 - Mar lastSun 1:00s 1:00 - + # IATA SSIM (1991/1996) says Apr 1 12:01am UTC; guess the ':01' is a typo. + # Shanks & Pottenger say Iraq did not observe DST 1992/1997; ignore this. + # +-Rule Iraq 1991 2007 - Apr 1 3:00s 1:00 D +-Rule Iraq 1991 2007 - Oct 1 3:00s 0 S ++Rule Iraq 1991 2007 - Apr 1 3:00s 1:00 - ++Rule Iraq 1991 2007 - Oct 1 3:00s 0 - + # Zone NAME GMTOFF RULES FORMAT [UNTIL] + Zone Asia/Baghdad 2:57:40 - LMT 1890 + 2:57:36 - BMT 1918 # Baghdad Mean Time? +@@ -1501,8 +1502,7 @@ + + # From Hideyuki Suzuki (1998-11-09): + # 'Tokyo' usually stands for the former location of Tokyo Astronomical +-# Observatory: 139 degrees 44' 40.90" E (9h 18m 58.727s), +-# 35 degrees 39' 16.0" N. ++# Observatory: 139° 44' 40.90" E (9h 18m 58.727s), 35° 39' 16.0" N. + # This data is from 'Rika Nenpyou (Chronological Scientific Tables) 1996' + # edited by National Astronomical Observatory of Japan.... + # JST (Japan Standard Time) has been used since 1888-01-01 00:00 (JST). +@@ -1510,10 +1510,10 @@ + + # From Hideyuki Suzuki (1998-11-16): + # The ordinance No. 51 (1886) established "standard time" in Japan, +-# which stands for the time on 135 degrees E. ++# which stands for the time on 135° E. + # In the ordinance No. 167 (1895), "standard time" was renamed to "central + # standard time". And the same ordinance also established "western standard +-# time", which stands for the time on 120 degrees E.... But "western standard ++# time", which stands for the time on 120° E.... But "western standard + # time" was abolished in the ordinance No. 529 (1937). In the ordinance No. + # 167, there is no mention regarding for what place western standard time is + # standard.... +@@ -1926,9 +1926,9 @@ + # From 2005-08-12 our GMT-offset is +6, w/o any daylight saving. + + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +-Rule Kyrgyz 1992 1996 - Apr Sun>=7 0:00s 1:00 S ++Rule Kyrgyz 1992 1996 - Apr Sun>=7 0:00s 1:00 - + Rule Kyrgyz 1992 1996 - Sep lastSun 0:00 0 - +-Rule Kyrgyz 1997 2005 - Mar lastSun 2:30 1:00 S ++Rule Kyrgyz 1997 2005 - Mar lastSun 2:30 1:00 - + Rule Kyrgyz 1997 2004 - Oct lastSun 2:30 0 - + # Zone NAME GMTOFF RULES FORMAT [UNTIL] + Zone Asia/Bishkek 4:58:24 - LMT 1924 May 2 +@@ -2060,7 +2060,7 @@ + + # Malaysia + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +-Rule NBorneo 1935 1941 - Sep 14 0:00 0:20 TS # one-Third Summer ++Rule NBorneo 1935 1941 - Sep 14 0:00 0:20 - + Rule NBorneo 1935 1941 - Dec 14 0:00 0 - + # + # peninsular Malaysia +@@ -2205,7 +2205,7 @@ + # http://zasag.mn/news/view/8969 + + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +-Rule Mongol 1983 1984 - Apr 1 0:00 1:00 S ++Rule Mongol 1983 1984 - Apr 1 0:00 1:00 - + Rule Mongol 1983 only - Oct 1 0:00 0 - + # Shanks & Pottenger and IATA SSIM say 1990s switches occurred at 00:00, + # but McDow says the 2001 switches occurred at 02:00. Also, IATA SSIM +@@ -2222,13 +2222,13 @@ + # Mongolian Government meeting has concluded today to cancel daylight + # saving time adoption in Mongolia. Source: http://zasag.mn/news/view/16192 + +-Rule Mongol 1985 1998 - Mar lastSun 0:00 1:00 S ++Rule Mongol 1985 1998 - Mar lastSun 0:00 1:00 - + Rule Mongol 1984 1998 - Sep lastSun 0:00 0 - + # IATA SSIM (1999-09) says Mongolia no longer observes DST. +-Rule Mongol 2001 only - Apr lastSat 2:00 1:00 S ++Rule Mongol 2001 only - Apr lastSat 2:00 1:00 - + Rule Mongol 2001 2006 - Sep lastSat 2:00 0 - +-Rule Mongol 2002 2006 - Mar lastSat 2:00 1:00 S +-Rule Mongol 2015 2016 - Mar lastSat 2:00 1:00 S ++Rule Mongol 2002 2006 - Mar lastSat 2:00 1:00 - ++Rule Mongol 2015 2016 - Mar lastSat 2:00 1:00 - + Rule Mongol 2015 2016 - Sep lastSat 0:00 0 - + + # Zone NAME GMTOFF RULES FORMAT [UNTIL] +@@ -2662,9 +2662,6 @@ + # [Google translation]: "The Council also decided to start daylight + # saving in Palestine as of one o'clock on Saturday morning, + # 2016-03-26, to provide the clock 60 minutes ahead." +-# +-# From Paul Eggert (2016-03-12): +-# Predict spring transitions on March's last Saturday at 01:00 from now on. + + # From Sharef Mustafa (2016-10-19): + # [T]he Palestinian cabinet decision (Mar 8th 2016) published on +@@ -2681,6 +2678,16 @@ + # https://www.timeanddate.com/time/change/gaza-strip/gaza + # https://www.timeanddate.com/time/change/west-bank/hebron + ++# From Sharef Mustafa (2018-03-16): ++# Palestine summer time will start on Mar 24th 2018 by advancing the ++# clock by 60 minutes as per Palestinian cabinet decision published on ++# the offical website, though the decree did not specify the exact ++# time of the time shift. ++# http://www.palestinecabinet.gov.ps/Website/AR/NDecrees/ViewFile.ashx?ID=e7a42ab7-ee23-435a-b9c8-a4f7e81f3817 ++# ++# From Paul Eggert (2018-03-16): ++# For 2016 on, predict spring transitions on March's fourth Saturday at 01:00. ++ + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S + Rule EgyptAsia 1957 only - May 10 0:00 1:00 S + Rule EgyptAsia 1957 1958 - Oct 1 0:00 0 - +@@ -2710,7 +2717,7 @@ + Rule Palestine 2013 only - Sep Fri>=21 0:00 0 - + Rule Palestine 2014 2015 - Oct Fri>=21 0:00 0 - + Rule Palestine 2015 only - Mar lastFri 24:00 1:00 S +-Rule Palestine 2016 max - Mar lastSat 1:00 1:00 S ++Rule Palestine 2016 max - Mar Sat>=22 1:00 1:00 S + Rule Palestine 2016 max - Oct lastSat 1:00 0 - + + # Zone NAME GMTOFF RULES FORMAT [UNTIL] +@@ -2760,11 +2767,11 @@ + # http://www.philstar.com/headlines/2014/08/05/1354152/pnoy-urged-declare-use-daylight-saving-time + + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +-Rule Phil 1936 only - Nov 1 0:00 1:00 S ++Rule Phil 1936 only - Nov 1 0:00 1:00 - + Rule Phil 1937 only - Feb 1 0:00 0 - +-Rule Phil 1954 only - Apr 12 0:00 1:00 S ++Rule Phil 1954 only - Apr 12 0:00 1:00 - + Rule Phil 1954 only - Jul 1 0:00 0 - +-Rule Phil 1978 only - Mar 22 0:00 1:00 S ++Rule Phil 1978 only - Mar 22 0:00 1:00 - + Rule Phil 1978 only - Sep 21 0:00 0 - + # Zone NAME GMTOFF RULES FORMAT [UNTIL] + Zone Asia/Manila -15:56:00 - LMT 1844 Dec 31 +@@ -3120,9 +3127,9 @@ + # and is the basis for the information below. + # + # The 1906 transition was effective July 1 and standardized Indochina to +-# Phù Liễn Observatory, legally 104 deg. 17'17" east of Paris. ++# Phù Liễn Observatory, legally 104° 17' 17" east of Paris. + # It's unclear whether this meant legal Paris Mean Time (00:09:21) or +-# the Paris Meridian (2 deg. 20'14.03" E); the former yields 07:06:30.1333... ++# the Paris Meridian (2° 20' 14.03" E); the former yields 07:06:30.1333... + # and the latter 07:06:29.333... so either way it rounds to 07:06:30, + # which is used below even though the modern-day Phù Liễn Observatory + # is closer to 07:06:31. Abbreviate Phù Liễn Mean Time as PLMT. +--- icedtea-3.8.0/openjdk/jdk/test/sun/util/calendar/zi/tzdata/australasia 2018-09-18 10:22:19.811039711 +0200 ++++ icedtea-3.8.0/openjdk/jdk/test/sun/util/calendar/zi/tzdata/australasia 2018-09-18 10:25:01.675921189 +0200 +@@ -219,20 +219,20 @@ + + # Lord Howe Island + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +-Rule LH 1981 1984 - Oct lastSun 2:00 1:00 D +-Rule LH 1982 1985 - Mar Sun>=1 2:00 0 S +-Rule LH 1985 only - Oct lastSun 2:00 0:30 D +-Rule LH 1986 1989 - Mar Sun>=15 2:00 0 S +-Rule LH 1986 only - Oct 19 2:00 0:30 D +-Rule LH 1987 1999 - Oct lastSun 2:00 0:30 D +-Rule LH 1990 1995 - Mar Sun>=1 2:00 0 S +-Rule LH 1996 2005 - Mar lastSun 2:00 0 S +-Rule LH 2000 only - Aug lastSun 2:00 0:30 D +-Rule LH 2001 2007 - Oct lastSun 2:00 0:30 D +-Rule LH 2006 only - Apr Sun>=1 2:00 0 S +-Rule LH 2007 only - Mar lastSun 2:00 0 S +-Rule LH 2008 max - Apr Sun>=1 2:00 0 S +-Rule LH 2008 max - Oct Sun>=1 2:00 0:30 D ++Rule LH 1981 1984 - Oct lastSun 2:00 1:00 - ++Rule LH 1982 1985 - Mar Sun>=1 2:00 0 - ++Rule LH 1985 only - Oct lastSun 2:00 0:30 - ++Rule LH 1986 1989 - Mar Sun>=15 2:00 0 - ++Rule LH 1986 only - Oct 19 2:00 0:30 - ++Rule LH 1987 1999 - Oct lastSun 2:00 0:30 - ++Rule LH 1990 1995 - Mar Sun>=1 2:00 0 - ++Rule LH 1996 2005 - Mar lastSun 2:00 0 - ++Rule LH 2000 only - Aug lastSun 2:00 0:30 - ++Rule LH 2001 2007 - Oct lastSun 2:00 0:30 - ++Rule LH 2006 only - Apr Sun>=1 2:00 0 - ++Rule LH 2007 only - Mar lastSun 2:00 0 - ++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 +@@ -390,15 +390,15 @@ + # practice than guessing no DST. + + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +-Rule Fiji 1998 1999 - Nov Sun>=1 2:00 1:00 S ++Rule Fiji 1998 1999 - Nov Sun>=1 2:00 1:00 - + Rule Fiji 1999 2000 - Feb lastSun 3:00 0 - +-Rule Fiji 2009 only - Nov 29 2:00 1:00 S ++Rule Fiji 2009 only - Nov 29 2:00 1:00 - + Rule Fiji 2010 only - Mar lastSun 3:00 0 - +-Rule Fiji 2010 2013 - Oct Sun>=21 2:00 1:00 S ++Rule Fiji 2010 2013 - Oct Sun>=21 2:00 1:00 - + Rule Fiji 2011 only - Mar Sun>=1 3:00 0 - + Rule Fiji 2012 2013 - Jan Sun>=18 3:00 0 - + Rule Fiji 2014 only - Jan Sun>=18 2:00 0 - +-Rule Fiji 2014 max - Nov Sun>=1 2:00 1:00 S ++Rule Fiji 2014 max - Nov Sun>=1 2:00 1:00 - + Rule Fiji 2015 max - Jan Sun>=14 3:00 0 - + # Zone NAME GMTOFF RULES FORMAT [UNTIL] + Zone Pacific/Fiji 11:55:44 - LMT 1915 Oct 26 # Suva +@@ -429,11 +429,11 @@ + 12:00 - +12 + Zone Pacific/Enderbury -11:24:20 - LMT 1901 + -12:00 - -12 1979 Oct +- -11:00 - -11 1995 ++ -11:00 - -11 1994 Dec 31 + 13:00 - +13 + Zone Pacific/Kiritimati -10:29:20 - LMT 1901 + -10:40 - -1040 1979 Oct +- -10:00 - -10 1995 ++ -10:00 - -10 1994 Dec 31 + 14:00 - +14 + + # N Mariana Is +@@ -470,9 +470,9 @@ + + # New Caledonia + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +-Rule NC 1977 1978 - Dec Sun>=1 0:00 1:00 S ++Rule NC 1977 1978 - Dec Sun>=1 0:00 1:00 - + Rule NC 1978 1979 - Feb 27 0:00 0 - +-Rule NC 1996 only - Dec 1 2:00s 1:00 S ++Rule NC 1996 only - Dec 1 2:00s 1:00 - + # Shanks & Pottenger say the following was at 2:00; go with IATA. + Rule NC 1997 only - Mar 2 2:00s 0 - + # Zone NAME GMTOFF RULES FORMAT [UNTIL] +@@ -492,27 +492,28 @@ + Rule NZ 1934 1940 - Apr lastSun 2:00 0 M + Rule NZ 1934 1940 - Sep lastSun 2:00 0:30 S + Rule NZ 1946 only - Jan 1 0:00 0 S +-# Since 1957 Chatham has been 45 minutes ahead of NZ, but there's no +-# convenient single notation for the date and time of this transition +-# so we must duplicate the Rule lines. ++# Since 1957 Chatham has been 45 minutes ahead of NZ, but until 2018a ++# there was no documented single notation for the date and time of this ++# transition. Duplicate the Rule lines for now, to give the 2018a change ++# time to percolate out. + Rule NZ 1974 only - Nov Sun>=1 2:00s 1:00 D +-Rule Chatham 1974 only - Nov Sun>=1 2:45s 1:00 D ++Rule Chatham 1974 only - Nov Sun>=1 2:45s 1:00 - + Rule NZ 1975 only - Feb lastSun 2:00s 0 S +-Rule Chatham 1975 only - Feb lastSun 2:45s 0 S ++Rule Chatham 1975 only - Feb lastSun 2:45s 0 - + Rule NZ 1975 1988 - Oct lastSun 2:00s 1:00 D +-Rule Chatham 1975 1988 - Oct lastSun 2:45s 1:00 D ++Rule Chatham 1975 1988 - Oct lastSun 2:45s 1:00 - + Rule NZ 1976 1989 - Mar Sun>=1 2:00s 0 S +-Rule Chatham 1976 1989 - Mar Sun>=1 2:45s 0 S ++Rule Chatham 1976 1989 - Mar Sun>=1 2:45s 0 - + Rule NZ 1989 only - Oct Sun>=8 2:00s 1:00 D +-Rule Chatham 1989 only - Oct Sun>=8 2:45s 1:00 D ++Rule Chatham 1989 only - Oct Sun>=8 2:45s 1:00 - + Rule NZ 1990 2006 - Oct Sun>=1 2:00s 1:00 D +-Rule Chatham 1990 2006 - Oct Sun>=1 2:45s 1:00 D ++Rule Chatham 1990 2006 - Oct Sun>=1 2:45s 1:00 - + Rule NZ 1990 2007 - Mar Sun>=15 2:00s 0 S +-Rule Chatham 1990 2007 - Mar Sun>=15 2:45s 0 S ++Rule Chatham 1990 2007 - Mar Sun>=15 2:45s 0 - + Rule NZ 2007 max - Sep lastSun 2:00s 1:00 D +-Rule Chatham 2007 max - Sep lastSun 2:45s 1:00 D ++Rule Chatham 2007 max - Sep lastSun 2:45s 1:00 - + Rule NZ 2008 max - Apr Sun>=1 2:00s 0 S +-Rule Chatham 2008 max - Apr Sun>=1 2:45s 0 S ++Rule Chatham 2008 max - Apr Sun>=1 2:45s 0 - + # Zone NAME GMTOFF RULES FORMAT [UNTIL] + Zone Pacific/Auckland 11:39:04 - LMT 1868 Nov 2 + 11:30 NZ NZ%sT 1946 Jan 1 +@@ -536,9 +537,9 @@ + # Cook Is + # From Shanks & Pottenger: + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +-Rule Cook 1978 only - Nov 12 0:00 0:30 HS ++Rule Cook 1978 only - Nov 12 0:00 0:30 - + Rule Cook 1979 1991 - Mar Sun>=1 0:00 0 - +-Rule Cook 1979 1990 - Oct lastSun 0:00 0:30 HS ++Rule Cook 1979 1990 - Oct lastSun 0:00 0:30 - + # Zone NAME GMTOFF RULES FORMAT [UNTIL] + Zone Pacific/Rarotonga -10:39:04 - LMT 1901 # Avarua + -10:30 - -1030 1978 Nov 12 +@@ -679,11 +680,11 @@ + # Assume the pattern instituted in 2012 will continue indefinitely. + + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +-Rule WS 2010 only - Sep lastSun 0:00 1 D +-Rule WS 2011 only - Apr Sat>=1 4:00 0 S +-Rule WS 2011 only - Sep lastSat 3:00 1 D +-Rule WS 2012 max - Apr Sun>=1 4:00 0 S +-Rule WS 2012 max - Sep lastSun 3:00 1 D ++Rule WS 2010 only - Sep lastSun 0:00 1 - ++Rule WS 2011 only - Apr Sat>=1 4:00 0 - ++Rule WS 2011 only - Sep lastSat 3:00 1 - ++Rule WS 2012 max - Apr Sun>=1 4:00 0 - ++Rule WS 2012 max - Sep lastSun 3:00 1 - + # Zone NAME GMTOFF RULES FORMAT [UNTIL] + Zone Pacific/Apia 12:33:04 - LMT 1892 Jul 5 + -11:26:56 - LMT 1911 +@@ -723,11 +724,11 @@ + + # Tonga + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +-Rule Tonga 1999 only - Oct 7 2:00s 1:00 S ++Rule Tonga 1999 only - Oct 7 2:00s 1:00 - + Rule Tonga 2000 only - Mar 19 2:00s 0 - +-Rule Tonga 2000 2001 - Nov Sun>=1 2:00 1:00 S ++Rule Tonga 2000 2001 - Nov Sun>=1 2:00 1:00 - + Rule Tonga 2001 2002 - Jan lastSun 2:00 0 - +-Rule Tonga 2016 only - Nov Sun>=1 2:00 1:00 S ++Rule Tonga 2016 only - Nov Sun>=1 2:00 1:00 - + Rule Tonga 2017 only - Jan Sun>=15 3:00 0 - + # Zone NAME GMTOFF RULES FORMAT [UNTIL] + Zone Pacific/Tongatapu 12:19:20 - LMT 1901 +@@ -804,12 +805,12 @@ + + # Vanuatu + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +-Rule Vanuatu 1983 only - Sep 25 0:00 1:00 S ++Rule Vanuatu 1983 only - Sep 25 0:00 1:00 - + Rule Vanuatu 1984 1991 - Mar Sun>=23 0:00 0 - +-Rule Vanuatu 1984 only - Oct 23 0:00 1:00 S +-Rule Vanuatu 1985 1991 - Sep Sun>=23 0:00 1:00 S ++Rule Vanuatu 1984 only - Oct 23 0:00 1:00 - ++Rule Vanuatu 1985 1991 - Sep Sun>=23 0:00 1:00 - + Rule Vanuatu 1992 1993 - Jan Sun>=23 0:00 0 - +-Rule Vanuatu 1992 only - Oct Sun>=23 0:00 1:00 S ++Rule Vanuatu 1992 only - Oct Sun>=23 0:00 1:00 - + # Zone NAME GMTOFF RULES FORMAT [UNTIL] + Zone Pacific/Efate 11:13:16 - LMT 1912 Jan 13 # Vila + 11:00 Vanuatu +11/+12 +@@ -1108,6 +1109,13 @@ + # South Australian time even though it's located in Western Australia. + + # 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 ] +@@ -1534,6 +1542,12 @@ + # "declared it the same day [throughout] the country as of Jan. 1, 1995" + # as part of the competition to be first into the 21st century. + ++# From Kerry Shetline (2018-02-03): ++# December 31 was the day that was skipped, so that the transition ++# would be from Friday December 30, 1994 to Sunday January 1, 1995. ++# From Paul Eggert (2018-02-04): ++# One source for this is page 202 of: Bartky IR. One Time Fits All: ++# The Campaigns for Global Uniformity (2007). + + # Kwajalein + +@@ -1626,7 +1640,7 @@ + + # From Howie Phelps (1999-11-10), who talked to a Pitcairner via shortwave: + # Betty Christian told me yesterday that their local time is the same as +-# Pacific Standard Time. They used to be 1/2 hour different from us here in ++# Pacific Standard Time. They used to be ½ hour different from us here in + # Sacramento but it was changed a couple of years ago. + + +@@ -1665,7 +1679,7 @@ + # 12 hours and 20 minutes ahead of GMT. When New Zealand adjusted its + # standard time in 1940s, Tonga had the choice of subtracting from its + # local time to come on the same standard time as New Zealand or of +-# advancing its time to maintain the differential of 13 degrees ++# advancing its time to maintain the differential of 13° + # (approximately 50 minutes ahead of New Zealand time). + # + # Because His Majesty King Tāufaʻāhau Tupou IV, then Crown Prince +--- icedtea-3.8.0/openjdk/jdk/test/sun/util/calendar/zi/tzdata/europe 2018-09-18 10:22:19.811039711 +0200 ++++ icedtea-3.8.0/openjdk/jdk/test/sun/util/calendar/zi/tzdata/europe 2018-09-18 10:25:01.675921189 +0200 +@@ -140,8 +140,8 @@ + # along the towpath within a few yards of it.' + # + # I have a one inch to one mile map of London and my estimate of the stone's +-# position is 51 degrees 28' 30" N, 0 degrees 18' 45" W. The longitude should +-# be within about +-2". The Ordnance Survey grid reference is TQ172761. ++# position is 51° 28' 30" N, 0° 18' 45" W. The longitude should ++# be within about ±2". The Ordnance Survey grid reference is TQ172761. + # + # [This yields GMTOFF = -0:01:15 for London LMT in the 18th century.] + +@@ -181,7 +181,7 @@ + # after-hours daylight in which to pursue his research. + # In 1895 he presented a paper to the Wellington Philosophical Society + # that proposed a two-hour daylight-saving shift. See: +-# Hudson GV. On seasonal time-adjustment in countries south of lat. 30 deg. ++# Hudson GV. On seasonal time-adjustment in countries south of lat. 30°. + # Transactions and Proceedings of the New Zealand Institute. 1895;28:734 + # http://rsnz.natlib.govt.nz/volume/rsnz_28/rsnz_28_00_006110.html + # Although some interest was expressed in New Zealand, his proposal +@@ -531,11 +531,25 @@ + Link Europe/London Europe/Guernsey + Link Europe/London Europe/Isle_of_Man + +-# From Paul Eggert (2018-01-19): ++# From Paul Eggert (2018-02-15): ++# In January 2018 we discovered that the negative SAVE values in the ++# Eire rules cause problems with tests for ICU: ++# https://mm.icann.org/pipermail/tz/2018-January/025825.html ++# and with tests for OpenJDK: ++# https://mm.icann.org/pipermail/tz/2018-January/025822.html ++# ++# To work around this problem, the build procedure can translate the ++# following data into two forms, one with negative SAVE values and the ++# other form with a traditional approximation for Irish time stamps ++# after 1971-10-31 02:00 UTC; although this approximation has tm_isdst ++# flags that are reversed, its UTC offsets are correct and this often ++# suffices. This source file currently uses only nonnegative SAVE ++# values, but this is intended to change and downstream code should ++# not rely on it. ++# + # The following is like GB-Eire and EU, except with standard time in +-# summer and negative daylight saving time in winter. +-# Although currently commented out, this will need to become uncommented +-# once the ICU/OpenJDK workaround is removed; see below. ++# summer and negative daylight saving time in winter. It is for when ++# negative SAVE values are used. + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S + #Rule Eire 1971 only - Oct 31 2:00u -1:00 GMT + #Rule Eire 1972 1980 - Mar Sun>=16 2:00u 0 IST +@@ -556,24 +570,12 @@ + 0:00 1:00 IST 1947 Nov 2 2:00s + 0:00 - GMT 1948 Apr 18 2:00s + 0:00 GB-Eire GMT/IST 1968 Oct 27 +-# From Paul Eggert (2018-01-18): +-# The next line should look like this: ++# The next line is for when negative SAVE values are used. + # 1:00 Eire IST/GMT +-# However, in January 2018 we discovered that the Eire rules cause +-# problems with tests for ICU: +-# https://mm.icann.org/pipermail/tz/2018-January/025825.html +-# and with tests for OpenJDK: +-# https://mm.icann.org/pipermail/tz/2018-January/025822.html +-# To work around this problem, use a traditional approximation for +-# time stamps after 1971-10-31 02:00 UTC, to give ICU and OpenJDK +-# developers breathing room to fix bugs. This approximation has +-# correct UTC offsets, but results in tm_isdst flags are the reverse +-# of what they should be. This workaround is temporary and should be +-# removed reasonably soon. ++# These three lines are for when SAVE values are always nonnegative. + 1:00 - IST 1971 Oct 31 2:00u + 0:00 GB-Eire GMT/IST 1996 + 0:00 EU GMT/IST +-# End of workaround for ICU and OpenJDK bugs. + + + ############################################################################### +@@ -1557,21 +1559,21 @@ + # http://www.almanak.hi.is/klukkan.html + # + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +-Rule Iceland 1917 1919 - Feb 19 23:00 1:00 S ++Rule Iceland 1917 1919 - Feb 19 23:00 1:00 - + Rule Iceland 1917 only - Oct 21 1:00 0 - + Rule Iceland 1918 1919 - Nov 16 1:00 0 - +-Rule Iceland 1921 only - Mar 19 23:00 1:00 S ++Rule Iceland 1921 only - Mar 19 23:00 1:00 - + Rule Iceland 1921 only - Jun 23 1:00 0 - +-Rule Iceland 1939 only - Apr 29 23:00 1:00 S ++Rule Iceland 1939 only - Apr 29 23:00 1:00 - + Rule Iceland 1939 only - Oct 29 2:00 0 - +-Rule Iceland 1940 only - Feb 25 2:00 1:00 S ++Rule Iceland 1940 only - Feb 25 2:00 1:00 - + Rule Iceland 1940 1941 - Nov Sun>=2 1:00s 0 - +-Rule Iceland 1941 1942 - Mar Sun>=2 1:00s 1:00 S ++Rule Iceland 1941 1942 - Mar Sun>=2 1:00s 1:00 - + # 1943-1946 - first Sunday in March until first Sunday in winter +-Rule Iceland 1943 1946 - Mar Sun>=1 1:00s 1:00 S ++Rule Iceland 1943 1946 - Mar Sun>=1 1:00s 1:00 - + Rule Iceland 1942 1948 - Oct Sun>=22 1:00s 0 - + # 1947-1967 - first Sunday in April until first Sunday in winter +-Rule Iceland 1947 1967 - Apr Sun>=1 1:00s 1:00 S ++Rule Iceland 1947 1967 - Apr Sun>=1 1:00s 1:00 - + # 1949 and 1967 Oct transitions delayed by 1 week + Rule Iceland 1949 only - Oct 30 1:00s 0 - + Rule Iceland 1950 1966 - Oct Sun>=22 1:00s 0 - +@@ -2161,15 +2163,19 @@ + 1:00 EU CE%sT + + # 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. +-# Round the old offset to -0:36:45. This agrees with Willett but disagrees +-# with Shanks, who says the transition occurred on 1911-05-24 at 00:00 for +-# Europe/Lisbon, Atlantic/Azores, and Atlantic/Madeira. ++# Round the old offset to -0:36:45. This agrees with Willett.... + # ++# From Michael Deckers (2018-02-15): ++# article 5 [of the 1911 decree; Deckers's translation] ...: ++# These dispositions shall enter into force at the instant at which, ++# 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. +@@ -2252,7 +2258,7 @@ + # + # Zone NAME GMTOFF RULES FORMAT [UNTIL] + Zone Europe/Lisbon -0:36:45 - LMT 1884 +- -0:36:45 - LMT 1912 Jan 1 # Lisbon Mean Time ++ -0:36:45 - LMT 1912 Jan 1 0:00u # Lisbon MT + 0:00 Port WE%sT 1966 Apr 3 2:00 + 1:00 - CET 1976 Sep 26 1:00 + 0:00 Port WE%sT 1983 Sep 25 1:00s +@@ -2261,7 +2267,7 @@ + 0:00 EU WE%sT + # This Zone can be simplified once we assume zic %z. + Zone Atlantic/Azores -1:42:40 - LMT 1884 # Ponta Delgada +- -1:54:32 - HMT 1912 Jan 1 # Horta Mean Time ++ -1:54:32 - HMT 1912 Jan 1 2:00u # Horta MT + -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 +@@ -2277,7 +2283,7 @@ + -1:00 EU -01/+00 + # This Zone can be simplified once we assume zic %z. + Zone Atlantic/Madeira -1:07:36 - LMT 1884 # Funchal +- -1:07:36 - FMT 1912 Jan 1 # Funchal Mean Time ++ -1:07:36 - FMT 1912 Jan 1 1:00u # Funchal MT + -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 +@@ -2615,13 +2621,13 @@ + + # From Vladimir Karpinsky (2014-07-08): + # LMT in Moscow (before Jul 3, 1916) is 2:30:17, that was defined by Moscow +-# Observatory (coordinates: 55 deg. 45'29.70", 37 deg. 34'05.30").... ++# Observatory (coordinates: 55° 45' 29.70", 37° 34' 05.30").... + # LMT in Moscow since Jul 3, 1916 is 2:31:01 as a result of new standard. + # (The info is from the book by Byalokoz ... p. 18.) + # The time in St. Petersburg as capital of Russia was defined by + # Pulkov observatory, near St. Petersburg. In 1916 LMT Moscow + # was synchronized with LMT St. Petersburg (+30 minutes), (Pulkov observatory +-# coordinates: 59 deg. 46'18.70", 30 deg. 19'40.70") so 30 deg. 19'40.70" > ++# coordinates: 59° 46' 18.70", 30° 19' 40.70") so 30° 19' 40.70" > + # 2h01m18.7s = 2:01:19. LMT Moscow = LMT St.Petersburg + 30m 2:01:19 + 0:30 = + # 2:31:19 ... + # +@@ -3450,7 +3456,7 @@ + # three degrees, or twelve minutes of time, to the west of the + # meridian of the Observatory of Stockholm". The law is dated 1878-05-31. + # +-# The observatory at that time had the meridian 18 degrees 03' 30" ++# The observatory at that time had the meridian 18° 03' 30" + # eastern longitude = 01:12:14 in time. Less 12 minutes gives the + # national standard time as 01:00:14 ahead of GMT.... + # +@@ -3554,7 +3560,7 @@ + # From Alois Treindl (2013-09-11): + # The Federal regulations say + # https://www.admin.ch/opc/de/classified-compilation/20071096/index.html +-# ... the meridian for Bern mean time ... is 7 degrees 26' 22.50". ++# ... the meridian for Bern mean time ... is 7° 26' 22.50". + # Expressed in time, it is 0h29m45.5s. + + # From Pierre-Yves Berger (2013-09-11): +--- icedtea-3.8.0/openjdk/jdk/test/sun/util/calendar/zi/tzdata/northamerica 2018-09-18 10:22:19.811039711 +0200 ++++ icedtea-3.8.0/openjdk/jdk/test/sun/util/calendar/zi/tzdata/northamerica 2018-09-18 10:25:01.679921211 +0200 +@@ -48,7 +48,7 @@ + # 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 (2016-09-21): ++# From Paul Eggert (2018-03-20): + # Dowd's proposal left many details unresolved, such as where to draw + # lines between time zones. The key individual who made time zones + # work in the US was William Frederick Allen - railway engineer, +@@ -59,10 +59,9 @@ + # to the General Time Convention on 1883-04-11, saying that his plan + # meant "local time would be practically abolished" - a plus for + # railway scheduling. By the next convention on 1883-10-11 nearly all +-# railroads had agreed and it took effect on 1883-11-18 at 12:00. +-# That Sunday was called the "day of two noons", as the eastern parts +-# of the new zones observed noon twice. Allen witnessed the +-# transition in New York City, writing: ++# railroads had agreed and it took effect on 1883-11-18. That Sunday ++# was called the "day of two noons", as some locations observed noon ++# twice. Allen witnessed the transition in New York City, writing: + # + # I heard the bells of St. Paul's strike on the old time. Four + # minutes later, obedient to the electrical signal from the Naval +@@ -447,8 +446,7 @@ + # ...according to the Census Bureau, the largest city is Beulah (although + # it's commonly referred to as Beulah-Hazen, with Hazen being the next + # largest city in Mercer County). Google Maps places Beulah's city hall +-# at 47 degrees 15' 51" N, 101 degrees 46' 40" W, which yields an offset +-# of 6h47'07". ++# at 47° 15' 51" N, 101° 46' 40" W, which yields an offset of 6h47'07". + + Zone America/North_Dakota/Beulah -6:47:07 - LMT 1883 Nov 18 12:12:53 + -7:00 US M%sT 2010 Nov 7 2:00 +@@ -481,7 +479,7 @@ + # California, northern Idaho (Benewah, Bonner, Boundary, Clearwater, + # Kootenai, Latah, Lewis, Nez Perce, and Shoshone counties, Idaho county + # north of the Salmon River, and the towns of Burgdorf and Warren), +-# Nevada (except West Wendover), Oregon (except the northern 3/4 of ++# Nevada (except West Wendover), Oregon (except the northern ¾ of + # Malheur county), and Washington + + # From Paul Eggert (2016-08-20): +@@ -979,6 +977,13 @@ + -5:00 - EST 2006 + -5:00 US E%sT + ++# From Paul Eggert (2018-03-20): ++# The Louisville & Nashville Railroad's 1883-11-18 change occurred at ++# 10:00 old local time; train were supposed to come to a standstill ++# for precisely 18 minutes. See Bartky Fig. 1 (page 50). It is not ++# clear how this matched civil time in Louisville, so for now continue ++# to assume Louisville switched at noon new local time, like New York. ++# + # Part of Kentucky left its clocks alone in 1974. + # This also includes Clark, Floyd, and Harrison counties in Indiana. + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER +@@ -3287,8 +3292,8 @@ + # http://www.jamaicaobserver.com/columns/The-politician-in-all-of-us_17573647 + # + # Zone NAME GMTOFF RULES FORMAT [UNTIL] +-Zone America/Jamaica -5:07:11 - LMT 1890 # Kingston +- -5:07:11 - KMT 1912 Feb # Kingston Mean Time ++Zone America/Jamaica -5:07:10 - LMT 1890 # Kingston ++ -5:07:10 - KMT 1912 Feb # Kingston Mean Time + -5:00 - EST 1974 + -5:00 US E%sT 1984 + -5:00 - EST +@@ -3438,7 +3443,7 @@ + # + # Zone NAME GMTOFF RULES FORMAT [UNTIL] + Zone America/Grand_Turk -4:44:32 - LMT 1890 +- -5:07:11 - KMT 1912 Feb # Kingston Mean Time ++ -5:07:10 - KMT 1912 Feb # Kingston Mean Time + -5:00 - EST 1979 + -5:00 US E%sT 2015 Nov Sun>=1 2:00 + -4:00 - AST 2018 Mar 11 3:00 +--- icedtea-3.8.0/openjdk/jdk/test/sun/util/calendar/zi/tzdata/southamerica 2018-09-18 10:22:19.811039711 +0200 ++++ icedtea-3.8.0/openjdk/jdk/test/sun/util/calendar/zi/tzdata/southamerica 2018-09-18 10:25:01.679921211 +0200 +@@ -70,28 +70,28 @@ + # AR was chosen because they are the ISO letters that represent Argentina. + + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +-Rule Arg 1930 only - Dec 1 0:00 1:00 S ++Rule Arg 1930 only - Dec 1 0:00 1:00 - + Rule Arg 1931 only - Apr 1 0:00 0 - +-Rule Arg 1931 only - Oct 15 0:00 1:00 S ++Rule Arg 1931 only - Oct 15 0:00 1:00 - + Rule Arg 1932 1940 - Mar 1 0:00 0 - +-Rule Arg 1932 1939 - Nov 1 0:00 1:00 S +-Rule Arg 1940 only - Jul 1 0:00 1:00 S ++Rule Arg 1932 1939 - Nov 1 0:00 1:00 - ++Rule Arg 1940 only - Jul 1 0:00 1:00 - + Rule Arg 1941 only - Jun 15 0:00 0 - +-Rule Arg 1941 only - Oct 15 0:00 1:00 S ++Rule Arg 1941 only - Oct 15 0:00 1:00 - + Rule Arg 1943 only - Aug 1 0:00 0 - +-Rule Arg 1943 only - Oct 15 0:00 1:00 S ++Rule Arg 1943 only - Oct 15 0:00 1:00 - + Rule Arg 1946 only - Mar 1 0:00 0 - +-Rule Arg 1946 only - Oct 1 0:00 1:00 S ++Rule Arg 1946 only - Oct 1 0:00 1:00 - + Rule Arg 1963 only - Oct 1 0:00 0 - +-Rule Arg 1963 only - Dec 15 0:00 1:00 S ++Rule Arg 1963 only - Dec 15 0:00 1:00 - + Rule Arg 1964 1966 - Mar 1 0:00 0 - +-Rule Arg 1964 1966 - Oct 15 0:00 1:00 S ++Rule Arg 1964 1966 - Oct 15 0:00 1:00 - + Rule Arg 1967 only - Apr 2 0:00 0 - +-Rule Arg 1967 1968 - Oct Sun>=1 0:00 1:00 S ++Rule Arg 1967 1968 - Oct Sun>=1 0:00 1:00 - + Rule Arg 1968 1969 - Apr Sun>=1 0:00 0 - +-Rule Arg 1974 only - Jan 23 0:00 1:00 S ++Rule Arg 1974 only - Jan 23 0:00 1:00 - + Rule Arg 1974 only - May 1 0:00 0 - +-Rule Arg 1988 only - Dec 1 0:00 1:00 S ++Rule Arg 1988 only - Dec 1 0:00 1:00 - + # + # From Hernan G. Otero (1995-06-26): + # These corrections were contributed by InterSoft Argentina S.A., +@@ -99,7 +99,7 @@ + # Talleres de Hidrografía Naval Argentina + # (Argentine Naval Hydrography Institute) + Rule Arg 1989 1993 - Mar Sun>=1 0:00 0 - +-Rule Arg 1989 1992 - Oct Sun>=15 0:00 1:00 S ++Rule Arg 1989 1992 - Oct Sun>=15 0:00 1:00 - + # + # From Hernan G. Otero (1995-06-26): + # From this moment on, the law that mandated the daylight saving +@@ -110,7 +110,7 @@ + # On October 3, 1999, 0:00 local, Argentina implemented daylight savings time, + # which did not result in the switch of a time zone, as they stayed 9 hours + # from the International Date Line. +-Rule Arg 1999 only - Oct Sun>=1 0:00 1:00 S ++Rule Arg 1999 only - Oct Sun>=1 0:00 1:00 - + # From Paul Eggert (2007-12-28): + # DST was set to expire on March 5, not March 3, but since it was converted + # to standard time on March 3 it's more convenient for us to pretend that +@@ -213,9 +213,9 @@ + # la modificación del huso horario, ya que 2009 nos encuentra con + # crecimiento en la producción y distribución energética." + +-Rule Arg 2007 only - Dec 30 0:00 1:00 S ++Rule Arg 2007 only - Dec 30 0:00 1:00 - + Rule Arg 2008 2009 - Mar Sun>=15 0:00 0 - +-Rule Arg 2008 only - Oct Sun>=15 0:00 1:00 S ++Rule Arg 2008 only - Oct Sun>=15 0:00 1:00 - + + # From Mariano Absatz (2004-05-21): + # Today it was officially published that the Province of Mendoza is changing +@@ -225,12 +225,14 @@ + # It's Law No. 7,210. This change is due to a public power emergency, so for + # now we'll assume it's for this year only. + # +-# From Paul Eggert (2014-08-09): ++# From Paul Eggert (2018-01-31): + # Hora de verano para la República Argentina + # http://buenasiembra.com.ar/esoterismo/astrologia/hora-de-verano-de-la-republica-argentina-27.html + # says that standard time in Argentina from 1894-10-31 + # to 1920-05-01 was -4:16:48.25. Go with this more-precise value +-# over Shanks & Pottenger. ++# over Shanks & Pottenger. It is upward compatible with Milne, who ++# says Córdoba time was -4:16:48.2. ++ + # + # From Mariano Absatz (2004-06-05): + # These media articles from a major newspaper mostly cover the current state: +@@ -404,9 +406,9 @@ + # rules...San Luis is still using "Western ARgentina Time" and it got + # stuck on Summer daylight savings time even though the summer is over. + +-# From Paul Eggert (2013-09-05): ++# From Paul Eggert (2018-01-23): + # Perhaps San Luis operates on the legal fiction that it is at -04 +-# with perpetual summer time, but ordinary usage typically seems to ++# with perpetual daylight saving time, but ordinary usage typically seems to + # just say it's at -03; see, for example, + # https://es.wikipedia.org/wiki/Hora_oficial_argentina + # We've documented similar situations as being plain changes to +@@ -415,9 +417,6 @@ + # plus is that this silences a zic complaint that there's no POSIX TZ + # setting for time stamps past 2038. + +-# From Paul Eggert (2013-02-21): +-# Milne says Córdoba time was -4:16:48.2. Round to the nearest second. +- + # Zone NAME GMTOFF RULES FORMAT [UNTIL] + # + # Buenos Aires (BA), Capital Federal (CF), +@@ -552,7 +551,7 @@ + # San Luis (SL) + + Rule SanLuis 2008 2009 - Mar Sun>=8 0:00 0 - +-Rule SanLuis 2007 2008 - Oct Sun>=8 0:00 1:00 S ++Rule SanLuis 2007 2008 - Oct Sun>=8 0:00 1:00 - + + Zone America/Argentina/San_Luis -4:25:24 - LMT 1894 Oct 31 + -4:16:48 - CMT 1920 May +@@ -794,14 +793,14 @@ + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S + # Decree 20,466 (1931-10-01) + # Decree 21,896 (1932-01-10) +-Rule Brazil 1931 only - Oct 3 11:00 1:00 S ++Rule Brazil 1931 only - Oct 3 11:00 1:00 - + Rule Brazil 1932 1933 - Apr 1 0:00 0 - +-Rule Brazil 1932 only - Oct 3 0:00 1:00 S ++Rule Brazil 1932 only - Oct 3 0:00 1:00 - + # Decree 23,195 (1933-10-10) + # revoked DST. + # Decree 27,496 (1949-11-24) + # Decree 27,998 (1950-04-13) +-Rule Brazil 1949 1952 - Dec 1 0:00 1:00 S ++Rule Brazil 1949 1952 - Dec 1 0:00 1:00 - + Rule Brazil 1950 only - Apr 16 1:00 0 - + Rule Brazil 1951 1952 - Apr 1 0:00 0 - + # Decree 32,308 (1953-02-24) +@@ -813,51 +812,51 @@ + # in SP, RJ, GB, MG, ES, due to the prolongation of the drought. + # Decree 53,071 (1963-12-03) + # extended the above decree to all of the national territory on 12-09. +-Rule Brazil 1963 only - Dec 9 0:00 1:00 S ++Rule Brazil 1963 only - Dec 9 0:00 1:00 - + # Decree 53,604 (1964-02-25) + # extended summer time by one day to 1964-03-01 00:00 (start of school). + Rule Brazil 1964 only - Mar 1 0:00 0 - + # Decree 55,639 (1965-01-27) +-Rule Brazil 1965 only - Jan 31 0:00 1:00 S ++Rule Brazil 1965 only - Jan 31 0:00 1:00 - + Rule Brazil 1965 only - Mar 31 0:00 0 - + # Decree 57,303 (1965-11-22) +-Rule Brazil 1965 only - Dec 1 0:00 1:00 S ++Rule Brazil 1965 only - Dec 1 0:00 1:00 - + # Decree 57,843 (1966-02-18) + Rule Brazil 1966 1968 - Mar 1 0:00 0 - +-Rule Brazil 1966 1967 - Nov 1 0:00 1:00 S ++Rule Brazil 1966 1967 - Nov 1 0:00 1:00 - + # Decree 63,429 (1968-10-15) + # revoked DST. + # Decree 91,698 (1985-09-27) +-Rule Brazil 1985 only - Nov 2 0:00 1:00 S ++Rule Brazil 1985 only - Nov 2 0:00 1:00 - + # Decree 92,310 (1986-01-21) + # Decree 92,463 (1986-03-13) + Rule Brazil 1986 only - Mar 15 0:00 0 - + # Decree 93,316 (1986-10-01) +-Rule Brazil 1986 only - Oct 25 0:00 1:00 S ++Rule Brazil 1986 only - Oct 25 0:00 1:00 - + Rule Brazil 1987 only - Feb 14 0:00 0 - + # Decree 94,922 (1987-09-22) +-Rule Brazil 1987 only - Oct 25 0:00 1:00 S ++Rule Brazil 1987 only - Oct 25 0:00 1:00 - + Rule Brazil 1988 only - Feb 7 0:00 0 - + # Decree 96,676 (1988-09-12) + # except for the states of AC, AM, PA, RR, RO, and AP (then a territory) +-Rule Brazil 1988 only - Oct 16 0:00 1:00 S ++Rule Brazil 1988 only - Oct 16 0:00 1:00 - + Rule Brazil 1989 only - Jan 29 0:00 0 - + # Decree 98,077 (1989-08-21) + # with the same exceptions +-Rule Brazil 1989 only - Oct 15 0:00 1:00 S ++Rule Brazil 1989 only - Oct 15 0:00 1:00 - + Rule Brazil 1990 only - Feb 11 0:00 0 - + # Decree 99,530 (1990-09-17) + # adopted by RS, SC, PR, SP, RJ, ES, MG, GO, MS, DF. + # Decree 99,629 (1990-10-19) adds BA, MT. +-Rule Brazil 1990 only - Oct 21 0:00 1:00 S ++Rule Brazil 1990 only - Oct 21 0:00 1:00 - + Rule Brazil 1991 only - Feb 17 0:00 0 - + # Unnumbered decree (1991-09-25) + # adopted by RS, SC, PR, SP, RJ, ES, MG, BA, GO, MT, MS, DF. +-Rule Brazil 1991 only - Oct 20 0:00 1:00 S ++Rule Brazil 1991 only - Oct 20 0:00 1:00 - + Rule Brazil 1992 only - Feb 9 0:00 0 - + # Unnumbered decree (1992-10-16) + # adopted by same states. +-Rule Brazil 1992 only - Oct 25 0:00 1:00 S ++Rule Brazil 1992 only - Oct 25 0:00 1:00 - + Rule Brazil 1993 only - Jan 31 0:00 0 - + # Decree 942 (1993-09-28) + # adopted by same states, plus AM. +@@ -867,12 +866,12 @@ + # adopted by same states, plus MT and TO. + # Decree 1,674 (1995-10-13) + # adds AL, SE. +-Rule Brazil 1993 1995 - Oct Sun>=11 0:00 1:00 S ++Rule Brazil 1993 1995 - Oct Sun>=11 0:00 1:00 - + Rule Brazil 1994 1995 - Feb Sun>=15 0:00 0 - + Rule Brazil 1996 only - Feb 11 0:00 0 - + # Decree 2,000 (1996-09-04) + # adopted by same states, minus AL, SE. +-Rule Brazil 1996 only - Oct 6 0:00 1:00 S ++Rule Brazil 1996 only - Oct 6 0:00 1:00 - + Rule Brazil 1997 only - Feb 16 0:00 0 - + # From Daniel C. Sobral (1998-02-12): + # In 1997, the DS began on October 6. The stated reason was that +@@ -882,19 +881,19 @@ + # to help dealing with the shortages of electric power. + # + # Decree 2,317 (1997-09-04), adopted by same states. +-Rule Brazil 1997 only - Oct 6 0:00 1:00 S ++Rule Brazil 1997 only - Oct 6 0:00 1:00 - + # Decree 2,495 + # (1998-02-10) + Rule Brazil 1998 only - Mar 1 0:00 0 - + # Decree 2,780 (1998-09-11) + # adopted by the same states as before. +-Rule Brazil 1998 only - Oct 11 0:00 1:00 S ++Rule Brazil 1998 only - Oct 11 0:00 1:00 - + Rule Brazil 1999 only - Feb 21 0:00 0 - + # Decree 3,150 + # (1999-08-23) adopted by same states. + # Decree 3,188 (1999-09-30) + # adds SE, AL, PB, PE, RN, CE, PI, MA and RR. +-Rule Brazil 1999 only - Oct 3 0:00 1:00 S ++Rule Brazil 1999 only - Oct 3 0:00 1:00 - + Rule Brazil 2000 only - Feb 27 0:00 0 - + # Decree 3,592 (2000-09-06) + # adopted by the same states as before. +@@ -904,34 +903,34 @@ + # repeals DST in SE, AL, PB, RN, CE, PI and MA, effective 2000-10-22 00:00. + # Decree 3,916 + # (2001-09-13) reestablishes DST in AL, CE, MA, PB, PE, PI, RN, SE. +-Rule Brazil 2000 2001 - Oct Sun>=8 0:00 1:00 S ++Rule Brazil 2000 2001 - Oct Sun>=8 0:00 1:00 - + Rule Brazil 2001 2006 - Feb Sun>=15 0:00 0 - + # Decree 4,399 (2002-10-01) repeals DST in AL, CE, MA, PB, PE, PI, RN, SE. + # 4,399 +-Rule Brazil 2002 only - Nov 3 0:00 1:00 S ++Rule Brazil 2002 only - Nov 3 0:00 1:00 - + # Decree 4,844 (2003-09-24; corrected 2003-09-26) repeals DST in BA, MT, TO. + # 4,844 +-Rule Brazil 2003 only - Oct 19 0:00 1:00 S ++Rule Brazil 2003 only - Oct 19 0:00 1:00 - + # Decree 5,223 (2004-10-01) reestablishes DST in MT. + # 5,223 +-Rule Brazil 2004 only - Nov 2 0:00 1:00 S ++Rule Brazil 2004 only - Nov 2 0:00 1:00 - + # Decree 5,539 (2005-09-19), + # adopted by the same states as before. +-Rule Brazil 2005 only - Oct 16 0:00 1:00 S ++Rule Brazil 2005 only - Oct 16 0:00 1:00 - + # Decree 5,920 (2006-10-03), + # adopted by the same states as before. +-Rule Brazil 2006 only - Nov 5 0:00 1:00 S ++Rule Brazil 2006 only - Nov 5 0:00 1:00 - + Rule Brazil 2007 only - Feb 25 0:00 0 - + # Decree 6,212 (2007-09-26), + # adopted by the same states as before. +-Rule Brazil 2007 only - Oct Sun>=8 0:00 1:00 S ++Rule Brazil 2007 only - Oct Sun>=8 0:00 1:00 - + # From Frederico A. C. Neves (2008-09-10): + # According to this decree + # http://www.planalto.gov.br/ccivil_03/_Ato2007-2010/2008/Decreto/D6558.htm + # [t]he DST period in Brazil now on will be from the 3rd Oct Sunday to the + # 3rd Feb Sunday. There is an exception on the return date when this is + # the Carnival Sunday then the return date will be the next Sunday... +-Rule Brazil 2008 2017 - Oct Sun>=15 0:00 1:00 S ++Rule Brazil 2008 2017 - Oct Sun>=15 0:00 1:00 - + Rule Brazil 2008 2011 - Feb Sun>=15 0:00 0 - + # Decree 7,584 (2011-10-13) + # added Bahia. +@@ -949,7 +948,7 @@ + # ... https://www.timeanddate.com/news/time/brazil-delays-dst-2018.html + # From Steffen Thorsen (2017-12-20): + # http://www.planalto.gov.br/ccivil_03/_ato2015-2018/2017/decreto/D9242.htm +-Rule Brazil 2018 max - Nov Sun>=1 0:00 1:00 S ++Rule Brazil 2018 max - Nov Sun>=1 0:00 1:00 - + Rule Brazil 2023 only - Feb Sun>=22 0:00 0 - + Rule Brazil 2024 2025 - Feb Sun>=15 0:00 0 - + Rule Brazil 2026 only - Feb Sun>=22 0:00 0 - +@@ -1256,28 +1255,28 @@ + # For now, assume that they will not revert. + + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +-Rule Chile 1927 1931 - Sep 1 0:00 1:00 S ++Rule Chile 1927 1931 - Sep 1 0:00 1:00 - + Rule Chile 1928 1932 - Apr 1 0:00 0 - +-Rule Chile 1968 only - Nov 3 4:00u 1:00 S ++Rule Chile 1968 only - Nov 3 4:00u 1:00 - + Rule Chile 1969 only - Mar 30 3:00u 0 - +-Rule Chile 1969 only - Nov 23 4:00u 1:00 S ++Rule Chile 1969 only - Nov 23 4:00u 1:00 - + Rule Chile 1970 only - Mar 29 3:00u 0 - + Rule Chile 1971 only - Mar 14 3:00u 0 - +-Rule Chile 1970 1972 - Oct Sun>=9 4:00u 1:00 S ++Rule Chile 1970 1972 - Oct Sun>=9 4:00u 1:00 - + Rule Chile 1972 1986 - Mar Sun>=9 3:00u 0 - +-Rule Chile 1973 only - Sep 30 4:00u 1:00 S +-Rule Chile 1974 1987 - Oct Sun>=9 4:00u 1:00 S ++Rule Chile 1973 only - Sep 30 4:00u 1:00 - ++Rule Chile 1974 1987 - Oct Sun>=9 4:00u 1:00 - + Rule Chile 1987 only - Apr 12 3:00u 0 - + Rule Chile 1988 1990 - Mar Sun>=9 3:00u 0 - +-Rule Chile 1988 1989 - Oct Sun>=9 4:00u 1:00 S +-Rule Chile 1990 only - Sep 16 4:00u 1:00 S ++Rule Chile 1988 1989 - Oct Sun>=9 4:00u 1:00 - ++Rule Chile 1990 only - Sep 16 4:00u 1:00 - + Rule Chile 1991 1996 - Mar Sun>=9 3:00u 0 - +-Rule Chile 1991 1997 - Oct Sun>=9 4:00u 1:00 S ++Rule Chile 1991 1997 - Oct Sun>=9 4:00u 1:00 - + Rule Chile 1997 only - Mar 30 3:00u 0 - + Rule Chile 1998 only - Mar Sun>=9 3:00u 0 - +-Rule Chile 1998 only - Sep 27 4:00u 1:00 S ++Rule Chile 1998 only - Sep 27 4:00u 1:00 - + Rule Chile 1999 only - Apr 4 3:00u 0 - +-Rule Chile 1999 2010 - Oct Sun>=9 4:00u 1:00 S ++Rule Chile 1999 2010 - Oct Sun>=9 4:00u 1:00 - + Rule Chile 2000 2007 - Mar Sun>=9 3:00u 0 - + # N.B.: the end of March 29 in Chile is March 30 in Universal time, + # which is used below in specifying the transition. +@@ -1285,11 +1284,11 @@ + Rule Chile 2009 only - Mar Sun>=9 3:00u 0 - + Rule Chile 2010 only - Apr Sun>=1 3:00u 0 - + Rule Chile 2011 only - May Sun>=2 3:00u 0 - +-Rule Chile 2011 only - Aug Sun>=16 4:00u 1:00 S ++Rule Chile 2011 only - Aug Sun>=16 4:00u 1:00 - + Rule Chile 2012 2014 - Apr Sun>=23 3:00u 0 - +-Rule Chile 2012 2014 - Sep Sun>=2 4:00u 1:00 S ++Rule Chile 2012 2014 - Sep Sun>=2 4:00u 1:00 - + Rule Chile 2016 max - May Sun>=9 3:00u 0 - +-Rule Chile 2016 max - Aug Sun>=9 4:00u 1:00 S ++Rule Chile 2016 max - Aug Sun>=9 4:00u 1:00 - + # IATA SSIM anomalies: (1992-02) says 1992-03-14; + # (1996-09) says 1998-03-08. Ignore these. + # Zone NAME GMTOFF RULES FORMAT [UNTIL] +@@ -1354,7 +1353,7 @@ + # "A variation of fifteen minutes in the public clocks of Bogota is not rare." + + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +-Rule CO 1992 only - May 3 0:00 1:00 S ++Rule CO 1992 only - May 3 0:00 1:00 - + Rule CO 1993 only - Apr 4 0:00 0 - + # Zone NAME GMTOFF RULES FORMAT [UNTIL] + Zone America/Bogota -4:56:16 - LMT 1884 Mar 13 +@@ -1414,7 +1413,7 @@ + # repeated. For now, assume transitions were at 00:00 local time country-wide. + # + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +-Rule Ecuador 1992 only - Nov 28 0:00 1:00 S ++Rule Ecuador 1992 only - Nov 28 0:00 1:00 - + Rule Ecuador 1993 only - Feb 5 0:00 0 - + # + # Zone NAME GMTOFF RULES FORMAT [UNTIL] +@@ -1504,22 +1503,22 @@ + # the maintainers of the database to inform them we're adopting + # the same policy this year and suggest recommendations for future years. + # +-# For now we will assume permanent summer time for the Falklands ++# For now we will assume permanent -03 for the Falklands + # until advised differently (to apply for 2012 and beyond, after the 2011 + # experiment was apparently successful.) + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +-Rule Falk 1937 1938 - Sep lastSun 0:00 1:00 S ++Rule Falk 1937 1938 - Sep lastSun 0:00 1:00 - + Rule Falk 1938 1942 - Mar Sun>=19 0:00 0 - +-Rule Falk 1939 only - Oct 1 0:00 1:00 S +-Rule Falk 1940 1942 - Sep lastSun 0:00 1:00 S ++Rule Falk 1939 only - Oct 1 0:00 1:00 - ++Rule Falk 1940 1942 - Sep lastSun 0:00 1:00 - + Rule Falk 1943 only - Jan 1 0:00 0 - +-Rule Falk 1983 only - Sep lastSun 0:00 1:00 S ++Rule Falk 1983 only - Sep lastSun 0:00 1:00 - + Rule Falk 1984 1985 - Apr lastSun 0:00 0 - +-Rule Falk 1984 only - Sep 16 0:00 1:00 S +-Rule Falk 1985 2000 - Sep Sun>=9 0:00 1:00 S ++Rule Falk 1984 only - Sep 16 0:00 1:00 - ++Rule Falk 1985 2000 - Sep Sun>=9 0:00 1:00 - + Rule Falk 1986 2000 - Apr Sun>=16 0:00 0 - + Rule Falk 2001 2010 - Apr Sun>=15 2:00 0 - +-Rule Falk 2001 2010 - Sep Sun>=1 2:00 1:00 S ++Rule Falk 2001 2010 - Sep Sun>=1 2:00 1:00 - + # Zone NAME GMTOFF RULES FORMAT [UNTIL] + Zone Atlantic/Stanley -3:51:24 - LMT 1890 + -3:51:24 - SMT 1912 Mar 12 # Stanley Mean Time +@@ -1554,16 +1553,16 @@ + # adjust their clocks at 0 hour of the given dates. + # + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +-Rule Para 1975 1988 - Oct 1 0:00 1:00 S ++Rule Para 1975 1988 - Oct 1 0:00 1:00 - + Rule Para 1975 1978 - Mar 1 0:00 0 - + Rule Para 1979 1991 - Apr 1 0:00 0 - +-Rule Para 1989 only - Oct 22 0:00 1:00 S +-Rule Para 1990 only - Oct 1 0:00 1:00 S +-Rule Para 1991 only - Oct 6 0:00 1:00 S ++Rule Para 1989 only - Oct 22 0:00 1:00 - ++Rule Para 1990 only - Oct 1 0:00 1:00 - ++Rule Para 1991 only - Oct 6 0:00 1:00 - + Rule Para 1992 only - Mar 1 0:00 0 - +-Rule Para 1992 only - Oct 5 0:00 1:00 S ++Rule Para 1992 only - Oct 5 0:00 1:00 - + Rule Para 1993 only - Mar 31 0:00 0 - +-Rule Para 1993 1995 - Oct 1 0:00 1:00 S ++Rule Para 1993 1995 - Oct 1 0:00 1:00 - + Rule Para 1994 1995 - Feb lastSun 0:00 0 - + Rule Para 1996 only - Mar 1 0:00 0 - + # IATA SSIM (2000-02) says 1999-10-10; ignore this for now. +@@ -1581,7 +1580,7 @@ + # year, the time will change on the first Sunday of October; likewise, the + # clock will be set back on the first Sunday of March. + # +-Rule Para 1996 2001 - Oct Sun>=1 0:00 1:00 S ++Rule Para 1996 2001 - Oct Sun>=1 0:00 1:00 - + # IATA SSIM (1997-09) says Mar 1; go with Shanks & Pottenger. + Rule Para 1997 only - Feb lastSun 0:00 0 - + # Shanks & Pottenger say 1999-02-28; IATA SSIM (1999-02) says 1999-02-27, but +@@ -1592,7 +1591,7 @@ + # dst method to be from the first Sunday in September to the first Sunday in + # April. + Rule Para 2002 2004 - Apr Sun>=1 0:00 0 - +-Rule Para 2002 2003 - Sep Sun>=1 0:00 1:00 S ++Rule Para 2002 2003 - Sep Sun>=1 0:00 1:00 - + # + # From Jesper Nørgaard Welen (2005-01-02): + # There are several sources that claim that Paraguay made +@@ -1601,7 +1600,7 @@ + # Decree 1,867 (2004-03-05) + # From Carlos Raúl Perasso via Jesper Nørgaard Welen (2006-10-13) + # http://www.presidencia.gov.py/decretos/D1867.pdf +-Rule Para 2004 2009 - Oct Sun>=15 0:00 1:00 S ++Rule Para 2004 2009 - Oct Sun>=15 0:00 1:00 - + Rule Para 2005 2009 - Mar Sun>=8 0:00 0 - + # From Carlos Raúl Perasso (2010-02-18): + # By decree number 3958 issued yesterday +@@ -1614,7 +1613,7 @@ + # 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 S ++Rule Para 2010 max - Oct Sun>=1 0:00 1:00 - + Rule Para 2010 2012 - Apr Sun>=8 0:00 0 - + # + # From Steffen Thorsen (2013-03-07): +@@ -1647,16 +1646,16 @@ + # Shanks & Pottenger don't have this transition. Assume 1986 was like 1987. + + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +-Rule Peru 1938 only - Jan 1 0:00 1:00 S ++Rule Peru 1938 only - Jan 1 0:00 1:00 - + Rule Peru 1938 only - Apr 1 0:00 0 - +-Rule Peru 1938 1939 - Sep lastSun 0:00 1:00 S ++Rule Peru 1938 1939 - Sep lastSun 0:00 1:00 - + Rule Peru 1939 1940 - Mar Sun>=24 0:00 0 - +-Rule Peru 1986 1987 - Jan 1 0:00 1:00 S ++Rule Peru 1986 1987 - Jan 1 0:00 1:00 - + Rule Peru 1986 1987 - Apr 1 0:00 0 - +-Rule Peru 1990 only - Jan 1 0:00 1:00 S ++Rule Peru 1990 only - Jan 1 0:00 1:00 - + Rule Peru 1990 only - Apr 1 0:00 0 - + # IATA is ambiguous for 1993/1995; go with Shanks & Pottenger. +-Rule Peru 1994 only - Jan 1 0:00 1:00 S ++Rule Peru 1994 only - Jan 1 0:00 1:00 - + Rule Peru 1994 only - Apr 1 0:00 0 - + # Zone NAME GMTOFF RULES FORMAT [UNTIL] + Zone America/Lima -5:08:12 - LMT 1890 +@@ -1702,72 +1701,201 @@ + # Uruguay + # From Paul Eggert (1993-11-18): + # Uruguay wins the prize for the strangest peacetime manipulation of the rules. +-# From Shanks & Pottenger: ++# ++# From Tim Parenti (2018-02-20), per Jeremie Bonjour (2018-01-31) and Michael ++# Deckers (2018-02-20): ++# ... At least they kept good records... ++# ++# http://www.armada.mil.uy/ContenidosPDFs/sohma/web/almanaque/almanaque_2018.pdf#page=36 ++# Page 36 of Almanaque 2018, published by the Oceanography, Hydrography, and ++# Meteorology Service of the Uruguayan Navy, seems to give many transitions ++# with greater clarity than we've had before. It directly references many laws ++# and decrees which are, in turn, referenced below. They can be viewed in the ++# public archives of the Diario Oficial (in Spanish) at ++# http://www.impo.com.uy/diariooficial/ ++# ++# Ley No. 3920 of 1908-06-10 placed the determination of legal time under the ++# auspices of the National Institute for the Prediction of Time. It is unclear ++# exactly what offset was used during this period, though Ley No. 7200 of ++# 1920-04-23 used the Observatory of the National Meteorological Institute in ++# Montevideo (34° 54' 33" S, 56° 12' 45" W) as its reference meridian, ++# retarding legal time by 15 minutes 9 seconds from 1920-04-30 24:00, ++# resulting in UT-04. Assume the corresponding LMT of UT-03:44:51 (given on ++# page 725 of the Proceedings of the Second Pan-American Scientific Congress, ++# 1915-1916) was in use, and merely became official from 1908-06-10. ++# https://www.impo.com.uy/diariooficial/1908/06/18/12 ++# https://www.impo.com.uy/diariooficial/1920/04/27/9 ++# ++# Ley No. 7594 of 1923-06-28 specified legal time as Observatory time advanced ++# by 44 minutes 51 seconds (UT-03) "from 30 September to 31 March", and by 14 ++# minutes 51 seconds (UT-03:30) "the rest of the year"; a message from the ++# National Council of Administration the same day, published directly below the ++# law in the Diario Oficial, specified the first transition to be 1923-09-30 ++# 24:00. This effectively established standard time at UT-03:30 with 30 ++# minutes DST. Assume transitions at 24:00 on the specified days until Ley No. ++# 7919 of 1926-03-05 ended this arrangement, repealing all "laws and other ++# provisions which oppose" it, resulting in year-round UT-03:30; a Resolución ++# of 1926-03-11 puts the final transition at 1926-03-31 24:00, the same as it ++# would have been under the previous law. ++# https://www.impo.com.uy/diariooficial/1923/07/02/2 ++# https://www.impo.com.uy/diariooficial/1926/03/10/2 ++# https://www.impo.com.uy/diariooficial/1926/03/18/2 ++# + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +-# Whitman gives 1923 Oct 1; go with Shanks & Pottenger. +-Rule Uruguay 1923 only - Oct 2 0:00 0:30 HS ++Rule Uruguay 1923 1925 - Oct 1 0:00 0:30 - + Rule Uruguay 1924 1926 - Apr 1 0:00 0 - +-Rule Uruguay 1924 1925 - Oct 1 0:00 0:30 HS +-Rule Uruguay 1933 1935 - Oct lastSun 0:00 0:30 HS +-# Shanks & Pottenger give 1935 Apr 1 0:00 & 1936 Mar 30 0:00; go with Whitman. +-Rule Uruguay 1934 1936 - Mar Sat>=25 23:30s 0 - +-Rule Uruguay 1936 only - Nov 1 0:00 0:30 HS +-Rule Uruguay 1937 1941 - Mar lastSun 0:00 0 - +-# Whitman gives 1937 Oct 3; go with Shanks & Pottenger. +-Rule Uruguay 1937 1940 - Oct lastSun 0:00 0:30 HS +-# Whitman gives 1941 Oct 24 - 1942 Mar 27, 1942 Dec 14 - 1943 Apr 13, +-# and 1943 Apr 13 "to present time"; go with Shanks & Pottenger. +-Rule Uruguay 1941 only - Aug 1 0:00 0:30 HS +-Rule Uruguay 1942 only - Jan 1 0:00 0 - +-Rule Uruguay 1942 only - Dec 14 0:00 1:00 S ++# From Tim Parenti (2018-02-15): ++# http://www.impo.com.uy/diariooficial/1933/10/27/6 ++# ++# It appears Ley No. 9122 of 1933 was never published as such in the Diario ++# Oficial, but instead appeared as Document 26 in the Diario on Friday ++# 1933-10-27 as a decree made Monday 1933-10-23 and filed under the Ministry of ++# National Defense. It reinstituted a DST of 30 minutes (to UT-03) "from the ++# last Sunday of October...until the last Saturday of March." In accordance ++# with this provision, the first transition was explicitly specified in Article ++# 2 of the decree as Saturday 1933-10-28 at 24:00; that is, Sunday 1933-10-29 ++# at 00:00. Assume transitions at 00:00 Sunday throughout. ++# ++# Departing from the matter-of-fact nature of previous timekeeping laws, the ++# 1933 decree "consider[s] the advantages of...the advance of legal time": ++# ++# "Whereas: The measure adopted by almost all nations at the time of the last ++# World War still persists in North America and Europe, precisely because of ++# the economic, hygienic, and social advantages derived from such an ++# emergency measure... ++# ++# Whereas: The advance of the legal time during the summer seasons, by ++# displacing social activity near sunrise, favors the citizen populations ++# and especially the society that creates and works..." ++# ++# It further specified that "necessary measures" be taken to ensure that ++# "public spectacles finish, in general, before [01:00]." ++Rule Uruguay 1933 1938 - Oct lastSun 0:00 0:30 - ++Rule Uruguay 1934 1941 - Mar lastSat 24:00 0 - ++# From Tim Parenti (2018-02-15): ++# Most of the Rules below, and their contemporaneous Zone lines, have been ++# updated simply to match the Almanaque 2018. Although the document does not ++# list exact transition times, midnight transitions were already present in our ++# data here for all transitions through 2004-09, and this is both consistent ++# with prior transitions and verified in several decrees marked below between ++# 1939-09 and 2004-09, wherein the relevant text was typically of the form: ++# ++# "From 0 hours on [date], the legal time of the entire Republic will be... ++# ++# In accordance with [the preceding], on [previous date] at 24 hours, all ++# clocks throughout the Republic will be [advanced/retarded] by..." ++# ++# It is possible that there is greater specificity to be found for the Rules ++# below, but it is buried in no fewer than 40 different decrees individually ++# referenced by the Almanaque for the period from 1939-09 to 2014-09. ++# Four-fifths of these were promulgated less than two weeks before taking ++# effect; more than half within a week and none more than 5 weeks. Only the ++# handful with comments below have been checked with any thoroughness. ++Rule Uruguay 1939 only - Oct 1 0:00 0:30 - ++Rule Uruguay 1940 only - Oct 27 0:00 0:30 - ++# From Tim Parenti (2018-02-15): ++# Decreto 1145 of the Ministry of National Defense, dated 1941-07-26, specified ++# UT-03 from Friday 1941-08-01 00:00, citing an "urgent...need to save fuel". ++# http://www.impo.com.uy/diariooficial/1941/08/04/1 ++Rule Uruguay 1941 only - Aug 1 0:00 0:30 - ++# From Tim Parenti (2018-02-15): ++# Decreto 1866 of the Ministry of National Defense, dated 1942-12-09, specified ++# further advancement (to UT-02:30) from Sunday 1942-12-13 24:00. Since clocks ++# never went back to UT-03:30 thereafter, this is modeled as advancing standard ++# time by 30 minutes to UT-03, while retaining 30 minutes of DST. ++# http://www.impo.com.uy/diariooficial/1942/12/16/3 ++Rule Uruguay 1942 only - Dec 14 0:00 0:30 - + Rule Uruguay 1943 only - Mar 14 0:00 0 - +-Rule Uruguay 1959 only - May 24 0:00 1:00 S ++Rule Uruguay 1959 only - May 24 0:00 0:30 - + Rule Uruguay 1959 only - Nov 15 0:00 0 - +-Rule Uruguay 1960 only - Jan 17 0:00 1:00 S ++Rule Uruguay 1960 only - Jan 17 0:00 1:00 - + Rule Uruguay 1960 only - Mar 6 0:00 0 - +-Rule Uruguay 1965 1967 - Apr Sun>=1 0:00 1:00 S ++Rule Uruguay 1965 only - Apr 4 0:00 1:00 - + Rule Uruguay 1965 only - Sep 26 0:00 0 - +-Rule Uruguay 1966 1967 - Oct 31 0:00 0 - +-Rule Uruguay 1968 1970 - May 27 0:00 0:30 HS +-Rule Uruguay 1968 1970 - Dec 2 0:00 0 - +-Rule Uruguay 1972 only - Apr 24 0:00 1:00 S +-Rule Uruguay 1972 only - Aug 15 0:00 0 - +-Rule Uruguay 1974 only - Mar 10 0:00 0:30 HS +-Rule Uruguay 1974 only - Dec 22 0:00 1:00 S +-Rule Uruguay 1976 only - Oct 1 0:00 0 - +-Rule Uruguay 1977 only - Dec 4 0:00 1:00 S +-Rule Uruguay 1978 only - Apr 1 0:00 0 - +-Rule Uruguay 1979 only - Oct 1 0:00 1:00 S +-Rule Uruguay 1980 only - May 1 0:00 0 - +-Rule Uruguay 1987 only - Dec 14 0:00 1:00 S +-Rule Uruguay 1988 only - Mar 14 0:00 0 - +-Rule Uruguay 1988 only - Dec 11 0:00 1:00 S +-Rule Uruguay 1989 only - Mar 12 0:00 0 - +-Rule Uruguay 1989 only - Oct 29 0:00 1:00 S +-# Shanks & Pottenger say no DST was observed in 1990/1 and 1991/2, +-# and that 1992/3's DST was from 10-25 to 03-01. Go with IATA. +-Rule Uruguay 1990 1992 - Mar Sun>=1 0:00 0 - +-Rule Uruguay 1990 1991 - Oct Sun>=21 0:00 1:00 S +-Rule Uruguay 1992 only - Oct 18 0:00 1:00 S ++# From Tim Parenti (2018-02-15): ++# Decreto 321/968 of 1968-05-25, citing emergency drought measures decreed the ++# day before, brought clocks forward 30 minutes from Monday 1968-05-27 00:00. ++# http://www.impo.com.uy/diariooficial/1968/05/30/5 ++Rule Uruguay 1968 only - May 27 0:00 0:30 - ++Rule Uruguay 1968 only - Dec 1 0:00 0 - ++# From Tim Parenti (2018-02-15): ++# Decreto 188/970 of 1970-04-23 instituted restrictions on electricity ++# consumption "as a consequence of the current rainfall regime in the country". ++# Articles 13 and 14 advanced clocks by an hour from Saturday 1970-04-25 00:00. ++# http://www.impo.com.uy/diariooficial/1970/04/29/4 ++Rule Uruguay 1970 only - Apr 25 0:00 1:00 - ++Rule Uruguay 1970 only - Jun 14 0:00 0 - ++Rule Uruguay 1972 only - Apr 23 0:00 1:00 - ++Rule Uruguay 1972 only - Jul 16 0:00 0 - ++# From Tim Parenti (2018-02-15): ++# Decreto 29/974 of 1974-01-11, citing "the international rise in the price of ++# oil", advanced clocks by 90 minutes (to UT-01:30). Decreto 163/974 of ++# 1974-03-04 returned 60 of those minutes (to UT-02:30), and the remaining 30 ++# minutes followed in Decreto 679/974 of 1974-08-29. ++# http://www.impo.com.uy/diariooficial/1974/01/22/11 ++# http://www.impo.com.uy/diariooficial/1974/03/14/3 ++# http://www.impo.com.uy/diariooficial/1974/09/04/6 ++Rule Uruguay 1974 only - Jan 13 0:00 1:30 - ++Rule Uruguay 1974 only - Mar 10 0:00 0:30 - ++Rule Uruguay 1974 only - Sep 1 0:00 0 - ++Rule Uruguay 1974 only - Dec 22 0:00 1:00 - ++Rule Uruguay 1975 only - Mar 30 0:00 0 - ++Rule Uruguay 1976 only - Dec 19 0:00 1:00 - ++Rule Uruguay 1977 only - Mar 6 0:00 0 - ++Rule Uruguay 1977 only - Dec 4 0:00 1:00 - ++Rule Uruguay 1978 1979 - Mar Sun>=1 0:00 0 - ++Rule Uruguay 1978 only - Dec 17 0:00 1:00 - ++Rule Uruguay 1979 only - Apr 29 0:00 1:00 - ++Rule Uruguay 1980 only - Mar 16 0:00 0 - ++# From Tim Parenti (2018-02-15): ++# Decreto 725/987 of 1987-12-04 cited "better use of national tourist ++# attractions" to advance clocks one hour from Monday 1987-12-14 00:00. ++# http://www.impo.com.uy/diariooficial/1988/01/25/1 ++Rule Uruguay 1987 only - Dec 14 0:00 1:00 - ++Rule Uruguay 1988 only - Feb 28 0:00 0 - ++Rule Uruguay 1988 only - Dec 11 0:00 1:00 - ++Rule Uruguay 1989 only - Mar 5 0:00 0 - ++Rule Uruguay 1989 only - Oct 29 0:00 1:00 - ++Rule Uruguay 1990 only - Feb 25 0:00 0 - ++# From Tim Parenti (2018-02-15), per Paul Eggert (1999-11-04): ++# IATA agrees as below for 1990-10 through 1993-02. Per Almanaque 2018, the ++# 1992/1993 season appears to be the first in over half a century where DST ++# both began and ended pursuant to the same decree. ++Rule Uruguay 1990 1991 - Oct Sun>=21 0:00 1:00 - ++Rule Uruguay 1991 1992 - Mar Sun>=1 0:00 0 - ++Rule Uruguay 1992 only - Oct 18 0:00 1:00 - + Rule Uruguay 1993 only - Feb 28 0:00 0 - + # From Eduardo Cota (2004-09-20): + # The Uruguayan government has decreed a change in the local time.... +-# http://www.presidencia.gub.uy/decretos/2004091502.htm +-Rule Uruguay 2004 only - Sep 19 0:00 1:00 S ++# From Tim Parenti (2018-02-15): ++# Decreto 328/004 of 2004-09-15. ++# http://www.impo.com.uy/diariooficial/2004/09/23/documentos.pdf#page=1 ++Rule Uruguay 2004 only - Sep 19 0:00 1:00 - + # From Steffen Thorsen (2005-03-11): + # Uruguay's DST was scheduled to end on Sunday, 2005-03-13, but in order to + # save energy ... it was postponed two weeks.... +-# http://www.presidencia.gub.uy/_Web/noticias/2005/03/2005031005.htm ++# From Tim Parenti (2018-02-15): ++# This 2005 postponement is not in Almanaque 2018. Go with the contemporaneous ++# reporting, which is confirmed by Decreto 107/005 of 2005-03-10 amending ++# Decreto 328/004: ++# http://www.impo.com.uy/diariooficial/2005/03/15/documentos.pdf#page=1 ++# The original decree specified a transition of 2005-03-12 24:00, but the new ++# one specified 2005-03-27 02:00. + Rule Uruguay 2005 only - Mar 27 2:00 0 - + # From Eduardo Cota (2005-09-27): +-# http://www.presidencia.gub.uy/_Web/decretos/2005/09/CM%20119_09%2009%202005_00001.PDF +-# This means that from 2005-10-09 at 02:00 local time, until 2006-03-12 at +-# 02:00 local time, official time in Uruguay will be at GMT -2. +-Rule Uruguay 2005 only - Oct 9 2:00 1:00 S +-Rule Uruguay 2006 only - Mar 12 2:00 0 - +-# From Jesper Nørgaard Welen (2006-09-06): +-# http://www.presidencia.gub.uy/_web/decretos/2006/09/CM%20210_08%2006%202006_00001.PDF +-# ++# ...from 2005-10-09 at 02:00 local time, until 2006-03-12 at 02:00 local time, ++# official time in Uruguay will be at GMT -2. ++# From Tim Parenti (2018-02-15): ++# Decreto 318/005 of 2005-09-19. ++# http://www.impo.com.uy/diariooficial/2005/09/23/documentos.pdf#page=1 ++Rule Uruguay 2005 only - Oct 9 2:00 1:00 - ++Rule Uruguay 2006 2015 - Mar Sun>=8 2:00 0 - ++# From Tim Parenti (2018-02-15), per Jesper Nørgaard Welen (2006-09-06): ++# Decreto 311/006 of 2006-09-04 established regular DST from the first Sunday ++# of October at 02:00 through the second Sunday of March at 02:00. Almanaque ++# 2018 appears to have a few typoed dates through this period; ignore them. ++# http://www.impo.com.uy/diariooficial/2006/09/08/documentos.pdf#page=1 ++Rule Uruguay 2006 2014 - Oct Sun>=1 2:00 1:00 - + # From Steffen Thorsen (2015-06-30): + # ... it looks like they will not be using DST the coming summer: + # http://www.elobservador.com.uy/gobierno-resolvio-que-no-habra-cambio-horario-verano-n656787 +@@ -1777,17 +1905,19 @@ + # instead of out to dinner. + # From Pablo Camargo (2015-07-13): + # http://archivo.presidencia.gub.uy/sci/decretos/2015/06/cons_min_201.pdf +-# [dated 2015-06-29; repeals Decree 311/006 dated 2006-09-04] +-Rule Uruguay 2006 2014 - Oct Sun>=1 2:00 1:00 S +-Rule Uruguay 2007 2015 - Mar Sun>=8 2:00 0 - ++# From Tim Parenti (2018-02-15): ++# Decreto 178/015 of 2015-06-29; repeals Decreto 311/006. + + # This Zone can be simplified once we assume zic %z. +-Zone America/Montevideo -3:44:44 - LMT 1898 Jun 28 +- -3:44:44 - MMT 1920 May 1 # Montevideo MT ++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 1971 ++ -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 + +--- icedtea-3.8.0/openjdk/jdk/test/sun/util/calendar/zi/tzdata/VERSION 2018-09-18 10:22:19.807039690 +0200 ++++ icedtea-3.8.0/openjdk/jdk/test/sun/util/calendar/zi/tzdata/VERSION 2018-09-18 10:25:01.675921189 +0200 +@@ -21,4 +21,4 @@ + # or visit www.oracle.com if you need additional information or have any + # questions. + # +-tzdata2018c ++tzdata2018d +--- icedtea-3.8.0/openjdk/jdk/test/sun/util/calendar/zi/tzdata/zone.tab 2018-09-18 10:22:19.811039711 +0200 ++++ icedtea-3.8.0/openjdk/jdk/test/sun/util/calendar/zi/tzdata/zone.tab 2018-09-18 10:25:01.679921211 +0200 +@@ -452,7 +452,7 @@ + US +643004-1652423 America/Nome Alaska (west) + US +515248-1763929 America/Adak Aleutian Islands + US +211825-1575130 Pacific/Honolulu Hawaii +-UY -3453-05611 America/Montevideo ++UY -345433-0561245 America/Montevideo + UZ +3940+06648 Asia/Samarkand Uzbekistan (west) + UZ +4120+06918 Asia/Tashkent Uzbekistan (east) + VA +415408+0122711 Europe/Vatican diff --git a/8200666.patch b/8200666.patch new file mode 100644 index 0000000..8cc41c8 --- /dev/null +++ b/8200666.patch @@ -0,0 +1,80 @@ +--- icedtea-3.8.0/openjdk/jdk/src/share/classes/com/sun/jndi/ldap/Connection.java 2018-09-18 10:25:46.640166044 +0200 ++++ icedtea-3.8.0/openjdk/jdk/src/share/classes/com/sun/jndi/ldap/Connection.java 2018-09-18 10:26:40.104457189 +0200 +@@ -27,26 +27,27 @@ + + import java.io.BufferedInputStream; + import java.io.BufferedOutputStream; +-import java.io.InterruptedIOException; + import java.io.IOException; +-import java.io.OutputStream; + import java.io.InputStream; ++import java.io.InterruptedIOException; ++import java.io.OutputStream; ++import java.lang.reflect.Constructor; ++import java.lang.reflect.InvocationTargetException; ++import java.lang.reflect.Method; + import java.net.Socket; +-import javax.net.ssl.SSLSocket; ++import java.security.AccessController; ++import java.security.PrivilegedAction; ++import java.util.Arrays; + + import javax.naming.CommunicationException; +-import javax.naming.ServiceUnavailableException; +-import javax.naming.NamingException; + import javax.naming.InterruptedNamingException; +- ++import javax.naming.NamingException; ++import javax.naming.ServiceUnavailableException; + import javax.naming.ldap.Control; ++import javax.net.ssl.SSLParameters; ++import javax.net.ssl.SSLSocket; + +-import java.lang.reflect.Method; +-import java.lang.reflect.Constructor; +-import java.lang.reflect.InvocationTargetException; +-import java.util.Arrays; + import sun.misc.IOUtils; +-//import javax.net.SocketFactory; + + /** + * A thread that creates a connection to an LDAP server. +@@ -159,7 +160,18 @@ + + int readTimeout; + int connectTimeout; ++ private static final boolean IS_HOSTNAME_VERIFICATION_DISABLED ++ = hostnameVerificationDisabledValue(); + ++ private static boolean hostnameVerificationDisabledValue() { ++ PrivilegedAction act = () -> System.getProperty( ++ "com.sun.jndi.ldap.object.disableEndpointIdentification"); ++ String prop = AccessController.doPrivileged(act); ++ if (prop == null) { ++ return false; ++ } ++ return prop.isEmpty() ? true : Boolean.parseBoolean(prop); ++ } + // true means v3; false means v2 + // Called in LdapClient.authenticate() (which is synchronized) + // when connection is "quiet" and not shared; no need to synchronize +@@ -368,11 +380,17 @@ + // the SSL handshake following socket connection as part of the timeout. + // So explicitly set a socket read timeout, trigger the SSL handshake, + // then reset the timeout. +- if (connectTimeout > 0 && socket instanceof SSLSocket) { ++ if (socket instanceof SSLSocket) { + SSLSocket sslSocket = (SSLSocket) socket; + int socketTimeout = sslSocket.getSoTimeout(); +- ++ if (!IS_HOSTNAME_VERIFICATION_DISABLED) { ++ SSLParameters param = sslSocket.getSSLParameters(); ++ param.setEndpointIdentificationAlgorithm("LDAPS"); ++ sslSocket.setSSLParameters(param); ++ } ++ if (connectTimeout > 0) { + sslSocket.setSoTimeout(connectTimeout); // reuse full timeout value ++ } + sslSocket.startHandshake(); + sslSocket.setSoTimeout(socketTimeout); + } diff --git a/8201433.patch b/8201433.patch new file mode 100644 index 0000000..7df8449 --- /dev/null +++ b/8201433.patch @@ -0,0 +1,101 @@ +--- icedtea-3.8.0/openjdk/jdk/src/share/native/sun/awt/image/BufImgSurfaceData.c 2018-09-18 10:25:46.856167220 +0200 ++++ icedtea-3.8.0/openjdk/jdk/src/share/native/sun/awt/image/BufImgSurfaceData.c 2018-09-18 10:28:49.249143807 +0200 +@@ -298,6 +298,10 @@ + } + + cData->img_clr_tbl = initCubemap(pRgb, bisdo->lutsize, 32); ++ if (cData->img_clr_tbl == NULL) { ++ free(cData); ++ return (ColorData*)NULL; ++ } + if (allGray == JNI_TRUE) { + initInverseGrayLut(pRgb, bisdo->lutsize, cData); + } +--- /dev/null Thu Jan 01 00:00:00 1970 +0000 ++++ icedtea-3.8.0/openjdk/jdk/test/java/awt/image/BufferedImage/ICMColorDataTest/ICMColorDataTest.java Tue Apr 24 11:23:34 2018 +0100 +@@ -0,0 +1,85 @@ ++/* ++ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. ++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. ++ * ++ * This code is free software; you can redistribute it and/or modify it ++ * under the terms of the GNU General Public License version 2 only, as ++ * published by the Free Software Foundation. ++ * ++ * This code is distributed in the hope that it will be useful, but WITHOUT ++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or ++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ++ * version 2 for more details (a copy is included in the LICENSE file that ++ * accompanied this code). ++ * ++ * You should have received a copy of the GNU General Public License version ++ * 2 along with this work; if not, write to the Free Software Foundation, ++ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. ++ * ++ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA ++ * or visit www.oracle.com if you need additional information or have any ++ * questions. ++ */ ++ ++import java.awt.Graphics; ++import java.awt.image.BufferedImage; ++import java.awt.image.DataBuffer; ++import java.awt.image.DataBufferByte; ++import java.awt.image.IndexColorModel; ++import java.awt.image.MultiPixelPackedSampleModel; ++import java.awt.image.Raster; ++import java.awt.image.SampleModel; ++import java.awt.image.WritableRaster; ++ ++/* ++ * @test ++ * @bug 8201433 ++ * @summary This test may throw OOME or NPE from native code, ++ * it should not crash ++ * @requires os.maxMemory >= 2G ++ * @run main/othervm/timeout=300000 -Xms1000m -Xmx1000m ICMColorDataTest ++ */ ++public class ICMColorDataTest { ++ private static final int WIDTH = 90; ++ private static final int HEIGHT = 90; ++ private static final int BITS_PER_PIXEL = 1; ++ private static final int PIXELS_IN_BYTE = 8; ++ ++ // Color model components ++ private static final byte[] RED = { (byte) 255, 0 }; ++ private static final byte[] GREEN = { (byte) 255, 0 }; ++ private static final byte[] BLUE = { (byte) 255, 0 }; ++ ++ public static void main(String[] args) { ++ try { ++ for (long i = 0; i < 300_000; i++) { ++ makeImage(); ++ } ++ } catch (OutOfMemoryError | NullPointerException e) { ++ System.err.println("Caught expected exception:\n" + ++ e.getClass() + ": " + e.getMessage()); ++ } ++ System.err.println("Test passed"); ++ } ++ ++ private static void makeImage() { ++ int scanLineBytes = WIDTH / PIXELS_IN_BYTE; ++ if ((WIDTH & (PIXELS_IN_BYTE - 1)) != 0) { ++ // Make sure all the pixels in a scan line fit ++ scanLineBytes += 1; ++ } ++ ++ byte[] bits = new byte[scanLineBytes * HEIGHT]; ++ DataBuffer dataBuf = new DataBufferByte(bits, bits.length, 0); ++ SampleModel sampleModel = new MultiPixelPackedSampleModel(DataBuffer.TYPE_BYTE, ++ WIDTH, HEIGHT, BITS_PER_PIXEL); ++ WritableRaster raster = Raster.createWritableRaster(sampleModel, dataBuf, null); ++ IndexColorModel indexModel = new IndexColorModel(2, 2, RED, GREEN, BLUE); ++ BufferedImage bufImage = new BufferedImage(indexModel, raster, ++ indexModel.isAlphaPremultiplied(), null); ++ ++ Graphics g = bufImage.getGraphics(); ++ g.drawRect(0, 0, WIDTH - 1, HEIGHT - 1); ++ g.dispose(); ++ } ++} diff --git a/8202585.patch b/8202585.patch new file mode 100644 index 0000000..52b2979 --- /dev/null +++ b/8202585.patch @@ -0,0 +1,183 @@ +--- icedtea-3.8.0/openjdk/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_de.java 2018-09-18 10:29:31.481367749 +0200 ++++ icedtea-3.8.0/openjdk/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_de.java 2018-09-18 10:30:36.733713763 +0200 +@@ -254,7 +254,7 @@ + * text. + */ + {ErrorMsg.ILLEGAL_ATTRIBUTE_ERR, +- "Ung\u00FCltiges Attribut \"{0}\"."}, ++ "Unzul\u00E4ssiges Attribut \"{0}\"."}, + + /* + * Note to translators: "import" and "include" are keywords that should +@@ -307,7 +307,7 @@ + * function has too many or too few arguments. + */ + {ErrorMsg.ILLEGAL_ARG_ERR, +- "Ung\u00FCltige Argumente f\u00FCr Funktionsaufruf."}, ++ "Unzul\u00E4ssige Argumente f\u00FCr Funktionsaufruf."}, + + /* + * Note to translators: "document()" is the name of function and must +--- icedtea-3.8.0/openjdk/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/DOMMessages_de.properties 2018-09-18 10:29:31.493367812 +0200 ++++ icedtea-3.8.0/openjdk/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/DOMMessages_de.properties 2018-09-18 10:30:36.733713763 +0200 +@@ -15,7 +15,7 @@ + INDEX_SIZE_ERR = Index oder Gr\u00F6\u00DFe ist negativ oder gr\u00F6\u00DFer als der zul\u00E4ssige Wert. + INUSE_ATTRIBUTE_ERR = Es wurde versucht, ein Attribut hinzuzuf\u00FCgen, das bereits an einer anderen Stelle verwendet wird. + INVALID_ACCESS_ERR = Ein Parameter oder Vorgang wird nicht vom zugrunde liegenden Objekt unterst\u00FCtzt. +-INVALID_CHARACTER_ERR = Ung\u00FCltiges XML-Zeichen angegeben. ++INVALID_CHARACTER_ERR = Ung\u00FCltiges oder unzul\u00E4ssiges XML-Zeichen angegeben. + INVALID_MODIFICATION_ERR = Es wurde versucht, den Typ des zugrunde liegenden Objekts zu \u00E4ndern. + INVALID_STATE_ERR = Es wurde versucht, ein Objekt zu \u00E4ndern, das nicht verwendet werden kann. + NAMESPACE_ERR = Es wurde versucht, ein Objekt auf eine Weise zu erstellen oder zu \u00E4ndern, die falsch in Bezug auf Namespaces ist. +@@ -23,7 +23,7 @@ + NOT_SUPPORTED_ERR = Der angeforderte Typ des Objekts oder Vorgangs wird nicht von der Implementierung unterst\u00FCtzt. + NO_DATA_ALLOWED_ERR = Daten wurden f\u00FCr einen Knoten angegeben, der keine Daten unterst\u00FCtzt. + NO_MODIFICATION_ALLOWED_ERR = Es wurde versucht, ein Objekt zu \u00E4ndern, bei dem \u00C4nderungen nicht zul\u00E4ssig sind. +-SYNTAX_ERR = Ung\u00FCltige Zeichenfolge angegeben. ++SYNTAX_ERR = Ung\u00FCltige oder unzul\u00E4ssige Zeichenfolge angegeben. + VALIDATION_ERR = Aufruf einer Methode wie insertBefore oder removeChild w\u00FCrde die Dokumentgrammatik des Knotens ung\u00FCltig machen. + WRONG_DOCUMENT_ERR = Ein Knoten wird in einem anderen Dokument verwendet als dem, von dem er erstellt wurde. + TYPE_MISMATCH_ERR = Der Werttyp f\u00FCr diesen Parameternamen ist nicht mit dem erwarteten Werttyp kompatibel. +--- icedtea-3.8.0/openjdk/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_de.properties 2018-09-18 10:29:31.493367812 +0200 ++++ icedtea-3.8.0/openjdk/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_de.properties 2018-09-18 10:30:36.733713763 +0200 +@@ -123,7 +123,7 @@ + InvalidHighSurrogate = High-Surrogate-Bits in UTF-8-Sequenz d\u00FCrfen 0x10 nicht \u00FCberschreiten, gefunden wurde aber 0x{0}. + OperationNotSupported = Vorgang "{0}" nicht unterst\u00FCtzt von {1}-Reader. + InvalidASCII = Byte "{0}" geh\u00F6rt nicht zum (7-Bit) ASCII-Zeichensatz. +- CharConversionFailure = Eine Entity, f\u00FCr die eine bestimmte Codierung ermittelt wurde, darf keine Sequenzen enthalten, die in dieser Codierung ung\u00FCltig sind. ++ CharConversionFailure = Eine Entity, f\u00FCr die eine bestimmte Codierung ermittelt wurde, darf keine Sequenzen enthalten, die in dieser Codierung unzul\u00E4ssig sind. + + # DTD Messages + # 2.2 Characters +--- icedtea-3.8.0/openjdk/jaxp/src/com/sun/org/apache/xpath/internal/res/XPATHErrorResources_de.java 2018-09-18 10:29:31.509367897 +0200 ++++ icedtea-3.8.0/openjdk/jaxp/src/com/sun/org/apache/xpath/internal/res/XPATHErrorResources_de.java 2018-09-18 10:30:36.737713783 +0200 +@@ -429,7 +429,7 @@ + "ERROR. Unbekannter Vorgangscode: {0}"}, + + { ER_EXTRA_ILLEGAL_TOKENS, +- "Zus\u00E4tzliche ung\u00FCltige Tokens: {0}"}, ++ "Zus\u00E4tzliche unzul\u00E4ssige Tokens: {0}"}, + + { ER_EXPECTED_DOUBLE_QUOTE, + "Literal in falschen Anf\u00FChrungszeichen... Doppelte Anf\u00FChrungszeichen erwartet."}, +@@ -456,10 +456,10 @@ + "\",\" gefunden, aber kein folgendes Argument vorhanden."}, + + { ER_PREDICATE_ILLEGAL_SYNTAX, +- "\"..[predicate]\" oder \".[predicate]\" ist ung\u00FCltige Syntax. Verwenden Sie stattdessen \"self::node()[predicate]\"."}, ++ "\"..[predicate]\" oder \".[predicate]\" ist unzul\u00E4ssige Syntax. Verwenden Sie stattdessen \"self::node()[predicate]\"."}, + + { ER_ILLEGAL_AXIS_NAME, +- "Ung\u00FCltiger Achsenname: {0}"}, ++ "Unzul\u00E4ssiger Achsenname: {0}"}, + + { ER_UNKNOWN_NODETYPE, + "Unbekannter Knotentyp: {0}"}, +--- icedtea-3.8.0/openjdk/jdk/src/macosx/classes/com/apple/laf/resources/aqua_de.properties 2018-09-18 10:29:30.957364971 +0200 ++++ icedtea-3.8.0/openjdk/jdk/src/macosx/classes/com/apple/laf/resources/aqua_de.properties 2018-09-18 10:30:16.213604953 +0200 +@@ -59,7 +59,7 @@ + FileChooser.saveTitle.textAndMnemonic=Speichern + FileChooser.openTitle.textAndMnemonic=\u00D6ffnen + FileChooser.newFolderExistsError.textAndMnemonic=Dieser Name ist bereits vergeben +-FileChooser.chooseButton.textAndMnemonic=W\u00E4hlen ++FileChooser.chooseButton.textAndMnemonic=Ausw\u00E4hlen + + FileChooser.newFolderButton.textAndMnemonic=Neuer Ordner + FileChooser.newFolderTitle.textAndMnemonic=Neuer Ordner +--- icedtea-3.8.0/openjdk/jdk/src/share/classes/com/sun/rowset/RowSetResourceBundle_de.properties 2018-09-18 10:29:31.013365267 +0200 ++++ icedtea-3.8.0/openjdk/jdk/src/share/classes/com/sun/rowset/RowSetResourceBundle_de.properties 2018-09-18 10:30:16.213604953 +0200 +@@ -30,7 +30,7 @@ + cachedrowsetimpl.invalidop = Ung\u00FCltiger Vorgang beim Zeileneinf\u00FCgen + cachedrowsetimpl.accfailed = acceptChanges nicht erfolgreich + cachedrowsetimpl.invalidcp = Ung\u00FCltige Cursorposition +-cachedrowsetimpl.illegalop = Ung\u00FCltiger Vorgang bei nicht eingef\u00FCgter Zeile ++cachedrowsetimpl.illegalop = Unzul\u00E4ssiger Vorgang bei nicht eingef\u00FCgter Zeile + cachedrowsetimpl.clonefail = Klonen nicht erfolgreich: {0} + cachedrowsetimpl.invalidcol = Ung\u00FCltiger Spaltenindex + cachedrowsetimpl.invalcolnm = Ung\u00FCltiger Spaltenname +--- icedtea-3.8.0/openjdk/jdk/src/share/classes/sun/rmi/server/resources/rmid_de.properties 2018-09-18 10:29:31.049365457 +0200 ++++ icedtea-3.8.0/openjdk/jdk/src/share/classes/sun/rmi/server/resources/rmid_de.properties 2018-09-18 10:30:16.213604953 +0200 +@@ -43,7 +43,7 @@ + rmid.syntax.log.required=Option -log ist erforderlich + + # {0} = the (string) illegal argument in question +-rmid.syntax.illegal.option=Ung\u00FCltige Option: {0} ++rmid.syntax.illegal.option=Unzul\u00E4ssige Option: {0} + + # {0} = the (string) reason text that came with a thrown exception + # "Activation.main" should not be translated, because it's a codepoint +--- icedtea-3.8.0/openjdk/jdk/src/share/classes/sun/security/tools/keytool/Resources_de.java 2018-09-18 10:29:31.061365522 +0200 ++++ icedtea-3.8.0/openjdk/jdk/src/share/classes/sun/security/tools/keytool/Resources_de.java 2018-09-18 10:30:16.217604974 +0200 +@@ -99,7 +99,7 @@ + {"destination.alias", + "Zielalias"}, //-destalias + {"destination.key.password", +- "Zielschl\u00FCssel-Kennwort"}, //-destkeypass ++ "Zielschl\u00FCsselkennwort"}, //-destkeypass + {"destination.keystore.name", + "Ziel-Keystore-Name"}, //-destkeystore + {"destination.keystore.password.protected", +@@ -147,7 +147,7 @@ + {"source.alias", + "Quellalias"}, //-srcalias + {"source.key.password", +- "Quellschl\u00FCssel-Kennwort"}, //-srckeypass ++ "Quellschl\u00FCsselkennwort"}, //-srckeypass + {"source.keystore.name", + "Quell-Keystore-Name"}, //-srckeystore + {"source.keystore.password.protected", +@@ -178,8 +178,8 @@ + "Serielle ID des zu entziehenden Certs"}, //-id + // keytool: Running part + {"keytool.error.", "Keytool-Fehler: "}, +- {"Illegal.option.", "Ung\u00FCltige Option: "}, +- {"Illegal.value.", "Ung\u00FCltiger Wert: "}, ++ {"Illegal.option.", "Unzul\u00E4ssige Option: "}, ++ {"Illegal.value.", "Unzul\u00E4ssiger Wert: "}, + {"Unknown.password.type.", "Unbekannter Kennworttyp: "}, + {"Cannot.find.environment.variable.", + "Umgebungsvariable kann nicht gefunden werden: "}, +@@ -205,7 +205,7 @@ + "Wenn der Keystore nicht kennwortgesch\u00FCtzt ist, d\u00FCrfen -storepass, -keypass und -new nicht angegeben werden"}, + {"if.source.keystore.is.not.password.protected.then.srcstorepass.and.srckeypass.must.not.be.specified", + "Wenn der Quell-Keystore nicht kennwortgesch\u00FCtzt ist, d\u00FCrfen -srcstorepass und -srckeypass nicht angegeben werden"}, +- {"Illegal.startdate.value", "Ung\u00FCltiger Wert f\u00FCr Anfangsdatum"}, ++ {"Illegal.startdate.value", "Unzul\u00E4ssiger Wert f\u00FCr Anfangsdatum"}, + {"Validity.must.be.greater.than.zero", + "G\u00FCltigkeit muss gr\u00F6\u00DFer als null sein"}, + {"provName.not.a.provider", "{0} kein Provider"}, +--- icedtea-3.8.0/openjdk/jdk/src/share/classes/sun/security/tools/policytool/Resources_de.java 2018-09-18 10:29:31.061365522 +0200 ++++ icedtea-3.8.0/openjdk/jdk/src/share/classes/sun/security/tools/policytool/Resources_de.java 2018-09-18 10:30:16.217604974 +0200 +@@ -39,8 +39,8 @@ + {"Warning.Class.not.found.class", "Warnung: Klasse nicht gefunden: {0}"}, + {"Warning.Invalid.argument.s.for.constructor.arg", + "Warnung: Ung\u00FCltige(s) Argument(e) f\u00FCr Constructor: {0}"}, +- {"Illegal.Principal.Type.type", "Ung\u00FCltiger Principal-Typ: {0}"}, +- {"Illegal.option.option", "Ung\u00FCltige Option: {0}"}, ++ {"Illegal.Principal.Type.type", "Unzul\u00E4ssiger Principal-Typ: {0}"}, ++ {"Illegal.option.option", "Unzul\u00E4ssige Option: {0}"}, + {"Usage.policytool.options.", "Verwendung: policytool [Optionen]"}, + {".file.file.policy.file.location", + " [-file ] Policy-Dateiverzeichnis"}, +--- icedtea-3.8.0/openjdk/jdk/src/share/classes/sun/security/util/AuthResources_sv.java 2018-09-18 10:29:31.061365522 +0200 ++++ icedtea-3.8.0/openjdk/jdk/src/share/classes/sun/security/util/AuthResources_sv.java 2018-09-18 10:30:16.217604974 +0200 +@@ -88,7 +88,7 @@ + {"Keystore.alias.","Nyckellageralias: "}, + {"Keystore.password.","Nyckellagerl\u00F6senord: "}, + {"Private.key.password.optional.", +- "L\u00F6senord f\u00F6r personlig nyckel (valfritt): "}, ++ "L\u00F6senord f\u00F6r privat nyckel (valfritt): "}, + + // com.sun.security.auth.module.Krb5LoginModule + {"Kerberos.username.defUsername.", +--- icedtea-3.8.0/openjdk/jdk/src/share/classes/sun/tools/jar/resources/jar_de.properties 2018-09-18 10:29:31.073365585 +0200 ++++ icedtea-3.8.0/openjdk/jdk/src/share/classes/sun/tools/jar/resources/jar_de.properties 2018-09-18 10:30:16.217604974 +0200 +@@ -24,7 +24,7 @@ + # + + error.cant.open=\u00D6ffnen nicht m\u00F6glich: {0} +-error.illegal.option=Ung\u00FCltige Option: {0} ++error.illegal.option=Unzul\u00E4ssige Option: {0} + error.bad.option=Eine der Optionen -{ctxu} muss angegeben werden. + error.bad.cflag=Kennzeichen "c" erfordert Angabe von Manifest oder Eingabedateien. + error.bad.uflag=Kennzeichen "u" erfordert Angabe von Manifest, Kennzeichen "e" oder Eingabedateien. diff --git a/8202996.patch b/8202996.patch new file mode 100644 index 0000000..9f957e6 --- /dev/null +++ b/8202996.patch @@ -0,0 +1,10 @@ +--- icedtea-3.8.0/openjdk/jdk/src/share/classes/sun/rmi/transport/tcp/TCPTransport.java 2018-09-18 10:32:28.226304949 +0200 ++++ icedtea-3.8.0/openjdk/jdk/src/share/classes/sun/rmi/transport/tcp/TCPTransport.java 2018-09-18 10:32:47.694408174 +0200 +@@ -727,7 +727,6 @@ + int magic = in.readInt(); + + if (magic == POST) { +- System.err.println("DISABLED: " + disableIncomingHttp); + if (disableIncomingHttp) { + throw new RemoteException("RMI over HTTP is disabled"); + } diff --git a/8203233.patch b/8203233.patch new file mode 100644 index 0000000..f316bdf --- /dev/null +++ b/8203233.patch @@ -0,0 +1,426 @@ +--- icedtea-3.8.0/openjdk/jdk/make/data/tzdata/africa 2018-09-18 10:33:48.522730738 +0200 ++++ icedtea-3.8.0/openjdk/jdk/make/data/tzdata/africa 2018-09-18 10:34:24.486921443 +0200 +@@ -29,7 +29,7 @@ + # tz@iana.org for general use in the future). For more, please see + # the file CONTRIBUTING in the tz distribution. + +-# From Paul Eggert (2017-02-20): ++# From Paul Eggert (2017-04-09): + # + # Unless otherwise specified, the source for data through 1990 is: + # Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition), +@@ -75,7 +75,7 @@ + # cannot now come up with solid citations. + # + # I invented the following abbreviations; corrections are welcome! +-# +02 WAST West Africa Summer Time ++# +02 WAST West Africa Summer Time (no longer used) + # +03 CAST Central Africa Summer Time (no longer used) + # +03 SAST South Africa Summer Time (no longer used) + # +03 EAT East Africa Time +@@ -990,6 +990,10 @@ + # commence at OOhOO on Monday 21 March 1994 and shall end at 02h00 on + # Sunday 4 September 1994. + ++# From Michael Deckers (2017-04-06): ++# ... both summer and winter time are called "standard" ++# (which differs from the use in Ireland) ... ++ + # From Petronella Sibeene (2007-03-30): + # http://allafrica.com/stories/200703300178.html + # While the entire country changes its time, Katima Mulilo and other +@@ -1015,19 +1019,42 @@ + # the same time they would normally start DST, the first Sunday in September: + # https://www.timeanddate.com/news/time/namibia-new-time-zone.html + ++# From Paul Eggert (2017-04-09): ++# Before the change, summer and winter time were both standard time legally. ++# However in common parlance, winter time was considered to be DST. See, e.g.: ++# http://www.nbc.na/news/namibias-winter-time-could-be-scrapped.2706 ++# https://zone.my.na/news/times-are-changing-in-namibia ++# https://wwwera.com.na/2017/02/23/namibias-winter-time-might-be-repealed/ ++# Use plain "WAT" and "CAT" for the time zone abbreviations, to be compatible ++# with Namibia's neighbors. ++ + # RULE NAME FROM TO TYPE IN ON AT SAVE LETTER/S +-Rule Namibia 1994 only - Mar 21 0:00 0 - +-Rule Namibia 1994 2016 - Sep Sun>=1 2:00 1:00 S +-Rule Namibia 1995 2017 - Apr Sun>=1 2:00 0 - ++# Vanguard section, for zic and other parsers that support negative DST. ++#Rule Namibia 1994 only - Mar 21 0:00 -1:00 WAT ++#Rule Namibia 1994 2017 - Sep Sun>=1 2:00 0 CAT ++#Rule Namibia 1995 2017 - Apr Sun>=1 2:00 -1:00 WAT ++# Rearguard section, for parsers that do not support negative DST. ++Rule Namibia 1994 only - Mar 21 0:00 0 WAT ++Rule Namibia 1994 2017 - Sep Sun>=1 2:00 1:00 CAT ++Rule Namibia 1995 2017 - Apr Sun>=1 2:00 0 WAT ++# End of rearguard section. ++ + # Zone NAME GMTOFF RULES FORMAT [UNTIL] + Zone Africa/Windhoek 1:08:24 - LMT 1892 Feb 8 + 1:30 - +0130 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 ++# Vanguard section, for zic and other parsers that support negative DST. ++# 2:00 Namibia %s ++# Rearguard section, for parsers that do not support negative DST. + 2:00 - CAT 1994 Mar 21 0:00 +- 1:00 Namibia WA%sT 2017 Sep 3 2:00 ++# From Paul Eggert (2017-04-07): ++# The official date of the 2017 rule change was 2017-10-24. See: ++# http://www.lac.org.na/laws/annoSTAT/Namibian%20Time%20Act%209%20of%202017.pdf ++ 1:00 Namibia %s 2017 Oct 24 + 2:00 - CAT ++# End of rearguard section. + + # Niger + # See Africa/Lagos. +--- icedtea-3.8.0/openjdk/jdk/make/data/tzdata/asia 2018-09-18 10:33:48.522730738 +0200 ++++ icedtea-3.8.0/openjdk/jdk/make/data/tzdata/asia 2018-09-18 10:34:24.486921443 +0200 +@@ -2006,6 +2006,19 @@ + # There is no common English-language abbreviation for this time zone. + # Use KST, as that's what we already use for 1954-1961 in ROK. + ++# From Kang Seonghoon (2018-04-29): ++# North Korea will revert its time zone from UTC+8:30 (PYT; Pyongyang ++# Time) back to UTC+9 (KST; Korea Standard Time). ++# ++# From Seo Sanghyeon (2018-04-30): ++# Rodong Sinmun 2018-04-30 announced Pyongyang Time transition plan. ++# https://www.nknews.org/kcna/wp-content/uploads/sites/5/2018/04/rodong-2018-04-30.pdf ++# ... the transition date is 2018-05-05 ... Citation should be Decree ++# No. 2232 of April 30, 2018, of the Presidium of the Supreme People's ++# Assembly, as published in Rodong Sinmun. ++# From Tim Parenti (2018-04-29): ++# It appears to be the front page story at the top in the right-most column. ++ + # Zone NAME GMTOFF RULES FORMAT [UNTIL] + Zone Asia/Seoul 8:27:52 - LMT 1908 Apr 1 + 8:30 - KST 1912 Jan 1 +@@ -2017,7 +2030,8 @@ + 8:30 - KST 1912 Jan 1 + 9:00 - JST 1945 Aug 24 + 9:00 - KST 2015 Aug 15 00:00 +- 8:30 - KST ++ 8:30 - KST 2018 May 5 ++ 9:00 - KST + + ############################################################################### + +@@ -2681,7 +2695,7 @@ + # From Sharef Mustafa (2018-03-16): + # Palestine summer time will start on Mar 24th 2018 by advancing the + # clock by 60 minutes as per Palestinian cabinet decision published on +-# the offical website, though the decree did not specify the exact ++# the official website, though the decree did not specify the exact + # time of the time shift. + # http://www.palestinecabinet.gov.ps/Website/AR/NDecrees/ViewFile.ashx?ID=e7a42ab7-ee23-435a-b9c8-a4f7e81f3817 + # +--- icedtea-3.8.0/openjdk/jdk/make/data/tzdata/australasia 2018-09-18 10:33:48.522730738 +0200 ++++ icedtea-3.8.0/openjdk/jdk/make/data/tzdata/australasia 2018-09-18 10:34:24.486921443 +0200 +@@ -1108,6 +1108,15 @@ + # (1999-09-27) writes that Giles Meteorological Station uses + # South Australian time even though it's located in Western Australia. + ++# From Paul Eggert (2018-04-01): ++# The Guardian Express of Perth, Australia reported today that the ++# government decided to advance the clocks permanently on January 1, ++# 2019, from UT +08 to UT +09. The article noted that an exemption ++# would be made for people aged 61 and over, who "can apply in writing ++# to have the extra hour of sunshine removed from their area." See: ++# Daylight saving coming to WA in 2019. Guardian Express. 2018-04-01. ++# https://www.communitynews.com.au/guardian-express/news/exclusive-daylight-savings-coming-wa-summer-2018/ ++ + # Queensland + + # From Paul Eggert (2018-02-26): +--- icedtea-3.8.0/openjdk/jdk/make/data/tzdata/europe 2018-09-18 10:33:48.522730738 +0200 ++++ icedtea-3.8.0/openjdk/jdk/make/data/tzdata/europe 2018-09-18 10:34:24.486921443 +0200 +@@ -551,13 +551,13 @@ + # summer and negative daylight saving time in winter. It is for when + # negative SAVE values are used. + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +-#Rule Eire 1971 only - Oct 31 2:00u -1:00 GMT +-#Rule Eire 1972 1980 - Mar Sun>=16 2:00u 0 IST +-#Rule Eire 1972 1980 - Oct Sun>=23 2:00u -1:00 GMT +-#Rule Eire 1981 max - Mar lastSun 1:00u 0 IST +-#Rule Eire 1981 1989 - Oct Sun>=23 1:00u -1:00 GMT +-#Rule Eire 1990 1995 - Oct Sun>=22 1:00u -1:00 GMT +-#Rule Eire 1996 max - Oct lastSun 1:00u -1:00 GMT ++#Rule Eire 1971 only - Oct 31 2:00u -1:00 - ++#Rule Eire 1972 1980 - Mar Sun>=16 2:00u 0 - ++#Rule Eire 1972 1980 - Oct Sun>=23 2:00u -1:00 - ++#Rule Eire 1981 max - Mar lastSun 1:00u 0 - ++#Rule Eire 1981 1989 - Oct Sun>=23 1:00u -1:00 - ++#Rule Eire 1990 1995 - Oct Sun>=22 1:00u -1:00 - ++#Rule Eire 1996 max - Oct lastSun 1:00u -1:00 - + + # Zone NAME GMTOFF RULES FORMAT [UNTIL] + Zone Europe/Dublin -0:25:00 - LMT 1880 Aug 2 +@@ -993,18 +993,30 @@ + # Please see the 'asia' file for Asia/Nicosia. + + # Czech Republic / Czechia ++# ++# From Paul Eggert (2018-04-15): ++# The source for Czech data is: Kdy začíná a končí letní čas. 2018-04-15. ++# https://kalendar.beda.cz/kdy-zacina-a-konci-letni-cas ++# We know of no English-language name for historical Czech winter time; ++# abbreviate it as "GMT", as it happened to be GMT. ++# + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +-Rule Czech 1945 only - Apr 8 2:00s 1:00 S +-Rule Czech 1945 only - Nov 18 2:00s 0 - ++Rule Czech 1945 only - Apr Mon>=1 2:00s 1:00 S ++Rule Czech 1945 only - Oct 1 2:00s 0 - + Rule Czech 1946 only - May 6 2:00s 1:00 S + Rule Czech 1946 1949 - Oct Sun>=1 2:00s 0 - +-Rule Czech 1947 only - Apr 20 2:00s 1:00 S +-Rule Czech 1948 only - Apr 18 2:00s 1:00 S ++Rule Czech 1947 1948 - Apr Sun>=15 2:00s 1:00 S + Rule Czech 1949 only - Apr 9 2:00s 1:00 S + # Zone NAME GMTOFF RULES FORMAT [UNTIL] + Zone Europe/Prague 0:57:44 - LMT 1850 + 0:57:44 - PMT 1891 Oct # Prague Mean Time +- 1:00 C-Eur CE%sT 1944 Sep 17 2:00s ++ 1:00 C-Eur CE%sT 1945 May 9 ++ 1:00 Czech CE%sT 1946 Dec 1 3:00 ++# Vanguard section, for zic and other parsers that support negative DST. ++# 1:00 -1:00 GMT 1947 Feb 23 2:00 ++# Rearguard section, for parsers that do not support negative DST. ++ 0:00 - GMT 1947 Feb 23 2:00 ++# End of rearguard section. + 1:00 Czech CE%sT 1979 + 1:00 EU CE%sT + # Use Europe/Prague also for Slovakia. +@@ -2039,7 +2051,7 @@ + Rule Neth 1945 only - Apr 2 2:00s 1:00 S + Rule Neth 1945 only - Sep 16 2:00s 0 - + # +-# Amsterdam Mean Time was +00:19:32.13 exactly, but the .13 is omitted ++# Amsterdam Mean Time was +00:19:32.13, but the .13 is omitted + # below because the current format requires GMTOFF to be an integer. + # Zone NAME GMTOFF RULES FORMAT [UNTIL] + Zone Europe/Amsterdam 0:19:32 - LMT 1835 +--- icedtea-3.8.0/openjdk/jdk/make/data/tzdata/VERSION 2018-09-18 10:33:48.522730738 +0200 ++++ icedtea-3.8.0/openjdk/jdk/make/data/tzdata/VERSION 2018-09-18 10:34:24.458921295 +0200 +@@ -21,4 +21,4 @@ + # or visit www.oracle.com if you need additional information or have any + # questions. + # +-tzdata2018d ++tzdata2018e +--- icedtea-3.8.0/openjdk/jdk/test/sun/util/calendar/zi/tzdata/africa 2018-09-18 10:33:48.602731162 +0200 ++++ icedtea-3.8.0/openjdk/jdk/test/sun/util/calendar/zi/tzdata/africa 2018-09-18 10:34:24.490921464 +0200 +@@ -29,7 +29,7 @@ + # tz@iana.org for general use in the future). For more, please see + # the file CONTRIBUTING in the tz distribution. + +-# From Paul Eggert (2017-02-20): ++# From Paul Eggert (2017-04-09): + # + # Unless otherwise specified, the source for data through 1990 is: + # Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition), +@@ -75,7 +75,7 @@ + # cannot now come up with solid citations. + # + # I invented the following abbreviations; corrections are welcome! +-# +02 WAST West Africa Summer Time ++# +02 WAST West Africa Summer Time (no longer used) + # +03 CAST Central Africa Summer Time (no longer used) + # +03 SAST South Africa Summer Time (no longer used) + # +03 EAT East Africa Time +@@ -990,6 +990,10 @@ + # commence at OOhOO on Monday 21 March 1994 and shall end at 02h00 on + # Sunday 4 September 1994. + ++# From Michael Deckers (2017-04-06): ++# ... both summer and winter time are called "standard" ++# (which differs from the use in Ireland) ... ++ + # From Petronella Sibeene (2007-03-30): + # http://allafrica.com/stories/200703300178.html + # While the entire country changes its time, Katima Mulilo and other +@@ -1015,19 +1019,42 @@ + # the same time they would normally start DST, the first Sunday in September: + # https://www.timeanddate.com/news/time/namibia-new-time-zone.html + ++# From Paul Eggert (2017-04-09): ++# Before the change, summer and winter time were both standard time legally. ++# However in common parlance, winter time was considered to be DST. See, e.g.: ++# http://www.nbc.na/news/namibias-winter-time-could-be-scrapped.2706 ++# https://zone.my.na/news/times-are-changing-in-namibia ++# https://wwwera.com.na/2017/02/23/namibias-winter-time-might-be-repealed/ ++# Use plain "WAT" and "CAT" for the time zone abbreviations, to be compatible ++# with Namibia's neighbors. ++ + # RULE NAME FROM TO TYPE IN ON AT SAVE LETTER/S +-Rule Namibia 1994 only - Mar 21 0:00 0 - +-Rule Namibia 1994 2016 - Sep Sun>=1 2:00 1:00 S +-Rule Namibia 1995 2017 - Apr Sun>=1 2:00 0 - ++# Vanguard section, for zic and other parsers that support negative DST. ++#Rule Namibia 1994 only - Mar 21 0:00 -1:00 WAT ++#Rule Namibia 1994 2017 - Sep Sun>=1 2:00 0 CAT ++#Rule Namibia 1995 2017 - Apr Sun>=1 2:00 -1:00 WAT ++# Rearguard section, for parsers that do not support negative DST. ++Rule Namibia 1994 only - Mar 21 0:00 0 WAT ++Rule Namibia 1994 2017 - Sep Sun>=1 2:00 1:00 CAT ++Rule Namibia 1995 2017 - Apr Sun>=1 2:00 0 WAT ++# End of rearguard section. ++ + # Zone NAME GMTOFF RULES FORMAT [UNTIL] + Zone Africa/Windhoek 1:08:24 - LMT 1892 Feb 8 + 1:30 - +0130 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 ++# Vanguard section, for zic and other parsers that support negative DST. ++# 2:00 Namibia %s ++# Rearguard section, for parsers that do not support negative DST. + 2:00 - CAT 1994 Mar 21 0:00 +- 1:00 Namibia WA%sT 2017 Sep 3 2:00 ++# From Paul Eggert (2017-04-07): ++# The official date of the 2017 rule change was 2017-10-24. See: ++# http://www.lac.org.na/laws/annoSTAT/Namibian%20Time%20Act%209%20of%202017.pdf ++ 1:00 Namibia %s 2017 Oct 24 + 2:00 - CAT ++# End of rearguard section. + + # Niger + # See Africa/Lagos. +--- icedtea-3.8.0/openjdk/jdk/test/sun/util/calendar/zi/tzdata/asia 2018-09-18 10:33:48.602731162 +0200 ++++ icedtea-3.8.0/openjdk/jdk/test/sun/util/calendar/zi/tzdata/asia 2018-09-18 10:34:24.490921464 +0200 +@@ -2006,6 +2006,19 @@ + # There is no common English-language abbreviation for this time zone. + # Use KST, as that's what we already use for 1954-1961 in ROK. + ++# From Kang Seonghoon (2018-04-29): ++# North Korea will revert its time zone from UTC+8:30 (PYT; Pyongyang ++# Time) back to UTC+9 (KST; Korea Standard Time). ++# ++# From Seo Sanghyeon (2018-04-30): ++# Rodong Sinmun 2018-04-30 announced Pyongyang Time transition plan. ++# https://www.nknews.org/kcna/wp-content/uploads/sites/5/2018/04/rodong-2018-04-30.pdf ++# ... the transition date is 2018-05-05 ... Citation should be Decree ++# No. 2232 of April 30, 2018, of the Presidium of the Supreme People's ++# Assembly, as published in Rodong Sinmun. ++# From Tim Parenti (2018-04-29): ++# It appears to be the front page story at the top in the right-most column. ++ + # Zone NAME GMTOFF RULES FORMAT [UNTIL] + Zone Asia/Seoul 8:27:52 - LMT 1908 Apr 1 + 8:30 - KST 1912 Jan 1 +@@ -2017,7 +2030,8 @@ + 8:30 - KST 1912 Jan 1 + 9:00 - JST 1945 Aug 24 + 9:00 - KST 2015 Aug 15 00:00 +- 8:30 - KST ++ 8:30 - KST 2018 May 5 ++ 9:00 - KST + + ############################################################################### + +@@ -2681,7 +2695,7 @@ + # From Sharef Mustafa (2018-03-16): + # Palestine summer time will start on Mar 24th 2018 by advancing the + # clock by 60 minutes as per Palestinian cabinet decision published on +-# the offical website, though the decree did not specify the exact ++# the official website, though the decree did not specify the exact + # time of the time shift. + # http://www.palestinecabinet.gov.ps/Website/AR/NDecrees/ViewFile.ashx?ID=e7a42ab7-ee23-435a-b9c8-a4f7e81f3817 + # +--- icedtea-3.8.0/openjdk/jdk/test/sun/util/calendar/zi/tzdata/australasia 2018-09-18 10:33:48.602731162 +0200 ++++ icedtea-3.8.0/openjdk/jdk/test/sun/util/calendar/zi/tzdata/australasia 2018-09-18 10:34:24.490921464 +0200 +@@ -1108,6 +1108,15 @@ + # (1999-09-27) writes that Giles Meteorological Station uses + # South Australian time even though it's located in Western Australia. + ++# From Paul Eggert (2018-04-01): ++# The Guardian Express of Perth, Australia reported today that the ++# government decided to advance the clocks permanently on January 1, ++# 2019, from UT +08 to UT +09. The article noted that an exemption ++# would be made for people aged 61 and over, who "can apply in writing ++# to have the extra hour of sunshine removed from their area." See: ++# Daylight saving coming to WA in 2019. Guardian Express. 2018-04-01. ++# https://www.communitynews.com.au/guardian-express/news/exclusive-daylight-savings-coming-wa-summer-2018/ ++ + # Queensland + + # From Paul Eggert (2018-02-26): +--- icedtea-3.8.0/openjdk/jdk/test/sun/util/calendar/zi/tzdata/europe 2018-09-18 10:33:48.602731162 +0200 ++++ icedtea-3.8.0/openjdk/jdk/test/sun/util/calendar/zi/tzdata/europe 2018-09-18 10:34:24.494921486 +0200 +@@ -551,13 +551,13 @@ + # summer and negative daylight saving time in winter. It is for when + # negative SAVE values are used. + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +-#Rule Eire 1971 only - Oct 31 2:00u -1:00 GMT +-#Rule Eire 1972 1980 - Mar Sun>=16 2:00u 0 IST +-#Rule Eire 1972 1980 - Oct Sun>=23 2:00u -1:00 GMT +-#Rule Eire 1981 max - Mar lastSun 1:00u 0 IST +-#Rule Eire 1981 1989 - Oct Sun>=23 1:00u -1:00 GMT +-#Rule Eire 1990 1995 - Oct Sun>=22 1:00u -1:00 GMT +-#Rule Eire 1996 max - Oct lastSun 1:00u -1:00 GMT ++#Rule Eire 1971 only - Oct 31 2:00u -1:00 - ++#Rule Eire 1972 1980 - Mar Sun>=16 2:00u 0 - ++#Rule Eire 1972 1980 - Oct Sun>=23 2:00u -1:00 - ++#Rule Eire 1981 max - Mar lastSun 1:00u 0 - ++#Rule Eire 1981 1989 - Oct Sun>=23 1:00u -1:00 - ++#Rule Eire 1990 1995 - Oct Sun>=22 1:00u -1:00 - ++#Rule Eire 1996 max - Oct lastSun 1:00u -1:00 - + + # Zone NAME GMTOFF RULES FORMAT [UNTIL] + Zone Europe/Dublin -0:25:00 - LMT 1880 Aug 2 +@@ -993,18 +993,30 @@ + # Please see the 'asia' file for Asia/Nicosia. + + # Czech Republic / Czechia ++# ++# From Paul Eggert (2018-04-15): ++# The source for Czech data is: Kdy začíná a končí letní čas. 2018-04-15. ++# https://kalendar.beda.cz/kdy-zacina-a-konci-letni-cas ++# We know of no English-language name for historical Czech winter time; ++# abbreviate it as "GMT", as it happened to be GMT. ++# + # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S +-Rule Czech 1945 only - Apr 8 2:00s 1:00 S +-Rule Czech 1945 only - Nov 18 2:00s 0 - ++Rule Czech 1945 only - Apr Mon>=1 2:00s 1:00 S ++Rule Czech 1945 only - Oct 1 2:00s 0 - + Rule Czech 1946 only - May 6 2:00s 1:00 S + Rule Czech 1946 1949 - Oct Sun>=1 2:00s 0 - +-Rule Czech 1947 only - Apr 20 2:00s 1:00 S +-Rule Czech 1948 only - Apr 18 2:00s 1:00 S ++Rule Czech 1947 1948 - Apr Sun>=15 2:00s 1:00 S + Rule Czech 1949 only - Apr 9 2:00s 1:00 S + # Zone NAME GMTOFF RULES FORMAT [UNTIL] + Zone Europe/Prague 0:57:44 - LMT 1850 + 0:57:44 - PMT 1891 Oct # Prague Mean Time +- 1:00 C-Eur CE%sT 1944 Sep 17 2:00s ++ 1:00 C-Eur CE%sT 1945 May 9 ++ 1:00 Czech CE%sT 1946 Dec 1 3:00 ++# Vanguard section, for zic and other parsers that support negative DST. ++# 1:00 -1:00 GMT 1947 Feb 23 2:00 ++# Rearguard section, for parsers that do not support negative DST. ++ 0:00 - GMT 1947 Feb 23 2:00 ++# End of rearguard section. + 1:00 Czech CE%sT 1979 + 1:00 EU CE%sT + # Use Europe/Prague also for Slovakia. +@@ -2039,7 +2051,7 @@ + Rule Neth 1945 only - Apr 2 2:00s 1:00 S + Rule Neth 1945 only - Sep 16 2:00s 0 - + # +-# Amsterdam Mean Time was +00:19:32.13 exactly, but the .13 is omitted ++# Amsterdam Mean Time was +00:19:32.13, but the .13 is omitted + # below because the current format requires GMTOFF to be an integer. + # Zone NAME GMTOFF RULES FORMAT [UNTIL] + Zone Europe/Amsterdam 0:19:32 - LMT 1835 +--- icedtea-3.8.0/openjdk/jdk/test/sun/util/calendar/zi/tzdata/VERSION 2018-09-18 10:33:48.602731162 +0200 ++++ icedtea-3.8.0/openjdk/jdk/test/sun/util/calendar/zi/tzdata/VERSION 2018-09-18 10:34:24.490921464 +0200 +@@ -21,4 +21,4 @@ + # or visit www.oracle.com if you need additional information or have any + # questions. + # +-tzdata2018d ++tzdata2018e diff --git a/8203368.patch b/8203368.patch new file mode 100644 index 0000000..724dc0a --- /dev/null +++ b/8203368.patch @@ -0,0 +1,159 @@ +--- icedtea-3.8.0/openjdk/jdk/src/share/classes/java/io/ObjectInputStream.java 2018-09-18 10:35:02.583123452 +0200 ++++ icedtea-3.8.0/openjdk/jdk/src/share/classes/java/io/ObjectInputStream.java 2018-09-18 10:37:06.923782767 +0200 +@@ -1233,9 +1233,11 @@ + if (serialFilter != null) { + RuntimeException ex = null; + ObjectInputFilter.Status status; ++ // Info about the stream is not available if overridden by subclass, return 0 ++ long bytesRead = (bin == null) ? 0 : bin.getBytesRead(); + try { + status = serialFilter.checkInput(new FilterValues(clazz, arrayLength, +- totalObjectRefs, depth, bin.getBytesRead())); ++ totalObjectRefs, depth, bytesRead)); + } catch (RuntimeException e) { + // Preventive interception of an exception to log + status = ObjectInputFilter.Status.REJECTED; +@@ -1247,7 +1249,7 @@ + if (Logging.infoLogger != null) { + Logging.infoLogger.info( + "ObjectInputFilter {0}: {1}, array length: {2}, nRefs: {3}, depth: {4}, bytes: {5}, ex: {6}", +- status, clazz, arrayLength, totalObjectRefs, depth, bin.getBytesRead(), ++ status, clazz, arrayLength, totalObjectRefs, depth, bytesRead, + Objects.toString(ex, "n/a")); + } + InvalidClassException ice = new InvalidClassException("filter status: " + status); +@@ -1258,7 +1260,7 @@ + if (Logging.traceLogger != null) { + Logging.traceLogger.finer( + "ObjectInputFilter {0}: {1}, array length: {2}, nRefs: {3}, depth: {4}, bytes: {5}, ex: {6}", +- status, clazz, arrayLength, totalObjectRefs, depth, bin.getBytesRead(), ++ status, clazz, arrayLength, totalObjectRefs, depth, bytesRead, + Objects.toString(ex, "n/a")); + } + } +--- icedtea-3.8.0/openjdk/jdk/test/java/io/Serializable/serialFilter/CheckArrayTest.java 1970-01-01 01:00:00.000000000 +0100 ++++ icedtea-3.8.0/openjdk/jdk/test/java/io/Serializable/serialFilter/CheckArrayTest.java 2018-09-18 10:37:06.923782767 +0200 +@@ -0,0 +1,123 @@ ++/* ++ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. ++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. ++ * ++ * This code is free software; you can redistribute it and/or modify it ++ * under the terms of the GNU General Public License version 2 only, as ++ * published by the Free Software Foundation. ++ * ++ * This code is distributed in the hope that it will be useful, but WITHOUT ++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or ++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ++ * version 2 for more details (a copy is included in the LICENSE file that ++ * accompanied this code). ++ * ++ * You should have received a copy of the GNU General Public License version ++ * 2 along with this work; if not, write to the Free Software Foundation, ++ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. ++ * ++ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA ++ * or visit www.oracle.com if you need additional information or have any ++ * questions. ++ */ ++ ++import java.io.ByteArrayInputStream; ++import java.io.IOException; ++import java.io.InputStream; ++import java.io.ObjectInputStream; ++import java.io.InvalidClassException; ++ ++import java.util.Hashtable; ++ ++import sun.misc.ObjectInputFilter; ++import sun.misc.SharedSecrets; ++ ++import org.testng.annotations.BeforeClass; ++import org.testng.annotations.DataProvider; ++import org.testng.annotations.Test; ++import org.testng.Assert; ++ ++/* @test ++ * @build CheckArrayTest SerialFilterTest ++ * @bug 8203368 ++ * @modules java.base/jdk.internal.misc ++ * @run testng CheckArrayTest ++ * ++ * @summary Test the SharedSecret access to ObjectInputStream.checkArray works ++ * with overridden subclasses. ++ */ ++ ++/** ++ * Verify that the SharedSecret access to the OIS checkAccess method ++ * does not fail with NPE in the case where ObjectInputStream is subclassed. ++ * The checkAccess method is called from various aggregate types in java.util ++ * to check array sizes during deserialization via the ObjectInputFilter attached the stream. ++ * The filterCheck must be resilent to an InputStream not being available (only the subclass knows). ++ */ ++public class CheckArrayTest { ++ ++ @DataProvider(name = "Patterns") ++ Object[][] patterns() { ++ return new Object[][]{ ++ new Object[]{"maxarray=10", 10, new String[10]}, // successful ++ new Object[]{"maxarray=10", 11, new String[11]}, // exception expected ++ }; ++ } ++ ++ /** ++ * Test SharedSecrets checkArray with unmodified ObjectInputStream. ++ */ ++ @Test(dataProvider = "Patterns") ++ public void normalOIS(String pattern, int arraySize, Object[] array) throws IOException { ++ ObjectInputFilter filter = ObjectInputFilter.Config.createFilter(pattern); ++ byte[] bytes = SerialFilterTest.writeObjects(array); ++ try (ByteArrayInputStream bais = new ByteArrayInputStream(bytes); ++ ObjectInputStream ois = new ObjectInputStream(bais)) { ++ // Check the arraysize against the filter ++ try { ++ ObjectInputFilter.Config.setObjectInputFilter(ois, filter); ++ SharedSecrets.getJavaOISAccess() ++ .checkArray(ois, array.getClass(), arraySize); ++ Assert.assertTrue(array.length >= arraySize, ++ "Should have thrown InvalidClassException due to array size"); ++ } catch (InvalidClassException ice) { ++ Assert.assertFalse(array.length > arraySize, ++ "Should NOT have thrown InvalidClassException due to array size"); ++ } ++ } ++ } ++ ++ /** ++ * Test SharedSecrets checkArray with an ObjectInputStream subclassed to ++ * handle all input stream functions. ++ */ ++ @Test(dataProvider = "Patterns") ++ public void subclassedOIS(String pattern, int arraySize, Object[] array) throws IOException { ++ byte[] bytes = SerialFilterTest.writeObjects(array); ++ try (ByteArrayInputStream bais = new ByteArrayInputStream(bytes); ++ ObjectInputStream ois = new MyInputStream(bais)) { ++ // Check the arraysize against the filter ++ ObjectInputFilter filter = ObjectInputFilter.Config.createFilter(pattern); ++ ObjectInputFilter.Config.setObjectInputFilter(ois, filter); ++ SharedSecrets.getJavaOISAccess() ++ .checkArray(ois, array.getClass(), arraySize); ++ Assert.assertTrue(array.length >= arraySize, ++ "Should have thrown InvalidClassException due to array size"); ++ } catch (InvalidClassException ice) { ++ Assert.assertFalse(array.length > arraySize, ++ "Should NOT have thrown InvalidClassException due to array size"); ++ } ++ } ++ ++ /** ++ * Subclass OIS to disable all input stream functions of the OIS. ++ */ ++ static class MyInputStream extends ObjectInputStream { ++ MyInputStream(InputStream is) throws IOException { ++ super(); ++ } ++ ++ public void close() { ++ } ++ } ++} diff --git a/8205491.patch b/8205491.patch new file mode 100644 index 0000000..e6d06d4 --- /dev/null +++ b/8205491.patch @@ -0,0 +1,17 @@ +--- icedtea-3.8.0/openjdk/jdk/src/share/classes/java/io/ObjectStreamClass.java 2018-09-18 10:38:32.628237194 +0200 ++++ icedtea-3.8.0/openjdk/jdk/src/share/classes/java/io/ObjectStreamClass.java 2018-09-18 10:39:56.996684522 +0200 +@@ -1534,11 +1534,11 @@ + } + return false; + } else { +- // accessible if the parent is public and any constructor +- // is protected or public +- if ((superCl.getModifiers() & Modifier.PUBLIC) == 0) { ++ // sanity check to ensure the parent is protected or public ++ if ((superCl.getModifiers() & (Modifier.PROTECTED | Modifier.PUBLIC)) == 0) { + return false; + } ++ // accessible if any constructor is protected or public + for (Constructor ctor : superCl.getDeclaredConstructors()) { + if ((ctor.getModifiers() & (Modifier.PROTECTED | Modifier.PUBLIC)) != 0) { + return true; diff --git a/java-1_8_0-openjdk.spec b/java-1_8_0-openjdk.spec index af81ba4..23b4fe1 100644 --- a/java-1_8_0-openjdk.spec +++ b/java-1_8_0-openjdk.spec @@ -12,7 +12,7 @@ # license that conforms to the Open Source Definition (Version 1.9) # published by the Open Source Initiative. -# Please submit bugfixes or comments via http://bugs.opensuse.org/ +# Please submit bugfixes or comments via https://bugs.opensuse.org/ # @@ -203,6 +203,39 @@ Patch1000: icedtea-3.0.1-sunec.patch Patch1001: java-1_8_0-openjdk-suse-desktop-files.patch Patch2001: disable-doclint-by-default.patch Patch2002: aarch64.patch +# +Patch5000: 8038636.patch +Patch5001: 8051972.patch +Patch5002: 8055008.patch +Patch5003: 8074373.patch +Patch5004: 8076117.patch +Patch5005: 8078628.patch +Patch5006: 8157898.patch +Patch5007: 8169201.patch +Patch5008: 8170035.patch +Patch5009: 8176183.patch +Patch5010: 8187635.patch +Patch5011: 8188223.patch +Patch5012: 8191239.patch +Patch5013: 8193419.patch +Patch5014: 8196224.patch +Patch5015: 8196491.patch +Patch5016: 8196854.patch +Patch5017: 8197871.patch +Patch5018: 8197925.patch +Patch5019: 8197943.patch +Patch5020: 8198794.patch +Patch5021: 8199406.patch +Patch5022: 8199547.patch +Patch5023: 8200359.patch +Patch5024: 8200666.patch +Patch5025: 8201433.patch +Patch5026: 8202585.patch +Patch5027: 8202996.patch +Patch5028: 8203233.patch +Patch5029: 8203368.patch +Patch5030: 8205491.patch +# BuildRequires: alsa-lib-devel BuildRequires: autoconf BuildRequires: automake @@ -551,6 +584,38 @@ patch -p0 -i %{PATCH104} patch -p0 -i %{PATCH2001} patch -p0 -i %{PATCH2002} +patch -p1 -i %{PATCH5000} +patch -p1 -i %{PATCH5001} +patch -p1 -i %{PATCH5002} +patch -p1 -i %{PATCH5003} +patch -p1 -i %{PATCH5004} +patch -p1 -i %{PATCH5005} +patch -p1 -i %{PATCH5006} +patch -p1 -i %{PATCH5007} +patch -p1 -i %{PATCH5008} +patch -p1 -i %{PATCH5009} +patch -p1 -i %{PATCH5010} +patch -p1 -i %{PATCH5011} +patch -p1 -i %{PATCH5012} +patch -p1 -i %{PATCH5013} +patch -p1 -i %{PATCH5014} +patch -p1 -i %{PATCH5015} +patch -p1 -i %{PATCH5016} +patch -p1 -i %{PATCH5017} +patch -p1 -i %{PATCH5018} +patch -p1 -i %{PATCH5019} +patch -p1 -i %{PATCH5020} +patch -p1 -i %{PATCH5021} +patch -p1 -i %{PATCH5022} +patch -p1 -i %{PATCH5023} +patch -p1 -i %{PATCH5024} +patch -p1 -i %{PATCH5025} +patch -p1 -i %{PATCH5026} +patch -p1 -i %{PATCH5027} +patch -p1 -i %{PATCH5028} +patch -p1 -i %{PATCH5029} +patch -p1 -i %{PATCH5030} + (cd openjdk/common/autoconf bash ./autogen.sh )