From 6ced869372825761d847c77f600f34d355a4b4ab Mon Sep 17 00:00:00 2001 From: Erik Gahlin Date: Tue, 21 Jul 2020 18:03:50 +0200 Subject: [PATCH 01/28] 8236196: Improve string pooling Reviewed-by: mgronlun, rehn, ahgross, jwilhelm, rhalade --- .../jfr/writers/jfrWriterHost.inline.hpp | 34 +++++++++---------- 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/src/hotspot/share/jfr/writers/jfrWriterHost.inline.hpp b/src/hotspot/share/jfr/writers/jfrWriterHost.inline.hpp index 3081c16b6ba..d3c9abd4b39 100644 --- a/src/hotspot/share/jfr/writers/jfrWriterHost.inline.hpp +++ b/src/hotspot/share/jfr/writers/jfrWriterHost.inline.hpp @@ -71,7 +71,8 @@ template inline void WriterHost::write(const T* value, size_t len) { assert(value != NULL, "invariant"); assert(len > 0, "invariant"); - u1* const pos = ensure_size(sizeof(T) * len); + // Might need T + 1 size + u1* const pos = ensure_size(sizeof(T) * len + len); if (pos) { this->set_current_pos(write(value, len, pos)); } @@ -122,7 +123,8 @@ template inline void WriterHost::be_write(const T* value, size_t len) { assert(value != NULL, "invariant"); assert(len > 0, "invariant"); - u1* const pos = ensure_size(sizeof(T) * len); + // Might need T + 1 size + u1* const pos = ensure_size(sizeof(T) * len + len); if (pos) { this->set_current_pos(BE::be_write(value, len, pos)); } @@ -135,10 +137,17 @@ inline WriterHost::WriterHost(StorageType* storage, Th _compressed_integers(compressed_integers()) { } +// Extra size added as a safety cushion when dimensioning memory. +// With varint encoding, the worst case is +// associated with writing negative values. +// For example, writing a negative s1 (-1) +// will encode as 0xff 0x0f (2 bytes). +static const size_t size_safety_cushion = 1; + template template inline WriterHost::WriterHost(StorageType* storage, size_t size) : - WriterPolicyImpl(storage, size), + WriterPolicyImpl(storage, size + size_safety_cushion), _compressed_integers(compressed_integers()) { } @@ -148,30 +157,19 @@ inline WriterHost::WriterHost(Thread* thread) : _compressed_integers(compressed_integers()) { } -// Extra size added as a safety cushion when dimensioning memory. -// With varint encoding, the worst case is -// associated with writing negative values. -// For example, writing a negative s1 (-1) -// will encode as 0xff 0x0f (2 bytes). -// In this example, the sizeof(T) == 1 and length == 1, -// but the implementation will need to dimension -// 2 bytes for the encoding. -// Hopefully, negative values should be relatively rare. -static const size_t size_safety_cushion = 1; - template -inline u1* WriterHost::ensure_size(size_t requested) { +inline u1* WriterHost::ensure_size(size_t requested_size) { if (!this->is_valid()) { // cancelled return NULL; } - if (this->available_size() < requested + size_safety_cushion) { - if (!this->accommodate(this->used_size(), requested + size_safety_cushion)) { + if (this->available_size() < requested_size) { + if (!this->accommodate(this->used_size(), requested_size)) { assert(!this->is_valid(), "invariant"); return NULL; } } - assert(requested + size_safety_cushion <= this->available_size(), "invariant"); + assert(requested_size <= this->available_size(), "invariant"); return this->current_pos(); } From 82c202eadc563d00a74563e9aafeeaade45081fd Mon Sep 17 00:00:00 2001 From: Jerry Zhou Date: Fri, 24 Jul 2020 12:18:54 +0000 Subject: [PATCH 02/28] 8250257: Bump release strings for JDK 15.0.2 Reviewed-by: tbell, erikj --- make/autoconf/version-numbers | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/make/autoconf/version-numbers b/make/autoconf/version-numbers index 231d7228d81..7c9ddb5d60d 100644 --- a/make/autoconf/version-numbers +++ b/make/autoconf/version-numbers @@ -28,12 +28,12 @@ DEFAULT_VERSION_FEATURE=15 DEFAULT_VERSION_INTERIM=0 -DEFAULT_VERSION_UPDATE=1 +DEFAULT_VERSION_UPDATE=2 DEFAULT_VERSION_PATCH=0 DEFAULT_VERSION_EXTRA1=0 DEFAULT_VERSION_EXTRA2=0 DEFAULT_VERSION_EXTRA3=0 -DEFAULT_VERSION_DATE=2020-10-20 +DEFAULT_VERSION_DATE=2021-01-19 DEFAULT_VERSION_CLASSFILE_MAJOR=59 # "`$EXPR $DEFAULT_VERSION_FEATURE + 44`" DEFAULT_VERSION_CLASSFILE_MINOR=0 DEFAULT_ACCEPTABLE_BOOT_VERSIONS="14 15" From dcbab51a9bcd1cb89ea55dd5e2b4c0f9e470e602 Mon Sep 17 00:00:00 2001 From: Christian Hagedorn Date: Mon, 6 Jul 2020 09:16:58 +0200 Subject: [PATCH 03/28] 8248596: [TESTBUG] compiler/loopopts/PartialPeelingUnswitch.java times out with Graal enabled Change C2 specific test to be executed only with server compiler. Reviewed-by: roland, kvn, thartmann --- test/hotspot/jtreg/compiler/loopopts/PartialPeelingUnswitch.java | 1 + 1 file changed, 1 insertion(+) diff --git a/test/hotspot/jtreg/compiler/loopopts/PartialPeelingUnswitch.java b/test/hotspot/jtreg/compiler/loopopts/PartialPeelingUnswitch.java index 64de5085d24..0602091c5e8 100644 --- a/test/hotspot/jtreg/compiler/loopopts/PartialPeelingUnswitch.java +++ b/test/hotspot/jtreg/compiler/loopopts/PartialPeelingUnswitch.java @@ -23,6 +23,7 @@ /* * @test + * @requires vm.compiler2.enabled * @bug 8233033 8235984 8240227 * @summary Tests if partially peeled statements are not executed before the loop predicates by bailing out of loop unswitching. * From 6d0ae6a7bd58ea7d0fe3a07140f5745948c51cbb Mon Sep 17 00:00:00 2001 From: Harold Seigel Date: Wed, 1 Jul 2020 18:42:13 +0000 Subject: [PATCH 04/28] 8247741: Test test/hotspot/jtreg/runtime/7162488/TestUnrecognizedVmOption.java fails when -XX:+IgnoreUnrecognizedVMOptions is set Use createJavaProcessBuilder() to prevent JTreg flags from being passed to the new process created by the test Reviewed-by: lfoltan, dholmes --- .../jtreg/runtime/7162488/TestUnrecognizedVmOption.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/hotspot/jtreg/runtime/7162488/TestUnrecognizedVmOption.java b/test/hotspot/jtreg/runtime/7162488/TestUnrecognizedVmOption.java index c8526d6cbcb..7de7245d862 100644 --- a/test/hotspot/jtreg/runtime/7162488/TestUnrecognizedVmOption.java +++ b/test/hotspot/jtreg/runtime/7162488/TestUnrecognizedVmOption.java @@ -35,8 +35,8 @@ public class TestUnrecognizedVmOption { static final String OPTION="this_is_not_an_option"; public static void main(String[] args) throws Exception { - ProcessBuilder pb = - ProcessTools.createTestJvm("-showversion", "-XX:" + OPTION); + ProcessBuilder pb = ProcessTools.createJavaProcessBuilder( + "-showversion", "-XX:" + OPTION); new OutputAnalyzer(pb.start()) .shouldNotHaveExitValue(0) .shouldContain("Unrecognized VM option") From a24e9adc56da70323206f9818aaa743fadc9c081 Mon Sep 17 00:00:00 2001 From: Magnus Ihse Bursie Date: Thu, 2 Jul 2020 17:35:03 +0200 Subject: [PATCH 05/28] 8248667: Need support for building native libraries located in the test/lib directory Reviewed-by: erikj --- make/Main.gmk | 18 ++++- make/test/BuildTestLib.gmk | 6 +- make/test/BuildTestLibNative.gmk | 83 +++++++++++++++++++++ test/lib/jdk/test/lib/apps/libLingeredApp.c | 34 +++++++++ 4 files changed, 138 insertions(+), 3 deletions(-) create mode 100644 make/test/BuildTestLibNative.gmk create mode 100644 test/lib/jdk/test/lib/apps/libLingeredApp.c diff --git a/make/Main.gmk b/make/Main.gmk index 3e5450ca3c1..cd0cd659d4d 100644 --- a/make/Main.gmk +++ b/make/Main.gmk @@ -640,6 +640,20 @@ $(eval $(call SetupTarget, test-image-jdk-jtreg-native, \ DEPS := build-test-jdk-jtreg-native, \ )) +# Native files needed by the testlib +$(eval $(call SetupTarget, build-test-lib-native, \ + MAKEFILE := test/BuildTestLibNative, \ + TARGET := build-test-lib-native, \ + DEPS := buildtools-jdk java.base-libs, \ +)) + +$(eval $(call SetupTarget, test-image-lib-native, \ + MAKEFILE := test/BuildTestLibNative, \ + TARGET := test-image-lib-native, \ + DEPS := build-test-lib-native, \ +)) + +# Native files needed when testing the testlib itself $(eval $(call SetupTarget, build-test-libtest-jtreg-native, \ MAKEFILE := test/JtregNativeLibTest, \ TARGET := build-test-libtest-jtreg-native, \ @@ -1118,7 +1132,9 @@ endif docs-image: docs-jdk # This target builds the test image -test-image: prepare-test-image test-image-jdk-jtreg-native test-image-demos-jdk test-image-libtest-jtreg-native +test-image: prepare-test-image test-image-jdk-jtreg-native \ + test-image-demos-jdk test-image-libtest-jtreg-native \ + test-image-lib-native ifneq ($(JVM_TEST_IMAGE_TARGETS), ) # If JVM_TEST_IMAGE_TARGETS is externally defined, use it instead of the diff --git a/make/test/BuildTestLib.gmk b/make/test/BuildTestLib.gmk index 833919a94fe..dff446eed3b 100644 --- a/make/test/BuildTestLib.gmk +++ b/make/test/BuildTestLib.gmk @@ -43,12 +43,14 @@ $(eval $(call SetupJavaCompilation, BUILD_WB_JAR, \ TARGETS += $(BUILD_WB_JAR) -# test-lib.jar will contain only hprof classes until JDK-8081381 is resolved $(eval $(call SetupJavaCompilation, BUILD_TEST_LIB_JAR, \ TARGET_RELEASE := $(TARGET_RELEASE_NEWJDK_UPGRADED), \ - SRC := $(TEST_LIB_SOURCE_DIR)/jdk/test/lib/hprof, \ + SRC := $(TEST_LIB_SOURCE_DIR), \ + EXCLUDES := jdk/test/lib/containers jdk/test/lib/security, \ BIN := $(TEST_LIB_SUPPORT)/test-lib_classes, \ + HEADERS := $(TEST_LIB_SUPPORT)/test-lib_headers, \ JAR := $(TEST_LIB_SUPPORT)/test-lib.jar, \ + DISABLED_WARNINGS := try deprecation rawtypes unchecked serial cast, \ )) TARGETS += $(BUILD_TEST_LIB_JAR) diff --git a/make/test/BuildTestLibNative.gmk b/make/test/BuildTestLibNative.gmk new file mode 100644 index 00000000000..00c7607913b --- /dev/null +++ b/make/test/BuildTestLibNative.gmk @@ -0,0 +1,83 @@ +# +# Copyright (c) 2020, 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. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# 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. +# + +################################################################################ +# This file builds the native component of testlib. +# It also covers the test-image part, where the built files are copied to the +# test image. +################################################################################ + +default: all + +include $(SPEC) +include MakeBase.gmk +include TestFilesCompilation.gmk + +################################################################################ +# Targets for building the native tests themselves. +################################################################################ + +BUILD_LIBTEST_NATIVE_SRC := $(TOPDIR)/test/lib + +BUILD_LIBTEST_OUTPUT_DIR := $(OUTPUTDIR)/support/test/lib/native + +BUILD_LIBTEST_IMAGE_DIR := $(TEST_IMAGE_DIR)/lib + +# This evaluation is expensive and should only be done if this target was +# explicitly called. +ifneq ($(filter build-test-lib-native, $(MAKECMDGOALS)), ) + $(eval $(call SetupTestFilesCompilation, BUILD_LIBTEST_LIBRARIES, \ + TYPE := LIBRARY, \ + SOURCE_DIRS := $(BUILD_LIBTEST_NATIVE_SRC), \ + OUTPUT_DIR := $(BUILD_LIBTEST_OUTPUT_DIR), \ + )) +endif + +build-test-lib-native: $(BUILD_LIBTEST_LIBRARIES) + +################################################################################ +# Targets for building test-image. +################################################################################ + +# Copy to testlib test image. We need it in both hotspot and jdk. +$(eval $(call SetupCopyFiles, COPY_LIBTEST_NATIVE_TO_HOTSPOT, \ + SRC := $(BUILD_LIBTEST_OUTPUT_DIR), \ + DEST := $(TEST_IMAGE_DIR)/hotspot/jtreg/native, \ + FILES := $(wildcard $(addprefix $(BUILD_LIBTEST_OUTPUT_DIR), /lib/*)), \ + FLATTEN := true, \ +)) + +$(eval $(call SetupCopyFiles, COPY_LIBTEST_NATIVE_TO_JDK, \ + SRC := $(BUILD_LIBTEST_OUTPUT_DIR), \ + DEST := $(TEST_IMAGE_DIR)/jdk/jtreg/native, \ + FILES := $(wildcard $(addprefix $(BUILD_LIBTEST_OUTPUT_DIR), /lib/*)), \ + FLATTEN := true, \ +)) + +test-image-lib-native: $(COPY_LIBTEST_NATIVE_TO_HOTSPOT) $(COPY_LIBTEST_NATIVE_TO_JDK) + +all: build-test-lib-native + +.PHONY: default all build-test-lib-native test-image-lib-native diff --git a/test/lib/jdk/test/lib/apps/libLingeredApp.c b/test/lib/jdk/test/lib/apps/libLingeredApp.c new file mode 100644 index 00000000000..d1203f0ac3a --- /dev/null +++ b/test/lib/jdk/test/lib/apps/libLingeredApp.c @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2020, 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. + */ + +#include + +/* + * Class: jdk_test_lib_apps_LingeredApp + * Method: crashMe + * Signature: ()V + */ +JNIEXPORT void JNICALL +Java_jdk_test_lib_apps_LingeredApp_crashMe(JNIEnv *env, jclass klass) { + *((volatile int*)(1)) = 1; +} From d5f3910c10ad5b4667a7aeaa176de2e5f8b072d7 Mon Sep 17 00:00:00 2001 From: David Buck Date: Thu, 30 Jul 2020 02:17:34 -0400 Subject: [PATCH 06/28] 8233624: Enhance JNI linkage Reviewed-by: dholmes, jrose, rhalade, mschoene --- src/hotspot/share/prims/nativeLookup.cpp | 144 +++++++++++++++++++++-- src/hotspot/share/runtime/globals.hpp | 3 + 2 files changed, 136 insertions(+), 11 deletions(-) diff --git a/src/hotspot/share/prims/nativeLookup.cpp b/src/hotspot/share/prims/nativeLookup.cpp index dad4ceb87ca..64f0f4e782b 100644 --- a/src/hotspot/share/prims/nativeLookup.cpp +++ b/src/hotspot/share/prims/nativeLookup.cpp @@ -51,27 +51,118 @@ #include "jfr/jfr.hpp" #endif -static void mangle_name_on(outputStream* st, Symbol* name, int begin, int end) { +/* + +The JNI specification defines the mapping from a Java native method name to +a C native library implementation function name as follows: + + The mapping produces a native method name by concatenating the following components + derived from a `native` method declaration: + + 1. the prefix Java_ + 2. given the binary name, in internal form, of the class which declares the native method: + the result of escaping the name. + 3. an underscore ("_") + 4. the escaped method name + 5. if the native method declaration is overloaded: two underscores ("__") followed by the + escaped parameter descriptor (JVMS 4.3.3) of the method declaration. + + Escaping leaves every alphanumeric ASCII character (A-Za-z0-9) unchanged, and replaces each + UTF-16 code unit n the table below with the corresponding escape sequence. If the name to be + escaped contains a surrogate pair, then the high-surrogate code unit and the low-surrogate code + unit are escaped separately. The result of escaping is a string consisting only of the ASCII + characters A-Za-z0-9 and underscore. + + ------------------------------ ------------------------------------ + UTF-16 code unit Escape sequence + ------------------------------ ------------------------------------ + Forward slash (/, U+002F) _ + Underscore (_, U+005F) _1 + Semicolon (;, U+003B) _2 + Left square bracket ([, U+005B) _3 + Any UTF-16 code unit \u_WXYZ_ that does not _0wxyz where w, x, y, and z are the lower-case + represent alphanumeric ASCII (A-Za-z0-9), forms of the hexadecimal digits W, X, Y, and Z. + forward slash, underscore, semicolon, (For example, U+ABCD becomes _0abcd.) + or left square bracket + ------------------------------ ------------------------------------ + + Note that escape sequences can safely begin _0, _1, etc, because class and method + names in Java source code never begin with a number. However, that is not the case in + class files that were not generated from Java source code. + + To preserve the 1:1 mapping to a native method name, the VM checks the resulting name as + follows. If the process of escaping any precursor string from the native method declaration + (class or method name, or argument type) causes a "0", "1", "2", or "3" character + from the precursor string to appear unchanged in the result *either* immediately after an + underscore *or* at the beginning of the escaped string (where it will follow an underscore + in the fully assembled name), then the escaping process is said to have "failed". + In such cases, no native library search is performed, and the attempt to link the native + method invocation will throw UnsatisfiedLinkError. + + +For example: + + package/my_class/method + +and + + package/my/1class/method + +both map to + + Java_package_my_1class_method + +To address this potential conflict we need only check if the character after +/ is a digit 0..3, or if the first character after an injected '_' seperator +is a digit 0..3. If we encounter an invalid identifier we reset the +stringStream and return false. Otherwise the stringStream contains the mapped +name and we return true. + +To address legacy compatibility, the UseLegacyJNINameEscaping flag can be set +which skips the extra checks. + +*/ +static bool map_escaped_name_on(stringStream* st, Symbol* name, int begin, int end) { char* bytes = (char*)name->bytes() + begin; char* end_bytes = (char*)name->bytes() + end; + bool check_escape_char = true; // initially true as first character here follows '_' while (bytes < end_bytes) { jchar c; bytes = UTF8::next(bytes, &c); if (c <= 0x7f && isalnum(c)) { + if (check_escape_char && (c >= '0' && c <= '3') && + !UseLegacyJNINameEscaping) { + // This is a non-Java identifier and we won't escape it to + // ensure no name collisions with a Java identifier. + if (log_is_enabled(Debug, jni, resolve)) { + ResourceMark rm; + log_debug(jni, resolve)("[Lookup of native method with non-Java identifier rejected: %s]", + name->as_C_string()); + } + st->reset(); // restore to "" on error + return false; + } st->put((char) c); + check_escape_char = false; } else { - if (c == '_') st->print("_1"); - else if (c == '/') st->print("_"); + check_escape_char = false; + if (c == '_') st->print("_1"); + else if (c == '/') { + st->print("_"); + // Following a / we must have non-escape character + check_escape_char = true; + } else if (c == ';') st->print("_2"); else if (c == '[') st->print("_3"); else st->print("_%.5x", c); } } + return true; } -static void mangle_name_on(outputStream* st, Symbol* name) { - mangle_name_on(st, name, 0, name->utf8_length()); +static bool map_escaped_name_on(stringStream* st, Symbol* name) { + return map_escaped_name_on(st, name, 0, name->utf8_length()); } @@ -80,10 +171,14 @@ char* NativeLookup::pure_jni_name(const methodHandle& method) { // Prefix st.print("Java_"); // Klass name - mangle_name_on(&st, method->klass_name()); + if (!map_escaped_name_on(&st, method->klass_name())) { + return NULL; + } st.print("_"); // Method name - mangle_name_on(&st, method->name()); + if (!map_escaped_name_on(&st, method->name())) { + return NULL; + } return st.as_string(); } @@ -93,16 +188,20 @@ char* NativeLookup::critical_jni_name(const methodHandle& method) { // Prefix st.print("JavaCritical_"); // Klass name - mangle_name_on(&st, method->klass_name()); + if (!map_escaped_name_on(&st, method->klass_name())) { + return NULL; + } st.print("_"); // Method name - mangle_name_on(&st, method->name()); + if (!map_escaped_name_on(&st, method->name())) { + return NULL; + } return st.as_string(); } char* NativeLookup::long_jni_name(const methodHandle& method) { - // Signature ignore the wrapping parenteses and the trailing return type + // Signatures ignore the wrapping parentheses and the trailing return type stringStream st; Symbol* signature = method->signature(); st.print("__"); @@ -110,7 +209,10 @@ char* NativeLookup::long_jni_name(const methodHandle& method) { int end; for (end = 0; end < signature->utf8_length() && signature->char_at(end) != JVM_SIGNATURE_ENDFUNC; end++); // skip first '(' - mangle_name_on(&st, signature, 1, end); + if (!map_escaped_name_on(&st, signature, 1, end)) { + return NULL; + } + return st.as_string(); } @@ -231,6 +333,11 @@ address NativeLookup::lookup_entry(const methodHandle& method, bool& in_base_lib in_base_library = false; // Compute pure name char* pure_name = pure_jni_name(method); + if (pure_name == NULL) { + // JNI name mapping rejected this method so return + // NULL to indicate UnsatisfiedLinkError should be thrown. + return NULL; + } // Compute argument size int args_size = 1 // JNIEnv @@ -243,6 +350,11 @@ address NativeLookup::lookup_entry(const methodHandle& method, bool& in_base_lib // Compute long name char* long_name = long_jni_name(method); + if (long_name == NULL) { + // JNI name mapping rejected this method so return + // NULL to indicate UnsatisfiedLinkError should be thrown. + return NULL; + } // 2) Try JNI long style entry = lookup_style(method, pure_name, long_name, args_size, true, in_base_library, CHECK_NULL); @@ -324,6 +436,11 @@ void* NativeLookup::dll_load(const methodHandle& method) { address NativeLookup::lookup_critical_style(void* dll, const methodHandle& method, int args_size) { address entry = NULL; const char* critical_name = critical_jni_name(method); + if (critical_name == NULL) { + // JNI name mapping rejected this method so return + // NULL to indicate UnsatisfiedLinkError should be thrown. + return NULL; + } // 1) Try JNI short style entry = lookup_critical_style(dll, critical_name, "", args_size, true); @@ -332,6 +449,11 @@ address NativeLookup::lookup_critical_style(void* dll, const methodHandle& metho } const char* long_name = long_jni_name(method); + if (long_name == NULL) { + // JNI name mapping rejected this method so return + // NULL to indicate UnsatisfiedLinkError should be thrown. + return NULL; + } // 2) Try JNI long style entry = lookup_critical_style(dll, critical_name, long_name, args_size, true); diff --git a/src/hotspot/share/runtime/globals.hpp b/src/hotspot/share/runtime/globals.hpp index 0fa47b34c40..cb1da2160de 100644 --- a/src/hotspot/share/runtime/globals.hpp +++ b/src/hotspot/share/runtime/globals.hpp @@ -317,6 +317,9 @@ const size_t minimumSymbolTableSize = 1024; product(bool, CriticalJNINatives, true, \ "Check for critical JNI entry points") \ \ + product(bool, UseLegacyJNINameEscaping, false, \ + "Use the original JNI name escaping scheme") \ + \ notproduct(bool, StressCriticalJNINatives, false, \ "Exercise register saving code in critical natives") \ \ From ba43a172ff59152012ec202bf0e277b9247792d5 Mon Sep 17 00:00:00 2001 From: Tobias Hartmann Date: Thu, 6 Aug 2020 08:10:56 +0200 Subject: [PATCH 07/28] 8250861: Crash in MinINode::Ideal(PhaseGVN*, bool) Added missing NULL checks. Reviewed-by: kvn, chagedorn --- src/hotspot/share/opto/addnode.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/hotspot/share/opto/addnode.cpp b/src/hotspot/share/opto/addnode.cpp index f6b3f8b175f..6fb27389ccb 100644 --- a/src/hotspot/share/opto/addnode.cpp +++ b/src/hotspot/share/opto/addnode.cpp @@ -1007,7 +1007,7 @@ Node *MinINode::Ideal(PhaseGVN *phase, bool can_reshape) { // Transform MIN2(x + c0, MIN2(x + c1, z)) into MIN2(x + MIN2(c0, c1), z) // if x == y and the additions can't overflow. - if (phase->eqv(x,y) && + if (phase->eqv(x,y) && tx != NULL && !can_overflow(tx, x_off) && !can_overflow(tx, y_off)) { return new MinINode(phase->transform(new AddINode(x, phase->intcon(MIN2(x_off, y_off)))), r->in(2)); @@ -1015,7 +1015,7 @@ Node *MinINode::Ideal(PhaseGVN *phase, bool can_reshape) { } else { // Transform MIN2(x + c0, y + c1) into x + MIN2(c0, c1) // if x == y and the additions can't overflow. - if (phase->eqv(x,y) && + if (phase->eqv(x,y) && tx != NULL && !can_overflow(tx, x_off) && !can_overflow(tx, y_off)) { return new AddINode(x,phase->intcon(MIN2(x_off,y_off))); From 0874ea8eefadae633e283f175feadb4f81913833 Mon Sep 17 00:00:00 2001 From: Kiran Sidhartha Ravikumar Date: Fri, 7 Aug 2020 11:02:19 +0000 Subject: [PATCH 08/28] 8236862: Enhance support of Proxy class 8249927: Specify limits of jdk.serialProxyInterfaceLimit Reviewed-by: rriggs, coffeys --- .../classes/java/io/ObjectInputStream.java | 34 +++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/src/java.base/share/classes/java/io/ObjectInputStream.java b/src/java.base/share/classes/java/io/ObjectInputStream.java index 14dfeea8ef0..354d8f8d2f1 100644 --- a/src/java.base/share/classes/java/io/ObjectInputStream.java +++ b/src/java.base/share/classes/java/io/ObjectInputStream.java @@ -31,6 +31,7 @@ import java.lang.System.Logger; import java.lang.invoke.MethodHandle; import java.lang.ref.ReferenceQueue; import java.lang.reflect.Array; +import java.lang.reflect.InvocationHandler; import java.lang.reflect.Modifier; import java.lang.reflect.Proxy; import java.security.AccessControlContext; @@ -50,6 +51,7 @@ import jdk.internal.access.SharedSecrets; import jdk.internal.misc.Unsafe; import sun.reflect.misc.ReflectUtil; import sun.security.action.GetBooleanAction; +import sun.security.action.GetIntegerAction; /** * An ObjectInputStream deserializes primitive data and objects previously @@ -303,6 +305,15 @@ public class ObjectInputStream */ static final boolean SET_FILTER_AFTER_READ = GetBooleanAction .privilegedGetProperty("jdk.serialSetFilterAfterRead"); + + /** + * Property to override the implementation limit on the number + * of interfaces allowed for Proxies. The property value is clamped to 0..65535. + * The maximum number of interfaces allowed for a proxy is limited to 65535 by + * {@link java.lang.reflect.Proxy#newProxyInstance(ClassLoader, Class[], InvocationHandler)}. + */ + static final int PROXY_INTERFACE_LIMIT = Math.max(0, Math.min(65535, GetIntegerAction + .privilegedGetProperty("jdk.serialProxyInterfaceLimit", 65535))); } /* @@ -1915,14 +1926,23 @@ public class ObjectInputStream int numIfaces = bin.readInt(); if (numIfaces > 65535) { - throw new InvalidObjectException("interface limit exceeded: " - + numIfaces); + // Report specification limit exceeded + throw new InvalidObjectException("interface limit exceeded: " + + numIfaces + + ", limit: " + Caches.PROXY_INTERFACE_LIMIT); } String[] ifaces = new String[numIfaces]; for (int i = 0; i < numIfaces; i++) { ifaces[i] = bin.readUTF(); } + // Recheck against implementation limit and throw with interface names + if (numIfaces > Caches.PROXY_INTERFACE_LIMIT) { + throw new InvalidObjectException("interface limit exceeded: " + + numIfaces + + ", limit: " + Caches.PROXY_INTERFACE_LIMIT + + "; " + Arrays.toString(ifaces)); + } Class cl = null; ClassNotFoundException resolveEx = null; bin.setBlockDataMode(true); @@ -1945,6 +1965,11 @@ public class ObjectInputStream } } catch (ClassNotFoundException ex) { resolveEx = ex; + } catch (OutOfMemoryError memerr) { + IOException ex = new InvalidObjectException("Proxy interface limit exceeded: " + + Arrays.toString(ifaces)); + ex.initCause(memerr); + throw ex; } // Call filterCheck on the class before reading anything else @@ -1956,6 +1981,11 @@ public class ObjectInputStream totalObjectRefs++; depth++; desc.initProxy(cl, resolveEx, readClassDesc(false)); + } catch (OutOfMemoryError memerr) { + IOException ex = new InvalidObjectException("Proxy interface limit exceeded: " + + Arrays.toString(ifaces)); + ex.initCause(memerr); + throw ex; } finally { depth--; } From 8f9c2d7f02d3b813865fa7fad64837f329597035 Mon Sep 17 00:00:00 2001 From: Thomas Schatzl Date: Wed, 12 Aug 2020 13:11:24 +0000 Subject: [PATCH 09/28] 8249192: MonitorInfo stores raw oops across safepoints Change raw oops in MonitorInfo to Handles and update Resource/HandleMarks. Reviewed-by: lfoltan, coleenp --- src/hotspot/share/prims/jvmtiEnvBase.cpp | 3 +- src/hotspot/share/prims/stackwalk.cpp | 5 ++- src/hotspot/share/runtime/biasedLocking.cpp | 3 +- src/hotspot/share/runtime/deoptimization.cpp | 5 ++- src/hotspot/share/runtime/vframe.cpp | 18 +++++++++ src/hotspot/share/runtime/vframe.hpp | 29 +++++--------- src/hotspot/share/runtime/vframeArray.cpp | 42 +++++++++++--------- src/hotspot/share/services/threadService.cpp | 1 + 8 files changed, 61 insertions(+), 45 deletions(-) diff --git a/src/hotspot/share/prims/jvmtiEnvBase.cpp b/src/hotspot/share/prims/jvmtiEnvBase.cpp index 782d07f1068..0ffe2d45b55 100644 --- a/src/hotspot/share/prims/jvmtiEnvBase.cpp +++ b/src/hotspot/share/prims/jvmtiEnvBase.cpp @@ -724,13 +724,13 @@ JvmtiEnvBase::get_locked_objects_in_frame(JavaThread* calling_thread, JavaThread javaVFrame *jvf, GrowableArray* owned_monitors_list, jint stack_depth) { jvmtiError err = JVMTI_ERROR_NONE; ResourceMark rm; + HandleMark hm; GrowableArray* mons = jvf->monitors(); if (mons->is_empty()) { return err; // this javaVFrame holds no monitors } - HandleMark hm; oop wait_obj = NULL; { // The ObjectMonitor* can't be async deflated since we are either @@ -1026,7 +1026,6 @@ JvmtiEnvBase::get_object_monitor_usage(JavaThread* calling_thread, jobject objec // as lightweight locks before inflating the monitor are not included. // We have to count the number of recursive monitor entries the hard way. // We pass a handle to survive any GCs along the way. - ResourceMark rm; ret.entry_count = count_locked_objects(owning_thread, hobj); } // implied else: entry_count == 0 diff --git a/src/hotspot/share/prims/stackwalk.cpp b/src/hotspot/share/prims/stackwalk.cpp index 933bd5eb4e3..f7f4f0d4ca4 100644 --- a/src/hotspot/share/prims/stackwalk.cpp +++ b/src/hotspot/share/prims/stackwalk.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2020, 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 @@ -288,6 +288,9 @@ void LiveFrameStream::fill_live_stackframe(Handle stackFrame, const methodHandle& method, TRAPS) { fill_stackframe(stackFrame, method, CHECK); if (_jvf != NULL) { + ResourceMark rm(THREAD); + HandleMark hm(THREAD); + StackValueCollection* locals = _jvf->locals(); StackValueCollection* expressions = _jvf->expressions(); GrowableArray* monitors = _jvf->monitors(); diff --git a/src/hotspot/share/runtime/biasedLocking.cpp b/src/hotspot/share/runtime/biasedLocking.cpp index 6381bffd516..e9a1b917c67 100644 --- a/src/hotspot/share/runtime/biasedLocking.cpp +++ b/src/hotspot/share/runtime/biasedLocking.cpp @@ -906,8 +906,9 @@ void BiasedLocking::preserve_marks() { _preserved_mark_stack = new (ResourceObj::C_HEAP, mtInternal) GrowableArray(10, true); _preserved_oop_stack = new (ResourceObj::C_HEAP, mtInternal) GrowableArray(10, true); - ResourceMark rm; Thread* cur = Thread::current(); + ResourceMark rm(cur); + for (JavaThreadIteratorWithHandle jtiwh; JavaThread *thread = jtiwh.next(); ) { if (thread->has_last_Java_frame()) { RegisterMap rm(thread); diff --git a/src/hotspot/share/runtime/deoptimization.cpp b/src/hotspot/share/runtime/deoptimization.cpp index d4a99effad9..78aaee9cf39 100644 --- a/src/hotspot/share/runtime/deoptimization.cpp +++ b/src/hotspot/share/runtime/deoptimization.cpp @@ -1,5 +1,3 @@ - - /* * Copyright (c) 1997, 2020, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. @@ -218,6 +216,7 @@ static bool eliminate_allocations(JavaThread* thread, int exec_mode, CompiledMet } static void eliminate_locks(JavaThread* thread, GrowableArray* chunk, bool realloc_failures) { + HandleMark hm; #ifndef PRODUCT bool first = true; #endif @@ -1542,6 +1541,8 @@ void Deoptimization::revoke_from_deopt_handler(JavaThread* thread, frame fr, Reg if (!UseBiasedLocking) { return; } + ResourceMark rm; + HandleMark hm; GrowableArray* objects_to_revoke = new GrowableArray(); get_monitors_from_stack(objects_to_revoke, thread, fr, map); diff --git a/src/hotspot/share/runtime/vframe.cpp b/src/hotspot/share/runtime/vframe.cpp index 11402a0a644..1eac52a5094 100644 --- a/src/hotspot/share/runtime/vframe.cpp +++ b/src/hotspot/share/runtime/vframe.cpp @@ -165,6 +165,7 @@ void javaVFrame::print_locked_object_class_name(outputStream* st, Handle obj, co void javaVFrame::print_lock_info_on(outputStream* st, int frame_count) { Thread* THREAD = Thread::current(); ResourceMark rm(THREAD); + HandleMark hm(THREAD); // If this is the first frame and it is java.lang.Object.wait(...) // then print out the receiver. Locals are not always available, @@ -447,6 +448,21 @@ void interpretedVFrame::set_locals(StackValueCollection* values) const { entryVFrame::entryVFrame(const frame* fr, const RegisterMap* reg_map, JavaThread* thread) : externalVFrame(fr, reg_map, thread) {} +MonitorInfo::MonitorInfo(oop owner, BasicLock* lock, bool eliminated, bool owner_is_scalar_replaced) { + Thread* thread = Thread::current(); + if (!owner_is_scalar_replaced) { + _owner = Handle(thread, owner); + _owner_klass = Handle(); + } else { + assert(eliminated, "monitor should be eliminated for scalar replaced object"); + _owner = Handle(); + _owner_klass = Handle(thread, owner); + } + _lock = lock; + _eliminated = eliminated; + _owner_is_scalar_replaced = owner_is_scalar_replaced; +} + #ifdef ASSERT void vframeStreamCommon::found_bad_method_frame() const { // 6379830 Cut point for an assertion that occasionally fires when @@ -612,6 +628,8 @@ static void print_stack_values(const char* title, StackValueCollection* values) void javaVFrame::print() { ResourceMark rm; + HandleMark hm; + vframe::print(); tty->print("\t"); method()->print_value(); diff --git a/src/hotspot/share/runtime/vframe.hpp b/src/hotspot/share/runtime/vframe.hpp index 336464fbea3..60151e95dd8 100644 --- a/src/hotspot/share/runtime/vframe.hpp +++ b/src/hotspot/share/runtime/vframe.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2019, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2020, 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 @@ -30,6 +30,7 @@ #include "code/location.hpp" #include "oops/oop.hpp" #include "runtime/frame.hpp" +#include "runtime/handles.hpp" #include "runtime/stackValue.hpp" #include "runtime/stackValueCollection.hpp" #include "utilities/growableArray.hpp" @@ -241,34 +242,22 @@ class entryVFrame: public externalVFrame { // 2) the monitor lock class MonitorInfo : public ResourceObj { private: - oop _owner; // the object owning the monitor + Handle _owner; // the object owning the monitor BasicLock* _lock; - oop _owner_klass; // klass (mirror) if owner was scalar replaced + Handle _owner_klass; // klass (mirror) if owner was scalar replaced bool _eliminated; bool _owner_is_scalar_replaced; public: // Constructor - MonitorInfo(oop owner, BasicLock* lock, bool eliminated, bool owner_is_scalar_replaced) { - if (!owner_is_scalar_replaced) { - _owner = owner; - _owner_klass = NULL; - } else { - assert(eliminated, "monitor should be eliminated for scalar replaced object"); - _owner = NULL; - _owner_klass = owner; - } - _lock = lock; - _eliminated = eliminated; - _owner_is_scalar_replaced = owner_is_scalar_replaced; - } + MonitorInfo(oop owner, BasicLock* lock, bool eliminated, bool owner_is_scalar_replaced); // Accessors - oop owner() const { + oop owner() const { assert(!_owner_is_scalar_replaced, "should not be called for scalar replaced object"); - return _owner; + return _owner(); } - oop owner_klass() const { + oop owner_klass() const { assert(_owner_is_scalar_replaced, "should not be called for not scalar replaced object"); - return _owner_klass; + return _owner_klass(); } BasicLock* lock() const { return _lock; } bool eliminated() const { return _eliminated; } diff --git a/src/hotspot/share/runtime/vframeArray.cpp b/src/hotspot/share/runtime/vframeArray.cpp index 53cb179a907..e8f0066bfdf 100644 --- a/src/hotspot/share/runtime/vframeArray.cpp +++ b/src/hotspot/share/runtime/vframeArray.cpp @@ -70,28 +70,32 @@ void vframeArrayElement::fill_in(compiledVFrame* vf, bool realloc_failures) { int index; - // Get the monitors off-stack + { + ResourceMark rm; + HandleMark hm; + // Get the monitors off-stack - GrowableArray* list = vf->monitors(); - if (list->is_empty()) { - _monitors = NULL; - } else { + GrowableArray* list = vf->monitors(); + if (list->is_empty()) { + _monitors = NULL; + } else { - // Allocate monitor chunk - _monitors = new MonitorChunk(list->length()); - vf->thread()->add_monitor_chunk(_monitors); + // Allocate monitor chunk + _monitors = new MonitorChunk(list->length()); + vf->thread()->add_monitor_chunk(_monitors); - // Migrate the BasicLocks from the stack to the monitor chunk - for (index = 0; index < list->length(); index++) { - MonitorInfo* monitor = list->at(index); - assert(!monitor->owner_is_scalar_replaced() || realloc_failures, "object should be reallocated already"); - BasicObjectLock* dest = _monitors->at(index); - if (monitor->owner_is_scalar_replaced()) { - dest->set_obj(NULL); - } else { - assert(monitor->owner() == NULL || (!monitor->owner()->is_unlocked() && !monitor->owner()->has_bias_pattern()), "object must be null or locked, and unbiased"); - dest->set_obj(monitor->owner()); - monitor->lock()->move_to(monitor->owner(), dest->lock()); + // Migrate the BasicLocks from the stack to the monitor chunk + for (index = 0; index < list->length(); index++) { + MonitorInfo* monitor = list->at(index); + assert(!monitor->owner_is_scalar_replaced() || realloc_failures, "object should be reallocated already"); + BasicObjectLock* dest = _monitors->at(index); + if (monitor->owner_is_scalar_replaced()) { + dest->set_obj(NULL); + } else { + assert(monitor->owner() == NULL || (!monitor->owner()->is_unlocked() && !monitor->owner()->has_bias_pattern()), "object must be null or locked, and unbiased"); + dest->set_obj(monitor->owner()); + monitor->lock()->move_to(monitor->owner(), dest->lock()); + } } } } diff --git a/src/hotspot/share/services/threadService.cpp b/src/hotspot/share/services/threadService.cpp index 5a7a9e2674b..be6765e84e1 100644 --- a/src/hotspot/share/services/threadService.cpp +++ b/src/hotspot/share/services/threadService.cpp @@ -586,6 +586,7 @@ StackFrameInfo::StackFrameInfo(javaVFrame* jvf, bool with_lock_info) { _locked_monitors = NULL; if (with_lock_info) { ResourceMark rm; + HandleMark hm; GrowableArray* list = jvf->locked_monitors(); int length = list->length(); if (length > 0) { From e9049102d4df52486cb148c957536d92c0d9565f Mon Sep 17 00:00:00 2001 From: Rajan Halade Date: Mon, 17 Aug 2020 17:26:30 -0700 Subject: [PATCH 10/28] 8251859: sun/security/validator/PKIXValAndRevCheckTests.java fails Reviewed-by: jnimeh --- test/jdk/sun/security/validator/PKIXValAndRevCheckTests.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/jdk/sun/security/validator/PKIXValAndRevCheckTests.java b/test/jdk/sun/security/validator/PKIXValAndRevCheckTests.java index 394acb21e1d..d787004595f 100644 --- a/test/jdk/sun/security/validator/PKIXValAndRevCheckTests.java +++ b/test/jdk/sun/security/validator/PKIXValAndRevCheckTests.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2019, 2020, 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 @@ -374,6 +374,7 @@ public class PKIXValAndRevCheckTests { // Test 1: Path validation with revocation explicitly turned // off, expected to pass. pkixParams = new PKIXBuilderParameters(trustAnchors, null); + pkixParams.setDate(VALID_DATE); pkixParams.setRevocationEnabled(false); validatePath(goodPath, Collections.emptyList(), pkixParams, null); From 81808076c4c44cd5d3753bdaec9ce1ce026069d3 Mon Sep 17 00:00:00 2001 From: Abdul Kolarkunnu Date: Sat, 8 Aug 2020 20:29:27 -0700 Subject: [PATCH 11/28] 8248745: Add jarsigner and keytool tests for restricted algorithms Reviewed-by: mullan, hchao --- .../tools/jarsigner/RestrictedAlgo.java | 201 ++++++++++++++++++ 1 file changed, 201 insertions(+) create mode 100644 test/jdk/sun/security/tools/jarsigner/RestrictedAlgo.java diff --git a/test/jdk/sun/security/tools/jarsigner/RestrictedAlgo.java b/test/jdk/sun/security/tools/jarsigner/RestrictedAlgo.java new file mode 100644 index 00000000000..07dc2e47b4b --- /dev/null +++ b/test/jdk/sun/security/tools/jarsigner/RestrictedAlgo.java @@ -0,0 +1,201 @@ +/* + * Copyright (c) 2020, 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.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.io.File; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import jdk.test.lib.SecurityTools; +import jdk.test.lib.util.JarUtils; +import jdk.test.lib.process.OutputAnalyzer; + +/** + * @test + * @bug 8248745 + * @summary Test key generation and jar signing with disabled algorithms and + * key sizes, with and without entries in jdk.jar.disabledAlgorithms, + * jdk.certpath.disabledAlgorithms + * @library /test/lib + * @run main/othervm RestrictedAlgo RESTRICT + * @run main/othervm RestrictedAlgo NO_RESTRICT + */ + +public class RestrictedAlgo { + + private static final String KEYSTORE = "keystore.jks"; + private static final String PASSWORD = "password"; + private static final String SIGNED_JARFILE = "signed.jar"; + private static final String UNSIGNED_JARFILE = "unsigned.jar"; + private static final String SECURITY_FILE = "java.security"; + private static final String NO_RESTRICT = "-J-Djava.security.properties=" + + SECURITY_FILE; + private static final String FIRST_FILE = "first.txt"; + private static final String WARNING = "Warning:"; + private static final String SECURITY_WARNING = + ".* is considered a security risk and is disabled."; + + private static String algoStatus; + + public static void main(String[] args) throws Exception { + + algoStatus = args[0]; + // create a jar file that contains one file + JarUtils.createJarFile(Path.of(UNSIGNED_JARFILE), Path.of("."), + new File(FIRST_FILE).exists() ? Paths.get(FIRST_FILE) + : Files.createFile(Paths.get(FIRST_FILE))); + if (!isAlgoRestricted()) { + // An alternative security properties + Files.writeString(Files.createFile(Paths.get(SECURITY_FILE)), + "jdk.certpath.disabledAlgorithms=\n" + + "jdk.jar.disabledAlgorithms=\n" + + "jdk.security.legacyAlgorithms="); + } + + System.out.println("\nTesting sigalg MD2\n"); + test("RSA", "MD2withRSA", "SigAlgMD2", "SHA256", true); + + System.out.println("\nTesting sigalg MD5\n"); + test("RSA", "MD5withRSA", "SigAlgMD5", "SHA256", true); + + System.out.println("\nTesting digestalg MD2\n"); + test("RSA", "SHA256withRSA", "DigestAlgMD2", "MD2", false); + + System.out.println("\nTesting digestalg MD5\n"); + test("RSA", "SHA256withRSA", "DigestAlgMD5", "MD5", false); + + System.out.println("\nTesting RSA Keysize: RSA keySize < 1024\n"); + test("RSA", "SHA256withRSA", "KeySizeRSA", "SHA256", true, + "-keysize", "512"); + + System.out.println("\nTesting DSA Keysize: DSA keySize < 1024\n"); + test("DSA", "SHA256withDSA", "KeySizeDSA", "SHA256", true, + "-keysize", "512"); + + System.out.println("\nTesting Native Curve:" + + " include jdk.disabled.namedCurves\n"); + test("EC", "SHA256withECDSA", "curve", "SHA256", true, + "-groupname", "secp112r1"); + } + + private static void test(String keyAlg, String sigAlg, String aliasPrefix, + String digestAlg, boolean isKeyToolVerify, + String... addKeyToolArgs) throws Exception { + + String alias = aliasPrefix + "_" + algoStatus; + testKeytool(keyAlg, sigAlg, alias, isKeyToolVerify, addKeyToolArgs); + testJarSignerSigning(sigAlg, alias, digestAlg); + testJarSignerVerification(); + } + + private static void testKeytool(String keyAlg, String sigAlg, String alias, + boolean isKeyToolVerify, String... additionalCmdArgs) + throws Exception { + + System.out.println("Testing Keytool\n"); + List cmd = prepareCommand( + "-genkeypair", + "-keystore", KEYSTORE, + "-storepass", PASSWORD, + "-dname", "CN=Test", + "-ext", "bc:c", + "-keyalg", keyAlg, + "-sigalg", sigAlg, + "-alias", alias, + "-J-Djdk.sunec.disableNative=false"); + for (String additionalCMDArg : additionalCmdArgs) { + cmd.add(additionalCMDArg); + } + + OutputAnalyzer analyzer = SecurityTools.keytool(cmd) + .shouldHaveExitValue(0); + if (isKeyToolVerify) { + verifyAnalyzer(analyzer); + } + } + + private static void testJarSignerSigning(String sigAlg, String alias, + String digestAlg) throws Exception { + + System.out.println("\nTesting JarSigner Signing\n"); + List cmd = prepareCommand( + "-keystore", KEYSTORE, + "-storepass", PASSWORD, + "-sigalg", sigAlg, + "-digestalg", digestAlg, + "-signedjar", SIGNED_JARFILE, + UNSIGNED_JARFILE, + alias, + "-J-Djdk.sunec.disableNative=false"); + + OutputAnalyzer analyzer = SecurityTools.jarsigner(cmd) + .shouldHaveExitValue(0); + + verifyAnalyzer(analyzer); + } + + private static void testJarSignerVerification() + throws Exception { + + System.out.println("\nTesting JarSigner Verification\n"); + List cmd = prepareCommand( + "-verify", + SIGNED_JARFILE, + "-J-Djdk.sunec.disableNative=false"); + + OutputAnalyzer analyzer = SecurityTools.jarsigner(cmd) + .shouldHaveExitValue(0); + + if (isAlgoRestricted()) { + analyzer.shouldContain("The jar will be treated as unsigned," + + " because it is signed with a weak algorithm that " + + "is now disabled."); + } else { + analyzer.shouldContain("jar verified."); + } + } + + private static List prepareCommand(String... options) { + List cmd = new ArrayList<>(); + cmd.addAll(Arrays.asList(options)); + if (!isAlgoRestricted()) { + cmd.add(NO_RESTRICT); + } + return cmd; + } + + private static void verifyAnalyzer(OutputAnalyzer analyzer) { + if (isAlgoRestricted()) { + analyzer.shouldContain(WARNING) + .shouldMatch(SECURITY_WARNING); + } else { + analyzer.shouldNotMatch(SECURITY_WARNING); + } + } + + private static boolean isAlgoRestricted() { + return ("RESTRICT".equals(algoStatus)) ? true : false; + } +} From 1ed93da42d6bd436479f50d861896c3eb58b1f46 Mon Sep 17 00:00:00 2001 From: Phil Race Date: Fri, 11 Sep 2020 16:12:45 +0000 Subject: [PATCH 12/28] 8253019: Enhanced JPEG decoding Reviewed-by: rhalade, mschoene, serb, psadhukhan --- .../share/native/libjavajpeg/jdhuff.c | 3 +- .../share/native/libjavajpeg/jdinput.c | 33 ------------------- .../share/native/libjavajpeg/jdmarker.c | 15 +++------ .../share/native/libjavajpeg/jpeglib.h | 3 -- 4 files changed, 6 insertions(+), 48 deletions(-) diff --git a/src/java.desktop/share/native/libjavajpeg/jdhuff.c b/src/java.desktop/share/native/libjavajpeg/jdhuff.c index 7cdada103c7..1d0f8d56785 100644 --- a/src/java.desktop/share/native/libjavajpeg/jdhuff.c +++ b/src/java.desktop/share/native/libjavajpeg/jdhuff.c @@ -121,8 +121,7 @@ start_pass_huff_decoder (j_decompress_ptr cinfo) compptr = cinfo->cur_comp_info[ci]; /* Precalculate which table to use for each block */ entropy->dc_cur_tbls[blkn] = entropy->dc_derived_tbls[compptr->dc_tbl_no]; - entropy->ac_cur_tbls[blkn] = /* AC needs no table when not present */ - cinfo->lim_Se ? entropy->ac_derived_tbls[compptr->ac_tbl_no] : NULL; + entropy->ac_cur_tbls[blkn] = entropy->ac_derived_tbls[compptr->ac_tbl_no]; /* Decide whether we really care about the coefficient values */ if (compptr->component_needed) { entropy->dc_needed[blkn] = TRUE; diff --git a/src/java.desktop/share/native/libjavajpeg/jdinput.c b/src/java.desktop/share/native/libjavajpeg/jdinput.c index ae879b03912..bf014400dc9 100644 --- a/src/java.desktop/share/native/libjavajpeg/jdinput.c +++ b/src/java.desktop/share/native/libjavajpeg/jdinput.c @@ -74,39 +74,6 @@ initial_setup (j_decompress_ptr cinfo) compptr->v_samp_factor); } - /* Derive lim_Se */ - if (cinfo->is_baseline || (cinfo->progressive_mode && - cinfo->comps_in_scan)) { /* no pseudo SOS marker */ - cinfo->lim_Se = DCTSIZE2-1; - } else { - switch (cinfo->Se) { - case (1*1-1): - case (2*2-1): - case (3*3-1): - case (4*4-1): - case (5*5-1): - case (6*6-1): - case (7*7-1): - cinfo->lim_Se = cinfo->Se; - break; - case (8*8-1): - case (9*9-1): - case (10*10-1): - case (11*11-1): - case (12*12-1): - case (13*13-1): - case (14*14-1): - case (15*15-1): - case (16*16-1): - cinfo->lim_Se = DCTSIZE2-1; - break; - default: - ERREXIT4(cinfo, JERR_BAD_PROGRESSION, - cinfo->Ss, cinfo->Se, cinfo->Ah, cinfo->Al); - break; - } - } - /* We initialize DCT_scaled_size and min_DCT_scaled_size to DCTSIZE. * In the full decompressor, this will be overridden by jdmaster.c; * but in the transcoder, jdmaster.c is not used, so we must do it here. diff --git a/src/java.desktop/share/native/libjavajpeg/jdmarker.c b/src/java.desktop/share/native/libjavajpeg/jdmarker.c index 72e2d4f77b6..2bcf4714376 100644 --- a/src/java.desktop/share/native/libjavajpeg/jdmarker.c +++ b/src/java.desktop/share/native/libjavajpeg/jdmarker.c @@ -238,7 +238,7 @@ get_soi (j_decompress_ptr cinfo) LOCAL(boolean) -get_sof (j_decompress_ptr cinfo, boolean is_baseline, boolean is_prog, boolean is_arith) +get_sof (j_decompress_ptr cinfo, boolean is_prog, boolean is_arith) /* Process a SOFn marker */ { INT32 length; @@ -246,7 +246,6 @@ get_sof (j_decompress_ptr cinfo, boolean is_baseline, boolean is_prog, boolean i jpeg_component_info * compptr; INPUT_VARS(cinfo); - cinfo->is_baseline = is_baseline; cinfo->progressive_mode = is_prog; cinfo->arith_code = is_arith; @@ -999,27 +998,23 @@ read_markers (j_decompress_ptr cinfo) break; case M_SOF0: /* Baseline */ - if (! get_sof(cinfo, TRUE, FALSE, FALSE)) - return JPEG_SUSPENDED; - break; - case M_SOF1: /* Extended sequential, Huffman */ - if (! get_sof(cinfo, FALSE, FALSE, FALSE)) + if (! get_sof(cinfo, FALSE, FALSE)) return JPEG_SUSPENDED; break; case M_SOF2: /* Progressive, Huffman */ - if (! get_sof(cinfo, FALSE, TRUE, FALSE)) + if (! get_sof(cinfo, TRUE, FALSE)) return JPEG_SUSPENDED; break; case M_SOF9: /* Extended sequential, arithmetic */ - if (! get_sof(cinfo, FALSE, FALSE, TRUE)) + if (! get_sof(cinfo, FALSE, TRUE)) return JPEG_SUSPENDED; break; case M_SOF10: /* Progressive, arithmetic */ - if (! get_sof(cinfo, FALSE, TRUE, TRUE)) + if (! get_sof(cinfo, TRUE, TRUE)) return JPEG_SUSPENDED; break; diff --git a/src/java.desktop/share/native/libjavajpeg/jpeglib.h b/src/java.desktop/share/native/libjavajpeg/jpeglib.h index 5b66523c666..d3821f36158 100644 --- a/src/java.desktop/share/native/libjavajpeg/jpeglib.h +++ b/src/java.desktop/share/native/libjavajpeg/jpeglib.h @@ -539,7 +539,6 @@ struct jpeg_decompress_struct { jpeg_component_info * comp_info; /* comp_info[i] describes component that appears i'th in SOF */ - boolean is_baseline; /* TRUE if Baseline SOF0 encountered */ boolean progressive_mode; /* TRUE if SOFn specifies progressive mode */ boolean arith_code; /* TRUE=arithmetic coding, FALSE=Huffman */ @@ -612,8 +611,6 @@ struct jpeg_decompress_struct { int Ss, Se, Ah, Al; /* progressive JPEG parameters for scan */ - int lim_Se; /* min( Se, DCTSIZE2-1 ) for entropy decode */ - /* This field is shared between entropy decoder and marker parser. * It is either zero or the code of a JPEG marker that has been * read from the data source, but has not yet been processed. From 986e17bf9b14ef7ee24b1452c3eae16c555e12cd Mon Sep 17 00:00:00 2001 From: Rajan Halade Date: Sat, 29 Aug 2020 13:55:48 -0700 Subject: [PATCH 13/28] 8249176: Update GlobalSignR6CA test certificates Reviewed-by: xuelei --- .../certification/GlobalSignR6CA.java | 268 +++++++++--------- 1 file changed, 139 insertions(+), 129 deletions(-) diff --git a/test/jdk/security/infra/java/security/cert/CertPathValidator/certification/GlobalSignR6CA.java b/test/jdk/security/infra/java/security/cert/CertPathValidator/certification/GlobalSignR6CA.java index 1f279a3a7cb..244ef26c2ca 100644 --- a/test/jdk/security/infra/java/security/cert/CertPathValidator/certification/GlobalSignR6CA.java +++ b/test/jdk/security/infra/java/security/cert/CertPathValidator/certification/GlobalSignR6CA.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2019, 2020, 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 @@ -23,7 +23,7 @@ /* * @test - * @bug 8216577 + * @bug 8216577 8249176 * @summary Interoperability tests with GlobalSign R6 CA * @build ValidatePathWithParams * @run main/othervm -Djava.security.debug=certpath GlobalSignR6CA OCSP @@ -42,139 +42,150 @@ */ public class GlobalSignR6CA { - // Owner: CN=GlobalSign R6 Admin CA - SHA256 - G3, O=GlobalSign nv-sa, C=BE + // Owner: CN=GlobalSign Atlas R6 EV TLS CA 2020, O=GlobalSign nv-sa, C=BE // Issuer: CN=GlobalSign, O=GlobalSign, OU=GlobalSign Root CA - R6 - // Serial number: 48a402ddb5defd50accfc0fcf13f - // Valid from: Tue Sep 20 17:00:00 PDT 2016 until: Mon Sep 20 17:00:00 PDT 2021 + // Serial number: 7803182afbecd89eb19309bb4a25bdaa + // Valid from: Mon Jul 27 17:00:00 PDT 2020 until: Sat Jul 27 17:00:00 PDT 2030 private static final String INT = "-----BEGIN CERTIFICATE-----\n" + - "MIIFmjCCA4KgAwIBAgIOSKQC3bXe/VCsz8D88T8wDQYJKoZIhvcNAQELBQAwTDEg\n" + - "MB4GA1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjYxEzARBgNVBAoTCkdsb2Jh\n" + - "bFNpZ24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMTYwOTIxMDAwMDAwWhcNMjEw\n" + - "OTIxMDAwMDAwWjBXMQswCQYDVQQGEwJCRTEZMBcGA1UEChMQR2xvYmFsU2lnbiBu\n" + - "di1zYTEtMCsGA1UEAxMkR2xvYmFsU2lnbiBSNiBBZG1pbiBDQSAtIFNIQTI1NiAt\n" + - "IEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmyyfJA4reymawDG1\n" + - "FNDCSFBqst/+Jih2Zg1ThovSfkxVWcviBhIZfu0t/Hv9hmolN2dxPibKCHhjyfMp\n" + - "WaGj+S8VPPaR3xoeOvHtuf/2uOyBZa/3mgiWWRF50fLy0fzyWNJL9lbTH459oUci\n" + - "QN2H0nFEuD1tGGzFdjtXCRVjWy9dZW8Vv2831buzuPLTtOPSKhqOiigpXFTo6SL9\n" + - "n/NHQ4HI7WV+DMB7yOPEERqQzfi28v1B2j4GOT4wqXncbw5uFZdYobBfRNv3VNdk\n" + - "p/2Frtm15ePBIAAb4o28du+orJUuVVpxreeEyVBGJuaP0RWksjSnqkSbPm9MEY0k\n" + - "dS7tgwIDAQABo4IBbTCCAWkwDgYDVR0PAQH/BAQDAgEGMCcGA1UdJQQgMB4GCCsG\n" + - "AQUFBwMBBggrBgEFBQcDAgYIKwYBBQUHAwkwEgYDVR0TAQH/BAgwBgEB/wIBADAd\n" + - "BgNVHQ4EFgQUgUlc6QW/DIigOJayXUEDWun/14cwHwYDVR0jBBgwFoAUrmwFo5MT\n" + - "4qLn4tcc1sfwf8hnU6AwPgYIKwYBBQUHAQEEMjAwMC4GCCsGAQUFBzABhiJodHRw\n" + - "Oi8vb2NzcDIuZ2xvYmFsc2lnbi5jb20vcm9vdHI2MDYGA1UdHwQvMC0wK6ApoCeG\n" + - "JWh0dHA6Ly9jcmwuZ2xvYmFsc2lnbi5jb20vcm9vdC1yNi5jcmwwYgYDVR0gBFsw\n" + - "WTAHBgVngQwBATALBgkrBgEEAaAyAQEwQQYJKwYBBAGgMgFfMDQwMgYIKwYBBQUH\n" + - "AgEWJmh0dHBzOi8vd3d3Lmdsb2JhbHNpZ24uY29tL3JlcG9zaXRvcnkvMA0GCSqG\n" + - "SIb3DQEBCwUAA4ICAQBovPHk0rWZ5tGQ3NiYORqZNfSh2KH0RxweRE+ZTpnGOZjE\n" + - "vRQYLYm/vf2q+v2IcESmpVCjq1eN0k75wc/4475Y9RH6xK7ai1+O8HHDgj8GK4iZ\n" + - "0ILbKtJQ2/ih19TMO7M3Y/tZByLPcdy8cuDMoCWoQJqUFtM8l784S5lEjefrcwkZ\n" + - "uNOdTrZbsqXY71Xfa61DNuW3lIt/w34myrKG0xRyGicI9P9VpcWYdWCKpwVe10MP\n" + - "d4WQ/lclJZLrLljmn76bc+q/L2Sw+tpadsD2qP3l05FhRqcF5iI9lIw77KIU15Jt\n" + - "QysmI7xTjByjny/OiIYP/7PKQjh+KEe/17GOg0AamdI9dbaOHRcyHFht01ymaphf\n" + - "kU3hjWb2bdtVLuDsIKfGN/QDXSmv0ThKsgkj3OOiLUpllApr5SU2tY40rpZ210iD\n" + - "/jA18LYwBmR64t3e7ud/tDz4c/YLY8p6vPLdASbbwyptj93n0c0HXpjdcrx/XOQa\n" + - "ogw6JzJ2v3Kok94frBKKdoxg4SnMvZoakM1SbY6Q3XlC24qVnVuWJ142rVkCFixZ\n" + - "Sb5ZEB7fxk/2YfaWkSW3uejwh2qN7qXji0S1ALNbASJATYqMgdJVz+25yOBfxFN6\n" + - "KzNbvmVmEM/hnKaQxePhwForQjDFaep1RO5Yg4wnIcLRC3atKgkIIA6YDNUcog==\n" + + "MIIGwDCCBKigAwIBAgIQeAMYKvvs2J6xkwm7SiW9qjANBgkqhkiG9w0BAQwFADBM\n" + + "MSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSNjETMBEGA1UEChMKR2xv\n" + + "YmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjAeFw0yMDA3MjgwMDAwMDBaFw0z\n" + + "MDA3MjgwMDAwMDBaMFUxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWdu\n" + + "IG52LXNhMSswKQYDVQQDEyJHbG9iYWxTaWduIEF0bGFzIFI2IEVWIFRMUyBDQSAy\n" + + "MDIwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtQ8IiN2Ukq/Clynv\n" + + "HhqugFQg5SXIyVO4ZRnxo0hNnaek78LRn4Bkaqcwv6Ls0Ftn4bK2zvBaS1zsfUTA\n" + + "vfup/s86zHCRvOqAL8zO/WiMV1G5ikHSlD6RtpIOHRX4y0oIGW59ADY0ANwDeDWL\n" + + "x/RgSltuQIqeGXwZnyZFwWtxVkSE4p5tn2Lb6USzwcD22taiXmeYsPMWfJfmWPRj\n" + + "ZuYBgxn6tvUVRO+ZzAUKEEaJK/LVLieAVEmfR6anEJ/gWczxz12Lwu6qF5ov0OQt\n" + + "AP0rfruyje/EJt6xHjpJ2OgDzCWYstXOpRPDHYS3klpaRbowAlpJdYMRAqY5CNiP\n" + + "RAx3wvsWCVI5UkzKVD6RuHHVpfzfdKAfsjHa/aSunHtTpE+NUf3Q/3qHXW5cyDnP\n" + + "Jt6VTVVVevjTquwH1xrUigukDbeopV1owsqIA5aw2io7RbBorwPBA0veinHN4vP9\n" + + "X8jbTiIiLjlfJOnHZe7pIhb3T9WCqhwwsBNPQpKizGHCj5kL2UJe7N5u4RywFOZE\n" + + "l5mbTX4zO6Vj3WM9ZVbZgXVNwEjS5mYq/rvC1yr9obNUJ8br6JAd2ZBnzhA5Zn4s\n" + + "bIP99TlUBZWczw+vPM7g1S4e4cyd+8CULVhVs87QlyvwWnRbH7fXZo8xLzhzMCjB\n" + + "8Y0cNdL1S6QKrrhC6Pf6tV/JU20CAwEAAaOCAZMwggGPMA4GA1UdDwEB/wQEAwIB\n" + + "hjAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwEgYDVR0TAQH/BAgwBgEB\n" + + "/wIBADAdBgNVHQ4EFgQUhNwhC8eoXXKXhId+8tW2+nFWTvswHwYDVR0jBBgwFoAU\n" + + "rmwFo5MT4qLn4tcc1sfwf8hnU6AwewYIKwYBBQUHAQEEbzBtMC4GCCsGAQUFBzAB\n" + + "hiJodHRwOi8vb2NzcDIuZ2xvYmFsc2lnbi5jb20vcm9vdHI2MDsGCCsGAQUFBzAC\n" + + "hi9odHRwOi8vc2VjdXJlLmdsb2JhbHNpZ24uY29tL2NhY2VydC9yb290LXI2LmNy\n" + + "dDA2BgNVHR8ELzAtMCugKaAnhiVodHRwOi8vY3JsLmdsb2JhbHNpZ24uY29tL3Jv\n" + + "b3QtcjYuY3JsMFUGA1UdIAROMEwwQQYJKwYBBAGgMgEBMDQwMgYIKwYBBQUHAgEW\n" + + "Jmh0dHBzOi8vd3d3Lmdsb2JhbHNpZ24uY29tL3JlcG9zaXRvcnkvMAcGBWeBDAEB\n" + + "MA0GCSqGSIb3DQEBDAUAA4ICAQBD+97H2N1BgiliKQFrb+jcWjkmPP8cdF/eiBW1\n" + + "cEzOOhsuVqxbyIk8qdw3UueHSDjqWUjHYoo8TV3DLqUXmIy1Ks3MkESsFKeLpEbk\n" + + "VMZga0lbDnqqRc5a2yzrXmwVYDeWVeD20s5vPoKCnFzmcR+2v9TKD4bI6XWVl84q\n" + + "GzfFRVdY9f8KN+7891+47ZhptvxtNqJKVI2O+EAP/PvTpwes983LkFzsev4/+Qxs\n" + + "EszD7/pE+Byj3t9CMat2XoX0jfJjbEXgewFb/gCwHvqNKLNWrYfE9qN8b6qm4xQk\n" + + "qGQKTrFKsBJx4TU+h10qXDhpmOBswiJqoG16XCV32oSn0JUYvXVAvP6YjueOv/jr\n" + + "0ZMTWGh8wCz6v3XBaXR0rxDAz9GImpU+xPx2XjuHac7OnYbN+i8p7cJPUxABjHiA\n" + + "LWXIZtCn5ziCfvYC6+SCp8x9TPJzAIfJ4NKv/8SpvvzuchVkAQqlQaGFBEdkX84R\n" + + "I/WYYG+2BliFIpbQnfljYWCURbfsYz7+Zxb94+4yzva49p8T6lALoK3s2kqIVLKN\n" + + "s6qAnk/qX6JihkaR3W+iViHMC5tqQX/pd8QIXccF3PA2OdeNGU4iUNZqUbYB4VZd\n" + + "AaOaeaUl0LwAta6DB5w344eUIqDgaitSwQZBnxppmwL3tGzP1ero2e2RvBmphbxI\n" + + "atIdxA==\n" + "-----END CERTIFICATE-----"; - // Owner: CN=valid.r6.roots.globalsign.com, O=GMO GlobalSign Inc., STREET="Two International Drive, Suite 150", - // L=Portsmouth, ST=New Hampshire, C=US, OID.1.3.6.1.4.1.311.60.2.1.2=New Hampshire, OID.1.3.6.1.4.1.311.60.2.1.3=US, - // SERIALNUMBER=578611, OID.2.5.4.15=Private Organization - // Issuer: CN=GlobalSign R6 Admin CA - SHA256 - G3, O=GlobalSign nv-sa, C=BE - // Serial number: 1355071ec648a599cea67b3b - // Valid from: Wed Jun 13 21:31:05 PDT 2018 until: Sat Jun 13 21:31:05 PDT 2020 + // Owner: CN=valid.r6.roots.globalsign.com, + // O=GMO GlobalSign LTD, STREET="Springfield House, Sandling Road", OID.2.5.4.17=ME14 2LP, L=Maidstone, ST=Kent, + // C=GB, SERIALNUMBER=04705639, OID.2.5.4.15=Private Organization, OID.1.3.6.1.4.1.311.60.2.1.3=GB + // Issuer: CN=GlobalSign Atlas R6 EV TLS CA 2020, O=GlobalSign nv-sa, C=BE + // Serial number: 1aff2829dd8bf07aa65a7b3c920ca4b + // Valid from: Thu Aug 27 00:20:06 PDT 2020 until: Tue Sep 28 00:20:06 PDT 2021 private static final String VALID = "-----BEGIN CERTIFICATE-----\n" + - "MIIHUjCCBjqgAwIBAgIME1UHHsZIpZnOpns7MA0GCSqGSIb3DQEBCwUAMFcxCzAJ\n" + - "BgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMS0wKwYDVQQDEyRH\n" + - "bG9iYWxTaWduIFI2IEFkbWluIENBIC0gU0hBMjU2IC0gRzMwHhcNMTgwNjE0MDQz\n" + - "MTA1WhcNMjAwNjE0MDQzMTA1WjCCARIxHTAbBgNVBA8MFFByaXZhdGUgT3JnYW5p\n" + - "emF0aW9uMQ8wDQYDVQQFEwY1Nzg2MTExEzARBgsrBgEEAYI3PAIBAxMCVVMxHjAc\n" + - "BgsrBgEEAYI3PAIBAhMNTmV3IEhhbXBzaGlyZTELMAkGA1UEBhMCVVMxFjAUBgNV\n" + - "BAgTDU5ldyBIYW1wc2hpcmUxEzARBgNVBAcTClBvcnRzbW91dGgxKzApBgNVBAkT\n" + - "IlR3byBJbnRlcm5hdGlvbmFsIERyaXZlLCBTdWl0ZSAxNTAxHDAaBgNVBAoTE0dN\n" + - "TyBHbG9iYWxTaWduIEluYy4xJjAkBgNVBAMTHXZhbGlkLnI2LnJvb3RzLmdsb2Jh\n" + - "bHNpZ24uY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArh1lHcNS\n" + - "cfvFI/vGrfu3sC561NL6VTm9WQpq0UcdQpVlOjnmlScZaUhTlcJ2aWz4tqNnT/SF\n" + - "EO48kgIy0c07n0z1igBGOvM6shPtdIT3Yik2KwKdnt2Oaw/RqyXQxZhMvvGGyXLP\n" + - "hEyRdUrcNEXzOh+/AFzV2Ayo2OfZB/SEJW2BMhYEvZ89ziniab7vaNfVVUwsR6yD\n" + - "JX/3bdgRpG3gvKpdawAXMkhX5yAJaLInp5gHfCKNsW7l5gSrW/IYmPZvmEovLLmF\n" + - "lJfEDltnaNrO3jFzCjzEVRsurBrn1lMgKuCCkCZhzUgy5w8fR7OiGDpI/DmprRxn\n" + - "WQomtZBRd9VG1wIDAQABo4IDXzCCA1swDgYDVR0PAQH/BAQDAgWgMIGWBggrBgEF\n" + - "BQcBAQSBiTCBhjBHBggrBgEFBQcwAoY7aHR0cDovL3NlY3VyZS5nbG9iYWxzaWdu\n" + - "LmNvbS9jYWNlcnQvZ3NyNmFkbWluY2FzaGEyNTZnMy5jcnQwOwYIKwYBBQUHMAGG\n" + - "L2h0dHA6Ly9vY3NwMi5nbG9iYWxzaWduLmNvbS9nc3I2YWRtaW5jYXNoYTI1Nmcz\n" + - "MFUGA1UdIAROMEwwQQYJKwYBBAGgMgEBMDQwMgYIKwYBBQUHAgEWJmh0dHBzOi8v\n" + - "d3d3Lmdsb2JhbHNpZ24uY29tL3JlcG9zaXRvcnkvMAcGBWeBDAEBMAkGA1UdEwQC\n" + - "MAAwQgYDVR0fBDswOTA3oDWgM4YxaHR0cDovL2NybC5nbG9iYWxzaWduLmNvbS9n\n" + - "c3I2YWRtaW5jYXNoYTI1NmczLmNybDAoBgNVHREEITAfgh12YWxpZC5yNi5yb290\n" + - "cy5nbG9iYWxzaWduLmNvbTAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIw\n" + - "HQYDVR0OBBYEFPTkCvZs787YEtziawL5ju/rC8XwMB8GA1UdIwQYMBaAFIFJXOkF\n" + - "vwyIoDiWsl1BA1rp/9eHMIIBfwYKKwYBBAHWeQIEAgSCAW8EggFrAWkAdwBVgdTC\n" + - "FpA2AUrqC5tXPFPwwOQ4eHAlCBcvo6odBxPTDAAAAWP8j7bvAAAEAwBIMEYCIQDH\n" + - "FRH+VkQ4RgVRYaO47rC83fQrzEO9Pb45BD5ZEHfrRwIhALY75BbrPhtAZSXWfpVN\n" + - "MoDQzA6X0DQFSf29dlnCMYCmAHcApLkJkLQYWBSHuxOizGdwCjw1mAT5G9+443fN\n" + - "DsgN3BAAAAFj/I+4QgAABAMASDBGAiEA3kcOlf4Az7R+/MkV5GurWnpUmIhCUB3v\n" + - "a/tNz+Dd8HgCIQC22RG+EW4OYdaoWN/B3MeI95OlNofD/OqJB/med+quWwB1AG9T\n" + - "dqwx8DEZ2JkApFEV/3cVHBHZAsEAKQaNsgiaN9kTAAABY/yPt6kAAAQDAEYwRAIg\n" + - "THH7eeWpo5vDtjDNKzpkkrR/McYDgmQIRRnLKXkKMsoCIC9cY4xj9LlXPVRF9bLH\n" + - "1DvP9qmONga9pO7kxuyYtd8YMA0GCSqGSIb3DQEBCwUAA4IBAQA0Ufq4QDCiWxm4\n" + - "5D3MrfbQnC9apSMpzRT2udD/gFDbtqTJ7Rx4CJjNWa9ANkKWNlJ6zVASpVzV7KB7\n" + - "otvqO4iR5V0EE4+9fitJ3zRe9nl76uDf2upCHLcWsYurq/eIxIuXnIByLJvTS3jS\n" + - "42i07D6JsgNg9SR8rIKyYiz4KX2975GlMSue/SOMFcf/AC7amYzs6U+FA68y8GBV\n" + - "yDGpYvQW9zfnQ2Z/XVcLE1tVERrEs3Ba08g+uk1dICyibSz83yrX3Eas/bq6kZEy\n" + - "kRvhD1fnk3wAlgiuUED65Rn3ezm2AjsFJBIitdDyHFzgZiu/DKccakuuk8NwDZjJ\n" + - "NrTZIL32\n" + + "MIIHyjCCBbKgAwIBAgIQAa/ygp3YvweqZaezySDKSzANBgkqhkiG9w0BAQsFADBV\n" + + "MQswCQYDVQQGEwJCRTEZMBcGA1UEChMQR2xvYmFsU2lnbiBudi1zYTErMCkGA1UE\n" + + "AxMiR2xvYmFsU2lnbiBBdGxhcyBSNiBFViBUTFMgQ0EgMjAyMDAeFw0yMDA4Mjcw\n" + + "NzIwMDZaFw0yMTA5MjgwNzIwMDZaMIH6MRMwEQYLKwYBBAGCNzwCAQMTAkdCMR0w\n" + + "GwYDVQQPDBRQcml2YXRlIE9yZ2FuaXphdGlvbjERMA8GA1UEBRMIMDQ3MDU2Mzkx\n" + + "CzAJBgNVBAYTAkdCMQ0wCwYDVQQIDARLZW50MRIwEAYDVQQHDAlNYWlkc3RvbmUx\n" + + "ETAPBgNVBBEMCE1FMTQgMkxQMSkwJwYDVQQJDCBTcHJpbmdmaWVsZCBIb3VzZSwg\n" + + "U2FuZGxpbmcgUm9hZDEbMBkGA1UECgwSR01PIEdsb2JhbFNpZ24gTFREMSYwJAYD\n" + + "VQQDDB12YWxpZC5yNi5yb290cy5nbG9iYWxzaWduLmNvbTCCASIwDQYJKoZIhvcN\n" + + "AQEBBQADggEPADCCAQoCggEBAMOxbh7fZVLUB06xxNBePa9vpOuAS5km1w8ngsTu\n" + + "SvH1LZnPFd4nu40fi8bPbHd4J2oRWZ28f7LKVQgBupn9knrTQxfTV361WpmwqCcH\n" + + "MxornKyHx4t5uGrtTtX2fYoNQQk330dIKAfKpUrOiaDybB7irG2JEHdGD3Iv7ud8\n" + + "FXfXgXte26mUDX3XeCvE0pbuNKpTKApqOeojlVR6TCNB1n6KGYLMIz/1ow6XBZ64\n" + + "1zKG/9o0gSHelkUHGmGLzOAE5YpkhwzhpND9opycnfieHuy5BcoBIpeMqGNwOsGu\n" + + "p+nhFz+N8mPjSjZEf0qx+FLF2cBmNFknJJCdnV7OYfKZHE0CAwEAAaOCAu4wggLq\n" + + "MCgGA1UdEQQhMB+CHXZhbGlkLnI2LnJvb3RzLmdsb2JhbHNpZ24uY29tMA4GA1Ud\n" + + "DwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwHQYDVR0O\n" + + "BBYEFLZolpEC8/bF44e/gnh4StQ9+URwMFUGA1UdIAROMEwwBwYFZ4EMAQEwQQYJ\n" + + "KwYBBAGgMgEBMDQwMgYIKwYBBQUHAgEWJmh0dHBzOi8vd3d3Lmdsb2JhbHNpZ24u\n" + + "Y29tL3JlcG9zaXRvcnkvMAwGA1UdEwEB/wQCMAAwgZoGCCsGAQUFBwEBBIGNMIGK\n" + + "MD4GCCsGAQUFBzABhjJodHRwOi8vb2NzcC5nbG9iYWxzaWduLmNvbS9jYS9nc2F0\n" + + "bGFzcjZldnRsc2NhMjAyMDBIBggrBgEFBQcwAoY8aHR0cDovL3NlY3VyZS5nbG9i\n" + + "YWxzaWduLmNvbS9jYWNlcnQvZ3NhdGxhc3I2ZXZ0bHNjYTIwMjAuY3J0MB8GA1Ud\n" + + "IwQYMBaAFITcIQvHqF1yl4SHfvLVtvpxVk77MEYGA1UdHwQ/MD0wO6A5oDeGNWh0\n" + + "dHA6Ly9jcmwuZ2xvYmFsc2lnbi5jb20vY2EvZ3NhdGxhc3I2ZXZ0bHNjYTIwMjAu\n" + + "Y3JsMIIBAwYKKwYBBAHWeQIEAgSB9ASB8QDvAHYAfT7y+I//iFVoJMLAyp5SiXkr\n" + + "xQ54CX8uapdomX4i8NcAAAF0Lsm7CwAABAMARzBFAiB0fLxAlPzkPxZOVj7c8OFc\n" + + "YwycekW0Mo+sRm/BQYoeOgIhAK2lNW7ebraH//ZlLQD7dyzWCO+kgmkQo+mqdm1x\n" + + "4P15AHUAb1N2rDHwMRnYmQCkURX/dxUcEdkCwQApBo2yCJo32RMAAAF0Lsm7JAAA\n" + + "BAMARjBEAiALOZvdNiA9q1Ysr7ejTGdivUqNJNm9KftmGXwHFGwf2QIgDodNLmbZ\n" + + "JFGt8l5ul0fHw2Gn8KqhRUW6CMRT58svhcswDQYJKoZIhvcNAQELBQADggIBAByb\n" + + "hoL/sArmkNjTFiEEBocMfb+brgRQdb08NKC1BDxGnfIFjUmOFzI2SVgtBmcoF8FI\n" + + "0WyXQv6ZxVE01DFZpeZpsJJYfBAjg9NR4/B7UjajvOJwQNpaciAGQ0ZzTu+SmHja\n" + + "jIiC2KqiA7Me2MoUne6hhxZ3dXEneIml8hnbTf2mjSBCVpQqyf2goslhGduPitI6\n" + + "guTtVD2PVaNCVkjlRn4Euspl2JjQWzGcEruqGyQN+Bu4yt1hsD4Jj6V9Hmzo8Vrd\n" + + "5LUxFPRGIgCUDiiwnENVsQB/D24y3IapPkojujrvsVsmQN42GIgOY5tLK/8cCziD\n" + + "vf0GzZnmL1D2ezi3TaBj+XBWFcAyF2Y9AnVRmC9CrVcp6EX0KhD4g9ZgbpJZpVlk\n" + + "G3xfOiZWTeqLnQhCMXcdcutWIwXAX5gueyF1t545vECCE4PeGZNAeWqdbrj7xaS8\n" + + "3rKQdgwF9r6p7F5HHwEVCckhovEYU4DNFzYb9n/YmC3hmskFB1keTYqydKUYEGZ5\n" + + "fvLvsjRj9xwOCqIs5j1vuKw2CaqmHxrfYaDMMSZPq/iYrOWrf72wZIvtnAHePt3X\n" + + "atQMqNbDMQrjul31ljDP9CIbbtuZSkSACyMxiC10l4uTTLQiTxtZPkwIazOjnbBe\n" + + "A4fruOEQ2k1gu5oFgqmo+xuclOKNjwd/RkK4FXnD\n" + "-----END CERTIFICATE-----"; - // Owner: CN=revoked.r6.roots.globalsign.com, O=GMO GlobalSign Inc., STREET="Two International Drive, Suite 150", - // L=Portsmouth, ST=New Hampshire, C=US, OID.1.3.6.1.4.1.311.60.2.1.2=New Hampshire, OID.1.3.6.1.4.1.311.60.2.1.3=US, - // SERIALNUMBER=578611, OID.2.5.4.15=Private Organization - // Issuer: CN=GlobalSign R6 Admin CA - SHA256 - G3, O=GlobalSign nv-sa, C=BE - // Serial number: 535589c9d767cf1cd892f1dc - // Valid from: Wed Jun 13 21:36:04 PDT 2018 until: Sat Jun 13 21:36:04 PDT 2020 + // Owner: CN=revoked.r6.roots.globalsign.com, + // O=GMO GlobalSign LTD, STREET="Springfield House, Sandling Road", OID.2.5.4.17=ME14 2LP, L=Maidstone, ST=Kent, + // C=GB, SERIALNUMBER=04705639, OID.2.5.4.15=Private Organization, OID.1.3.6.1.4.1.311.60.2.1.3=GB + // Issuer: CN=GlobalSign Atlas R6 EV TLS CA 2020, O=GlobalSign nv-sa, C=BE + // Serial number: 1df30d84796ac20c47da63b8e681e8f + // Valid from: Thu Aug 27 00:37:53 PDT 2020 until: Tue Sep 28 00:37:53 PDT 2021 private static final String REVOKED = "-----BEGIN CERTIFICATE-----\n" + - "MIIHVTCCBj2gAwIBAgIMU1WJyddnzxzYkvHcMA0GCSqGSIb3DQEBCwUAMFcxCzAJ\n" + - "BgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMS0wKwYDVQQDEyRH\n" + - "bG9iYWxTaWduIFI2IEFkbWluIENBIC0gU0hBMjU2IC0gRzMwHhcNMTgwNjE0MDQz\n" + - "NjA0WhcNMjAwNjE0MDQzNjA0WjCCARQxHTAbBgNVBA8MFFByaXZhdGUgT3JnYW5p\n" + - "emF0aW9uMQ8wDQYDVQQFEwY1Nzg2MTExEzARBgsrBgEEAYI3PAIBAxMCVVMxHjAc\n" + - "BgsrBgEEAYI3PAIBAhMNTmV3IEhhbXBzaGlyZTELMAkGA1UEBhMCVVMxFjAUBgNV\n" + - "BAgTDU5ldyBIYW1wc2hpcmUxEzARBgNVBAcTClBvcnRzbW91dGgxKzApBgNVBAkT\n" + - "IlR3byBJbnRlcm5hdGlvbmFsIERyaXZlLCBTdWl0ZSAxNTAxHDAaBgNVBAoTE0dN\n" + - "TyBHbG9iYWxTaWduIEluYy4xKDAmBgNVBAMTH3Jldm9rZWQucjYucm9vdHMuZ2xv\n" + - "YmFsc2lnbi5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC6SJ+O\n" + - "PX5/ECfblZpVByiogO5sUCS23Sry3Ucn1fxFO3b6tOKppUtgZjJUxUOHj9jRIsmS\n" + - "8Tvbn+Iu35Cjj2vTsJNoFzxiMj/FBl3IqfF7w4ghLNZ+wE91cMwG0LUtDeAKTlJa\n" + - "j4Q2Gj1ZOGLPyr4flSig2bOvcIBWYjbXqwBMZek9EC58D34HF+h2fdzXPrqHHWqg\n" + - "NQpj7lxkr4XA1jXSgZJZnRfoVW+BCVidbNw9LEteF+WGcg3P9sd8XUWJtG/pb4w1\n" + - "GsCMf/ig8gkrsQvrMYPsYgQJMdypXm9eAqZmVcE94E0Uz1dbJL9zCa8y4ue9yDnp\n" + - "+gzXxToJvNzrlmUPAgMBAAGjggNgMIIDXDAOBgNVHQ8BAf8EBAMCBaAwgZYGCCsG\n" + - "AQUFBwEBBIGJMIGGMEcGCCsGAQUFBzAChjtodHRwOi8vc2VjdXJlLmdsb2JhbHNp\n" + - "Z24uY29tL2NhY2VydC9nc3I2YWRtaW5jYXNoYTI1NmczLmNydDA7BggrBgEFBQcw\n" + - "AYYvaHR0cDovL29jc3AyLmdsb2JhbHNpZ24uY29tL2dzcjZhZG1pbmNhc2hhMjU2\n" + - "ZzMwVQYDVR0gBE4wTDBBBgkrBgEEAaAyAQEwNDAyBggrBgEFBQcCARYmaHR0cHM6\n" + - "Ly93d3cuZ2xvYmFsc2lnbi5jb20vcmVwb3NpdG9yeS8wBwYFZ4EMAQEwCQYDVR0T\n" + - "BAIwADBCBgNVHR8EOzA5MDegNaAzhjFodHRwOi8vY3JsLmdsb2JhbHNpZ24uY29t\n" + - "L2dzcjZhZG1pbmNhc2hhMjU2ZzMuY3JsMCoGA1UdEQQjMCGCH3Jldm9rZWQucjYu\n" + - "cm9vdHMuZ2xvYmFsc2lnbi5jb20wHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUF\n" + - "BwMCMB0GA1UdDgQWBBR66TcwHJ5KRJZqtNB3Cqj8rWUAYzAfBgNVHSMEGDAWgBSB\n" + - "SVzpBb8MiKA4lrJdQQNa6f/XhzCCAX4GCisGAQQB1nkCBAIEggFuBIIBagFoAHYA\n" + - "VYHUwhaQNgFK6gubVzxT8MDkOHhwJQgXL6OqHQcT0wwAAAFj/JRH/gAABAMARzBF\n" + - "AiBtxn2bgwXrjx2zX3RPP3L4iFEZ1bK71oZ67RvNpI/pWQIhAK1Wg3wEdSqUUa9I\n" + - "VKSNaDaMqtI7s5yQvIV3YdDDxl+hAHcAu9nfvB+KcbWTlCOXqpJ7RzhXlQqrUuga\n" + - "kJZkNo4e0YUAAAFj/JRJMQAABAMASDBGAiEAkwpftFhujb0p9wNDywVgZPPxGdLy\n" + - "7c7WnpBLkViuvVgCIQCtWUK5pfYn+FWPKX82XmG0Hw1VgeQRPZZNAy0HQu/V0QB1\n" + - "AG9Tdqwx8DEZ2JkApFEV/3cVHBHZAsEAKQaNsgiaN9kTAAABY/yUSPUAAAQDAEYw\n" + - "RAIgEN2Y70rpA+zoK1C5bKEOYUDy6Km5pgymDEPcMBgmh5ECIEAWEPdNA9FeCwqW\n" + - "S1Mi3uOhB4dmJKNbToFWtL2lBeDrMA0GCSqGSIb3DQEBCwUAA4IBAQCDoIyqZlvt\n" + - "YeqjVCR2rvb1ZHyB5UI5rfYuoNstjaxLKP2tIDByeGwllT0vSb2otM6XjXGVuTTO\n" + - "sbVUf4aQQb82pkKXYtB6L7cfPkqrnZXJrmPYb+3xzAsr+HXyyPOu0FIVrtB/WTvd\n" + - "Qo/JyVMm7Duke/e5gudw9Lv6sb2P5B3BVcNzbv1f7589wydNvrTgdVeldyPNfuZ4\n" + - "gMT/ICoNaX+U6O3EiqYB+gLDBKVAIDsQV1k/fYq5uZr1FsTzOMesaCT4me/4I4tR\n" + - "2H7WrVajYEJ73gWUclDLxy7hoDNwR/ZuLcilAaqdwIdmVD0aFiw8RFsyZkXO5J0R\n" + - "BuecWspICLIw\n" + + "MIIHzzCCBbegAwIBAgIQAd8w2EeWrCDEfaY7jmgejzANBgkqhkiG9w0BAQsFADBV\n" + + "MQswCQYDVQQGEwJCRTEZMBcGA1UEChMQR2xvYmFsU2lnbiBudi1zYTErMCkGA1UE\n" + + "AxMiR2xvYmFsU2lnbiBBdGxhcyBSNiBFViBUTFMgQ0EgMjAyMDAeFw0yMDA4Mjcw\n" + + "NzM3NTNaFw0yMTA5MjgwNzM3NTNaMIH8MRMwEQYLKwYBBAGCNzwCAQMTAkdCMR0w\n" + + "GwYDVQQPDBRQcml2YXRlIE9yZ2FuaXphdGlvbjERMA8GA1UEBRMIMDQ3MDU2Mzkx\n" + + "CzAJBgNVBAYTAkdCMQ0wCwYDVQQIDARLZW50MRIwEAYDVQQHDAlNYWlkc3RvbmUx\n" + + "ETAPBgNVBBEMCE1FMTQgMkxQMSkwJwYDVQQJDCBTcHJpbmdmaWVsZCBIb3VzZSwg\n" + + "U2FuZGxpbmcgUm9hZDEbMBkGA1UECgwSR01PIEdsb2JhbFNpZ24gTFREMSgwJgYD\n" + + "VQQDDB9yZXZva2VkLnI2LnJvb3RzLmdsb2JhbHNpZ24uY29tMIIBIjANBgkqhkiG\n" + + "9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvaNcp7bzmm02Z0S92ZzJ/ul3uQWz3EnBORcI\n" + + "RuEzm0HY4t0n9DGnxpxOi/aWGX/Vj7qZC4m3G7uCE7dMy6CfXTwh4UZ+nPVijImo\n" + + "q/msJzmju/pk8HVeOEhk88yvwfzmzYLjoQagmHnDUSQULEmNWihejIh4B61qx4SI\n" + + "UoBPoBgqDfZW27HkJeqNAO6rljZTZwLenJesm2QMjebYaKxQBi3fLy0Lua2sxTik\n" + + "fbT3swEPN9xxvMomtNNM2tJwdExL2RpO8dObUe37ep6roG7gWh8NYDKMo6j9Rn9e\n" + + "f0S9jwkcRM2kZSHR09HSu8ULBgP+KYa8DDpOyt+HO+2G57MhbQIDAQABo4IC8TCC\n" + + "Au0wKgYDVR0RBCMwIYIfcmV2b2tlZC5yNi5yb290cy5nbG9iYWxzaWduLmNvbTAO\n" + + "BgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMB0G\n" + + "A1UdDgQWBBTa1/37G4T022LEW3WwIVV99qtjsjBVBgNVHSAETjBMMAcGBWeBDAEB\n" + + "MEEGCSsGAQQBoDIBATA0MDIGCCsGAQUFBwIBFiZodHRwczovL3d3dy5nbG9iYWxz\n" + + "aWduLmNvbS9yZXBvc2l0b3J5LzAMBgNVHRMBAf8EAjAAMIGaBggrBgEFBQcBAQSB\n" + + "jTCBijA+BggrBgEFBQcwAYYyaHR0cDovL29jc3AuZ2xvYmFsc2lnbi5jb20vY2Ev\n" + + "Z3NhdGxhc3I2ZXZ0bHNjYTIwMjAwSAYIKwYBBQUHMAKGPGh0dHA6Ly9zZWN1cmUu\n" + + "Z2xvYmFsc2lnbi5jb20vY2FjZXJ0L2dzYXRsYXNyNmV2dGxzY2EyMDIwLmNydDAf\n" + + "BgNVHSMEGDAWgBSE3CELx6hdcpeEh37y1bb6cVZO+zBGBgNVHR8EPzA9MDugOaA3\n" + + "hjVodHRwOi8vY3JsLmdsb2JhbHNpZ24uY29tL2NhL2dzYXRsYXNyNmV2dGxzY2Ey\n" + + "MDIwLmNybDCCAQQGCisGAQQB1nkCBAIEgfUEgfIA8AB2AG9Tdqwx8DEZ2JkApFEV\n" + + "/3cVHBHZAsEAKQaNsgiaN9kTAAABdC7aAfUAAAQDAEcwRQIgHIAHHw/Y/VKaaHhy\n" + + "rZ/cMinivfZ4lUq2ejV7FRPbT8ECIQD3RoE13/MBVMVBLCQ2ErKsB5+7F31dX/tv\n" + + "Z/muQi5UrQB2AH0+8viP/4hVaCTCwMqeUol5K8UOeAl/LmqXaJl+IvDXAAABdC7a\n" + + "AegAAAQDAEcwRQIhALl0LXt6pFqS0cHF/XkxSfDJJdhppR2eSlcMFpZY0q1PAiBJ\n" + + "YkKHqq/YD0gwtZAUEPSk54G1cLxFoUiounjya1XTRzANBgkqhkiG9w0BAQsFAAOC\n" + + "AgEAdeQotBhB7bn+CztQmF13rdBphHrGkkyHC3hL1bxkmHJcrLQ5ochqPvgdgAVq\n" + + "DXcV8zSyNwVxW6REi+uYzcsOPKo/llmgF7Psqn1t/EDcutWlykh8UwE5UaLJ2EWD\n" + + "HnIu06n47lWtAwlNMXJ/ce0oVjqsgY52Y1u54e8wFXt6lsSw02tzIC6eo1BFKxQ3\n" + + "lDKYVXgg0OvMG/C2rvH/EIq5r+st49rNGWfcWRoHsDUruChZOHwJ9PrXKBLB/QVd\n" + + "4uw2V/0ipOETDudly7yLodXP8quhet4bCEO9gweXppL/MikLrE5xt46HW1/6w+jF\n" + + "wKCHWlq4ViswlaQ8q0oY/97o2udnuDQaNdrLgW3VofMeBIMNPBgkLDicOH6bLwNf\n" + + "lV68qi1ZBxBuOdoOqQyZ9RU9d3EL50XEJ4MtUvjJRAT5EWdFaB8SGGZbD5fyza8c\n" + + "KmeO5tkZWYecLd8CKqwKcW7umPflEwOzw60Cxg6eyBYA8Jfagpbdb/kXsF6Ov8IW\n" + + "vxNdHCnXnR3oBWm2uHddESO2zGF1ZfOb0O3cHHG5nCgVkWW68VpgX/LaN90u6Dzw\n" + + "diJX7esZV5ZaniqD+flWldgAdcfeXlJ5b7I7GnFr61ycmZT/qupagUS1WDq/zfct\n" + + "QcB4QmnAzGe6kcqiDOSyIYWpiw09jha63KpJtJDWRemrlQI=\n" + "-----END CERTIFICATE-----"; public static void main(String[] args) throws Exception { @@ -195,8 +206,7 @@ public class GlobalSignR6CA { // Validate Revoked pathValidator.validate(new String[]{REVOKED, INT}, ValidatePathWithParams.Status.REVOKED, - "Wed Jun 13 23:36:02 PDT 2018", System.out); - + "Thu Aug 27 00:38:11 PDT 2020", System.out); } } From 6e688a90e978642fcaedf68337ec8db80558d84a Mon Sep 17 00:00:00 2001 From: Brian Burkhalter Date: Wed, 29 Jul 2020 09:52:13 -0700 Subject: [PATCH 14/28] 8247619: Improve Direct Buffering of Characters Reviewed-by: alanb, ahgross, rhalade, psandoz --- .../share/classes/java/nio/Buffer.java | 5 +-- .../java/nio/Heap-X-Buffer.java.template | 4 ++- .../classes/java/nio/X-Buffer.java.template | 32 +++++++++++++------ 3 files changed, 28 insertions(+), 13 deletions(-) diff --git a/src/java.base/share/classes/java/nio/Buffer.java b/src/java.base/share/classes/java/nio/Buffer.java index be074dcf301..666f77268f8 100644 --- a/src/java.base/share/classes/java/nio/Buffer.java +++ b/src/java.base/share/classes/java/nio/Buffer.java @@ -310,8 +310,8 @@ public abstract class Buffer { public Buffer position(int newPosition) { if (newPosition > limit | newPosition < 0) throw createPositionException(newPosition); + if (mark > newPosition) mark = -1; position = newPosition; - if (mark > position) mark = -1; return this; } @@ -500,7 +500,8 @@ public abstract class Buffer { * @return The number of elements remaining in this buffer */ public final int remaining() { - return limit - position; + int rem = limit - position; + return rem > 0 ? rem : 0; } /** diff --git a/src/java.base/share/classes/java/nio/Heap-X-Buffer.java.template b/src/java.base/share/classes/java/nio/Heap-X-Buffer.java.template index 263e699ac1f..8207d188c61 100644 --- a/src/java.base/share/classes/java/nio/Heap-X-Buffer.java.template +++ b/src/java.base/share/classes/java/nio/Heap-X-Buffer.java.template @@ -286,7 +286,9 @@ class Heap$Type$Buffer$RW$ public $Type$Buffer compact() { #if[rw] int pos = position(); - int rem = limit() - pos; + int lim = limit(); + assert (pos <= lim); + int rem = (pos <= lim ? lim - pos : 0); System.arraycopy(hb, ix(pos), hb, ix(0), rem); position(rem); limit(capacity()); diff --git a/src/java.base/share/classes/java/nio/X-Buffer.java.template b/src/java.base/share/classes/java/nio/X-Buffer.java.template index 4804f4b4319..9306cbb614e 100644 --- a/src/java.base/share/classes/java/nio/X-Buffer.java.template +++ b/src/java.base/share/classes/java/nio/X-Buffer.java.template @@ -452,15 +452,23 @@ public abstract class $Type$Buffer */ public int read(CharBuffer target) throws IOException { // Determine the number of bytes n that can be transferred - int targetRemaining = target.remaining(); int limit = limit(); - int remaining = limit - position(); - if (remaining == 0) + int pos = position(); + int remaining = limit - pos; + assert remaining >= 0; + if (remaining <= 0) // include equality condition when remaining == 0 return -1; + + int targetRemaining = target.remaining(); + assert targetRemaining >= 0; + if (targetRemaining <= 0) // include condition targetRemaining == 0 + return 0; + int n = Math.min(remaining, targetRemaining); + // Set source limit to prevent target overflow if (targetRemaining < remaining) - limit(position() + n); + limit(pos + n); try { if (n > 0) target.put(this); @@ -951,9 +959,13 @@ public abstract class $Type$Buffer throw new ReadOnlyBufferException(); int srcPos = src.position(); - int n = src.limit() - srcPos; + int srcLim = src.limit(); + int srcRem = (srcPos <= srcLim ? srcLim - srcPos : 0); int pos = position(); - if (n > limit() - pos) + int lim = limit(); + int rem = (pos <= lim ? lim - pos : 0); + + if (srcRem > rem) throw new BufferOverflowException(); Object srcBase = src.base(); @@ -969,7 +981,7 @@ public abstract class $Type$Buffer long srcAddr = src.address + ((long)srcPos << $LG_BYTES_PER_VALUE$); long addr = address + ((long)pos << $LG_BYTES_PER_VALUE$); - long len = (long)n << $LG_BYTES_PER_VALUE$; + long len = (long)srcRem << $LG_BYTES_PER_VALUE$; #if[!byte] if (this.order() == src.order()) { @@ -1000,12 +1012,12 @@ public abstract class $Type$Buffer } #end[!byte] - position(pos + n); - src.position(srcPos + n); + position(pos + srcRem); + src.position(srcPos + srcRem); #if[char] } else { // src.isAddressable() == false assert StringCharBuffer.class.isInstance(src); - for (int i = 0; i < n; i++) + for (int i = 0; i < srcRem; i++) put(src.get()); } #end[char] From 06cc40f959e244054adf8c396a3bcff4eca37338 Mon Sep 17 00:00:00 2001 From: Roger Riggs Date: Fri, 24 Jul 2020 11:00:50 -0400 Subject: [PATCH 15/28] 8249217: Unexpected StackOverflowError in "process reaper" thread still happens Reviewed-by: martin, plevart, dholmes --- .../share/classes/java/lang/ProcessHandleImpl.java | 4 ++++ .../TestHumongousNonArrayAllocation.java | 10 +++++----- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/java.base/share/classes/java/lang/ProcessHandleImpl.java b/src/java.base/share/classes/java/lang/ProcessHandleImpl.java index 8c763a19623..f51720d99f5 100644 --- a/src/java.base/share/classes/java/lang/ProcessHandleImpl.java +++ b/src/java.base/share/classes/java/lang/ProcessHandleImpl.java @@ -36,6 +36,7 @@ import java.util.concurrent.ConcurrentMap; import java.util.concurrent.Executor; import java.util.concurrent.Executors; import java.util.concurrent.ThreadFactory; +import java.util.concurrent.ThreadLocalRandom; import java.util.stream.IntStream; import java.util.stream.Stream; @@ -83,6 +84,9 @@ final class ProcessHandleImpl implements ProcessHandle { */ private static final Executor processReaperExecutor = doPrivileged((PrivilegedAction) () -> { + // Initialize ThreadLocalRandom now to avoid using the smaller stack + // of the processReaper threads. + ThreadLocalRandom.current(); ThreadGroup tg = Thread.currentThread().getThreadGroup(); while (tg.getParent() != null) tg = tg.getParent(); diff --git a/test/hotspot/jtreg/gc/g1/humongousObjects/TestHumongousNonArrayAllocation.java b/test/hotspot/jtreg/gc/g1/humongousObjects/TestHumongousNonArrayAllocation.java index 3b6ab1d13f2..c0971bf6820 100644 --- a/test/hotspot/jtreg/gc/g1/humongousObjects/TestHumongousNonArrayAllocation.java +++ b/test/hotspot/jtreg/gc/g1/humongousObjects/TestHumongousNonArrayAllocation.java @@ -45,23 +45,23 @@ import java.nio.file.Paths; * @run driver ClassFileInstaller sun.hotspot.WhiteBox * * @run main/othervm -Xms128M -Xmx128M -XX:+UseG1GC -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xbootclasspath/a:. - * -XX:G1HeapRegionSize=1M + * -XX:G1HeapRegionSize=1M -XX:AbortVMOnException=java.lang.StackOverflowError * gc.g1.humongousObjects.TestHumongousNonArrayAllocation LARGEST_NON_HUMONGOUS * * @run main/othervm -Xms128M -Xmx128M -XX:+UseG1GC -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xbootclasspath/a:. - * -XX:G1HeapRegionSize=1M + * -XX:G1HeapRegionSize=1M -XX:AbortVMOnException=java.lang.StackOverflowError * gc.g1.humongousObjects.TestHumongousNonArrayAllocation SMALLEST_HUMONGOUS * * @run main/othervm -Xms128M -Xmx128M -XX:+UseG1GC -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xbootclasspath/a:. - * -XX:G1HeapRegionSize=1M + * -XX:G1HeapRegionSize=1M -XX:AbortVMOnException=java.lang.StackOverflowError * gc.g1.humongousObjects.TestHumongousNonArrayAllocation ONE_REGION_HUMONGOUS * * @run main/othervm -Xms128M -Xmx128M -XX:+UseG1GC -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xbootclasspath/a:. - * -XX:G1HeapRegionSize=1M + * -XX:G1HeapRegionSize=1M -XX:AbortVMOnException=java.lang.StackOverflowError * gc.g1.humongousObjects.TestHumongousNonArrayAllocation TWO_REGION_HUMONGOUS * * @run main/othervm -Xms128M -Xmx128M -XX:+UseG1GC -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xbootclasspath/a:. - * -XX:G1HeapRegionSize=1M + * -XX:G1HeapRegionSize=1M -XX:AbortVMOnException=java.lang.StackOverflowError * gc.g1.humongousObjects.TestHumongousNonArrayAllocation MORE_THAN_TWO_REGION_HUMONGOUS * */ From e7d1f48da0dc7510db72b3d93840771d11aed231 Mon Sep 17 00:00:00 2001 From: Rob McKenna Date: Wed, 7 Oct 2020 02:42:04 +0000 Subject: [PATCH 16/28] Added tag jdk-15.0.2+0 for changeset 1613004c47e9 --- .hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags b/.hgtags index ac71ab288d7..d84ac440f21 100644 --- a/.hgtags +++ b/.hgtags @@ -659,3 +659,4 @@ e3f940bd3c8fcdf4ca704c6eb1ac745d155859d5 jdk-15-ga 72cddf95705e758aea928e025694e445af844d1f jdk-15.0.1+4 ac7b0cbc8dac94ff225021d2786efbad2326b037 jdk-15.0.1+5 a90f4378bf70eb17e8a8322aa0b94a4c6c923932 jdk-15.0.1+6 +1613004c47e9dc867a2c2c43d716533b1aaedc5f jdk-15.0.2+0 From 26eaf44cb8c78bb8b11a280617a550b1b6aac697 Mon Sep 17 00:00:00 2001 From: Saravana Kumar Vijayasekaran Date: Thu, 8 Oct 2020 18:12:24 +0000 Subject: [PATCH 17/28] 8250257: Bump release strings for JDK 15.0.2 Reviewed-by: tbell, erikj --- make/autoconf/version-numbers | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/make/autoconf/version-numbers b/make/autoconf/version-numbers index 7c9ddb5d60d..9bdef9e259c 100644 --- a/make/autoconf/version-numbers +++ b/make/autoconf/version-numbers @@ -38,7 +38,7 @@ DEFAULT_VERSION_CLASSFILE_MAJOR=59 # "`$EXPR $DEFAULT_VERSION_FEATURE + 44`" DEFAULT_VERSION_CLASSFILE_MINOR=0 DEFAULT_ACCEPTABLE_BOOT_VERSIONS="14 15" DEFAULT_JDK_SOURCE_TARGET_VERSION=15 -DEFAULT_PROMOTED_VERSION_PRE= +DEFAULT_PROMOTED_VERSION_PRE=ea LAUNCHER_NAME=openjdk PRODUCT_NAME=OpenJDK From 2a6fb092ca34cf5e44cc527cc24780acb283b407 Mon Sep 17 00:00:00 2001 From: Gauri Patil Date: Fri, 9 Oct 2020 10:46:03 +0530 Subject: [PATCH 18/28] 8239105: Add exception for expiring Digicert root certificates to VerifyCACerts test "8239105:added verisigntsaca and thawtepremiumserverca to EXPIRY_EXC_ENTRIES list" Reviewed-by: mullan --- test/jdk/sun/security/lib/cacerts/VerifyCACerts.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/test/jdk/sun/security/lib/cacerts/VerifyCACerts.java b/test/jdk/sun/security/lib/cacerts/VerifyCACerts.java index 5e73bd9a602..9114d9154b3 100644 --- a/test/jdk/sun/security/lib/cacerts/VerifyCACerts.java +++ b/test/jdk/sun/security/lib/cacerts/VerifyCACerts.java @@ -267,6 +267,10 @@ public class VerifyCACerts { add("addtrustexternalca [jdk]"); // Valid until: Sat May 30 10:44:50 GMT 2020 add("addtrustqualifiedca [jdk]"); + // Valid until: Fri Jan 01 15:59:59 PST 2021 + add("verisigntsaca [jdk]"); + // Valid until: Fri Jan 01 15:59:59 PST 2021 + add("thawtepremiumserverca [jdk]"); } }; From 1c15af83d60d51b061d08f2f783d7064a44f8fd8 Mon Sep 17 00:00:00 2001 From: Gauri Patil Date: Fri, 9 Oct 2020 10:50:59 +0530 Subject: [PATCH 19/28] 8254081: java/security/cert/PolicyNode/GetPolicyQualifiers.java fails due to an expired certificate Perform backdated validation of test certificate. Reviewed-by: mullan, xuelei --- .../java/security/cert/PolicyNode/GetPolicyQualifiers.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/test/jdk/java/security/cert/PolicyNode/GetPolicyQualifiers.java b/test/jdk/java/security/cert/PolicyNode/GetPolicyQualifiers.java index 05032e4370a..112cda894e4 100644 --- a/test/jdk/java/security/cert/PolicyNode/GetPolicyQualifiers.java +++ b/test/jdk/java/security/cert/PolicyNode/GetPolicyQualifiers.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2020, 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 @@ -30,9 +30,11 @@ import java.io.File; import java.io.FileInputStream; import java.security.cert.*; +import java.text.DateFormat; import java.util.Collections; import java.util.Iterator; import java.util.List; +import java.util.Locale; import java.util.Set; public class GetPolicyQualifiers { @@ -52,6 +54,9 @@ public class GetPolicyQualifiers { PKIXParameters params = new PKIXParameters(trustAnchors); params.setPolicyQualifiersRejected(false); params.setRevocationEnabled(false); + // Certificates expired on Oct 6th, 2020 + params.setDate(DateFormat.getDateInstance(DateFormat.MEDIUM, + Locale.US).parse("July 01, 2020")); List certList = Collections.singletonList(eeCert); CertPath cp = cf.generateCertPath(certList); PKIXCertPathValidatorResult result = From ef1f36a9a10986c1aaa9d574995f53c6f52b19fa Mon Sep 17 00:00:00 2001 From: Saravana Kumar Vijayasekaran Date: Fri, 9 Oct 2020 20:37:14 -0700 Subject: [PATCH 20/28] Added tag jdk-15.0.2+1 for changeset cc4fdb537bc1 --- .hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags b/.hgtags index d84ac440f21..7bb701ea563 100644 --- a/.hgtags +++ b/.hgtags @@ -660,3 +660,4 @@ e3f940bd3c8fcdf4ca704c6eb1ac745d155859d5 jdk-15-ga ac7b0cbc8dac94ff225021d2786efbad2326b037 jdk-15.0.1+5 a90f4378bf70eb17e8a8322aa0b94a4c6c923932 jdk-15.0.1+6 1613004c47e9dc867a2c2c43d716533b1aaedc5f jdk-15.0.2+0 +cc4fdb537bc14734064a9a8eadb091fd1c12b36e jdk-15.0.2+1 From 66457ec7b444258e5a7c533e043ec50595868b6c Mon Sep 17 00:00:00 2001 From: Saravana Kumar Vijayasekaran Date: Wed, 14 Oct 2020 07:56:35 -0700 Subject: [PATCH 21/28] Added tag jdk-15.0.2+2 for changeset d24e907486b3 --- .hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags b/.hgtags index 7bb701ea563..3fa8ec0f161 100644 --- a/.hgtags +++ b/.hgtags @@ -661,3 +661,4 @@ ac7b0cbc8dac94ff225021d2786efbad2326b037 jdk-15.0.1+5 a90f4378bf70eb17e8a8322aa0b94a4c6c923932 jdk-15.0.1+6 1613004c47e9dc867a2c2c43d716533b1aaedc5f jdk-15.0.2+0 cc4fdb537bc14734064a9a8eadb091fd1c12b36e jdk-15.0.2+1 +d24e907486b3f90691980b0dde01efca5840abc6 jdk-15.0.2+2 From d02d979f12645f0c658691072e3865eb3c1443da Mon Sep 17 00:00:00 2001 From: Saravana Kumar Vijayasekaran Date: Fri, 23 Oct 2020 00:59:00 -0700 Subject: [PATCH 22/28] Added tag jdk-15.0.2+3 for changeset dbb11e11955a --- .hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags b/.hgtags index 3fa8ec0f161..4cad541ce7e 100644 --- a/.hgtags +++ b/.hgtags @@ -662,3 +662,4 @@ a90f4378bf70eb17e8a8322aa0b94a4c6c923932 jdk-15.0.1+6 1613004c47e9dc867a2c2c43d716533b1aaedc5f jdk-15.0.2+0 cc4fdb537bc14734064a9a8eadb091fd1c12b36e jdk-15.0.2+1 d24e907486b3f90691980b0dde01efca5840abc6 jdk-15.0.2+2 +dbb11e11955ad1240ba775ab0007a14547e14ce6 jdk-15.0.2+3 From c52f76888b1c896b161f15fa053455545b7662ff Mon Sep 17 00:00:00 2001 From: Saravana Kumar Vijayasekaran Date: Thu, 29 Oct 2020 14:26:59 +0000 Subject: [PATCH 23/28] 8255599: Change jdk 15.0.2 milestone to fcs for build b04 Reviewed-by: robm --- make/autoconf/version-numbers | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/make/autoconf/version-numbers b/make/autoconf/version-numbers index 9bdef9e259c..7c9ddb5d60d 100644 --- a/make/autoconf/version-numbers +++ b/make/autoconf/version-numbers @@ -38,7 +38,7 @@ DEFAULT_VERSION_CLASSFILE_MAJOR=59 # "`$EXPR $DEFAULT_VERSION_FEATURE + 44`" DEFAULT_VERSION_CLASSFILE_MINOR=0 DEFAULT_ACCEPTABLE_BOOT_VERSIONS="14 15" DEFAULT_JDK_SOURCE_TARGET_VERSION=15 -DEFAULT_PROMOTED_VERSION_PRE=ea +DEFAULT_PROMOTED_VERSION_PRE= LAUNCHER_NAME=openjdk PRODUCT_NAME=OpenJDK From a7542497c8e485cbef7ecb3cc00d32c85ac44bd7 Mon Sep 17 00:00:00 2001 From: Saravana Kumar Vijayasekaran Date: Fri, 30 Oct 2020 05:32:56 -0700 Subject: [PATCH 24/28] Added tag jdk-15.0.2+4 for changeset 4c4a2eb7b19e --- .hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags b/.hgtags index 4cad541ce7e..ce0fc5efaab 100644 --- a/.hgtags +++ b/.hgtags @@ -663,3 +663,4 @@ a90f4378bf70eb17e8a8322aa0b94a4c6c923932 jdk-15.0.1+6 cc4fdb537bc14734064a9a8eadb091fd1c12b36e jdk-15.0.2+1 d24e907486b3f90691980b0dde01efca5840abc6 jdk-15.0.2+2 dbb11e11955ad1240ba775ab0007a14547e14ce6 jdk-15.0.2+3 +4c4a2eb7b19ecb31620e6bb120e40f8a5fd1737a jdk-15.0.2+4 From 09cfa175f00f1e261ae63d40c9a2c08e83a53cc4 Mon Sep 17 00:00:00 2001 From: Saravana Kumar Vijayasekaran Date: Wed, 11 Nov 2020 07:22:56 -0800 Subject: [PATCH 25/28] Added tag jdk-15.0.2+5 for changeset e431a9461b13 --- .hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags b/.hgtags index 47ac770fac8..9b85f7a8fae 100644 --- a/.hgtags +++ b/.hgtags @@ -668,3 +668,4 @@ cc4fdb537bc14734064a9a8eadb091fd1c12b36e jdk-15.0.2+1 d24e907486b3f90691980b0dde01efca5840abc6 jdk-15.0.2+2 dbb11e11955ad1240ba775ab0007a14547e14ce6 jdk-15.0.2+3 4c4a2eb7b19ecb31620e6bb120e40f8a5fd1737a jdk-15.0.2+4 +e431a9461b1356c4b763443e5333b3f4a8695eaf jdk-15.0.2+5 From 7c4edb69fb25375bd2e96176440aef270febf4c1 Mon Sep 17 00:00:00 2001 From: Saravana Kumar Vijayasekaran Date: Wed, 25 Nov 2020 00:28:38 -0800 Subject: [PATCH 26/28] Added tag jdk-15.0.2+6 for changeset d5977ee56509 --- .hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags b/.hgtags index 9b85f7a8fae..f62d571dd21 100644 --- a/.hgtags +++ b/.hgtags @@ -669,3 +669,4 @@ d24e907486b3f90691980b0dde01efca5840abc6 jdk-15.0.2+2 dbb11e11955ad1240ba775ab0007a14547e14ce6 jdk-15.0.2+3 4c4a2eb7b19ecb31620e6bb120e40f8a5fd1737a jdk-15.0.2+4 e431a9461b1356c4b763443e5333b3f4a8695eaf jdk-15.0.2+5 +d5977ee56509ceaa3d3c8e1aebbca76651358da4 jdk-15.0.2+6 From 2a85ee4a169543000d9ac17c4781086e743b5f85 Mon Sep 17 00:00:00 2001 From: Saravana Kumar Vijayasekaran Date: Thu, 10 Dec 2020 00:39:01 -0800 Subject: [PATCH 27/28] Added tag jdk-15.0.2+7 for changeset 38912b2a5bcb --- .hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags b/.hgtags index f62d571dd21..44253a632f3 100644 --- a/.hgtags +++ b/.hgtags @@ -670,3 +670,4 @@ dbb11e11955ad1240ba775ab0007a14547e14ce6 jdk-15.0.2+3 4c4a2eb7b19ecb31620e6bb120e40f8a5fd1737a jdk-15.0.2+4 e431a9461b1356c4b763443e5333b3f4a8695eaf jdk-15.0.2+5 d5977ee56509ceaa3d3c8e1aebbca76651358da4 jdk-15.0.2+6 +38912b2a5bcb396c75f8707e300773c874327451 jdk-15.0.2+7 From 086b5e0bda466c6f637a66a54f1bdf9c2c5dc22f Mon Sep 17 00:00:00 2001 From: Rob McKenna Date: Wed, 20 Jan 2021 17:24:31 +0000 Subject: [PATCH 28/28] Added tag jdk-15.0.2-ga for changeset 465ac9b408ca --- .hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags b/.hgtags index 44253a632f3..6c778b2914c 100644 --- a/.hgtags +++ b/.hgtags @@ -671,3 +671,4 @@ dbb11e11955ad1240ba775ab0007a14547e14ce6 jdk-15.0.2+3 e431a9461b1356c4b763443e5333b3f4a8695eaf jdk-15.0.2+5 d5977ee56509ceaa3d3c8e1aebbca76651358da4 jdk-15.0.2+6 38912b2a5bcb396c75f8707e300773c874327451 jdk-15.0.2+7 +465ac9b408cae3e98c4f4630d22e653e725187ae jdk-15.0.2-ga