diff options
Diffstat (limited to 'java/openjdk8/files/patch-8u25-b17')
-rw-r--r-- | java/openjdk8/files/patch-8u25-b17 | 5306 |
1 files changed, 0 insertions, 5306 deletions
diff --git a/java/openjdk8/files/patch-8u25-b17 b/java/openjdk8/files/patch-8u25-b17 deleted file mode 100644 index e469f8b9ad4f..000000000000 --- a/java/openjdk8/files/patch-8u25-b17 +++ /dev/null @@ -1,5306 +0,0 @@ ---- ./.hgtags Wed Jul 30 03:50:56 2014 -0700 -+++ ./.hgtags Wed Sep 17 11:23:18 2014 -0700 -@@ -313,3 +313,21 @@ - b14daf2459c5430dfe5d435483d6f424cff09584 jdk8u20-b23 - 1710841b0229403f4af85eac8b68ea5065a26c81 jdk8u20-b24 - 1710841b0229403f4af85eac8b68ea5065a26c81 jdk8u20-b25 -+d1a7ea2c3e1091e0df1285963328a96f475f240d jdk8u20-b26 -+97c6d6a8e5bb3dfc24b9a32711aa0906ea110e23 jdk8u25-b00 -+c4cfb4376f5916c5d7eb1f39a0e23402de0d9818 jdk8u25-b01 -+b4d29a751077e5500e766b8104dd1cb7148a550f jdk8u25-b02 -+d3df54be114a5c41d4881b61cd42fbb0e52aaf4a jdk8u25-b03 -+64e7567a8539078a678853a384340eee469168b0 jdk8u25-b04 -+6de13ae93be20b97f53e3837739947d59fb4fd65 jdk8u25-b05 -+69d17ee59c0e77033aca293501a642d0abc20c85 jdk8u25-b06 -+561d066eaa6428088b4f7e273a8caed90e8f6073 jdk8u25-b07 -+c2a5ad21d01c5d921c4e928edcb14cc3d61eb62b jdk8u25-b08 -+1249614d7f1d9bf8443f0abd0622b4d2a3ab0638 jdk8u25-b09 -+0c5d41165be3f4bb989bd84283c2df3e37b9845d jdk8u25-b10 -+cc5ab3e0fe815ae80bb52fa5affcb35ee0f51cff jdk8u25-b11 -+c35e73e4acd8ed03e77e8e20023bac115c7dfe38 jdk8u25-b12 -+5d990a43c996ef039c6619e55215d589e09d1022 jdk8u25-b13 -+4429ea47ee6eca6b8a1dbda1950566ee821ba19d jdk8u25-b14 -+09eaef69f384ecf8ec0342b87a8b150740941140 jdk8u25-b15 -+f0a48c214c46b7351ff8e6d6b6dc533463a4be21 jdk8u25-b16 ---- ./common/autoconf/generated-configure.sh Wed Jul 30 03:50:56 2014 -0700 -+++ ./common/autoconf/generated-configure.sh Wed Sep 17 11:23:18 2014 -0700 -@@ -3868,7 +3868,7 @@ - #CUSTOM_AUTOCONF_INCLUDE - - # Do not change or remove the following line, it is needed for consistency checks: --DATE_WHEN_GENERATED=1397150809 -+DATE_WHEN_GENERATED=1410971760 - - ############################################################################### - # ---- ./make/Jprt.gmk Wed Jul 30 03:50:56 2014 -0700 -+++ ./make/Jprt.gmk Wed Sep 17 11:23:18 2014 -0700 -@@ -145,6 +145,9 @@ - ifdef ALT_INSTALL_UPX_FILENAME - @$(ECHO) " --with-upx-filename=$(call UnixPath,$(ALT_INSTALL_UPX_FILENAME)) " >> $@.tmp - endif -+ ifdef ALT_BSDIFF_DIR -+ @$(ECHO) " --with-bsdiff-dir=$(call UnixPath,$(ALT_BSDIFF_DIR)) " >> $@.tmp -+ endif - ifdef ALT_CCSS_SIGNING_DIR - @$(ECHO) " --with-ccss-signing=$(call UnixPath,$(ALT_CCSS_SIGNING_DIR)) " >> $@.tmp - endif ---- ./make/jprt.properties Wed Jul 30 03:50:56 2014 -0700 -+++ ./make/jprt.properties Wed Sep 17 11:23:18 2014 -0700 -@@ -25,8 +25,9 @@ - - # Properties for jprt - --# Locked down to jdk8 --jprt.tools.default.release=jdk8 -+# The current release name -+my.jdk.update.version=25 -+jprt.tools.default.release=jdk8u${my.jdk.update.version} - - # Unix toolkit to use for building on windows - jprt.windows.jdk8.build.unix.toolkit=cygwin ---- ./corba/.hgtags Wed Jul 30 03:51:08 2014 -0700 -+++ ./corba/.hgtags Mon Sep 08 12:34:37 2014 -0700 -@@ -311,3 +311,21 @@ - 919405d7316dfcbddee5ad8dd08905916df88e04 jdk8u20-b23 - 34c930eaa6b591621afde05ca2e24571c91cdc9b jdk8u20-b24 - 34c930eaa6b591621afde05ca2e24571c91cdc9b jdk8u20-b25 -+37bde23c96f66912c44b1b893c08d4ad4cff5f4e jdk8u20-b26 -+08aa9f55fe5bce1f04cfd2958f71e8df18643e29 jdk8u25-b00 -+31f50e3c0dcbdfa7f11a895179065e6888c2cf3c jdk8u25-b01 -+162703b7c2f16ce00d1b54a8f95d12eda9753eba jdk8u25-b02 -+ddaa2a3e452c8fbb1a7046e743096d0f9489290e jdk8u25-b03 -+a76e6e02711edbfab4931dc679cbd3df6169ec84 jdk8u25-b04 -+2fab01326282ee9033c089933b2dc46aef127abd jdk8u25-b05 -+76068779ea16c40a9d3c14751a3bbd6c21f09cfd jdk8u25-b06 -+db4d845d6a4d71ef5e48a8888f71375b0e21959f jdk8u25-b07 -+afd9d9e1bbb5ab77c95a8750d2df164e05088d09 jdk8u25-b08 -+1322b445ab39930c50c3901f6c439aad99a62fe8 jdk8u25-b09 -+2e6da97d338ad5a65bf07f9d9648dcb74b5776b4 jdk8u25-b10 -+11f77cdff0b2a07fd89f439b044d9f10a15f8fd5 jdk8u25-b11 -+f560274aec4f42283c10070921afae403a153de2 jdk8u25-b12 -+987bd55824c4794c8784a47fc45ecd18a9c2a5c8 jdk8u25-b13 -+7e9a2027d0214019d66325fa7ca59cf8281fb43e jdk8u25-b14 -+5b2cb4935667cd02d7974b3b6fb6bf4092b5acae jdk8u25-b15 -+28d7f90e04e46ce8c633a2fbf0157d9e77db17c3 jdk8u25-b16 ---- ./hotspot/.hgtags Wed Jul 30 03:51:43 2014 -0700 -+++ ./hotspot/.hgtags Mon Sep 08 12:35:01 2014 -0700 -@@ -500,3 +500,21 @@ - 42ddd0bbcb6630fe463ec9bc1893c838d5edff1b jdk8u20-b24 - 00cf2b6f51b9560b01030e8f4c28c466f0b21fe3 hs25.20-b23 - 19408d5fd31c25ce60c43dd33e92b96e8df4a4ea jdk8u20-b25 -+eaa4074a7e3975cd33ec55e6b584586e2ac681bd jdk8u20-b26 -+a4d44dfb7d30eea54bc172e4429a655454ae0bbf jdk8u25-b00 -+9a2152fbd929b0d8b2f5c326a5526214ae71731a jdk8u25-b01 -+d3d5604ea0dea3812e87ba76ac199d0a8be6f49f jdk8u25-b02 -+27348de6239bb527c37c0bf59e938ed127b619a7 jdk8u25-b03 -+220eefb3609e250a0bb0ed26236c1213b8000050 jdk8u25-b04 -+db8383148bc9417dd4c38fa4cea39510f17325f3 jdk8u25-b05 -+605df8463453628df49351fa63632666f18698cd jdk8u25-b06 -+520188d4bade17dbe75163d1f635c08168ea560c jdk8u25-b07 -+f3f50c4f9ea5d3af40cb794b6f3f2a337c8873db jdk8u25-b08 -+4f209b7a580c78bac255e69f4724c42584c32a7d jdk8u25-b09 -+19c692f1e4c571a9285e33e7d3d15948769fcbdd jdk8u25-b10 -+9e2bb00a81910776d5b16c49a3f4c5264ceab522 jdk8u25-b11 -+2993491d47df8c4b096ea7fa534162bde8b53dcf jdk8u25-b12 -+ca6d25be853b5c428c6228871316671843264666 jdk8u25-b13 -+c77d5db189422e2eef0443ee212644e497113b18 jdk8u25-b14 -+e62c06b887310b5bd23be9b817a9a6f0daf0d0e1 jdk8u25-b15 -+6467bdd4d22d8b140844dc847c43b9ba7cb0bbd1 jdk8u25-b16 ---- ./hotspot/make/bsd/makefiles/mapfile-vers-debug Wed Jul 30 03:51:43 2014 -0700 -+++ ./hotspot/make/bsd/makefiles/mapfile-vers-debug Mon Sep 08 12:35:01 2014 -0700 -@@ -1,5 +1,5 @@ - # --# Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved. -+# Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved. - # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - # - # This code is free software; you can redistribute it and/or modify it -@@ -82,6 +82,7 @@ - _JVM_EnableCompiler - _JVM_Exit - _JVM_FillInStackTrace -+ _JVM_FindClassFromCaller - _JVM_FindClassFromClass - _JVM_FindClassFromClassLoader - _JVM_FindClassFromBootLoader ---- ./hotspot/make/bsd/makefiles/mapfile-vers-product Wed Jul 30 03:51:43 2014 -0700 -+++ ./hotspot/make/bsd/makefiles/mapfile-vers-product Mon Sep 08 12:35:01 2014 -0700 -@@ -1,5 +1,5 @@ - # --# Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved. -+# Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved. - # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - # - # This code is free software; you can redistribute it and/or modify it -@@ -82,6 +82,7 @@ - _JVM_EnableCompiler - _JVM_Exit - _JVM_FillInStackTrace -+ _JVM_FindClassFromCaller - _JVM_FindClassFromClass - _JVM_FindClassFromClassLoader - _JVM_FindClassFromBootLoader ---- ./hotspot/make/hotspot_version Wed Jul 30 03:51:43 2014 -0700 -+++ ./hotspot/make/hotspot_version Mon Sep 08 12:35:01 2014 -0700 -@@ -34,8 +34,8 @@ - HOTSPOT_VM_COPYRIGHT=Copyright 2014 - - HS_MAJOR_VER=25 --HS_MINOR_VER=20 --HS_BUILD_NUMBER=23 -+HS_MINOR_VER=25 -+HS_BUILD_NUMBER=02 - - JDK_MAJOR_VER=1 - JDK_MINOR_VER=8 ---- ./hotspot/make/linux/makefiles/mapfile-vers-debug Wed Jul 30 03:51:43 2014 -0700 -+++ ./hotspot/make/linux/makefiles/mapfile-vers-debug Mon Sep 08 12:35:01 2014 -0700 -@@ -1,5 +1,5 @@ - # --# Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved. -+# Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved. - # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - # - # This code is free software; you can redistribute it and/or modify it -@@ -84,6 +84,7 @@ - JVM_EnableCompiler; - JVM_Exit; - JVM_FillInStackTrace; -+ JVM_FindClassFromCaller; - JVM_FindClassFromClass; - JVM_FindClassFromClassLoader; - JVM_FindClassFromBootLoader; ---- ./hotspot/make/linux/makefiles/mapfile-vers-product Wed Jul 30 03:51:43 2014 -0700 -+++ ./hotspot/make/linux/makefiles/mapfile-vers-product Mon Sep 08 12:35:01 2014 -0700 -@@ -1,5 +1,5 @@ - # --# Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved. -+# Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved. - # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - # - # This code is free software; you can redistribute it and/or modify it -@@ -84,6 +84,7 @@ - JVM_EnableCompiler; - JVM_Exit; - JVM_FillInStackTrace; -+ JVM_FindClassFromCaller; - JVM_FindClassFromClass; - JVM_FindClassFromClassLoader; - JVM_FindClassFromBootLoader; ---- ./hotspot/make/solaris/makefiles/mapfile-vers Wed Jul 30 03:51:43 2014 -0700 -+++ ./hotspot/make/solaris/makefiles/mapfile-vers Mon Sep 08 12:35:01 2014 -0700 -@@ -1,5 +1,5 @@ - # --# Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. -+# Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. - # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - # - # This code is free software; you can redistribute it and/or modify it -@@ -84,6 +84,7 @@ - JVM_EnableCompiler; - JVM_Exit; - JVM_FillInStackTrace; -+ JVM_FindClassFromCaller; - JVM_FindClassFromClass; - JVM_FindClassFromClassLoader; - JVM_FindClassFromBootLoader; ---- ./hotspot/src/share/vm/classfile/classFileParser.cpp Wed Jul 30 03:51:43 2014 -0700 -+++ ./hotspot/src/share/vm/classfile/classFileParser.cpp Mon Sep 08 12:35:01 2014 -0700 -@@ -2780,11 +2780,6 @@ - ClassFileStream* cfs = stream(); - u1* current_start = cfs->current(); - -- guarantee_property(attribute_byte_length > sizeof(u2), -- "Invalid BootstrapMethods attribute length %u in class file %s", -- attribute_byte_length, -- CHECK); -- - cfs->guarantee_more(attribute_byte_length, CHECK); - - int attribute_array_length = cfs->get_u2_fast(); -@@ -2831,6 +2826,11 @@ - "bootstrap_method_index %u has bad constant type in class file %s", - bootstrap_method_index, - CHECK); -+ -+ guarantee_property((operand_fill_index + 1 + argument_count) < operands->length(), -+ "Invalid BootstrapMethods num_bootstrap_methods or num_bootstrap_arguments value in class file %s", -+ CHECK); -+ - operands->at_put(operand_fill_index++, bootstrap_method_index); - operands->at_put(operand_fill_index++, argument_count); - -@@ -2848,7 +2848,6 @@ - } - - assert(operand_fill_index == operands->length(), "exact fill"); -- assert(ConstantPool::operand_array_length(operands) == attribute_array_length, "correct decode"); - - u1* current_end = cfs->current(); - guarantee_property(current_end == current_start + attribute_byte_length, ---- ./hotspot/src/share/vm/classfile/classLoader.cpp Wed Jul 30 03:51:43 2014 -0700 -+++ ./hotspot/src/share/vm/classfile/classLoader.cpp Mon Sep 08 12:35:01 2014 -0700 -@@ -84,6 +84,7 @@ - typedef jboolean (JNICALL *ReadEntry_t)(jzfile *zip, jzentry *entry, unsigned char *buf, char *namebuf); - typedef jboolean (JNICALL *ReadMappedEntry_t)(jzfile *zip, jzentry *entry, unsigned char **buf, char *namebuf); - typedef jzentry* (JNICALL *GetNextEntry_t)(jzfile *zip, jint n); -+typedef jint (JNICALL *Crc32_t)(jint crc, const jbyte *buf, jint len); - - static ZipOpen_t ZipOpen = NULL; - static ZipClose_t ZipClose = NULL; -@@ -92,6 +93,7 @@ - static ReadMappedEntry_t ReadMappedEntry = NULL; - static GetNextEntry_t GetNextEntry = NULL; - static canonicalize_fn_t CanonicalizeEntry = NULL; -+static Crc32_t Crc32 = NULL; - - // Globals - -@@ -632,9 +634,11 @@ - ReadEntry = CAST_TO_FN_PTR(ReadEntry_t, os::dll_lookup(handle, "ZIP_ReadEntry")); - ReadMappedEntry = CAST_TO_FN_PTR(ReadMappedEntry_t, os::dll_lookup(handle, "ZIP_ReadMappedEntry")); - GetNextEntry = CAST_TO_FN_PTR(GetNextEntry_t, os::dll_lookup(handle, "ZIP_GetNextEntry")); -+ Crc32 = CAST_TO_FN_PTR(Crc32_t, os::dll_lookup(handle, "ZIP_CRC32")); - - // ZIP_Close is not exported on Windows in JDK5.0 so don't abort if ZIP_Close is NULL -- if (ZipOpen == NULL || FindEntry == NULL || ReadEntry == NULL || GetNextEntry == NULL) { -+ if (ZipOpen == NULL || FindEntry == NULL || ReadEntry == NULL || -+ GetNextEntry == NULL || Crc32 == NULL) { - vm_exit_during_initialization("Corrupted ZIP library", path); - } - -@@ -644,6 +648,11 @@ - // This lookup only works on 1.3. Do not check for non-null here - } - -+int ClassLoader::crc32(int crc, const char* buf, int len) { -+ assert(Crc32 != NULL, "ZIP_CRC32 is not found"); -+ return (*Crc32)(crc, (const jbyte*)buf, len); -+} -+ - // PackageInfo data exists in order to support the java.lang.Package - // class. A Package object provides information about a java package - // (version, vendor, etc.) which originates in the manifest of the jar ---- ./hotspot/src/share/vm/classfile/classLoader.hpp Wed Jul 30 03:51:43 2014 -0700 -+++ ./hotspot/src/share/vm/classfile/classLoader.hpp Mon Sep 08 12:35:01 2014 -0700 -@@ -215,6 +215,7 @@ - // to avoid confusing the zip library - static bool get_canonical_path(char* orig, char* out, int len); - public: -+ static int crc32(int crc, const char* buf, int len); - // Used by the kernel jvm. - static void update_class_path_entry_list(char *path, - bool check_for_duplicates); ---- ./hotspot/src/share/vm/classfile/stackMapFrame.cpp Wed Jul 30 03:51:43 2014 -0700 -+++ ./hotspot/src/share/vm/classfile/stackMapFrame.cpp Mon Sep 08 12:35:01 2014 -0700 -@@ -1,5 +1,5 @@ - /* -- * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. -+ * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it -@@ -54,21 +54,6 @@ - return frame; - } - --bool StackMapFrame::has_new_object() const { -- int32_t i; -- for (i = 0; i < _max_locals; i++) { -- if (_locals[i].is_uninitialized()) { -- return true; -- } -- } -- for (i = 0; i < _stack_size; i++) { -- if (_stack[i].is_uninitialized()) { -- return true; -- } -- } -- return false; --} -- - void StackMapFrame::initialize_object( - VerificationType old_object, VerificationType new_object) { - int32_t i; -@@ -163,7 +148,7 @@ - VerificationType* from, VerificationType* to, int32_t len, TRAPS) const { - int32_t i = 0; - for (i = 0; i < len; i++) { -- if (!to[i].is_assignable_from(from[i], verifier(), THREAD)) { -+ if (!to[i].is_assignable_from(from[i], verifier(), false, THREAD)) { - break; - } - } -@@ -260,7 +245,7 @@ - } - VerificationType top = _stack[--_stack_size]; - bool subtype = type.is_assignable_from( -- top, verifier(), CHECK_(VerificationType::bogus_type())); -+ top, verifier(), false, CHECK_(VerificationType::bogus_type())); - if (!subtype) { - verifier()->verify_error( - ErrorContext::bad_type(_offset, stack_top_ctx(), -@@ -280,7 +265,7 @@ - return VerificationType::bogus_type(); - } - bool subtype = type.is_assignable_from(_locals[index], -- verifier(), CHECK_(VerificationType::bogus_type())); -+ verifier(), false, CHECK_(VerificationType::bogus_type())); - if (!subtype) { - verifier()->verify_error( - ErrorContext::bad_type(_offset, -@@ -303,14 +288,14 @@ - "get long/double overflows locals"); - return; - } -- bool subtype = type1.is_assignable_from(_locals[index], verifier(), CHECK); -+ bool subtype = type1.is_assignable_from(_locals[index], verifier(), false, CHECK); - if (!subtype) { - verifier()->verify_error( - ErrorContext::bad_type(_offset, - TypeOrigin::local(index, this), TypeOrigin::implicit(type1)), - "Bad local variable type"); - } else { -- subtype = type2.is_assignable_from(_locals[index + 1], verifier(), CHECK); -+ subtype = type2.is_assignable_from(_locals[index + 1], verifier(), false, CHECK); - if (!subtype) { - /* Unreachable? All local store routines convert a split long or double - * into a TOP during the store. So we should never end up seeing an ---- ./hotspot/src/share/vm/classfile/stackMapFrame.hpp Wed Jul 30 03:51:43 2014 -0700 -+++ ./hotspot/src/share/vm/classfile/stackMapFrame.hpp Mon Sep 08 12:35:01 2014 -0700 -@@ -1,5 +1,5 @@ - /* -- * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. -+ * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it -@@ -155,10 +155,6 @@ - const methodHandle m, VerificationType thisKlass, TRAPS); - - // Search local variable type array and stack type array. -- // Return true if an uninitialized object is found. -- bool has_new_object() const; -- -- // Search local variable type array and stack type array. - // Set every element with type of old_object to new_object. - void initialize_object( - VerificationType old_object, VerificationType new_object); -@@ -238,7 +234,7 @@ - if (_stack_size != 0) { - VerificationType top = _stack[_stack_size - 1]; - bool subtype = type.is_assignable_from( -- top, verifier(), CHECK_(VerificationType::bogus_type())); -+ top, verifier(), false, CHECK_(VerificationType::bogus_type())); - if (subtype) { - --_stack_size; - return top; -@@ -253,9 +249,9 @@ - assert(type2.is_long() || type2.is_double(), "must be long/double_2"); - if (_stack_size >= 2) { - VerificationType top1 = _stack[_stack_size - 1]; -- bool subtype1 = type1.is_assignable_from(top1, verifier(), CHECK); -+ bool subtype1 = type1.is_assignable_from(top1, verifier(), false, CHECK); - VerificationType top2 = _stack[_stack_size - 2]; -- bool subtype2 = type2.is_assignable_from(top2, verifier(), CHECK); -+ bool subtype2 = type2.is_assignable_from(top2, verifier(), false, CHECK); - if (subtype1 && subtype2) { - _stack_size -= 2; - return; ---- ./hotspot/src/share/vm/classfile/stackMapTable.cpp Wed Jul 30 03:51:43 2014 -0700 -+++ ./hotspot/src/share/vm/classfile/stackMapTable.cpp Mon Sep 08 12:35:01 2014 -0700 -@@ -70,24 +70,26 @@ - - bool StackMapTable::match_stackmap( - StackMapFrame* frame, int32_t target, -- bool match, bool update, ErrorContext* ctx, TRAPS) const { -+ bool match, bool update, bool handler, ErrorContext* ctx, TRAPS) const { - int index = get_index_from_offset(target); -- return match_stackmap(frame, target, index, match, update, ctx, THREAD); -+ return match_stackmap(frame, target, index, match, update, handler, ctx, THREAD); - } - - // Match and/or update current_frame to the frame in stackmap table with - // specified offset and frame index. Return true if the two frames match. -+// handler is true if the frame in stackmap_table is for an exception handler. - // --// The values of match and update are: _match__update_ -+// The values of match and update are: _match__update__handler - // --// checking a branch target/exception handler: true false -+// checking a branch target: true false false -+// checking an exception handler: true false true - // linear bytecode verification following an --// unconditional branch: false true -+// unconditional branch: false true false - // linear bytecode verification not following an --// unconditional branch: true true -+// unconditional branch: true true false - bool StackMapTable::match_stackmap( - StackMapFrame* frame, int32_t target, int32_t frame_index, -- bool match, bool update, ErrorContext* ctx, TRAPS) const { -+ bool match, bool update, bool handler, ErrorContext* ctx, TRAPS) const { - if (frame_index < 0 || frame_index >= _frame_count) { - *ctx = ErrorContext::missing_stackmap(frame->offset()); - frame->verifier()->verify_error( -@@ -98,11 +100,9 @@ - StackMapFrame *stackmap_frame = _frame_array[frame_index]; - bool result = true; - if (match) { -- // when checking handler target, match == true && update == false -- bool is_exception_handler = !update; - // Has direct control flow from last instruction, need to match the two - // frames. -- result = frame->is_assignable_to(stackmap_frame, is_exception_handler, -+ result = frame->is_assignable_to(stackmap_frame, handler, - ctx, CHECK_VERIFY_(frame->verifier(), result)); - } - if (update) { -@@ -126,24 +126,10 @@ - StackMapFrame* frame, int32_t target, TRAPS) const { - ErrorContext ctx; - bool match = match_stackmap( -- frame, target, true, false, &ctx, CHECK_VERIFY(frame->verifier())); -+ frame, target, true, false, false, &ctx, CHECK_VERIFY(frame->verifier())); - if (!match || (target < 0 || target >= _code_length)) { - frame->verifier()->verify_error(ctx, - "Inconsistent stackmap frames at branch target %d", target); -- return; -- } -- // check if uninitialized objects exist on backward branches -- check_new_object(frame, target, CHECK_VERIFY(frame->verifier())); -- frame->verifier()->update_furthest_jump(target); --} -- --void StackMapTable::check_new_object( -- const StackMapFrame* frame, int32_t target, TRAPS) const { -- if (frame->offset() > target && frame->has_new_object()) { -- frame->verifier()->verify_error( -- ErrorContext::bad_code(frame->offset()), -- "Uninitialized object exists on backward branch %d", target); -- return; - } - } - ---- ./hotspot/src/share/vm/classfile/stackMapTable.hpp Wed Jul 30 03:51:43 2014 -0700 -+++ ./hotspot/src/share/vm/classfile/stackMapTable.hpp Mon Sep 08 12:35:01 2014 -0700 -@@ -74,12 +74,12 @@ - // specified offset. Return true if the two frames match. - bool match_stackmap( - StackMapFrame* current_frame, int32_t offset, -- bool match, bool update, ErrorContext* ctx, TRAPS) const; -+ bool match, bool update, bool handler, ErrorContext* ctx, TRAPS) const; - // Match and/or update current_frame to the frame in stackmap table with - // specified offset and frame index. Return true if the two frames match. - bool match_stackmap( - StackMapFrame* current_frame, int32_t offset, int32_t frame_index, -- bool match, bool update, ErrorContext* ctx, TRAPS) const; -+ bool match, bool update, bool handler, ErrorContext* ctx, TRAPS) const; - - // Check jump instructions. Make sure there are no uninitialized - // instances on backward branch. -@@ -90,10 +90,6 @@ - // Returns the frame array index where the frame with offset is stored. - int get_index_from_offset(int32_t offset) const; - -- // Make sure that there's no uninitialized object exist on backward branch. -- void check_new_object( -- const StackMapFrame* frame, int32_t target, TRAPS) const; -- - void print_on(outputStream* str) const; - }; - ---- ./hotspot/src/share/vm/classfile/verificationType.cpp Wed Jul 30 03:51:43 2014 -0700 -+++ ./hotspot/src/share/vm/classfile/verificationType.cpp Mon Sep 08 12:35:01 2014 -0700 -@@ -1,5 +1,5 @@ - /* -- * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. -+ * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it -@@ -42,7 +42,8 @@ - } - - bool VerificationType::is_reference_assignable_from( -- const VerificationType& from, ClassVerifier* context, TRAPS) const { -+ const VerificationType& from, ClassVerifier* context, -+ bool from_field_is_protected, TRAPS) const { - instanceKlassHandle klass = context->current_class(); - if (from.is_null()) { - // null is assignable to any reference -@@ -62,9 +63,11 @@ - Handle(THREAD, klass->protection_domain()), true, CHECK_false); - KlassHandle this_class(THREAD, obj); - -- if (this_class->is_interface()) { -- // We treat interfaces as java.lang.Object, including -- // java.lang.Cloneable and java.io.Serializable -+ if (this_class->is_interface() && (!from_field_is_protected || -+ from.name() != vmSymbols::java_lang_Object())) { -+ // If we are not trying to access a protected field or method in -+ // java.lang.Object then we treat interfaces as java.lang.Object, -+ // including java.lang.Cloneable and java.io.Serializable. - return true; - } else if (from.is_object()) { - Klass* from_class = SystemDictionary::resolve_or_fail( -@@ -76,7 +79,8 @@ - VerificationType comp_this = get_component(context, CHECK_false); - VerificationType comp_from = from.get_component(context, CHECK_false); - if (!comp_this.is_bogus() && !comp_from.is_bogus()) { -- return comp_this.is_assignable_from(comp_from, context, CHECK_false); -+ return comp_this.is_assignable_from(comp_from, context, -+ from_field_is_protected, CHECK_false); - } - } - return false; ---- ./hotspot/src/share/vm/classfile/verificationType.hpp Wed Jul 30 03:51:43 2014 -0700 -+++ ./hotspot/src/share/vm/classfile/verificationType.hpp Mon Sep 08 12:35:01 2014 -0700 -@@ -265,7 +265,8 @@ - // is assignable to another. Returns true if one can assign 'from' to - // this. - bool is_assignable_from( -- const VerificationType& from, ClassVerifier* context, TRAPS) const { -+ const VerificationType& from, ClassVerifier* context, -+ bool from_field_is_protected, TRAPS) const { - if (equals(from) || is_bogus()) { - return true; - } else { -@@ -286,7 +287,9 @@ - return from.is_integer(); - default: - if (is_reference() && from.is_reference()) { -- return is_reference_assignable_from(from, context, CHECK_false); -+ return is_reference_assignable_from(from, context, -+ from_field_is_protected, -+ CHECK_false); - } else { - return false; - } -@@ -308,7 +311,8 @@ - private: - - bool is_reference_assignable_from( -- const VerificationType&, ClassVerifier*, TRAPS) const; -+ const VerificationType&, ClassVerifier*, bool from_field_is_protected, -+ TRAPS) const; - }; - - #endif // SHARE_VM_CLASSFILE_VERIFICATIONTYPE_HPP ---- ./hotspot/src/share/vm/classfile/verifier.cpp Wed Jul 30 03:51:43 2014 -0700 -+++ ./hotspot/src/share/vm/classfile/verifier.cpp Mon Sep 08 12:35:01 2014 -0700 -@@ -634,8 +634,6 @@ - // flow from current instruction to the next - // instruction in sequence - -- set_furthest_jump(0); -- - Bytecodes::Code opcode; - while (!bcs.is_last_bytecode()) { - // Check for recursive re-verification before each bytecode. -@@ -1736,7 +1734,7 @@ - VerificationType throwable = - VerificationType::reference_type(vmSymbols::java_lang_Throwable()); - bool is_subclass = throwable.is_assignable_from( -- catch_type, this, CHECK_VERIFY(this)); -+ catch_type, this, false, CHECK_VERIFY(this)); - if (!is_subclass) { - // 4286534: should throw VerifyError according to recent spec change - verify_error(ErrorContext::bad_type(handler_pc, -@@ -1794,7 +1792,7 @@ - // If matched, current_frame will be updated by this method. - bool matches = stackmap_table->match_stackmap( - current_frame, this_offset, stackmap_index, -- !no_control_flow, true, &ctx, CHECK_VERIFY_(this, 0)); -+ !no_control_flow, true, false, &ctx, CHECK_VERIFY_(this, 0)); - if (!matches) { - // report type error - verify_error(ctx, "Instruction type does not match stack map"); -@@ -1841,7 +1839,7 @@ - } - ErrorContext ctx; - bool matches = stackmap_table->match_stackmap( -- new_frame, handler_pc, true, false, &ctx, CHECK_VERIFY(this)); -+ new_frame, handler_pc, true, false, true, &ctx, CHECK_VERIFY(this)); - if (!matches) { - verify_error(ctx, "Stack map does not match the one at " - "exception handler %d", handler_pc); -@@ -2191,7 +2189,7 @@ - stack_object_type = current_type(); - } - is_assignable = target_class_type.is_assignable_from( -- stack_object_type, this, CHECK_VERIFY(this)); -+ stack_object_type, this, false, CHECK_VERIFY(this)); - if (!is_assignable) { - verify_error(ErrorContext::bad_type(bci, - current_frame->stack_top_ctx(), -@@ -2218,7 +2216,7 @@ - // It's protected access, check if stack object is assignable to - // current class. - is_assignable = current_type().is_assignable_from( -- stack_object_type, this, CHECK_VERIFY(this)); -+ stack_object_type, this, true, CHECK_VERIFY(this)); - if (!is_assignable) { - verify_error(ErrorContext::bad_type(bci, - current_frame->stack_top_ctx(), -@@ -2233,6 +2231,181 @@ - } - } - -+// Look at the method's handlers. If the bci is in the handler's try block -+// then check if the handler_pc is already on the stack. If not, push it. -+void ClassVerifier::push_handlers(ExceptionTable* exhandlers, -+ GrowableArray<u4>* handler_stack, -+ u4 bci) { -+ int exlength = exhandlers->length(); -+ for(int x = 0; x < exlength; x++) { -+ if (bci >= exhandlers->start_pc(x) && bci < exhandlers->end_pc(x)) { -+ handler_stack->append_if_missing(exhandlers->handler_pc(x)); -+ } -+ } -+} -+ -+// Return TRUE if all code paths starting with start_bc_offset end in -+// bytecode athrow or loop. -+bool ClassVerifier::ends_in_athrow(u4 start_bc_offset) { -+ ResourceMark rm; -+ // Create bytecode stream. -+ RawBytecodeStream bcs(method()); -+ u4 code_length = method()->code_size(); -+ bcs.set_start(start_bc_offset); -+ u4 target; -+ // Create stack for storing bytecode start offsets for if* and *switch. -+ GrowableArray<u4>* bci_stack = new GrowableArray<u4>(30); -+ // Create stack for handlers for try blocks containing this handler. -+ GrowableArray<u4>* handler_stack = new GrowableArray<u4>(30); -+ // Create list of visited branch opcodes (goto* and if*). -+ GrowableArray<u4>* visited_branches = new GrowableArray<u4>(30); -+ ExceptionTable exhandlers(_method()); -+ -+ while (true) { -+ if (bcs.is_last_bytecode()) { -+ // if no more starting offsets to parse or if at the end of the -+ // method then return false. -+ if ((bci_stack->is_empty()) || ((u4)bcs.end_bci() == code_length)) -+ return false; -+ // Pop a bytecode starting offset and scan from there. -+ bcs.set_start(bci_stack->pop()); -+ } -+ Bytecodes::Code opcode = bcs.raw_next(); -+ u4 bci = bcs.bci(); -+ -+ // If the bytecode is in a TRY block, push its handlers so they -+ // will get parsed. -+ push_handlers(&exhandlers, handler_stack, bci); -+ -+ switch (opcode) { -+ case Bytecodes::_if_icmpeq: -+ case Bytecodes::_if_icmpne: -+ case Bytecodes::_if_icmplt: -+ case Bytecodes::_if_icmpge: -+ case Bytecodes::_if_icmpgt: -+ case Bytecodes::_if_icmple: -+ case Bytecodes::_ifeq: -+ case Bytecodes::_ifne: -+ case Bytecodes::_iflt: -+ case Bytecodes::_ifge: -+ case Bytecodes::_ifgt: -+ case Bytecodes::_ifle: -+ case Bytecodes::_if_acmpeq: -+ case Bytecodes::_if_acmpne: -+ case Bytecodes::_ifnull: -+ case Bytecodes::_ifnonnull: -+ target = bcs.dest(); -+ if (visited_branches->contains(bci)) { -+ if (bci_stack->is_empty()) return true; -+ // Pop a bytecode starting offset and scan from there. -+ bcs.set_start(bci_stack->pop()); -+ } else { -+ if (target > bci) { // forward branch -+ if (target >= code_length) return false; -+ // Push the branch target onto the stack. -+ bci_stack->push(target); -+ // then, scan bytecodes starting with next. -+ bcs.set_start(bcs.next_bci()); -+ } else { // backward branch -+ // Push bytecode offset following backward branch onto the stack. -+ bci_stack->push(bcs.next_bci()); -+ // Check bytecodes starting with branch target. -+ bcs.set_start(target); -+ } -+ // Record target so we don't branch here again. -+ visited_branches->append(bci); -+ } -+ break; -+ -+ case Bytecodes::_goto: -+ case Bytecodes::_goto_w: -+ target = (opcode == Bytecodes::_goto ? bcs.dest() : bcs.dest_w()); -+ if (visited_branches->contains(bci)) { -+ if (bci_stack->is_empty()) return true; -+ // Been here before, pop new starting offset from stack. -+ bcs.set_start(bci_stack->pop()); -+ } else { -+ if (target >= code_length) return false; -+ // Continue scanning from the target onward. -+ bcs.set_start(target); -+ // Record target so we don't branch here again. -+ visited_branches->append(bci); -+ } -+ break; -+ -+ // Check that all switch alternatives end in 'athrow' bytecodes. Since it -+ // is difficult to determine where each switch alternative ends, parse -+ // each switch alternative until either hit a 'return', 'athrow', or reach -+ // the end of the method's bytecodes. This is gross but should be okay -+ // because: -+ // 1. tableswitch and lookupswitch byte codes in handlers for ctor explicit -+ // constructor invocations should be rare. -+ // 2. if each switch alternative ends in an athrow then the parsing should be -+ // short. If there is no athrow then it is bogus code, anyway. -+ case Bytecodes::_lookupswitch: -+ case Bytecodes::_tableswitch: -+ { -+ address aligned_bcp = (address) round_to((intptr_t)(bcs.bcp() + 1), jintSize); -+ u4 default_offset = Bytes::get_Java_u4(aligned_bcp) + bci; -+ int keys, delta; -+ if (opcode == Bytecodes::_tableswitch) { -+ jint low = (jint)Bytes::get_Java_u4(aligned_bcp + jintSize); -+ jint high = (jint)Bytes::get_Java_u4(aligned_bcp + 2*jintSize); -+ // This is invalid, but let the regular bytecode verifier -+ // report this because the user will get a better error message. -+ if (low > high) return true; -+ keys = high - low + 1; -+ delta = 1; -+ } else { -+ keys = (int)Bytes::get_Java_u4(aligned_bcp + jintSize); -+ delta = 2; -+ } -+ // Invalid, let the regular bytecode verifier deal with it. -+ if (keys < 0) return true; -+ -+ // Push the offset of the next bytecode onto the stack. -+ bci_stack->push(bcs.next_bci()); -+ -+ // Push the switch alternatives onto the stack. -+ for (int i = 0; i < keys; i++) { -+ u4 target = bci + (jint)Bytes::get_Java_u4(aligned_bcp+(3+i*delta)*jintSize); -+ if (target > code_length) return false; -+ bci_stack->push(target); -+ } -+ -+ // Start bytecode parsing for the switch at the default alternative. -+ if (default_offset > code_length) return false; -+ bcs.set_start(default_offset); -+ break; -+ } -+ -+ case Bytecodes::_return: -+ return false; -+ -+ case Bytecodes::_athrow: -+ { -+ if (bci_stack->is_empty()) { -+ if (handler_stack->is_empty()) { -+ return true; -+ } else { -+ // Parse the catch handlers for try blocks containing athrow. -+ bcs.set_start(handler_stack->pop()); -+ } -+ } else { -+ // Pop a bytecode offset and starting scanning from there. -+ bcs.set_start(bci_stack->pop()); -+ } -+ } -+ break; -+ -+ default: -+ ; -+ } // end switch -+ } // end while loop -+ -+ return false; -+} -+ - void ClassVerifier::verify_invoke_init( - RawBytecodeStream* bcs, u2 ref_class_index, VerificationType ref_class_type, - StackMapFrame* current_frame, u4 code_length, bool *this_uninit, -@@ -2252,25 +2425,26 @@ - return; - } - -- // Make sure that this call is not jumped over. -- if (bci < furthest_jump()) { -- verify_error(ErrorContext::bad_code(bci), -- "Bad <init> method call from inside of a branch"); -- return; -- } -- -- // Make sure that this call is not done from within a TRY block because -- // that can result in returning an incomplete object. Simply checking -- // (bci >= start_pc) also ensures that this call is not done after a TRY -- // block. That is also illegal because this call must be the first Java -- // statement in the constructor. -+ // Check if this call is done from inside of a TRY block. If so, make -+ // sure that all catch clause paths end in a throw. Otherwise, this -+ // can result in returning an incomplete object. - ExceptionTable exhandlers(_method()); - int exlength = exhandlers.length(); - for(int i = 0; i < exlength; i++) { -- if (bci >= exhandlers.start_pc(i)) { -- verify_error(ErrorContext::bad_code(bci), -- "Bad <init> method call from after the start of a try block"); -- return; -+ u2 start_pc = exhandlers.start_pc(i); -+ u2 end_pc = exhandlers.end_pc(i); -+ -+ if (bci >= start_pc && bci < end_pc) { -+ if (!ends_in_athrow(exhandlers.handler_pc(i))) { -+ verify_error(ErrorContext::bad_code(bci), -+ "Bad <init> method call from after the start of a try block"); -+ return; -+ } else if (VerboseVerification) { -+ ResourceMark rm; -+ tty->print_cr( -+ "Survived call to ends_in_athrow(): %s", -+ current_class()->name()->as_C_string()); -+ } - } - } - -@@ -2315,7 +2489,7 @@ - instanceKlassHandle mh(THREAD, m->method_holder()); - if (m->is_protected() && !mh->is_same_class_package(_klass())) { - bool assignable = current_type().is_assignable_from( -- objectref_type, this, CHECK_VERIFY(this)); -+ objectref_type, this, true, CHECK_VERIFY(this)); - if (!assignable) { - verify_error(ErrorContext::bad_type(bci, - TypeOrigin::cp(new_class_index, objectref_type), -@@ -2490,11 +2664,11 @@ - bool have_imr_indirect = cp->tag_at(index).value() == JVM_CONSTANT_InterfaceMethodref; - if (!current_class()->is_anonymous()) { - subtype = ref_class_type.is_assignable_from( -- current_type(), this, CHECK_VERIFY(this)); -+ current_type(), this, false, CHECK_VERIFY(this)); - } else { - VerificationType host_klass_type = - VerificationType::reference_type(current_class()->host_klass()->name()); -- subtype = ref_class_type.is_assignable_from(host_klass_type, this, CHECK_VERIFY(this)); -+ subtype = ref_class_type.is_assignable_from(host_klass_type, this, false, CHECK_VERIFY(this)); - - // If invokespecial of IMR, need to recheck for same or - // direct interface relative to the host class -@@ -2538,7 +2712,7 @@ - VerificationType top = current_frame->pop_stack(CHECK_VERIFY(this)); - VerificationType hosttype = - VerificationType::reference_type(current_class()->host_klass()->name()); -- bool subtype = hosttype.is_assignable_from(top, this, CHECK_VERIFY(this)); -+ bool subtype = hosttype.is_assignable_from(top, this, false, CHECK_VERIFY(this)); - if (!subtype) { - verify_error( ErrorContext::bad_type(current_frame->offset(), - current_frame->stack_top_ctx(), -@@ -2563,7 +2737,7 @@ - // It's protected access, check if stack object is - // assignable to current class. - bool is_assignable = current_type().is_assignable_from( -- stack_object_type, this, CHECK_VERIFY(this)); -+ stack_object_type, this, true, CHECK_VERIFY(this)); - if (!is_assignable) { - if (ref_class_type.name() == vmSymbols::java_lang_Object() - && stack_object_type.is_array() -@@ -2746,7 +2920,7 @@ - "Method expects a return value"); - return; - } -- bool match = return_type.is_assignable_from(type, this, CHECK_VERIFY(this)); -+ bool match = return_type.is_assignable_from(type, this, false, CHECK_VERIFY(this)); - if (!match) { - verify_error(ErrorContext::bad_type(bci, - current_frame->stack_top_ctx(), TypeOrigin::signature(return_type)), ---- ./hotspot/src/share/vm/classfile/verifier.hpp Wed Jul 30 03:51:43 2014 -0700 -+++ ./hotspot/src/share/vm/classfile/verifier.hpp Mon Sep 08 12:35:01 2014 -0700 -@@ -30,6 +30,7 @@ - #include "oops/klass.hpp" - #include "oops/method.hpp" - #include "runtime/handles.hpp" -+#include "utilities/growableArray.hpp" - #include "utilities/exceptions.hpp" - - // The verifier class -@@ -258,9 +259,6 @@ - - ErrorContext _error_context; // contains information about an error - -- // Used to detect illegal jumps over calls to super() nd this() in ctors. -- int32_t _furthest_jump; -- - void verify_method(methodHandle method, TRAPS); - char* generate_code_data(methodHandle m, u4 code_length, TRAPS); - void verify_exception_handler_table(u4 code_length, char* code_data, -@@ -306,6 +304,16 @@ - StackMapFrame* current_frame, u4 code_length, bool* this_uninit, - constantPoolHandle cp, TRAPS); - -+ // Used by ends_in_athrow() to push all handlers that contain bci onto -+ // the handler_stack, if the handler is not already on the stack. -+ void push_handlers(ExceptionTable* exhandlers, -+ GrowableArray<u4>* handler_stack, -+ u4 bci); -+ -+ // Returns true if all paths starting with start_bc_offset end in athrow -+ // bytecode or loop. -+ bool ends_in_athrow(u4 start_bc_offset); -+ - void verify_invoke_instructions( - RawBytecodeStream* bcs, u4 code_length, StackMapFrame* current_frame, - bool* this_uninit, VerificationType return_type, -@@ -407,19 +415,6 @@ - - TypeOrigin ref_ctx(const char* str, TRAPS); - -- // Keep track of the furthest branch done in a method to make sure that -- // there are no branches over calls to super() or this() from inside of -- // a constructor. -- int32_t furthest_jump() { return _furthest_jump; } -- -- void set_furthest_jump(int32_t target) { -- _furthest_jump = target; -- } -- -- void update_furthest_jump(int32_t target) { -- if (target > _furthest_jump) _furthest_jump = target; -- } -- - }; - - inline int ClassVerifier::change_sig_to_verificationType( ---- ./hotspot/src/share/vm/interpreter/linkResolver.cpp Wed Jul 30 03:51:43 2014 -0700 -+++ ./hotspot/src/share/vm/interpreter/linkResolver.cpp Mon Sep 08 12:35:01 2014 -0700 -@@ -246,6 +246,12 @@ - // Ignore overpasses so statics can be found during resolution - Method* result_oop = klass->uncached_lookup_method(name, signature, Klass::skip_overpass); - -+ if (klass->oop_is_array()) { -+ // Only consider klass and super klass for arrays -+ result = methodHandle(THREAD, result_oop); -+ return; -+ } -+ - // JDK 8, JVMS 5.4.3.4: Interface method resolution should - // ignore static and non-public methods of java.lang.Object, - // like clone, finalize, registerNatives. -@@ -290,6 +296,11 @@ - result = methodHandle(THREAD, super_klass->uncached_lookup_method(name, signature, Klass::normal)); - } - -+ if (klass->oop_is_array()) { -+ // Only consider klass and super klass for arrays -+ return; -+ } -+ - if (result.is_null()) { - Array<Method*>* default_methods = InstanceKlass::cast(klass())->default_methods(); - if (default_methods != NULL) { -@@ -546,7 +557,7 @@ - // 2. lookup method in resolved klass and its super klasses - lookup_method_in_klasses(resolved_method, resolved_klass, method_name, method_signature, true, false, CHECK); - -- if (resolved_method.is_null()) { // not found in the class hierarchy -+ if (resolved_method.is_null() && !resolved_klass->oop_is_array()) { // not found in the class hierarchy - // 3. lookup method in all the interfaces implemented by the resolved klass - lookup_method_in_interfaces(resolved_method, resolved_klass, method_name, method_signature, CHECK); - -@@ -559,16 +570,16 @@ - CLEAR_PENDING_EXCEPTION; - } - } -+ } - -- if (resolved_method.is_null()) { -- // 4. method lookup failed -- ResourceMark rm(THREAD); -- THROW_MSG_CAUSE(vmSymbols::java_lang_NoSuchMethodError(), -- Method::name_and_sig_as_C_string(resolved_klass(), -- method_name, -- method_signature), -- nested_exception); -- } -+ if (resolved_method.is_null()) { -+ // 4. method lookup failed -+ ResourceMark rm(THREAD); -+ THROW_MSG_CAUSE(vmSymbols::java_lang_NoSuchMethodError(), -+ Method::name_and_sig_as_C_string(resolved_klass(), -+ method_name, -+ method_signature), -+ nested_exception); - } - - // 5. access checks, access checking may be turned off when calling from within the VM. -@@ -634,17 +645,18 @@ - // JDK8: also look for static methods - lookup_method_in_klasses(resolved_method, resolved_klass, method_name, method_signature, false, true, CHECK); - -- if (resolved_method.is_null()) { -+ if (resolved_method.is_null() && !resolved_klass->oop_is_array()) { - // lookup method in all the super-interfaces - lookup_method_in_interfaces(resolved_method, resolved_klass, method_name, method_signature, CHECK); -- if (resolved_method.is_null()) { -- // no method found -- ResourceMark rm(THREAD); -- THROW_MSG(vmSymbols::java_lang_NoSuchMethodError(), -- Method::name_and_sig_as_C_string(resolved_klass(), -- method_name, -- method_signature)); -- } -+ } -+ -+ if (resolved_method.is_null()) { -+ // no method found -+ ResourceMark rm(THREAD); -+ THROW_MSG(vmSymbols::java_lang_NoSuchMethodError(), -+ Method::name_and_sig_as_C_string(resolved_klass(), -+ method_name, -+ method_signature)); - } - - if (check_access) { -@@ -776,7 +788,7 @@ - } - - // Resolve instance field -- KlassHandle sel_klass(THREAD, InstanceKlass::cast(resolved_klass())->find_field(field, sig, &fd)); -+ KlassHandle sel_klass(THREAD, resolved_klass->find_field(field, sig, &fd)); - // check if field exists; i.e., if a klass containing the field def has been selected - if (sel_klass.is_null()) { - ResourceMark rm(THREAD); ---- ./hotspot/src/share/vm/memory/filemap.cpp Wed Jul 30 03:51:43 2014 -0700 -+++ ./hotspot/src/share/vm/memory/filemap.cpp Mon Sep 08 12:35:01 2014 -0700 -@@ -177,7 +177,14 @@ - fail_continue("The shared archive file has the wrong version."); - return false; - } -- _file_offset = (long)n; -+ size_t len = lseek(fd, 0, SEEK_END); -+ struct FileMapInfo::FileMapHeader::space_info* si = -+ &_header._space[MetaspaceShared::mc]; -+ if (si->_file_offset >= len || len - si->_file_offset < si->_used) { -+ fail_continue("The shared archive file has been truncated."); -+ return false; -+ } -+ _file_offset = n; - return true; - } - -@@ -268,6 +275,7 @@ - si->_capacity = capacity; - si->_read_only = read_only; - si->_allow_exec = allow_exec; -+ si->_crc = ClassLoader::crc32(0, base, (jint)size); - write_bytes_aligned(base, (int)size); - } - -@@ -292,14 +300,15 @@ - // Align file position to an allocation unit boundary. - - void FileMapInfo::align_file_position() { -- long new_file_offset = align_size_up(_file_offset, os::vm_allocation_granularity()); -+ size_t new_file_offset = align_size_up(_file_offset, -+ os::vm_allocation_granularity()); - if (new_file_offset != _file_offset) { - _file_offset = new_file_offset; - if (_file_open) { - // Seek one byte back from the target and write a byte to insure - // that the written file is the correct length. - _file_offset -= 1; -- if (lseek(_fd, _file_offset, SEEK_SET) < 0) { -+ if (lseek(_fd, (long)_file_offset, SEEK_SET) < 0) { - fail_stop("Unable to seek.", NULL); - } - char zero = 0; -@@ -406,6 +415,19 @@ - return base; - } - -+bool FileMapInfo::verify_region_checksum(int i) { -+ if (!VerifySharedSpaces) { -+ return true; -+ } -+ const char* buf = _header._space[i]._base; -+ size_t sz = _header._space[i]._used; -+ int crc = ClassLoader::crc32(0, buf, (jint)sz); -+ if (crc != _header._space[i]._crc) { -+ fail_continue("Checksum verification failed."); -+ return false; -+ } -+ return true; -+} - - // Unmap a memory region in the address space. - -@@ -457,8 +479,20 @@ - return true; - } - -+int FileMapInfo::compute_header_crc() { -+ char* header = (char*)&_header; -+ // start computing from the field after _crc -+ char* buf = (char*)&_header._crc + sizeof(int); -+ size_t sz = sizeof(FileMapInfo::FileMapHeader) - (buf - header); -+ int crc = ClassLoader::crc32(0, buf, (jint)sz); -+ return crc; -+} - - bool FileMapInfo::validate() { -+ if (VerifySharedSpaces && compute_header_crc() != _header._crc) { -+ fail_continue("Header checksum verification failed."); -+ return false; -+ } - if (_header._version != current_version()) { - fail_continue("The shared archive file is the wrong version."); - return false; ---- ./hotspot/src/share/vm/memory/filemap.hpp Wed Jul 30 03:51:43 2014 -0700 -+++ ./hotspot/src/share/vm/memory/filemap.hpp Mon Sep 08 12:35:01 2014 -0700 -@@ -54,7 +54,7 @@ - - bool _file_open; - int _fd; -- long _file_offset; -+ size_t _file_offset; - - // FileMapHeader describes the shared space data in the file to be - // mapped. This structure gets written to a file. It is not a class, so -@@ -62,12 +62,14 @@ - - struct FileMapHeader { - int _magic; // identify file type. -+ int _crc; // header crc checksum. - int _version; // (from enum, above.) - size_t _alignment; // how shared archive should be aligned - int _obj_alignment; // value of ObjectAlignmentInBytes - - struct space_info { -- int _file_offset; // sizeof(this) rounded to vm page size -+ int _crc; // crc checksum of the current space -+ size_t _file_offset; // sizeof(this) rounded to vm page size - char* _base; // copy-on-write base address - size_t _capacity; // for validity checking - size_t _used; // for setting space top on read -@@ -104,6 +106,8 @@ - } - - static int current_version() { return _current_version; } -+ int compute_header_crc(); -+ void set_header_crc(int crc) { _header._crc = crc; } - void populate_header(size_t alignment); - bool validate(); - void invalidate(); -@@ -136,6 +140,7 @@ - void write_bytes_aligned(const void* buffer, int count); - char* map_region(int i); - void unmap_region(int i); -+ bool verify_region_checksum(int i); - void close(); - bool is_open() { return _file_open; } - ReservedSpace reserve_shared_memory(); ---- ./hotspot/src/share/vm/memory/metaspaceShared.cpp Wed Jul 30 03:51:43 2014 -0700 -+++ ./hotspot/src/share/vm/memory/metaspaceShared.cpp Mon Sep 08 12:35:01 2014 -0700 -@@ -585,6 +585,7 @@ - - // Pass 2 - write data. - mapinfo->open_for_write(); -+ mapinfo->set_header_crc(mapinfo->compute_header_crc()); - mapinfo->write_header(); - mapinfo->write_space(MetaspaceShared::ro, _loader_data->ro_metaspace(), true); - mapinfo->write_space(MetaspaceShared::rw, _loader_data->rw_metaspace(), false); -@@ -863,9 +864,13 @@ - - // Map each shared region - if ((_ro_base = mapinfo->map_region(ro)) != NULL && -+ mapinfo->verify_region_checksum(ro) && - (_rw_base = mapinfo->map_region(rw)) != NULL && -+ mapinfo->verify_region_checksum(rw) && - (_md_base = mapinfo->map_region(md)) != NULL && -+ mapinfo->verify_region_checksum(md) && - (_mc_base = mapinfo->map_region(mc)) != NULL && -+ mapinfo->verify_region_checksum(mc) && - (image_alignment == (size_t)max_alignment())) { - // Success (no need to do anything) - return true; ---- ./hotspot/src/share/vm/oops/arrayKlass.cpp Wed Jul 30 03:51:43 2014 -0700 -+++ ./hotspot/src/share/vm/oops/arrayKlass.cpp Mon Sep 08 12:35:01 2014 -0700 -@@ -64,6 +64,13 @@ - return NULL; - } - -+// find field according to JVM spec 5.4.3.2, returns the klass in which the field is defined -+Klass* ArrayKlass::find_field(Symbol* name, Symbol* sig, fieldDescriptor* fd) const { -+ // There are no fields in an array klass but look to the super class (Object) -+ assert(super(), "super klass must be present"); -+ return super()->find_field(name, sig, fd); -+} -+ - Method* ArrayKlass::uncached_lookup_method(Symbol* name, Symbol* signature, MethodLookupMode mode) const { - // There are no methods in an array klass but the super class (Object) has some - assert(super(), "super klass must be present"); ---- ./hotspot/src/share/vm/oops/arrayKlass.hpp Wed Jul 30 03:51:43 2014 -0700 -+++ ./hotspot/src/share/vm/oops/arrayKlass.hpp Mon Sep 08 12:35:01 2014 -0700 -@@ -28,6 +28,7 @@ - #include "memory/universe.hpp" - #include "oops/klass.hpp" - -+class fieldDescriptor; - class klassVtable; - - // ArrayKlass is the abstract baseclass for all array classes -@@ -85,6 +86,9 @@ - virtual oop multi_allocate(int rank, jint* sizes, TRAPS); - objArrayOop allocate_arrayArray(int n, int length, TRAPS); - -+ // find field according to JVM spec 5.4.3.2, returns the klass in which the field is defined -+ Klass* find_field(Symbol* name, Symbol* sig, fieldDescriptor* fd) const; -+ - // Lookup operations - Method* uncached_lookup_method(Symbol* name, Symbol* signature, MethodLookupMode mode) const; - ---- ./hotspot/src/share/vm/oops/klass.cpp Wed Jul 30 03:51:43 2014 -0700 -+++ ./hotspot/src/share/vm/oops/klass.cpp Mon Sep 08 12:35:01 2014 -0700 -@@ -128,6 +128,15 @@ - return is_subclass_of(k); - } - -+Klass* Klass::find_field(Symbol* name, Symbol* sig, fieldDescriptor* fd) const { -+#ifdef ASSERT -+ tty->print_cr("Error: find_field called on a klass oop." -+ " Likely error: reflection method does not correctly" -+ " wrap return value in a mirror object."); -+#endif -+ ShouldNotReachHere(); -+ return NULL; -+} - - Method* Klass::uncached_lookup_method(Symbol* name, Symbol* signature, MethodLookupMode mode) const { - #ifdef ASSERT ---- ./hotspot/src/share/vm/oops/klass.hpp Wed Jul 30 03:51:43 2014 -0700 -+++ ./hotspot/src/share/vm/oops/klass.hpp Mon Sep 08 12:35:01 2014 -0700 -@@ -91,6 +91,7 @@ - class klassVtable; - class ParCompactionManager; - class KlassSizeStats; -+class fieldDescriptor; - - class Klass : public Metadata { - friend class VMStructs; -@@ -423,6 +424,7 @@ - virtual void initialize(TRAPS); - // lookup operation for MethodLookupCache - friend class MethodLookupCache; -+ virtual Klass* find_field(Symbol* name, Symbol* signature, fieldDescriptor* fd) const; - virtual Method* uncached_lookup_method(Symbol* name, Symbol* signature, MethodLookupMode mode) const; - public: - Method* lookup_method(Symbol* name, Symbol* signature) const { ---- ./hotspot/src/share/vm/prims/jvm.cpp Wed Jul 30 03:51:43 2014 -0700 -+++ ./hotspot/src/share/vm/prims/jvm.cpp Mon Sep 08 12:35:01 2014 -0700 -@@ -803,6 +803,7 @@ - return (jclass) JNIHandles::make_local(env, k->java_mirror()); - JVM_END - -+// Not used; JVM_FindClassFromCaller replaces this. - JVM_ENTRY(jclass, JVM_FindClassFromClassLoader(JNIEnv* env, const char* name, - jboolean init, jobject loader, - jboolean throwError)) -@@ -829,6 +830,42 @@ - return result; - JVM_END - -+// Find a class with this name in this loader, using the caller's protection domain. -+JVM_ENTRY(jclass, JVM_FindClassFromCaller(JNIEnv* env, const char* name, -+ jboolean init, jobject loader, -+ jclass caller)) -+ JVMWrapper2("JVM_FindClassFromCaller %s throws ClassNotFoundException", name); -+ // Java libraries should ensure that name is never null... -+ if (name == NULL || (int)strlen(name) > Symbol::max_length()) { -+ // It's impossible to create this class; the name cannot fit -+ // into the constant pool. -+ THROW_MSG_0(vmSymbols::java_lang_ClassNotFoundException(), name); -+ } -+ -+ TempNewSymbol h_name = SymbolTable::new_symbol(name, CHECK_NULL); -+ -+ oop loader_oop = JNIHandles::resolve(loader); -+ oop from_class = JNIHandles::resolve(caller); -+ oop protection_domain = NULL; -+ // If loader is null, shouldn't call ClassLoader.checkPackageAccess; otherwise get -+ // NPE. Put it in another way, the bootstrap class loader has all permission and -+ // thus no checkPackageAccess equivalence in the VM class loader. -+ // The caller is also passed as NULL by the java code if there is no security -+ // manager to avoid the performance cost of getting the calling class. -+ if (from_class != NULL && loader_oop != NULL) { -+ protection_domain = java_lang_Class::as_Klass(from_class)->protection_domain(); -+ } -+ -+ Handle h_loader(THREAD, loader_oop); -+ Handle h_prot(THREAD, protection_domain); -+ jclass result = find_class_from_class_loader(env, h_name, init, h_loader, -+ h_prot, false, THREAD); -+ -+ if (TraceClassResolution && result != NULL) { -+ trace_class_resolution(java_lang_Class::as_Klass(JNIHandles::resolve_non_null(result))); -+ } -+ return result; -+JVM_END - - JVM_ENTRY(jclass, JVM_FindClassFromClass(JNIEnv *env, const char *name, - jboolean init, jclass from)) -@@ -3984,10 +4021,15 @@ - - // Shared JNI/JVM entry points ////////////////////////////////////////////////////////////// - --jclass find_class_from_class_loader(JNIEnv* env, Symbol* name, jboolean init, Handle loader, Handle protection_domain, jboolean throwError, TRAPS) { -+jclass find_class_from_class_loader(JNIEnv* env, Symbol* name, jboolean init, -+ Handle loader, Handle protection_domain, -+ jboolean throwError, TRAPS) { - // Security Note: - // The Java level wrapper will perform the necessary security check allowing -- // us to pass the NULL as the initiating class loader. -+ // us to pass the NULL as the initiating class loader. The VM is responsible for -+ // the checkPackageAccess relative to the initiating class loader via the -+ // protection_domain. The protection_domain is passed as NULL by the java code -+ // if there is no security manager in 3-arg Class.forName(). - Klass* klass = SystemDictionary::resolve_or_fail(name, loader, protection_domain, throwError != 0, CHECK_NULL); - - KlassHandle klass_handle(THREAD, klass); ---- ./hotspot/src/share/vm/prims/jvm.h Wed Jul 30 03:51:43 2014 -0700 -+++ ./hotspot/src/share/vm/prims/jvm.h Mon Sep 08 12:35:01 2014 -0700 -@@ -1,5 +1,5 @@ - /* -- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. -+ * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it -@@ -420,6 +420,19 @@ - JVM_FindClassFromBootLoader(JNIEnv *env, const char *name); - - /* -+ * Find a class from a given class loader. Throws ClassNotFoundException. -+ * name: name of class -+ * init: whether initialization is done -+ * loader: class loader to look up the class. This may not be the same as the caller's -+ * class loader. -+ * caller: initiating class. The initiating class may be null when a security -+ * manager is not installed. -+ */ -+JNIEXPORT jclass JNICALL -+JVM_FindClassFromCaller(JNIEnv *env, const char *name, jboolean init, -+ jobject loader, jclass caller); -+ -+/* - * Find a class from a given class. - */ - JNIEXPORT jclass JNICALL ---- ./hotspot/src/share/vm/runtime/arguments.cpp Wed Jul 30 03:51:43 2014 -0700 -+++ ./hotspot/src/share/vm/runtime/arguments.cpp Mon Sep 08 12:35:01 2014 -0700 -@@ -2387,6 +2387,10 @@ - warning("The VM option CICompilerCountPerCPU overrides CICompilerCount."); - } - -+#ifdef COMPILER1 -+ status &= verify_interval(SafepointPollOffset, 0, os::vm_page_size() - BytesPerWord, "SafepointPollOffset"); -+#endif -+ - return status; - } - -@@ -3577,6 +3581,11 @@ - return JNI_ENOMEM; - } - -+ // Set up VerifySharedSpaces -+ if (FLAG_IS_DEFAULT(VerifySharedSpaces) && SharedArchiveFile != NULL) { -+ VerifySharedSpaces = true; -+ } -+ - // Delay warning until here so that we've had a chance to process - // the -XX:-PrintWarnings flag - if (needs_hotspotrc_warning) { ---- ./hotspot/src/share/vm/runtime/globals.hpp Wed Jul 30 03:51:43 2014 -0700 -+++ ./hotspot/src/share/vm/runtime/globals.hpp Mon Sep 08 12:35:01 2014 -0700 -@@ -1142,11 +1142,11 @@ - "Prevent spurious or premature wakeups from object.wait " \ - "(Solaris only)") \ - \ -- product(intx, NativeMonitorTimeout, -1, "(Unstable)") \ -- \ -- product(intx, NativeMonitorFlags, 0, "(Unstable)") \ -- \ -- product(intx, NativeMonitorSpinLimit, 20, "(Unstable)") \ -+ experimental(intx, NativeMonitorTimeout, -1, "(Unstable)") \ -+ \ -+ experimental(intx, NativeMonitorFlags, 0, "(Unstable)") \ -+ \ -+ experimental(intx, NativeMonitorSpinLimit, 20, "(Unstable)") \ - \ - develop(bool, UsePthreads, false, \ - "Use pthread-based instead of libthread-based synchronization " \ -@@ -3745,6 +3745,10 @@ - product(bool, UseSharedSpaces, true, \ - "Use shared spaces for metadata") \ - \ -+ product(bool, VerifySharedSpaces, false, \ -+ "Verify shared spaces (false for default archive, true for " \ -+ "archive specified by -XX:SharedArchiveFile)") \ -+ \ - product(bool, RequireSharedSpaces, false, \ - "Require shared spaces for metadata") \ - \ ---- ./hotspot/src/share/vm/runtime/reflection.cpp Wed Jul 30 03:51:43 2014 -0700 -+++ ./hotspot/src/share/vm/runtime/reflection.cpp Mon Sep 08 12:35:01 2014 -0700 -@@ -1,5 +1,5 @@ - /* -- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. -+ * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it -@@ -482,7 +482,7 @@ - ik = InstanceKlass::cast(hc); - - // There's no way to make a host class loop short of patching memory. -- // Therefore there cannot be a loop here unles there's another bug. -+ // Therefore there cannot be a loop here unless there's another bug. - // Still, let's check for it. - assert(--inf_loop_check > 0, "no host_klass loop"); - } -@@ -551,7 +551,8 @@ - if (access.is_protected()) { - if (!protected_restriction) { - // See if current_class (or outermost host class) is a subclass of field_class -- if (host_class->is_subclass_of(field_class)) { -+ // An interface may not access protected members of j.l.Object -+ if (!host_class->is_interface() && host_class->is_subclass_of(field_class)) { - if (access.is_static() || // static fields are ok, see 6622385 - current_class == resolved_class || - field_class == resolved_class || ---- ./hotspot/test/runtime/7116786/Test7116786.java Wed Jul 30 03:51:43 2014 -0700 -+++ ./hotspot/test/runtime/7116786/Test7116786.java Mon Sep 08 12:35:01 2014 -0700 -@@ -1,5 +1,5 @@ - /* -- * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved. -+ * Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it -@@ -147,7 +147,8 @@ - "no stackmap frame at jump location or bad jump", - "Inconsistent stackmap frames at branch target "), - -- new Case("case15", "stackMapTable.cpp", true, "check_new_object", -+ /* Backward jump with uninit is allowed starting with JDK 8 */ -+ new Case("case15", "stackMapTable.cpp", false, "check_new_object", - "backward jump with uninit", - "Uninitialized object exists on backward branch "), - ---- ./jaxp/.hgtags Wed Jul 30 03:53:11 2014 -0700 -+++ ./jaxp/.hgtags Mon Sep 08 12:36:00 2014 -0700 -@@ -313,3 +313,21 @@ - d6ded60cfdc53861ae7d1a010f95b5036d610e80 jdk8u20-b23 - dd09d8b9edefb5684941941e5d9b35c84ee066f3 jdk8u20-b24 - dd09d8b9edefb5684941941e5d9b35c84ee066f3 jdk8u20-b25 -+938b9d502c2b0f9684151e1b1f47cf7052db1502 jdk8u20-b26 -+65e5ee249ebc81c0ccfff23946a0a2a6d4becdcc jdk8u25-b00 -+b29277565edfdece4e3928b135d4fd86ae141e4f jdk8u25-b01 -+09df5bda467090041090873f71d418eebcadf516 jdk8u25-b02 -+f3567e6bed22eaf89c3c7d64e0b1fa308707260f jdk8u25-b03 -+a4d0f11cf08d5dae91c5e9ad387b1ff88388503d jdk8u25-b04 -+0c4917cea678dc2a3745baca74016f0d6f169012 jdk8u25-b05 -+e84d78dd9e0533eb11c26b69727c044898d19f60 jdk8u25-b06 -+7aaaec31a0331ad091abedf81c928b47a982222d jdk8u25-b07 -+e48a4594f19ad119bc27d89c53dd35d11ed6da7d jdk8u25-b08 -+a09893b8f617912569196d7bd64a96c349796be0 jdk8u25-b09 -+85de91b6e953c8c21ac5e6d9a5e284f86d759680 jdk8u25-b10 -+5c1ac461fef7fe0f810bd9d6051db5a24247de1d jdk8u25-b11 -+c078e904db0a7be650e4ba2d665277785e2216b0 jdk8u25-b12 -+24184cfe0f8b0da0f349933ae7b5cc16455a52b8 jdk8u25-b13 -+90f3b8b970a8bb3173083111248372afdc61652d jdk8u25-b14 -+f5ac2e242bb95be0a3deddf37362178202086137 jdk8u25-b15 -+df68b132a471ed1e825a79bd1d8acb47d2bcc04f jdk8u25-b16 ---- ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_ja.java Wed Jul 30 03:53:11 2014 -0700 -+++ ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_ja.java Mon Sep 08 12:36:00 2014 -0700 -@@ -679,7 +679,7 @@ - * documentation. - */ - {ErrorMsg.COMPILE_USAGE_STR, -- "SYNOPSIS\n java com.sun.org.apache.xalan.internal.xsltc.cmdline.Compile [-o <output>]\n [-d <directory>] [-j <jarfile>] [-p <package>]\n [-n] [-x] [-u] [-v] [-h] { <stylesheet> | -i }\n\nOPTIONS\n -o <output> \u540D\u524D<output>\u3092\u751F\u6210\u6E08translet\u306B\n \u5272\u308A\u5F53\u3066\u308B\u3002\u30C7\u30D5\u30A9\u30EB\u30C8\u3067\u306F\u3001translet\u540D\u306F\n <stylesheet>\u540D\u306B\u7531\u6765\u3057\u307E\u3059\u3002\u3053\u306E\u30AA\u30D7\u30B7\u30E7\u30F3\u306F\n \u8907\u6570\u306E\u30B9\u30BF\u30A4\u30EB\u30B7\u30FC\u30C8\u3092\u30B3\u30F3\u30D1\u30A4\u30EB\u3059\u308B\u5834\u5408\u306F\u7121\u8996\u3055\u308C\u307E\u3059\u3002\n -d <directory> translet\u306E\u5B9B\u5148\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u3092\u6307\u5B9A\u3059\u308B\n -j <jarfile> <jarfile>\u3067\u6307\u5B9A\u3055\u308C\u308B\u540D\u524D\u306Ejar\u30D5\u30A1\u30A4\u30EB\u306Btranslet\u30AF\u30E9\u30B9\u3092\n \u30D1\u30C3\u30B1\u30FC\u30B8\u3059\u308B\n -p <package> \u751F\u6210\u3055\u308C\u308B\u3059\u3079\u3066\u306Etranslet\u30AF\u30E9\u30B9\u306E\u30D1\u30C3\u30B1\u30FC\u30B8\u540D\n \u63A5\u982D\u8F9E\u3092\u6307\u5B9A\u3059\u308B\u3002\n -n \u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u306E\u30A4\u30F3\u30E9\u30A4\u30F3\u5316\u3092\u6709\u52B9\u306B\u3059\u308B(\u5E73\u5747\u3057\u3066\u30C7\u30D5\u30A9\u30EB\u30C8\u52D5\u4F5C\u306E\u65B9\u304C\n \u512A\u308C\u3066\u3044\u307E\u3059)\u3002\n -x \u8FFD\u52A0\u306E\u30C7\u30D0\u30C3\u30B0\u30FB\u30E1\u30C3\u30BB\u30FC\u30B8\u51FA\u529B\u3092\u30AA\u30F3\u306B\u3059\u308B\n -u <stylesheet>\u5F15\u6570\u3092URL\u3068\u3057\u3066\u89E3\u91C8\u3059\u308B\n -i \u30B9\u30BF\u30A4\u30EB\u30B7\u30FC\u30C8\u3092stdin\u304B\u3089\u8AAD\u307F\u8FBC\u3080\u3053\u3068\u3092\u30B3\u30F3\u30D1\u30A4\u30E9\u306B\u5F37\u5236\u3059\u308B\n -v \u30B3\u30F3\u30D1\u30A4\u30E9\u306E\u30D0\u30FC\u30B8\u30E7\u30F3\u3092\u51FA\u529B\u3059\u308B\n -h \u3053\u306E\u4F7F\u7528\u65B9\u6CD5\u306E\u6587\u3092\u51FA\u529B\u3059\u308B\n"}, -+ "\u5F62\u5F0F\n java com.sun.org.apache.xalan.internal.xsltc.cmdline.Compile [-o <output>]\n [-d <directory>] [-j <jarfile>] [-p <package>]\n [-n] [-x] [-u] [-v] [-h] { <stylesheet> | -i }\n\nOPTIONS\n -o <output> \u540D\u524D<output>\u3092\u751F\u6210\u6E08translet\u306B\n \u5272\u308A\u5F53\u3066\u308B\u3002\u30C7\u30D5\u30A9\u30EB\u30C8\u3067\u306F\u3001translet\u540D\u306F\n <stylesheet>\u540D\u306B\u7531\u6765\u3057\u307E\u3059\u3002\u3053\u306E\u30AA\u30D7\u30B7\u30E7\u30F3\u306F\n \u8907\u6570\u306E\u30B9\u30BF\u30A4\u30EB\u30B7\u30FC\u30C8\u3092\u30B3\u30F3\u30D1\u30A4\u30EB\u3059\u308B\u5834\u5408\u306F\u7121\u8996\u3055\u308C\u307E\u3059\u3002\n -d <directory> translet\u306E\u5B9B\u5148\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u3092\u6307\u5B9A\u3059\u308B\n -j <jarfile> <jarfile>\u3067\u6307\u5B9A\u3055\u308C\u308B\u540D\u524D\u306Ejar\u30D5\u30A1\u30A4\u30EB\u306Btranslet\u30AF\u30E9\u30B9\u3092\n \u30D1\u30C3\u30B1\u30FC\u30B8\u3059\u308B\n -p <package> \u751F\u6210\u3055\u308C\u308B\u3059\u3079\u3066\u306Etranslet\u30AF\u30E9\u30B9\u306E\u30D1\u30C3\u30B1\u30FC\u30B8\u540D\n \u63A5\u982D\u8F9E\u3092\u6307\u5B9A\u3059\u308B\u3002\n -n \u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u306E\u30A4\u30F3\u30E9\u30A4\u30F3\u5316\u3092\u6709\u52B9\u306B\u3059\u308B(\u5E73\u5747\u3057\u3066\u30C7\u30D5\u30A9\u30EB\u30C8\u52D5\u4F5C\u306E\u65B9\u304C\n \u512A\u308C\u3066\u3044\u307E\u3059)\u3002\n -x \u8FFD\u52A0\u306E\u30C7\u30D0\u30C3\u30B0\u30FB\u30E1\u30C3\u30BB\u30FC\u30B8\u51FA\u529B\u3092\u30AA\u30F3\u306B\u3059\u308B\n -u <stylesheet>\u5F15\u6570\u3092URL\u3068\u3057\u3066\u89E3\u91C8\u3059\u308B\n -i \u30B9\u30BF\u30A4\u30EB\u30B7\u30FC\u30C8\u3092stdin\u304B\u3089\u8AAD\u307F\u8FBC\u3080\u3053\u3068\u3092\u30B3\u30F3\u30D1\u30A4\u30E9\u306B\u5F37\u5236\u3059\u308B\n -v \u30B3\u30F3\u30D1\u30A4\u30E9\u306E\u30D0\u30FC\u30B8\u30E7\u30F3\u3092\u51FA\u529B\u3059\u308B\n -h \u3053\u306E\u4F7F\u7528\u65B9\u6CD5\u306E\u6587\u3092\u51FA\u529B\u3059\u308B\n"}, - - /* - * Note to translators: This message contains usage information for a -@@ -691,7 +691,7 @@ - * documentation. - */ - {ErrorMsg.TRANSFORM_USAGE_STR, -- "SYNOPSIS \n java com.sun.org.apache.xalan.internal.xsltc.cmdline.Transform [-j <jarfile>]\n [-x] [-n <iterations>] {-u <document_url> | <document>}\n <class> [<param1>=<value1> ...]\n\n translet <class>\u3092\u4F7F\u7528\u3057\u3066\u3001<document>\u3067\u6307\u5B9A\u3055\u308C\u308B\n XML\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u3092\u5909\u63DB\u3059\u308B\u3002translet <class>\u306F\n \u30E6\u30FC\u30B6\u30FC\u306ECLASSPATH\u5185\u304B\u3001\u30AA\u30D7\u30B7\u30E7\u30F3\u3067\u6307\u5B9A\u3055\u308C\u305F<jarfile>\u5185\u306B\u3042\u308A\u307E\u3059\u3002\nOPTIONS\n -j <jarfile> translet\u3092\u30ED\u30FC\u30C9\u3059\u308Bjarfile\u3092\u6307\u5B9A\u3059\u308B\n -x \u8FFD\u52A0\u306E\u30C7\u30D0\u30C3\u30B0\u30FB\u30E1\u30C3\u30BB\u30FC\u30B8\u51FA\u529B\u3092\u30AA\u30F3\u306B\u3059\u308B\n -n <iterations> \u5909\u63DB\u3092<iterations>\u56DE\u5B9F\u884C\u3057\u3001\n \u30D7\u30ED\u30D5\u30A1\u30A4\u30EB\u60C5\u5831\u3092\u8868\u793A\u3059\u308B\n -u <document_url> XML\u5165\u529B\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u3092URL\u3068\u3057\u3066\u6307\u5B9A\u3059\u308B\n"}, -+ "\u5F62\u5F0F \n java com.sun.org.apache.xalan.internal.xsltc.cmdline.Transform [-j <jarfile>]\n [-x] [-n <iterations>] {-u <document_url> | <document>}\n <class> [<param1>=<value1> ...]\n\n translet <class>\u3092\u4F7F\u7528\u3057\u3066\u3001<document>\u3067\u6307\u5B9A\u3055\u308C\u308B\n XML\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u3092\u5909\u63DB\u3059\u308B\u3002translet <class>\u306F\n \u30E6\u30FC\u30B6\u30FC\u306ECLASSPATH\u5185\u304B\u3001\u30AA\u30D7\u30B7\u30E7\u30F3\u3067\u6307\u5B9A\u3055\u308C\u305F<jarfile>\u5185\u306B\u3042\u308A\u307E\u3059\u3002\nOPTIONS\n -j <jarfile> translet\u3092\u30ED\u30FC\u30C9\u3059\u308Bjarfile\u3092\u6307\u5B9A\u3059\u308B\n -x \u8FFD\u52A0\u306E\u30C7\u30D0\u30C3\u30B0\u30FB\u30E1\u30C3\u30BB\u30FC\u30B8\u51FA\u529B\u3092\u30AA\u30F3\u306B\u3059\u308B\n -n <iterations> \u5909\u63DB\u3092<iterations>\u56DE\u5B9F\u884C\u3057\u3001\n \u30D7\u30ED\u30D5\u30A1\u30A4\u30EA\u30F3\u30B0\u60C5\u5831\u3092\u8868\u793A\u3059\u308B\n -u <document_url> XML\u5165\u529B\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u3092URL\u3068\u3057\u3066\u6307\u5B9A\u3059\u308B\n"}, - - - ---- ./jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLDocumentFragmentScannerImpl.java Wed Jul 30 03:53:11 2014 -0700 -+++ ./jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLDocumentFragmentScannerImpl.java Mon Sep 08 12:36:00 2014 -0700 -@@ -612,9 +612,9 @@ - //fElementStack2.clear(); - //fReplaceEntityReferences = true; - //fSupportExternalEntities = true; -- Boolean bo = (Boolean)propertyManager.getProperty(XMLInputFactoryImpl.IS_REPLACING_ENTITY_REFERENCES); -+ Boolean bo = (Boolean)propertyManager.getProperty(XMLInputFactory.IS_REPLACING_ENTITY_REFERENCES); - fReplaceEntityReferences = bo.booleanValue(); -- bo = (Boolean)propertyManager.getProperty(XMLInputFactoryImpl.IS_SUPPORTING_EXTERNAL_ENTITIES); -+ bo = (Boolean)propertyManager.getProperty(XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES); - fSupportExternalEntities = bo.booleanValue(); - Boolean cdata = (Boolean)propertyManager.getProperty(Constants.ZEPHYR_PROPERTY_PREFIX + Constants.STAX_REPORT_CDATA_EVENT) ; - if(cdata != null) ---- ./jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java Wed Jul 30 03:53:11 2014 -0700 -+++ ./jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java Mon Sep 08 12:36:00 2014 -0700 -@@ -53,6 +53,7 @@ - import java.util.Map; - import java.util.Stack; - import javax.xml.XMLConstants; -+import javax.xml.stream.XMLInputFactory; - - - /** -@@ -305,6 +306,11 @@ - /** Property Manager. This is used from Stax */ - protected PropertyManager fPropertyManager ; - -+ /** StAX properties */ -+ boolean fSupportDTD = true; -+ boolean fReplaceEntityReferences = true; -+ boolean fSupportExternalEntities = true; -+ - /** used to restrict external access */ - protected String fAccessExternalDTD = EXTERNAL_ACCESS_DEFAULT; - -@@ -1136,7 +1142,8 @@ - boolean parameter = entityName.startsWith("%"); - boolean general = !parameter; - if (unparsed || (general && !fExternalGeneralEntities) || -- (parameter && !fExternalParameterEntities)) { -+ (parameter && !fExternalParameterEntities) || -+ !fSupportDTD || !fSupportExternalEntities) { - - if (fEntityHandler != null) { - fResourceIdentifier.clear(); -@@ -1431,6 +1438,10 @@ - fStaxEntityResolver = null; - } - -+ fSupportDTD = ((Boolean)propertyManager.getProperty(XMLInputFactory.SUPPORT_DTD)).booleanValue(); -+ fReplaceEntityReferences = ((Boolean)propertyManager.getProperty(XMLInputFactory.IS_REPLACING_ENTITY_REFERENCES)).booleanValue(); -+ fSupportExternalEntities = ((Boolean)propertyManager.getProperty(XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES)).booleanValue(); -+ - // Zephyr feature ignore-external-dtd is the opposite of Xerces' load-external-dtd - fLoadExternalDTD = !((Boolean)propertyManager.getProperty(Constants.ZEPHYR_PROPERTY_PREFIX + Constants.IGNORE_EXTERNAL_DTD)).booleanValue(); - -@@ -1502,6 +1513,11 @@ - fSecurityManager = (XMLSecurityManager)componentManager.getProperty(SECURITY_MANAGER, null); - entityExpansionIndex = fSecurityManager.getIndex(Constants.JDK_ENTITY_EXPANSION_LIMIT); - -+ //StAX Property -+ fSupportDTD = true; -+ fReplaceEntityReferences = true; -+ fSupportExternalEntities = true; -+ - // JAXP 1.5 feature - XMLSecurityPropertyManager spm = (XMLSecurityPropertyManager) componentManager.getProperty(XML_SECURITY_PROPERTY_MANAGER, null); - if (spm == null) { ---- ./jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/DOMMessages_de.properties Wed Jul 30 03:53:11 2014 -0700 -+++ ./jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/DOMMessages_de.properties Mon Sep 08 12:36:00 2014 -0700 -@@ -26,7 +26,7 @@ - SYNTAX_ERR = Ung\u00FCltige Zeichenfolge angegeben. - VALIDATION_ERR = Aufruf einer Methode wie insertBefore oder removeChild w\u00FCrde die Dokumentgrammatik des Knotens ung\u00FCltig machen. - WRONG_DOCUMENT_ERR = Ein Knoten wird in einem anderen Dokument verwendet als dem, von dem er erstellt wurde. --TYPE_MISMATCH_ERR = Der Wertetyp f\u00FCr diesen Parameternamen ist nicht mit dem erwarteten Wertetyp kompatibel. -+TYPE_MISMATCH_ERR = Der Werttyp f\u00FCr diesen Parameternamen ist nicht mit dem erwarteten Werttyp kompatibel. - - #error messages or exceptions - FEATURE_NOT_SUPPORTED = Parameter {0} wird erkannt, aber der angeforderte Wert kann nicht festgelegt werden. ---- ./jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XIncludeMessages_de.properties Wed Jul 30 03:53:11 2014 -0700 -+++ ./jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XIncludeMessages_de.properties Mon Sep 08 12:36:00 2014 -0700 -@@ -27,7 +27,7 @@ - UnexpandedEntityReferenceIllegal = Der Ersatz eines "include"-Elements, das als Dokumentelement im Quell-Infoset der obersten Ebene angezeigt wird, darf keine nicht erweiterten Entit\u00E4tsreferenzen enthalten. - HrefFragmentIdentifierIllegal = Fragment-IDs d\u00FCrfen nicht verwendet werden. Der "href"-Attributwert "{0}" ist nicht zul\u00E4ssig. - HrefSyntacticallyInvalid = "href"-Attributwert "{0}" hat eine ung\u00FCltige Syntax. Nach Anwenden der Escape-Regeln ist der Wert kein syntaktisch korrekter URI oder IRI. --XPointerStreamability = Es wurde ein xpointer angegeben, der auf eine Stelle im Quell-Infoset verweist. Auf diese Stelle kann aufgrund des Streaming-Charakters des Prozessors nicht zugegriffen werden. -+XPointerStreamability = Es wurde ein xpointer angegeben, der auf eine Stelle im Quell-Infoset verweist. Auf diese Stelle kann aufgrund des Streamingcharakters des Prozessors nicht zugegriffen werden. - - XPointerResolutionUnsuccessful = XPointer-Aufl\u00F6sung nicht erfolgreich. - ---- ./jaxp/src/com/sun/org/apache/xpath/internal/res/XPATHErrorResources_de.java Wed Jul 30 03:53:11 2014 -0700 -+++ ./jaxp/src/com/sun/org/apache/xpath/internal/res/XPATHErrorResources_de.java Mon Sep 08 12:36:00 2014 -0700 -@@ -3,7 +3,7 @@ - * DO NOT REMOVE OR ALTER! - */ - /* -- * Copyright 1999-2004 The Apache Software Foundation. -+ * Copyright 1999-2005 The Apache Software Foundation. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. -@@ -878,7 +878,7 @@ - { "optionIN", " [-in inputXMLURL]"}, - { "optionSelect", " [-select xpath expression]"}, - { "optionMatch", " [-match match pattern (f\u00FCr Vergleichsdiagnose)]"}, -- { "optionAnyExpr", "Oder nur ein XPath-Ausdruck f\u00FChrt einen Diagnose-Dump aus"}, -+ { "optionAnyExpr", "Oder nur ein XPath-Ausdruck f\u00FChrt einen Diagnosedump aus"}, - { "noParsermsg1", "XSL-Prozess war nicht erfolgreich."}, - { "noParsermsg2", "** Parser konnte nicht gefunden werden **"}, - { "noParsermsg3", "Pr\u00FCfen Sie den Classpath."}, ---- ./jaxws/.hgtags Wed Jul 30 03:53:36 2014 -0700 -+++ ./jaxws/.hgtags Mon Sep 08 12:36:09 2014 -0700 -@@ -311,3 +311,21 @@ - f3bf1b270fea8b17aa2846f962f7514b6f772ab4 jdk8u20-b23 - 1277c0d492fd9253f1ea2730eb160953397bd939 jdk8u20-b24 - 1277c0d492fd9253f1ea2730eb160953397bd939 jdk8u20-b25 -+7025a2c10ea4116ce8f31bb1e305f732aa1025f0 jdk8u20-b26 -+efc85d318f4697f40bdd1f3757677be97f1758d9 jdk8u25-b00 -+a76779e1b0376650dfc29a1f3b14760f05e0fc6d jdk8u25-b01 -+3d31955043b9f1807c9d695c7b5d604d11c132cf jdk8u25-b02 -+c67cb85b249c69a96d7ac72734c35bc18644befe jdk8u25-b03 -+81129354f0e821f3d41dbcf8a68ce82f9d776127 jdk8u25-b04 -+5f78130b0a64df9568a827f9ea589fdc3a7c080c jdk8u25-b05 -+433da54f73257545d95edbc356fdb0e37a9d95eb jdk8u25-b06 -+cccfc3f8dec888c8fe86c212a51af2fba1e11aef jdk8u25-b07 -+c758be4c3cac65a2744bf4e7ed9bdabb85234de2 jdk8u25-b08 -+73423d29fe362e843cdccad510e2e44e2899bc9e jdk8u25-b09 -+391b45e0081afcf3db709878916063a63dca7b05 jdk8u25-b10 -+57cd66833abf44f499faaaed2c16bdf94b258ca9 jdk8u25-b11 -+56b97127afa66fa01eec0fcf467a77cd2e445b4f jdk8u25-b12 -+0ebb9d8c3dd49559b716f02825924801be55b3e7 jdk8u25-b13 -+392a9579cc95d27806c1dde16eee776524a49761 jdk8u25-b14 -+d3a96bbb88521188a3af1a34dd9523f13afa521d jdk8u25-b15 -+4570a7d00aa9bd3df028f52d6f9d8c434163b689 jdk8u25-b16 ---- ./jdk/.hgtags Wed Jul 30 18:42:59 2014 +0100 -+++ ./jdk/.hgtags Tue Sep 09 12:00:58 2014 -0700 -@@ -311,3 +311,24 @@ - be30cb2a3088f2b7b334b499f7eddbd5312312a7 jdk8u20-b23 - dfb9f24d56b51e5a2ca26e77fc69a2464d51a4d3 jdk8u20-b24 - dfb9f24d56b51e5a2ca26e77fc69a2464d51a4d3 jdk8u20-b25 -+dd229c5f57bff4e75a70908294a13072b9a48385 jdk8u20-b26 -+abca9f6f1a10e9f91b2538bbe7870f54f550d986 jdk8u25-b00 -+7d0627679c9fdeaaaa9fe15c7cc11af0763621ec jdk8u25-b01 -+b0277ec994b751ebb761814675352506cd56bcd6 jdk8u25-b02 -+5606d84f30bab5ed4bc5776572edd469fb013e13 jdk8u25-b03 -+40630cd55da8a2db7980249dc31af285965cb5e9 jdk8u25-b04 -+75b48287a1b3fc5757ac473f72c8918c7f345ffc jdk8u25-b05 -+5b80b4b22b4ca0b630c7f1cec3605da7694168e2 jdk8u25-b06 -+0e0a35b0bf0ff5852026c50038d5c2ecb26c075c jdk8u25-b07 -+d7d221f56fd17b96bab4440448641a844f9e92cd jdk8u25-b08 -+0c6cf43c5bcf0917d07a1bc94adb7a091f18f32c jdk8u25-b09 -+1317d94e95861a47fee8258903b652af70a3493c jdk8u25-b10 -+2104dfd9a4c2b519cdca019aec938db539bf4f3f jdk8u25-b11 -+eaaa9a04b9fdcfa4a830b811ed209eb2c45a4a6b jdk8u25-b12 -+c3a855402b923d3ba819b05292a971953fc8ed0b jdk8u25-b13 -+2a6df63ca0f0f59bb730638b05c72d77a23f93c8 jdk8u25-b14 -+412d9ade90401d098f3662bd688ab393008423bd jdk8u25-b15 -+f07bc5dab84c67f5d1dccbab318ee1c5485c852d jdk8u25-b16 -+0000000000000000000000000000000000000000 jdk8u25-b16 -+0000000000000000000000000000000000000000 jdk8u25-b16 -+d067890f970f3a712f870f6311d20f3359b6eaf0 jdk8u25-b16 ---- ./jdk/make/lib/CoreLibraries.gmk Wed Jul 30 18:42:59 2014 +0100 -+++ ./jdk/make/lib/CoreLibraries.gmk Tue Sep 09 12:00:58 2014 -0700 -@@ -264,7 +264,7 @@ - $(call SET_SHARED_LIBRARY_ORIGIN) \ - $(EXPORT_ZIP_FUNCS), \ - LDFLAGS_windows := -export:ZIP_Open -export:ZIP_Close -export:ZIP_FindEntry \ -- -export:ZIP_ReadEntry -export:ZIP_GetNextEntry jvm.lib \ -+ -export:ZIP_ReadEntry -export:ZIP_GetNextEntry -export:ZIP_CRC32 jvm.lib \ - $(WIN_JAVA_LIB), \ - LDFLAGS_SUFFIX_linux := -ljvm -ljava $(LIBZ), \ - LDFLAGS_SUFFIX_solaris := -ljvm -ljava $(LIBZ) -lc, \ ---- ./jdk/make/mapfiles/libnet/mapfile-vers Wed Jul 30 18:42:59 2014 +0100 -+++ ./jdk/make/mapfiles/libnet/mapfile-vers Tue Sep 09 12:00:58 2014 -0700 -@@ -28,6 +28,8 @@ - SUNWprivate_1.1 { - global: - JNI_OnLoad; -+ Java_java_net_AbstractPlainDatagramSocketImpl_init; -+ Java_java_net_AbstractPlainDatagramSocketImpl_dataAvailable; - Java_java_net_PlainSocketImpl_socketListen; - Java_java_net_PlainDatagramSocketImpl_getTTL; - Java_java_net_PlainDatagramSocketImpl_init; ---- ./jdk/src/macosx/classes/sun/lwawt/LWWindowPeer.java Wed Jul 30 18:42:59 2014 +0100 -+++ ./jdk/src/macosx/classes/sun/lwawt/LWWindowPeer.java Tue Sep 09 12:00:58 2014 -0700 -@@ -105,6 +105,8 @@ - - private final SecurityWarningWindow warningWindow; - -+ private volatile boolean targetFocusable; -+ - /** - * Current modal blocker or null. - * -@@ -240,13 +242,12 @@ - if (!visible && warningWindow != null) { - warningWindow.setVisible(false, false); - } -- -+ updateFocusableWindowState(); - super.setVisibleImpl(visible); - // TODO: update graphicsConfig, see 4868278 - platformWindow.setVisible(visible); - if (isSimpleWindow()) { - KeyboardFocusManagerPeer kfmPeer = LWKeyboardFocusManagerPeer.getInstance(); -- - if (visible) { - if (!getTarget().isAutoRequestFocus()) { - return; -@@ -397,6 +398,7 @@ - - @Override - public void updateFocusableWindowState() { -+ targetFocusable = getTarget().isFocusableWindow(); - platformWindow.updateFocusableWindowState(); - } - -@@ -1220,13 +1222,13 @@ - } - - private boolean isFocusableWindow() { -- boolean focusable = getTarget().isFocusableWindow(); -+ boolean focusable = targetFocusable; - if (isSimpleWindow()) { - LWWindowPeer ownerPeer = getOwnerFrameDialog(this); - if (ownerPeer == null) { - return false; - } -- return focusable && ownerPeer.getTarget().isFocusableWindow(); -+ return focusable && ownerPeer.targetFocusable; - } - return focusable; - } ---- ./jdk/src/share/classes/com/sun/java/swing/plaf/motif/MotifScrollPaneUI.java Wed Jul 30 18:42:59 2014 +0100 -+++ ./jdk/src/share/classes/com/sun/java/swing/plaf/motif/MotifScrollPaneUI.java Tue Sep 09 12:00:58 2014 -0700 -@@ -1,5 +1,5 @@ - /* -- * Copyright (c) 1997, 2004, Oracle and/or its affiliates. All rights reserved. -+ * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it -@@ -56,19 +56,22 @@ - - private PropertyChangeListener propertyChangeHandler; - -+ @Override - protected void installListeners(JScrollPane scrollPane) { - super.installListeners(scrollPane); - propertyChangeHandler = createPropertyChangeHandler(); - scrollPane.addPropertyChangeListener(propertyChangeHandler); - } - -- protected void uninstallListeners(JScrollPane scrollPane) { -+ @Override -+ protected void uninstallListeners(JComponent scrollPane) { - super.uninstallListeners(scrollPane); - scrollPane.removePropertyChangeListener(propertyChangeHandler); - } - - private PropertyChangeListener createPropertyChangeHandler() { - return new PropertyChangeListener() { -+ @Override - public void propertyChange(PropertyChangeEvent e) { - String propertyName = e.getPropertyName(); - -@@ -92,6 +95,7 @@ - }}; - } - -+ @Override - protected void installDefaults(JScrollPane scrollpane) { - super.installDefaults(scrollpane); - -@@ -115,7 +119,7 @@ - } - } - -- -+ @Override - protected void uninstallDefaults(JScrollPane c) { - super.uninstallDefaults(c); - ---- ./jdk/src/share/classes/com/sun/org/apache/xml/internal/security/Init.java Wed Jul 30 18:42:59 2014 +0100 -+++ ./jdk/src/share/classes/com/sun/org/apache/xml/internal/security/Init.java Tue Sep 09 12:00:58 2014 -0700 -@@ -25,6 +25,8 @@ - import java.io.InputStream; - import java.security.AccessController; - import java.security.PrivilegedAction; -+import java.security.PrivilegedActionException; -+import java.security.PrivilegedExceptionAction; - import java.util.ArrayList; - import java.util.List; - -@@ -35,6 +37,7 @@ - import com.sun.org.apache.xml.internal.security.algorithms.JCEMapper; - import com.sun.org.apache.xml.internal.security.algorithms.SignatureAlgorithm; - import com.sun.org.apache.xml.internal.security.c14n.Canonicalizer; -+import com.sun.org.apache.xml.internal.security.exceptions.XMLSecurityException; - import com.sun.org.apache.xml.internal.security.keys.keyresolver.KeyResolver; - import com.sun.org.apache.xml.internal.security.transforms.Transform; - import com.sun.org.apache.xml.internal.security.utils.ElementProxy; -@@ -118,43 +121,50 @@ - log.log(java.util.logging.Level.FINE, "Registering default algorithms"); - } - try { -- // -- // Bind the default prefixes -- // -- ElementProxy.registerDefaultPrefixes(); -+ AccessController.doPrivileged(new PrivilegedExceptionAction<Void>(){ -+ @Override public Void run() throws XMLSecurityException { -+ // -+ // Bind the default prefixes -+ // -+ ElementProxy.registerDefaultPrefixes(); - -- // -- // Set the default Transforms -- // -- Transform.registerDefaultAlgorithms(); -+ // -+ // Set the default Transforms -+ // -+ Transform.registerDefaultAlgorithms(); - -- // -- // Set the default signature algorithms -- // -- SignatureAlgorithm.registerDefaultAlgorithms(); -+ // -+ // Set the default signature algorithms -+ // -+ SignatureAlgorithm.registerDefaultAlgorithms(); - -- // -- // Set the default JCE algorithms -- // -- JCEMapper.registerDefaultAlgorithms(); -+ // -+ // Set the default JCE algorithms -+ // -+ JCEMapper.registerDefaultAlgorithms(); - -- // -- // Set the default c14n algorithms -- // -- Canonicalizer.registerDefaultAlgorithms(); -+ // -+ // Set the default c14n algorithms -+ // -+ Canonicalizer.registerDefaultAlgorithms(); - -- // -- // Register the default resolvers -- // -- ResourceResolver.registerDefaultResolvers(); -+ // -+ // Register the default resolvers -+ // -+ ResourceResolver.registerDefaultResolvers(); - -- // -- // Register the default key resolvers -- // -- KeyResolver.registerDefaultResolvers(); -- } catch (Exception ex) { -- log.log(java.util.logging.Level.SEVERE, ex.getMessage(), ex); -- ex.printStackTrace(); -+ // -+ // Register the default key resolvers -+ // -+ KeyResolver.registerDefaultResolvers(); -+ -+ return null; -+ } -+ }); -+ } catch (PrivilegedActionException ex) { -+ XMLSecurityException xse = (XMLSecurityException)ex.getException(); -+ log.log(java.util.logging.Level.SEVERE, xse.getMessage(), xse); -+ xse.printStackTrace(); - } - } - ---- ./jdk/src/share/classes/com/sun/org/apache/xml/internal/security/algorithms/JCEMapper.java Wed Jul 30 18:42:59 2014 +0100 -+++ ./jdk/src/share/classes/com/sun/org/apache/xml/internal/security/algorithms/JCEMapper.java Tue Sep 09 12:00:58 2014 -0700 -@@ -27,6 +27,7 @@ - - import com.sun.org.apache.xml.internal.security.encryption.XMLCipher; - import com.sun.org.apache.xml.internal.security.signature.XMLSignature; -+import com.sun.org.apache.xml.internal.security.utils.JavaUtils; - import org.w3c.dom.Element; - - -@@ -49,8 +50,11 @@ - * - * @param id - * @param algorithm -+ * @throws SecurityException if a security manager is installed and the -+ * caller does not have permission to register the JCE algorithm - */ - public static void register(String id, Algorithm algorithm) { -+ JavaUtils.checkRegisterPermission(); - algorithmsMap.put(id, algorithm); - } - -@@ -292,8 +296,11 @@ - /** - * Sets the default Provider for obtaining the security algorithms - * @param provider the default providerId. -+ * @throws SecurityException if a security manager is installed and the -+ * caller does not have permission to set the JCE provider - */ - public static void setProviderId(String provider) { -+ JavaUtils.checkRegisterPermission(); - providerName = provider; - } - ---- ./jdk/src/share/classes/com/sun/org/apache/xml/internal/security/algorithms/SignatureAlgorithm.java Wed Jul 30 18:42:59 2014 +0100 -+++ ./jdk/src/share/classes/com/sun/org/apache/xml/internal/security/algorithms/SignatureAlgorithm.java Tue Sep 09 12:00:58 2014 -0700 -@@ -37,6 +37,7 @@ - import com.sun.org.apache.xml.internal.security.signature.XMLSignature; - import com.sun.org.apache.xml.internal.security.signature.XMLSignatureException; - import com.sun.org.apache.xml.internal.security.utils.Constants; -+import com.sun.org.apache.xml.internal.security.utils.JavaUtils; - import org.w3c.dom.Attr; - import org.w3c.dom.Document; - import org.w3c.dom.Element; -@@ -314,18 +315,21 @@ - } - - /** -- * Registers implementing class of the Transform algorithm with algorithmURI -+ * Registers implementing class of the SignatureAlgorithm with algorithmURI - * -- * @param algorithmURI algorithmURI URI representation of <code>Transform algorithm</code>. -+ * @param algorithmURI algorithmURI URI representation of <code>SignatureAlgorithm</code>. - * @param implementingClass <code>implementingClass</code> the implementing class of - * {@link SignatureAlgorithmSpi} - * @throws AlgorithmAlreadyRegisteredException if specified algorithmURI is already registered - * @throws XMLSignatureException -+ * @throws SecurityException if a security manager is installed and the -+ * caller does not have permission to register the signature algorithm - */ - @SuppressWarnings("unchecked") - public static void register(String algorithmURI, String implementingClass) - throws AlgorithmAlreadyRegisteredException, ClassNotFoundException, - XMLSignatureException { -+ JavaUtils.checkRegisterPermission(); - if (log.isLoggable(java.util.logging.Level.FINE)) { - log.log(java.util.logging.Level.FINE, "Try to register " + algorithmURI + " " + implementingClass); - } -@@ -352,15 +356,18 @@ - /** - * Registers implementing class of the Transform algorithm with algorithmURI - * -- * @param algorithmURI algorithmURI URI representation of <code>Transform algorithm</code>. -+ * @param algorithmURI algorithmURI URI representation of <code>SignatureAlgorithm</code>. - * @param implementingClass <code>implementingClass</code> the implementing class of - * {@link SignatureAlgorithmSpi} - * @throws AlgorithmAlreadyRegisteredException if specified algorithmURI is already registered - * @throws XMLSignatureException -+ * @throws SecurityException if a security manager is installed and the -+ * caller does not have permission to register the signature algorithm - */ - public static void register(String algorithmURI, Class<? extends SignatureAlgorithmSpi> implementingClass) - throws AlgorithmAlreadyRegisteredException, ClassNotFoundException, - XMLSignatureException { -+ JavaUtils.checkRegisterPermission(); - if (log.isLoggable(java.util.logging.Level.FINE)) { - log.log(java.util.logging.Level.FINE, "Try to register " + algorithmURI + " " + implementingClass); - } ---- ./jdk/src/share/classes/com/sun/org/apache/xml/internal/security/c14n/Canonicalizer.java Wed Jul 30 18:42:59 2014 +0100 -+++ ./jdk/src/share/classes/com/sun/org/apache/xml/internal/security/c14n/Canonicalizer.java Tue Sep 09 12:00:58 2014 -0700 -@@ -41,6 +41,7 @@ - import com.sun.org.apache.xml.internal.security.c14n.implementations.Canonicalizer20010315WithComments; - import com.sun.org.apache.xml.internal.security.c14n.implementations.CanonicalizerPhysical; - import com.sun.org.apache.xml.internal.security.exceptions.AlgorithmAlreadyRegisteredException; -+import com.sun.org.apache.xml.internal.security.utils.JavaUtils; - import org.w3c.dom.Document; - import org.w3c.dom.Node; - import org.w3c.dom.NodeList; -@@ -142,10 +143,13 @@ - * @param algorithmURI - * @param implementingClass - * @throws AlgorithmAlreadyRegisteredException -+ * @throws SecurityException if a security manager is installed and the -+ * caller does not have permission to register the canonicalizer - */ - @SuppressWarnings("unchecked") - public static void register(String algorithmURI, String implementingClass) - throws AlgorithmAlreadyRegisteredException, ClassNotFoundException { -+ JavaUtils.checkRegisterPermission(); - // check whether URI is already registered - Class<? extends CanonicalizerSpi> registeredClass = - canonicalizerHash.get(algorithmURI); -@@ -166,9 +170,12 @@ - * @param algorithmURI - * @param implementingClass - * @throws AlgorithmAlreadyRegisteredException -+ * @throws SecurityException if a security manager is installed and the -+ * caller does not have permission to register the canonicalizer - */ -- public static void register(String algorithmURI, Class<CanonicalizerSpi> implementingClass) -+ public static void register(String algorithmURI, Class<? extends CanonicalizerSpi> implementingClass) - throws AlgorithmAlreadyRegisteredException, ClassNotFoundException { -+ JavaUtils.checkRegisterPermission(); - // check whether URI is already registered - Class<? extends CanonicalizerSpi> registeredClass = canonicalizerHash.get(algorithmURI); - ---- ./jdk/src/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/KeyResolver.java Wed Jul 30 18:42:59 2014 +0100 -+++ ./jdk/src/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/KeyResolver.java Tue Sep 09 12:00:58 2014 -0700 -@@ -42,6 +42,7 @@ - import com.sun.org.apache.xml.internal.security.keys.keyresolver.implementations.X509SKIResolver; - import com.sun.org.apache.xml.internal.security.keys.keyresolver.implementations.X509SubjectNameResolver; - import com.sun.org.apache.xml.internal.security.keys.storage.StorageResolver; -+import com.sun.org.apache.xml.internal.security.utils.JavaUtils; - import org.w3c.dom.Element; - import org.w3c.dom.Node; - -@@ -175,9 +176,12 @@ - * @throws InstantiationException - * @throws IllegalAccessException - * @throws ClassNotFoundException -+ * @throws SecurityException if a security manager is installed and the -+ * caller does not have permission to register the key resolver - */ - public static void register(String className, boolean globalResolver) - throws ClassNotFoundException, IllegalAccessException, InstantiationException { -+ JavaUtils.checkRegisterPermission(); - KeyResolverSpi keyResolverSpi = - (KeyResolverSpi) Class.forName(className).newInstance(); - keyResolverSpi.setGlobalResolver(globalResolver); -@@ -195,8 +199,11 @@ - * - * @param className - * @param globalResolver Whether the KeyResolverSpi is a global resolver or not -+ * @throws SecurityException if a security manager is installed and the -+ * caller does not have permission to register the key resolver - */ - public static void registerAtStart(String className, boolean globalResolver) { -+ JavaUtils.checkRegisterPermission(); - KeyResolverSpi keyResolverSpi = null; - Exception ex = null; - try { -@@ -228,11 +235,14 @@ - * - * @param keyResolverSpi a KeyResolverSpi instance to register - * @param start whether to register the KeyResolverSpi at the start of the list or not -+ * @throws SecurityException if a security manager is installed and the -+ * caller does not have permission to register the key resolver - */ - public static void register( - KeyResolverSpi keyResolverSpi, - boolean start - ) { -+ JavaUtils.checkRegisterPermission(); - KeyResolver resolver = new KeyResolver(keyResolverSpi); - if (start) { - resolverVector.add(0, resolver); -@@ -254,9 +264,12 @@ - * @throws InstantiationException - * @throws IllegalAccessException - * @throws ClassNotFoundException -+ * @throws SecurityException if a security manager is installed and the -+ * caller does not have permission to register the key resolver - */ - public static void registerClassNames(List<String> classNames) - throws ClassNotFoundException, IllegalAccessException, InstantiationException { -+ JavaUtils.checkRegisterPermission(); - List<KeyResolver> keyResolverList = new ArrayList<KeyResolver>(classNames.size()); - for (String className : classNames) { - KeyResolverSpi keyResolverSpi = ---- ./jdk/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/Transform.java Wed Jul 30 18:42:59 2014 +0100 -+++ ./jdk/src/share/classes/com/sun/org/apache/xml/internal/security/transforms/Transform.java Tue Sep 09 12:00:58 2014 -0700 -@@ -46,6 +46,7 @@ - import com.sun.org.apache.xml.internal.security.transforms.implementations.TransformXSLT; - import com.sun.org.apache.xml.internal.security.utils.Constants; - import com.sun.org.apache.xml.internal.security.utils.HelperNodeList; -+import com.sun.org.apache.xml.internal.security.utils.JavaUtils; - import com.sun.org.apache.xml.internal.security.utils.SignatureElementProxy; - import com.sun.org.apache.xml.internal.security.utils.XMLUtils; - import org.w3c.dom.Document; -@@ -181,11 +182,14 @@ - * class of {@link TransformSpi} - * @throws AlgorithmAlreadyRegisteredException if specified algorithmURI - * is already registered -+ * @throws SecurityException if a security manager is installed and the -+ * caller does not have permission to register the transform - */ - @SuppressWarnings("unchecked") - public static void register(String algorithmURI, String implementingClass) - throws AlgorithmAlreadyRegisteredException, ClassNotFoundException, - InvalidTransformException { -+ JavaUtils.checkRegisterPermission(); - // are we already registered? - Class<? extends TransformSpi> transformSpi = transformSpiHash.get(algorithmURI); - if (transformSpi != null) { -@@ -206,9 +210,12 @@ - * class of {@link TransformSpi} - * @throws AlgorithmAlreadyRegisteredException if specified algorithmURI - * is already registered -+ * @throws SecurityException if a security manager is installed and the -+ * caller does not have permission to register the transform - */ - public static void register(String algorithmURI, Class<? extends TransformSpi> implementingClass) - throws AlgorithmAlreadyRegisteredException { -+ JavaUtils.checkRegisterPermission(); - // are we already registered? - Class<? extends TransformSpi> transformSpi = transformSpiHash.get(algorithmURI); - if (transformSpi != null) { ---- ./jdk/src/share/classes/com/sun/org/apache/xml/internal/security/utils/ElementProxy.java Wed Jul 30 18:42:59 2014 +0100 -+++ ./jdk/src/share/classes/com/sun/org/apache/xml/internal/security/utils/ElementProxy.java Tue Sep 09 12:00:58 2014 -0700 -@@ -468,9 +468,12 @@ - * @param namespace - * @param prefix - * @throws XMLSecurityException -+ * @throws SecurityException if a security manager is installed and the -+ * caller does not have permission to set the default prefix - */ - public static void setDefaultPrefix(String namespace, String prefix) - throws XMLSecurityException { -+ JavaUtils.checkRegisterPermission(); - if (prefixMappings.containsValue(prefix)) { - String storedPrefix = prefixMappings.get(namespace); - if (!storedPrefix.equals(prefix)) { ---- ./jdk/src/share/classes/com/sun/org/apache/xml/internal/security/utils/JavaUtils.java Wed Jul 30 18:42:59 2014 +0100 -+++ ./jdk/src/share/classes/com/sun/org/apache/xml/internal/security/utils/JavaUtils.java Tue Sep 09 12:00:58 2014 -0700 -@@ -28,6 +28,7 @@ - import java.io.FileOutputStream; - import java.io.IOException; - import java.io.InputStream; -+import java.security.SecurityPermission; - - /** - * A collection of different, general-purpose methods for JAVA-specific things -@@ -39,6 +40,10 @@ - private static java.util.logging.Logger log = - java.util.logging.Logger.getLogger(JavaUtils.class.getName()); - -+ private static final SecurityPermission REGISTER_PERMISSION = -+ new SecurityPermission( -+ "com.sun.org.apache.xml.internal.security.register"); -+ - private JavaUtils() { - // we don't allow instantiation - } -@@ -145,4 +150,21 @@ - - return retBytes; - } -+ -+ /** -+ * Throws a {@code SecurityException} if a security manager is installed -+ * and the caller is not allowed to register an implementation of an -+ * algorithm, transform, or other security sensitive XML Signature function. -+ * -+ * @throws SecurityException if a security manager is installed and the -+ * caller has not been granted the -+ * {@literal "com.sun.org.apache.xml.internal.security.register"} -+ * {@code SecurityPermission} -+ */ -+ public static void checkRegisterPermission() { -+ SecurityManager sm = System.getSecurityManager(); -+ if (sm != null) { -+ sm.checkPermission(REGISTER_PERMISSION); -+ } -+ } - } ---- ./jdk/src/share/classes/com/sun/org/apache/xml/internal/security/utils/XMLUtils.java Wed Jul 30 18:42:59 2014 +0100 -+++ ./jdk/src/share/classes/com/sun/org/apache/xml/internal/security/utils/XMLUtils.java Tue Sep 09 12:00:58 2014 -0700 -@@ -80,32 +80,44 @@ - /** - * Set the prefix for the digital signature namespace - * @param prefix the new prefix for the digital signature namespace -+ * @throws SecurityException if a security manager is installed and the -+ * caller does not have permission to set the prefix - */ - public static void setDsPrefix(String prefix) { -+ JavaUtils.checkRegisterPermission(); - dsPrefix = prefix; - } - - /** - * Set the prefix for the digital signature 1.1 namespace - * @param prefix the new prefix for the digital signature 1.1 namespace -+ * @throws SecurityException if a security manager is installed and the -+ * caller does not have permission to set the prefix - */ - public static void setDs11Prefix(String prefix) { -+ JavaUtils.checkRegisterPermission(); - ds11Prefix = prefix; - } - - /** - * Set the prefix for the encryption namespace - * @param prefix the new prefix for the encryption namespace -+ * @throws SecurityException if a security manager is installed and the -+ * caller does not have permission to set the prefix - */ - public static void setXencPrefix(String prefix) { -+ JavaUtils.checkRegisterPermission(); - xencPrefix = prefix; - } - - /** - * Set the prefix for the encryption namespace 1.1 - * @param prefix the new prefix for the encryption namespace 1.1 -+ * @throws SecurityException if a security manager is installed and the -+ * caller does not have permission to set the prefix - */ - public static void setXenc11Prefix(String prefix) { -+ JavaUtils.checkRegisterPermission(); - xenc11Prefix = prefix; - } - ---- ./jdk/src/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/ResourceResolver.java Wed Jul 30 18:42:59 2014 +0100 -+++ ./jdk/src/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/ResourceResolver.java Tue Sep 09 12:00:58 2014 -0700 -@@ -27,6 +27,7 @@ - import java.util.Map; - - import com.sun.org.apache.xml.internal.security.signature.XMLSignatureInput; -+import com.sun.org.apache.xml.internal.security.utils.JavaUtils; - import com.sun.org.apache.xml.internal.security.utils.resolver.implementations.ResolverDirectHTTP; - import com.sun.org.apache.xml.internal.security.utils.resolver.implementations.ResolverFragment; - import com.sun.org.apache.xml.internal.security.utils.resolver.implementations.ResolverLocalFilesystem; -@@ -199,9 +200,12 @@ - * the class cannot be registered. - * - * @param className the name of the ResourceResolverSpi class to be registered -+ * @throws SecurityException if a security manager is installed and the -+ * caller does not have permission to register a resource resolver - */ - @SuppressWarnings("unchecked") - public static void register(String className) { -+ JavaUtils.checkRegisterPermission(); - try { - Class<ResourceResolverSpi> resourceResolverClass = - (Class<ResourceResolverSpi>) Class.forName(className); -@@ -216,9 +220,12 @@ - * list. This method logs a warning if the class cannot be registered. - * - * @param className the name of the ResourceResolverSpi class to be registered -+ * @throws SecurityException if a security manager is installed and the -+ * caller does not have permission to register a resource resolver - */ - @SuppressWarnings("unchecked") - public static void registerAtStart(String className) { -+ JavaUtils.checkRegisterPermission(); - try { - Class<ResourceResolverSpi> resourceResolverClass = - (Class<ResourceResolverSpi>) Class.forName(className); -@@ -233,8 +240,11 @@ - * cannot be registered. - * @param className - * @param start -+ * @throws SecurityException if a security manager is installed and the -+ * caller does not have permission to register a resource resolver - */ - public static void register(Class<? extends ResourceResolverSpi> className, boolean start) { -+ JavaUtils.checkRegisterPermission(); - try { - ResourceResolverSpi resourceResolverSpi = className.newInstance(); - register(resourceResolverSpi, start); -@@ -250,8 +260,11 @@ - * cannot be registered. - * @param resourceResolverSpi - * @param start -+ * @throws SecurityException if a security manager is installed and the -+ * caller does not have permission to register a resource resolver - */ - public static void register(ResourceResolverSpi resourceResolverSpi, boolean start) { -+ JavaUtils.checkRegisterPermission(); - synchronized(resolverList) { - if (start) { - resolverList.add(0, new ResourceResolver(resourceResolverSpi)); ---- ./jdk/src/share/classes/java/lang/Class.java Wed Jul 30 18:42:59 2014 +0100 -+++ ./jdk/src/share/classes/java/lang/Class.java Tue Sep 09 12:00:58 2014 -0700 -@@ -1,5 +1,5 @@ - /* -- * Copyright (c) 1994, 2013, Oracle and/or its affiliates. All rights reserved. -+ * Copyright (c) 1994, 2014, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it -@@ -256,8 +256,8 @@ - @CallerSensitive - public static Class<?> forName(String className) - throws ClassNotFoundException { -- return forName0(className, true, -- ClassLoader.getClassLoader(Reflection.getCallerClass())); -+ Class<?> caller = Reflection.getCallerClass(); -+ return forName0(className, true, ClassLoader.getClassLoader(caller), caller); - } - - -@@ -327,22 +327,27 @@ - ClassLoader loader) - throws ClassNotFoundException - { -- if (sun.misc.VM.isSystemDomainLoader(loader)) { -- SecurityManager sm = System.getSecurityManager(); -- if (sm != null) { -- ClassLoader ccl = ClassLoader.getClassLoader(Reflection.getCallerClass()); -+ Class<?> caller = null; -+ SecurityManager sm = System.getSecurityManager(); -+ if (sm != null) { -+ // Reflective call to get caller class is only needed if a security manager -+ // is present. Avoid the overhead of making this call otherwise. -+ caller = Reflection.getCallerClass(); -+ if (sun.misc.VM.isSystemDomainLoader(loader)) { -+ ClassLoader ccl = ClassLoader.getClassLoader(caller); - if (!sun.misc.VM.isSystemDomainLoader(ccl)) { - sm.checkPermission( - SecurityConstants.GET_CLASSLOADER_PERMISSION); - } - } - } -- return forName0(name, initialize, loader); -+ return forName0(name, initialize, loader, caller); - } - -- /** Called after security checks have been made. */ -+ /** Called after security check for system loader access checks have been made. */ - private static native Class<?> forName0(String name, boolean initialize, -- ClassLoader loader) -+ ClassLoader loader, -+ Class<?> caller) - throws ClassNotFoundException; - - /** ---- ./jdk/src/share/classes/java/lang/invoke/MethodType.java Wed Jul 30 18:42:59 2014 +0100 -+++ ./jdk/src/share/classes/java/lang/invoke/MethodType.java Tue Sep 09 12:00:58 2014 -0700 -@@ -653,7 +653,7 @@ - * @return the parameter types (as an immutable list) - */ - public List<Class<?>> parameterList() { -- return Collections.unmodifiableList(Arrays.asList(ptypes)); -+ return Collections.unmodifiableList(Arrays.asList(ptypes.clone())); - } - - /*non-public*/ Class<?> lastParameterType() { ---- ./jdk/src/share/classes/java/net/AbstractPlainDatagramSocketImpl.java Wed Jul 30 18:42:59 2014 +0100 -+++ ./jdk/src/share/classes/java/net/AbstractPlainDatagramSocketImpl.java Tue Sep 09 12:00:58 2014 -0700 -@@ -68,6 +68,7 @@ - return null; - } - }); -+ init(); - } - - /** -@@ -362,4 +363,7 @@ - protected boolean nativeConnectDisabled() { - return connectDisabled; - } -+ -+ native int dataAvailable(); -+ private static native void init(); - } ---- ./jdk/src/share/classes/java/net/DatagramSocket.java Wed Jul 30 18:42:59 2014 +0100 -+++ ./jdk/src/share/classes/java/net/DatagramSocket.java Tue Sep 09 12:00:58 2014 -0700 -@@ -83,6 +83,17 @@ - */ - boolean oldImpl = false; - -+ /** -+ * Set when a socket is ST_CONNECTED until we are certain -+ * that any packets which might have been received prior -+ * to calling connect() but not read by the application -+ * have been read. During this time we check the source -+ * address of all packets received to be sure they are from -+ * the connected destination. Other packets are read but -+ * silently dropped. -+ */ -+ private boolean explicitFilter = false; -+ private int bytesLeftToFilter; - /* - * Connection state: - * ST_NOT_CONNECTED = socket not connected -@@ -142,6 +153,15 @@ - - // socket is now connected by the impl - connectState = ST_CONNECTED; -+ // Do we need to filter some packets? -+ int avail = getImpl().dataAvailable(); -+ if (avail == -1) { -+ throw new SocketException(); -+ } -+ explicitFilter = avail > 0; -+ if (explicitFilter) { -+ bytesLeftToFilter = getReceiveBufferSize(); -+ } - } catch (SocketException se) { - - // connection will be emulated by DatagramSocket -@@ -490,6 +510,7 @@ - connectedAddress = null; - connectedPort = -1; - connectState = ST_NOT_CONNECTED; -+ explicitFilter = false; - } - } - -@@ -748,10 +769,13 @@ - } // end of while - } - } -- if (connectState == ST_CONNECTED_NO_IMPL) { -+ DatagramPacket tmp = null; -+ if ((connectState == ST_CONNECTED_NO_IMPL) || explicitFilter) { - // We have to do the filtering the old fashioned way since - // the native impl doesn't support connect or the connect -- // via the impl failed. -+ // via the impl failed, or .. "explicitFilter" may be set when -+ // a socket is connected via the impl, for a period of time -+ // when packets from other sources might be queued on socket. - boolean stop = false; - while (!stop) { - InetAddress peekAddress = null; -@@ -770,8 +794,14 @@ - if ((!connectedAddress.equals(peekAddress)) || - (connectedPort != peekPort)) { - // throw the packet away and silently continue -- DatagramPacket tmp = new DatagramPacket(new byte[1], 1); -+ tmp = new DatagramPacket( -+ new byte[1024], 1024); - getImpl().receive(tmp); -+ if (explicitFilter) { -+ if (checkFiltering(tmp)) { -+ stop = true; -+ } -+ } - } else { - stop = true; - } -@@ -780,9 +810,22 @@ - // If the security check succeeds, or the datagram is - // connected then receive the packet - getImpl().receive(p); -+ if (explicitFilter && tmp == null) { -+ // packet was not filtered, account for it here -+ checkFiltering(p); -+ } - } - } - -+ private boolean checkFiltering(DatagramPacket p) throws SocketException { -+ bytesLeftToFilter -= p.getLength(); -+ if (bytesLeftToFilter <= 0 || getImpl().dataAvailable() <= 0) { -+ explicitFilter = false; -+ return true; -+ } -+ return false; -+ } -+ - /** - * Gets the local address to which the socket is bound. - * ---- ./jdk/src/share/classes/java/net/DatagramSocketImpl.java Wed Jul 30 18:42:59 2014 +0100 -+++ ./jdk/src/share/classes/java/net/DatagramSocketImpl.java Tue Sep 09 12:00:58 2014 -0700 -@@ -47,6 +47,12 @@ - */ - protected FileDescriptor fd; - -+ int dataAvailable() { -+ // default impl returns zero, which disables the calling -+ // functionality -+ return 0; -+ } -+ - /** - * The DatagramSocket or MulticastSocket - * that owns this impl ---- ./jdk/src/share/classes/java/security/Signature.java Wed Jul 30 18:42:59 2014 +0100 -+++ ./jdk/src/share/classes/java/security/Signature.java Tue Sep 09 12:00:58 2014 -0700 -@@ -1,5 +1,5 @@ - /* -- * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved. -+ * Copyright (c) 1996, 2014, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it -@@ -590,6 +590,9 @@ - if (outbuf == null) { - throw new IllegalArgumentException("No output buffer given"); - } -+ if (offset < 0 || len < 0) { -+ throw new IllegalArgumentException("offset or len is less than 0"); -+ } - if (outbuf.length - offset < len) { - throw new IllegalArgumentException - ("Output buffer too small for specified offset and length"); -@@ -658,9 +661,16 @@ - public final boolean verify(byte[] signature, int offset, int length) - throws SignatureException { - if (state == VERIFY) { -- if ((signature == null) || (offset < 0) || (length < 0) || -- (length > signature.length - offset)) { -- throw new IllegalArgumentException("Bad arguments"); -+ if (signature == null) { -+ throw new IllegalArgumentException("signature is null"); -+ } -+ if (offset < 0 || length < 0) { -+ throw new IllegalArgumentException -+ ("offset or length is less than 0"); -+ } -+ if (signature.length - offset < length) { -+ throw new IllegalArgumentException -+ ("signature too small for specified offset and length"); - } - - return engineVerify(signature, offset, length); -@@ -713,6 +723,16 @@ - public final void update(byte[] data, int off, int len) - throws SignatureException { - if (state == SIGN || state == VERIFY) { -+ if (data == null) { -+ throw new IllegalArgumentException("data is null"); -+ } -+ if (off < 0 || len < 0) { -+ throw new IllegalArgumentException("off or len is less than 0"); -+ } -+ if (data.length - off < len) { -+ throw new IllegalArgumentException -+ ("data too small for specified offset and length"); -+ } - engineUpdate(data, off, len); - } else { - throw new SignatureException("object not initialized for " ---- ./jdk/src/share/classes/java/security/cert/CertificateRevokedException.java Wed Jul 30 18:42:59 2014 +0100 -+++ ./jdk/src/share/classes/java/security/cert/CertificateRevokedException.java Tue Sep 09 12:00:58 2014 -0700 -@@ -1,5 +1,5 @@ - /* -- * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved. -+ * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it -@@ -94,7 +94,10 @@ - this.revocationDate = new Date(revocationDate.getTime()); - this.reason = reason; - this.authority = authority; -- this.extensions = new HashMap<String, Extension>(extensions); -+ // make sure Map only contains correct types -+ this.extensions = Collections.checkedMap(new HashMap<>(), -+ String.class, Extension.class); -+ this.extensions.putAll(extensions); - } - - /** -@@ -172,7 +175,8 @@ - public String getMessage() { - return "Certificate has been revoked, reason: " - + reason + ", revocation date: " + revocationDate -- + ", authority: " + authority + ", extensions: " + extensions; -+ + ", authority: " + authority + ", extension OIDs: " -+ + extensions.keySet(); - } - - /** ---- ./jdk/src/share/classes/java/util/Collections.java Wed Jul 30 18:42:59 2014 +0100 -+++ ./jdk/src/share/classes/java/util/Collections.java Tue Sep 09 12:00:58 2014 -0700 -@@ -3077,10 +3077,7 @@ - public void remove() { it.remove(); }}; - } - -- public boolean add(E e) { -- typeCheck(e); -- return c.add(e); -- } -+ public boolean add(E e) { return c.add(typeCheck(e)); } - - private E[] zeroLengthElementArray; // Lazily initialized - -@@ -3187,11 +3184,7 @@ - public E peek() {return queue.peek();} - public E poll() {return queue.poll();} - public E remove() {return queue.remove();} -- -- public boolean offer(E e) { -- typeCheck(e); -- return add(e); -- } -+ public boolean offer(E e) {return queue.offer(typeCheck(e));} - } - - /** -@@ -3440,13 +3433,11 @@ - public int lastIndexOf(Object o) { return list.lastIndexOf(o); } - - public E set(int index, E element) { -- typeCheck(element); -- return list.set(index, element); -+ return list.set(index, typeCheck(element)); - } - - public void add(int index, E element) { -- typeCheck(element); -- list.add(index, element); -+ list.add(index, typeCheck(element)); - } - - public boolean addAll(int index, Collection<? extends E> c) { -@@ -3467,13 +3458,11 @@ - public void remove() { i.remove(); } - - public void set(E e) { -- typeCheck(e); -- i.set(e); -+ i.set(typeCheck(e)); - } - - public void add(E e) { -- typeCheck(e); -- i.add(e); -+ i.add(typeCheck(e)); - } - - @Override ---- ./jdk/src/share/classes/java/util/ResourceBundle.java Wed Jul 30 18:42:59 2014 +0100 -+++ ./jdk/src/share/classes/java/util/ResourceBundle.java Tue Sep 09 12:00:58 2014 -0700 -@@ -2650,7 +2650,10 @@ - } catch (ClassNotFoundException e) { - } - } else if (format.equals("java.properties")) { -- final String resourceName = toResourceName(bundleName, "properties"); -+ final String resourceName = toResourceName0(bundleName, "properties"); -+ if (resourceName == null) { -+ return bundle; -+ } - final ClassLoader classLoader = loader; - final boolean reloadFlag = reload; - InputStream stream = null; -@@ -2804,7 +2807,10 @@ - } - boolean result = false; - try { -- String resourceName = toResourceName(toBundleName(baseName, locale), format); -+ String resourceName = toResourceName0(toBundleName(baseName, locale), format); -+ if (resourceName == null) { -+ return result; -+ } - URL url = loader.getResource(resourceName); - if (url != null) { - long lastModified = 0; -@@ -2938,6 +2944,15 @@ - sb.append(bundleName.replace('.', '/')).append('.').append(suffix); - return sb.toString(); - } -+ -+ private String toResourceName0(String bundleName, String suffix) { -+ // application protocol check -+ if (bundleName.contains("://")) { -+ return null; -+ } else { -+ return toResourceName(bundleName, suffix); -+ } -+ } - } - - private static class SingleFormatControl extends Control { ---- ./jdk/src/share/classes/java/util/logging/LogRecord.java Wed Jul 30 18:42:59 2014 +0100 -+++ ./jdk/src/share/classes/java/util/logging/LogRecord.java Tue Sep 09 12:00:58 2014 -0700 -@@ -513,7 +513,13 @@ - // If necessary, try to regenerate the resource bundle. - if (resourceBundleName != null) { - try { -- resourceBundle = ResourceBundle.getBundle(resourceBundleName); -+ // use system class loader to ensure the ResourceBundle -+ // instance is a different instance than null loader uses -+ final ResourceBundle bundle = -+ ResourceBundle.getBundle(resourceBundleName, -+ Locale.getDefault(), -+ ClassLoader.getSystemClassLoader()); -+ resourceBundle = bundle; - } catch (MissingResourceException ex) { - // This is not a good place to throw an exception, - // so we simply leave the resourceBundle null. ---- ./jdk/src/share/classes/java/util/logging/Logger.java Wed Jul 30 18:42:59 2014 +0100 -+++ ./jdk/src/share/classes/java/util/logging/Logger.java Tue Sep 09 12:00:58 2014 -0700 -@@ -1,5 +1,5 @@ - /* -- * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. -+ * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it -@@ -1934,6 +1934,9 @@ - } - - setCallersClassLoaderRef(callersClass); -+ if (isSystemLogger && getCallersClassLoader() != null) { -+ checkPermission(); -+ } - if (findResourceBundle(name, true) == null) { - // We've failed to find an expected ResourceBundle. - // unset the caller's ClassLoader since we were unable to find the -@@ -2168,11 +2171,13 @@ - return trb; - } - final String rbName = isSystemLogger -- ? trb.resourceBundleName -+ // ancestor of a system logger is expected to be a system logger. -+ // ignore resource bundle name if it's not. -+ ? (target.isSystemLogger ? trb.resourceBundleName : null) - : target.getResourceBundleName(); - if (rbName != null) { - return LoggerBundle.get(rbName, -- findResourceBundle(rbName, true)); -+ findResourceBundle(rbName, true)); - } - target = isSystemLogger ? target.parent : target.getParent(); - } ---- ./jdk/src/share/classes/javax/crypto/CipherInputStream.java Wed Jul 30 18:42:59 2014 +0100 -+++ ./jdk/src/share/classes/javax/crypto/CipherInputStream.java Tue Sep 09 12:00:58 2014 -0700 -@@ -1,5 +1,5 @@ - /* -- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. -+ * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it -@@ -88,6 +88,8 @@ - private int ofinish = 0; - // stream status - private boolean closed = false; -+ // The stream has been read from. False if the stream has never been read. -+ private boolean read = false; - - /** - * private convenience function. -@@ -103,13 +105,15 @@ - private int getMoreData() throws IOException { - if (done) return -1; - int readin = input.read(ibuffer); -+ read = true; - if (readin == -1) { - done = true; - try { - obuffer = cipher.doFinal(); -+ } catch (IllegalBlockSizeException | BadPaddingException e) { -+ obuffer = null; -+ throw new IOException(e); - } -- catch (IllegalBlockSizeException e) {obuffer = null;} -- catch (BadPaddingException e) {obuffer = null;} - if (obuffer == null) - return -1; - else { -@@ -120,7 +124,10 @@ - } - try { - obuffer = cipher.update(ibuffer, 0, readin); -- } catch (IllegalStateException e) {obuffer = null;}; -+ } catch (IllegalStateException e) { -+ obuffer = null; -+ throw e; -+ } - ostart = 0; - if (obuffer == null) - ofinish = 0; -@@ -308,6 +315,11 @@ - } - } - catch (BadPaddingException | IllegalBlockSizeException ex) { -+ /* If no data has been read from the stream to be en/decrypted, -+ we supress any exceptions, and close quietly. */ -+ if (read) { -+ throw new IOException(ex); -+ } - } - ostart = 0; - ofinish = 0; ---- ./jdk/src/share/classes/javax/swing/JDesktopPane.java Wed Jul 30 18:42:59 2014 +0100 -+++ ./jdk/src/share/classes/javax/swing/JDesktopPane.java Tue Sep 09 12:00:58 2014 -0700 -@@ -43,6 +43,7 @@ - import java.beans.PropertyVetoException; - import java.util.Set; - import java.util.TreeSet; -+import java.util.LinkedHashSet; - /** - * A container used to create a multiple-document interface or a virtual desktop. - * You create <code>JInternalFrame</code> objects and add them to the -@@ -266,7 +267,7 @@ - - private static Collection<JInternalFrame> getAllFrames(Container parent) { - int i, count; -- Collection<JInternalFrame> results = new ArrayList<JInternalFrame>(); -+ Collection<JInternalFrame> results = new LinkedHashSet<>(); - count = parent.getComponentCount(); - for (i = 0; i < count; i++) { - Component next = parent.getComponent(i); ---- ./jdk/src/share/classes/sun/awt/ComponentFactory.java Wed Jul 30 18:42:59 2014 +0100 -+++ ./jdk/src/share/classes/sun/awt/ComponentFactory.java Tue Sep 09 12:00:58 2014 -0700 -@@ -25,6 +25,8 @@ - - package sun.awt; - -+import sun.awt.datatransfer.DataTransferer; -+ - import java.awt.*; - import java.awt.dnd.*; - import java.awt.dnd.peer.DragSourceContextPeer; -@@ -93,4 +95,6 @@ - RobotPeer createRobot(Robot target, GraphicsDevice screen) - throws AWTException, HeadlessException; - -+ DataTransferer getDataTransferer(); -+ - } ---- ./jdk/src/share/classes/sun/awt/HeadlessToolkit.java Wed Jul 30 18:42:59 2014 +0100 -+++ ./jdk/src/share/classes/sun/awt/HeadlessToolkit.java Tue Sep 09 12:00:58 2014 -0700 -@@ -25,6 +25,8 @@ - - package sun.awt; - -+import sun.awt.datatransfer.DataTransferer; -+ - import java.awt.*; - import java.awt.dnd.*; - import java.awt.dnd.peer.DragSourceContextPeer; -@@ -401,6 +403,11 @@ - return null; - } - -+ @Override -+ public DataTransferer getDataTransferer() { -+ return null; -+ } -+ - @SuppressWarnings("deprecation") - public FontMetrics getFontMetrics(Font font) { - return tk.getFontMetrics(font); ---- ./jdk/src/share/classes/sun/awt/SunToolkit.java Wed Jul 30 18:42:59 2014 +0100 -+++ ./jdk/src/share/classes/sun/awt/SunToolkit.java Tue Sep 09 12:00:58 2014 -0700 -@@ -205,8 +205,6 @@ - - public abstract boolean isTraySupported(); - -- public abstract DataTransferer getDataTransferer(); -- - @SuppressWarnings("deprecation") - public abstract FontPeer getFontPeer(String name, int style); - ---- ./jdk/src/share/classes/sun/awt/datatransfer/DataTransferer.java Wed Jul 30 18:42:59 2014 +0100 -+++ ./jdk/src/share/classes/sun/awt/datatransfer/DataTransferer.java Tue Sep 09 12:00:58 2014 -0700 -@@ -86,6 +86,7 @@ - import java.util.TreeMap; - import java.util.TreeSet; - -+import sun.awt.ComponentFactory; - import sun.util.logging.PlatformLogger; - - import sun.awt.AppContext; -@@ -272,7 +273,7 @@ - * instead, null will be returned. - */ - public static synchronized DataTransferer getInstance() { -- return ((SunToolkit) Toolkit.getDefaultToolkit()).getDataTransferer(); -+ return ((ComponentFactory) Toolkit.getDefaultToolkit()).getDataTransferer(); - } - - /** ---- ./jdk/src/share/classes/sun/awt/image/BytePackedRaster.java Wed Jul 30 18:42:59 2014 +0100 -+++ ./jdk/src/share/classes/sun/awt/image/BytePackedRaster.java Tue Sep 09 12:00:58 2014 -0700 -@@ -1408,10 +1408,10 @@ - } - } - -- int lastbit = (dataBitOffset -- + (height-1) * scanlineStride * 8 -- + (width-1) * pixelBitStride -- + pixelBitStride - 1); -+ long lastbit = (long) dataBitOffset -+ + (long) (height - 1) * (long) scanlineStride * 8 -+ + (long) (width - 1) * (long) pixelBitStride -+ + (long) pixelBitStride - 1; - if (lastbit < 0 || lastbit / 8 >= data.length) { - throw new RasterFormatException("raster dimensions overflow " + - "array bounds"); ---- ./jdk/src/share/classes/sun/invoke/util/VerifyAccess.java Wed Jul 30 18:42:59 2014 +0100 -+++ ./jdk/src/share/classes/sun/invoke/util/VerifyAccess.java Tue Sep 09 12:00:58 2014 -0700 -@@ -102,19 +102,24 @@ - case PUBLIC: - return true; // already checked above - case PROTECTED: -+ assert !defc.isInterface(); // protected members aren't allowed in interfaces - if ((allowedModes & PROTECTED_OR_PACKAGE_ALLOWED) != 0 && - isSamePackage(defc, lookupClass)) - return true; - if ((allowedModes & PROTECTED) == 0) - return false; -+ // Protected members are accessible by subclasses, which does not include interfaces. -+ // Interfaces are types, not classes. They should not have access to -+ // protected members in j.l.Object, even though it is their superclass. - if ((mods & STATIC) != 0 && - !isRelatedClass(refc, lookupClass)) - return false; - if ((allowedModes & PROTECTED) != 0 && -- isSuperClass(defc, lookupClass)) -+ isSubClass(lookupClass, defc)) - return true; - return false; - case PACKAGE_ONLY: // That is, zero. Unmarked member is package-only access. -+ assert !defc.isInterface(); // package-private members aren't allowed in interfaces - return ((allowedModes & PACKAGE_ALLOWED) != 0 && - isSamePackage(defc, lookupClass)); - case PRIVATE: -@@ -129,12 +134,13 @@ - - static boolean isRelatedClass(Class<?> refc, Class<?> lookupClass) { - return (refc == lookupClass || -- refc.isAssignableFrom(lookupClass) || -- lookupClass.isAssignableFrom(refc)); -+ isSubClass(refc, lookupClass) || -+ isSubClass(lookupClass, refc)); - } - -- static boolean isSuperClass(Class<?> defc, Class<?> lookupClass) { -- return defc.isAssignableFrom(lookupClass); -+ static boolean isSubClass(Class<?> lookupClass, Class<?> defc) { -+ return defc.isAssignableFrom(lookupClass) && -+ !lookupClass.isInterface(); // interfaces are types, not classes. - } - - static int getClassModifiers(Class<?> c) { ---- ./jdk/src/share/classes/sun/nio/ch/DatagramChannelImpl.java Wed Jul 30 18:42:59 2014 +0100 -+++ ./jdk/src/share/classes/sun/nio/ch/DatagramChannelImpl.java Tue Sep 09 12:00:58 2014 -0700 -@@ -755,6 +755,26 @@ - - // set or refresh local address - localAddress = Net.localAddress(fd); -+ -+ // flush any packets already received. -+ boolean blocking = false; -+ synchronized (blockingLock()) { -+ try { -+ blocking = isBlocking(); -+ // remainder of each packet thrown away -+ ByteBuffer tmpBuf = ByteBuffer.allocate(1); -+ if (blocking) { -+ configureBlocking(false); -+ } -+ do { -+ tmpBuf.clear(); -+ } while (receive(tmpBuf) != null); -+ } finally { -+ if (blocking) { -+ configureBlocking(true); -+ } -+ } -+ } - } - } - } ---- ./jdk/src/share/classes/sun/reflect/annotation/AnnotationInvocationHandler.java Wed Jul 30 18:42:59 2014 +0100 -+++ ./jdk/src/share/classes/sun/reflect/annotation/AnnotationInvocationHandler.java Tue Sep 09 12:00:58 2014 -0700 -@@ -1,5 +1,5 @@ - /* -- * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. -+ * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it -@@ -29,7 +29,6 @@ - import java.lang.reflect.*; - import java.io.Serializable; - import java.util.*; --import java.lang.annotation.*; - import java.security.AccessController; - import java.security.PrivilegedAction; - -@@ -45,6 +44,11 @@ - private final Map<String, Object> memberValues; - - AnnotationInvocationHandler(Class<? extends Annotation> type, Map<String, Object> memberValues) { -+ Class<?>[] superInterfaces = type.getInterfaces(); -+ if (!type.isAnnotation() || -+ superInterfaces.length != 1 || -+ superInterfaces[0] != java.lang.annotation.Annotation.class) -+ throw new AnnotationFormatError("Attempt to create proxy for a non-annotation type."); - this.type = type; - this.memberValues = memberValues; - } -@@ -57,13 +61,17 @@ - if (member.equals("equals") && paramTypes.length == 1 && - paramTypes[0] == Object.class) - return equalsImpl(args[0]); -- assert paramTypes.length == 0; -- if (member.equals("toString")) -+ if (paramTypes.length != 0) -+ throw new AssertionError("Too many parameters for an annotation method"); -+ -+ switch(member) { -+ case "toString": - return toStringImpl(); -- if (member.equals("hashCode")) -+ case "hashCode": - return hashCodeImpl(); -- if (member.equals("annotationType")) -+ case "annotationType": - return type; -+ } - - // Handle annotation member accessors - Object result = memberValues.get(member); -@@ -129,7 +137,7 @@ - * Implementation of dynamicProxy.toString() - */ - private String toStringImpl() { -- StringBuffer result = new StringBuffer(128); -+ StringBuilder result = new StringBuilder(128); - result.append('@'); - result.append(type.getName()); - result.append('('); -@@ -277,6 +285,7 @@ - new PrivilegedAction<Method[]>() { - public Method[] run() { - final Method[] mm = type.getDeclaredMethods(); -+ validateAnnotationMethods(mm); - AccessibleObject.setAccessible(mm, true); - return mm; - } -@@ -287,6 +296,94 @@ - private transient volatile Method[] memberMethods = null; - - /** -+ * Validates that a method is structurally appropriate for an -+ * annotation type. As of Java SE 8, annotation types cannot -+ * contain static methods and the declared methods of an -+ * annotation type must take zero arguments and there are -+ * restrictions on the return type. -+ */ -+ private void validateAnnotationMethods(Method[] memberMethods) { -+ /* -+ * Specification citations below are from JLS -+ * 9.6.1. Annotation Type Elements -+ */ -+ boolean valid = true; -+ for(Method method : memberMethods) { -+ /* -+ * "By virtue of the AnnotationTypeElementDeclaration -+ * production, a method declaration in an annotation type -+ * declaration cannot have formal parameters, type -+ * parameters, or a throws clause. -+ * -+ * "By virtue of the AnnotationTypeElementModifier -+ * production, a method declaration in an annotation type -+ * declaration cannot be default or static." -+ */ -+ if (method.getModifiers() != (Modifier.PUBLIC | Modifier.ABSTRACT) || -+ method.isDefault() || -+ method.getParameterCount() != 0 || -+ method.getExceptionTypes().length != 0) { -+ valid = false; -+ break; -+ } -+ -+ /* -+ * "It is a compile-time error if the return type of a -+ * method declared in an annotation type is not one of the -+ * following: a primitive type, String, Class, any -+ * parameterized invocation of Class, an enum type -+ * (section 8.9), an annotation type, or an array type -+ * (chapter 10) whose element type is one of the preceding -+ * types." -+ */ -+ Class<?> returnType = method.getReturnType(); -+ if (returnType.isArray()) { -+ returnType = returnType.getComponentType(); -+ if (returnType.isArray()) { // Only single dimensional arrays -+ valid = false; -+ break; -+ } -+ } -+ -+ if (!((returnType.isPrimitive() && returnType != void.class) || -+ returnType == java.lang.String.class || -+ returnType == java.lang.Class.class || -+ returnType.isEnum() || -+ returnType.isAnnotation())) { -+ valid = false; -+ break; -+ } -+ -+ /* -+ * "It is a compile-time error if any method declared in an -+ * annotation type has a signature that is -+ * override-equivalent to that of any public or protected -+ * method declared in class Object or in the interface -+ * java.lang.annotation.Annotation." -+ * -+ * The methods in Object or Annotation meeting the other -+ * criteria (no arguments, contrained return type, etc.) -+ * above are: -+ * -+ * String toString() -+ * int hashCode() -+ * Class<? extends Annotation> annotationType() -+ */ -+ String methodName = method.getName(); -+ if ((methodName.equals("toString") && returnType == java.lang.String.class) || -+ (methodName.equals("hashCode") && returnType == int.class) || -+ (methodName.equals("annotationType") && returnType == java.lang.Class.class)) { -+ valid = false; -+ break; -+ } -+ } -+ if (valid) -+ return; -+ else -+ throw new AnnotationFormatError("Malformed method on an annotation type"); -+ } -+ -+ /** - * Implementation of dynamicProxy.hashCode() - */ - private int hashCodeImpl() { -@@ -330,7 +427,6 @@ - throws java.io.IOException, ClassNotFoundException { - s.defaultReadObject(); - -- - // Check to make sure that types have not evolved incompatibly - - AnnotationType annotationType = null; -@@ -343,7 +439,6 @@ - - Map<String, Class<?>> memberTypes = annotationType.memberTypes(); - -- - // If there are annotation members without values, that - // situation is handled by the invoke method. - for (Map.Entry<String, Object> memberValue : memberValues.entrySet()) { ---- ./jdk/src/share/classes/sun/security/provider/SecureRandom.java Wed Jul 30 18:42:59 2014 +0100 -+++ ./jdk/src/share/classes/sun/security/provider/SecureRandom.java Tue Sep 09 12:00:58 2014 -0700 -@@ -1,5 +1,5 @@ - /* -- * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved. -+ * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it -@@ -29,6 +29,7 @@ - import java.security.MessageDigest; - import java.security.SecureRandomSpi; - import java.security.NoSuchAlgorithmException; -+import java.security.NoSuchProviderException; - - /** - * <p>This class provides a crytpographically strong pseudo-random number -@@ -94,9 +95,19 @@ - */ - private void init(byte[] seed) { - try { -- digest = MessageDigest.getInstance("SHA"); -- } catch (NoSuchAlgorithmException e) { -- throw new InternalError("internal error: SHA-1 not available.", e); -+ /* -+ * Use the local SUN implementation to avoid native -+ * performance overhead. -+ */ -+ digest = MessageDigest.getInstance("SHA", "SUN"); -+ } catch (NoSuchProviderException | NoSuchAlgorithmException e) { -+ // Fallback to any available. -+ try { -+ digest = MessageDigest.getInstance("SHA"); -+ } catch (NoSuchAlgorithmException exc) { -+ throw new InternalError( -+ "internal error: SHA-1 not available.", exc); -+ } - } - - if (seed != null) { -@@ -265,9 +276,19 @@ - s.defaultReadObject (); - - try { -- digest = MessageDigest.getInstance("SHA"); -- } catch (NoSuchAlgorithmException e) { -- throw new InternalError("internal error: SHA-1 not available.", e); -+ /* -+ * Use the local SUN implementation to avoid native -+ * performance overhead. -+ */ -+ digest = MessageDigest.getInstance("SHA", "SUN"); -+ } catch (NoSuchProviderException | NoSuchAlgorithmException e) { -+ // Fallback to any available. -+ try { -+ digest = MessageDigest.getInstance("SHA"); -+ } catch (NoSuchAlgorithmException exc) { -+ throw new InternalError( -+ "internal error: SHA-1 not available.", exc); -+ } - } - } - } ---- ./jdk/src/share/classes/sun/security/ssl/CipherSuite.java Wed Jul 30 18:42:59 2014 +0100 -+++ ./jdk/src/share/classes/sun/security/ssl/CipherSuite.java Tue Sep 09 12:00:58 2014 -0700 -@@ -1,5 +1,5 @@ - /* -- * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved. -+ * Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it -@@ -968,7 +968,7 @@ - * 1. Prefer Suite B compliant cipher suites, see RFC6460 (To be - * changed later, see below). - * 2. Prefer the stronger bulk cipher, in the order of AES_256(GCM), -- * AES_128(GCM), AES_256, AES_128, RC-4, 3DES-EDE. -+ * AES_128(GCM), AES_256, AES_128, 3DES-EDE, RC-4. - * 3. Prefer the stronger MAC algorithm, in the order of SHA384, - * SHA256, SHA, MD5. - * 4. Prefer the better performance of key exchange and digital -@@ -1055,18 +1055,6 @@ - add("TLS_DHE_DSS_WITH_AES_128_CBC_SHA", - 0x0032, --p, K_DHE_DSS, B_AES_128, T); - -- // RC-4 -- add("TLS_ECDHE_ECDSA_WITH_RC4_128_SHA", -- 0xC007, --p, K_ECDHE_ECDSA, B_RC4_128, N); -- add("TLS_ECDHE_RSA_WITH_RC4_128_SHA", -- 0xC011, --p, K_ECDHE_RSA, B_RC4_128, N); -- add("SSL_RSA_WITH_RC4_128_SHA", -- 0x0005, --p, K_RSA, B_RC4_128, N); -- add("TLS_ECDH_ECDSA_WITH_RC4_128_SHA", -- 0xC002, --p, K_ECDH_ECDSA, B_RC4_128, N); -- add("TLS_ECDH_RSA_WITH_RC4_128_SHA", -- 0xC00C, --p, K_ECDH_RSA, B_RC4_128, N); -- - // Cipher suites in GCM mode, see RFC 5288/5289. - // - // We may increase the priority of cipher suites in GCM mode when -@@ -1127,6 +1115,17 @@ - add("SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA", - 0x0013, --p, K_DHE_DSS, B_3DES, N); - -+ // RC-4 -+ add("TLS_ECDHE_ECDSA_WITH_RC4_128_SHA", -+ 0xC007, --p, K_ECDHE_ECDSA, B_RC4_128, N); -+ add("TLS_ECDHE_RSA_WITH_RC4_128_SHA", -+ 0xC011, --p, K_ECDHE_RSA, B_RC4_128, N); -+ add("SSL_RSA_WITH_RC4_128_SHA", -+ 0x0005, --p, K_RSA, B_RC4_128, N); -+ add("TLS_ECDH_ECDSA_WITH_RC4_128_SHA", -+ 0xC002, --p, K_ECDH_ECDSA, B_RC4_128, N); -+ add("TLS_ECDH_RSA_WITH_RC4_128_SHA", -+ 0xC00C, --p, K_ECDH_RSA, B_RC4_128, N); - add("SSL_RSA_WITH_RC4_128_MD5", - 0x0004, --p, K_RSA, B_RC4_128, N); - -@@ -1146,7 +1145,7 @@ - * 2. If a cipher suite has been obsoleted, we put it at the end of - * the list. - * 3. Prefer the stronger bulk cipher, in the order of AES_256, -- * AES_128, RC-4, 3DES-EDE, DES, RC4_40, DES40, NULL. -+ * AES_128, 3DES-EDE, RC-4, DES, DES40, RC4_40, NULL. - * 4. Prefer the stronger MAC algorithm, in the order of SHA384, - * SHA256, SHA, MD5. - * 5. Prefer the better performance of key exchange and digital -@@ -1174,15 +1173,40 @@ - add("TLS_DH_anon_WITH_AES_128_CBC_SHA", - 0x0034, --p, K_DH_ANON, B_AES_128, N); - -+ add("TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA", -+ 0xC017, --p, K_ECDH_ANON, B_3DES, N); -+ add("SSL_DH_anon_WITH_3DES_EDE_CBC_SHA", -+ 0x001b, --p, K_DH_ANON, B_3DES, N); -+ - add("TLS_ECDH_anon_WITH_RC4_128_SHA", - 0xC016, --p, K_ECDH_ANON, B_RC4_128, N); - add("SSL_DH_anon_WITH_RC4_128_MD5", - 0x0018, --p, K_DH_ANON, B_RC4_128, N); - -- add("TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA", -- 0xC017, --p, K_ECDH_ANON, B_3DES, N); -- add("SSL_DH_anon_WITH_3DES_EDE_CBC_SHA", -- 0x001b, --p, K_DH_ANON, B_3DES, N); -+ // weak cipher suites obsoleted in TLS 1.2 -+ add("SSL_RSA_WITH_DES_CBC_SHA", -+ 0x0009, --p, K_RSA, B_DES, N, tls12); -+ add("SSL_DHE_RSA_WITH_DES_CBC_SHA", -+ 0x0015, --p, K_DHE_RSA, B_DES, N, tls12); -+ add("SSL_DHE_DSS_WITH_DES_CBC_SHA", -+ 0x0012, --p, K_DHE_DSS, B_DES, N, tls12); -+ add("SSL_DH_anon_WITH_DES_CBC_SHA", -+ 0x001a, --p, K_DH_ANON, B_DES, N, tls12); -+ -+ // weak cipher suites obsoleted in TLS 1.1 -+ add("SSL_RSA_EXPORT_WITH_DES40_CBC_SHA", -+ 0x0008, --p, K_RSA_EXPORT, B_DES_40, N, tls11); -+ add("SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA", -+ 0x0014, --p, K_DHE_RSA, B_DES_40, N, tls11); -+ add("SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA", -+ 0x0011, --p, K_DHE_DSS, B_DES_40, N, tls11); -+ add("SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA", -+ 0x0019, --p, K_DH_ANON, B_DES_40, N, tls11); -+ -+ add("SSL_RSA_EXPORT_WITH_RC4_40_MD5", -+ 0x0003, --p, K_RSA_EXPORT, B_RC4_40, N, tls11); -+ add("SSL_DH_anon_EXPORT_WITH_RC4_40_MD5", -+ 0x0017, --p, K_DH_ANON, B_RC4_40, N, tls11); - - add("TLS_RSA_WITH_NULL_SHA256", - 0x003b, --p, K_RSA, B_NULL, N, max, tls12, P_SHA256); -@@ -1201,52 +1225,27 @@ - add("SSL_RSA_WITH_NULL_MD5", - 0x0001, --p, K_RSA, B_NULL, N); - -- // weak cipher suites obsoleted in TLS 1.2 -- add("SSL_RSA_WITH_DES_CBC_SHA", -- 0x0009, --p, K_RSA, B_DES, N, tls12); -- add("SSL_DHE_RSA_WITH_DES_CBC_SHA", -- 0x0015, --p, K_DHE_RSA, B_DES, N, tls12); -- add("SSL_DHE_DSS_WITH_DES_CBC_SHA", -- 0x0012, --p, K_DHE_DSS, B_DES, N, tls12); -- add("SSL_DH_anon_WITH_DES_CBC_SHA", -- 0x001a, --p, K_DH_ANON, B_DES, N, tls12); -- -- // weak cipher suites obsoleted in TLS 1.1 -- add("SSL_RSA_EXPORT_WITH_RC4_40_MD5", -- 0x0003, --p, K_RSA_EXPORT, B_RC4_40, N, tls11); -- add("SSL_DH_anon_EXPORT_WITH_RC4_40_MD5", -- 0x0017, --p, K_DH_ANON, B_RC4_40, N, tls11); -- -- add("SSL_RSA_EXPORT_WITH_DES40_CBC_SHA", -- 0x0008, --p, K_RSA_EXPORT, B_DES_40, N, tls11); -- add("SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA", -- 0x0014, --p, K_DHE_RSA, B_DES_40, N, tls11); -- add("SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA", -- 0x0011, --p, K_DHE_DSS, B_DES_40, N, tls11); -- add("SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA", -- 0x0019, --p, K_DH_ANON, B_DES_40, N, tls11); -- - // Supported Kerberos ciphersuites from RFC2712 -+ add("TLS_KRB5_WITH_3DES_EDE_CBC_SHA", -+ 0x001f, --p, K_KRB5, B_3DES, N); -+ add("TLS_KRB5_WITH_3DES_EDE_CBC_MD5", -+ 0x0023, --p, K_KRB5, B_3DES, N); - add("TLS_KRB5_WITH_RC4_128_SHA", - 0x0020, --p, K_KRB5, B_RC4_128, N); - add("TLS_KRB5_WITH_RC4_128_MD5", - 0x0024, --p, K_KRB5, B_RC4_128, N); -- add("TLS_KRB5_WITH_3DES_EDE_CBC_SHA", -- 0x001f, --p, K_KRB5, B_3DES, N); -- add("TLS_KRB5_WITH_3DES_EDE_CBC_MD5", -- 0x0023, --p, K_KRB5, B_3DES, N); - add("TLS_KRB5_WITH_DES_CBC_SHA", - 0x001e, --p, K_KRB5, B_DES, N, tls12); - add("TLS_KRB5_WITH_DES_CBC_MD5", - 0x0022, --p, K_KRB5, B_DES, N, tls12); -+ add("TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA", -+ 0x0026, --p, K_KRB5_EXPORT, B_DES_40, N, tls11); -+ add("TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5", -+ 0x0029, --p, K_KRB5_EXPORT, B_DES_40, N, tls11); - add("TLS_KRB5_EXPORT_WITH_RC4_40_SHA", - 0x0028, --p, K_KRB5_EXPORT, B_RC4_40, N, tls11); - add("TLS_KRB5_EXPORT_WITH_RC4_40_MD5", - 0x002b, --p, K_KRB5_EXPORT, B_RC4_40, N, tls11); -- add("TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA", -- 0x0026, --p, K_KRB5_EXPORT, B_DES_40, N, tls11); -- add("TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5", -- 0x0029, --p, K_KRB5_EXPORT, B_DES_40, N, tls11); - - /* - * Other values from the TLS Cipher Suite Registry, as of August 2010. ---- ./jdk/src/share/classes/sun/security/ssl/ClientHandshaker.java Wed Jul 30 18:42:59 2014 +0100 -+++ ./jdk/src/share/classes/sun/security/ssl/ClientHandshaker.java Tue Sep 09 12:00:58 2014 -0700 -@@ -1,5 +1,5 @@ - /* -- * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved. -+ * Copyright (c) 1996, 2014, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it -@@ -36,6 +36,8 @@ - - import java.security.cert.X509Certificate; - import java.security.cert.CertificateException; -+import java.security.cert.CertificateParsingException; -+import javax.security.auth.x500.X500Principal; - - import javax.crypto.SecretKey; - import javax.crypto.spec.SecretKeySpec; -@@ -89,12 +91,66 @@ - private final static boolean enableSNIExtension = - Debug.getBooleanProperty("jsse.enableSNIExtension", true); - -+ /* -+ * Allow unsafe server certificate change? -+ * -+ * Server certificate change during SSL/TLS renegotiation may be considered -+ * unsafe, as described in the Triple Handshake attacks: -+ * -+ * https://secure-resumption.com/tlsauth.pdf -+ * -+ * Endpoint identification (See -+ * SSLParameters.getEndpointIdentificationAlgorithm()) is a pretty nice -+ * guarantee that the server certificate change in renegotiation is legal. -+ * However, endpoing identification is only enabled for HTTPS and LDAP -+ * over SSL/TLS by default. It is not enough to protect SSL/TLS -+ * connections other than HTTPS and LDAP. -+ * -+ * The renegotiation indication extension (See RFC 5764) is a pretty -+ * strong guarantee that the endpoints on both client and server sides -+ * are identical on the same connection. However, the Triple Handshake -+ * attacks can bypass this guarantee if there is a session-resumption -+ * handshake between the initial full handshake and the renegotiation -+ * full handshake. -+ * -+ * Server certificate change may be unsafe and should be restricted if -+ * endpoint identification is not enabled and the previous handshake is -+ * a session-resumption abbreviated initial handshake, unless the -+ * identities represented by both certificates can be regraded as the -+ * same (See isIdentityEquivalent()). -+ * -+ * Considering the compatibility impact and the actual requirements to -+ * support server certificate change in practice, the system property, -+ * jdk.tls.allowUnsafeServerCertChange, is used to define whether unsafe -+ * server certificate change in renegotiation is allowed or not. The -+ * default value of the system property is "false". To mitigate the -+ * compactibility impact, applications may want to set the system -+ * property to "true" at their own risk. -+ * -+ * If the value of the system property is "false", server certificate -+ * change in renegotiation after a session-resumption abbreviated initial -+ * handshake is restricted (See isIdentityEquivalent()). -+ * -+ * If the system property is set to "true" explicitly, the restriction on -+ * server certificate change in renegotiation is disabled. -+ */ -+ private final static boolean allowUnsafeServerCertChange = -+ Debug.getBooleanProperty("jdk.tls.allowUnsafeServerCertChange", false); -+ - private List<SNIServerName> requestedServerNames = - Collections.<SNIServerName>emptyList(); - - private boolean serverNamesAccepted = false; - - /* -+ * the reserved server certificate chain in previous handshaking -+ * -+ * The server certificate chain is only reserved if the previous -+ * handshake is a session-resumption abbreviated initial handshake. -+ */ -+ private X509Certificate[] reservedServerCerts = null; -+ -+ /* - * Constructors - */ - ClientHandshaker(SSLSocketImpl socket, SSLContextImpl context, -@@ -555,14 +611,19 @@ - // we wanted to resume, but the server refused - session = null; - if (!enableNewSession) { -- throw new SSLException -- ("New session creation is disabled"); -+ throw new SSLException("New session creation is disabled"); - } - } - } - - if (resumingSession && session != null) { - setHandshakeSessionSE(session); -+ // Reserve the handshake state if this is a session-resumption -+ // abbreviated initial handshake. -+ if (isInitialHandshake) { -+ session.setAsSessionResumption(true); -+ } -+ - return; - } - -@@ -1064,6 +1125,13 @@ - } - - /* -+ * Reset the handshake state if this is not an initial handshake. -+ */ -+ if (!isInitialHandshake) { -+ session.setAsSessionResumption(false); -+ } -+ -+ /* - * OK, it verified. If we're doing the fast handshake, add that - * "Finished" message to the hash of handshake messages, then send - * our own change_cipher_spec and Finished message for the server -@@ -1161,8 +1229,23 @@ - System.out.println("%% No cached client session"); - } - } -- if ((session != null) && (session.isRejoinable() == false)) { -- session = null; -+ if (session != null) { -+ // If unsafe server certificate change is not allowed, reserve -+ // current server certificates if the previous handshake is a -+ // session-resumption abbreviated initial handshake. -+ if (!allowUnsafeServerCertChange && session.isSessionResumption()) { -+ try { -+ // If existing, peer certificate chain cannot be null. -+ reservedServerCerts = -+ (X509Certificate[])session.getPeerCertificates(); -+ } catch (SSLPeerUnverifiedException puve) { -+ // Maybe not certificate-based, ignore the exception. -+ } -+ } -+ -+ if (!session.isRejoinable()) { -+ session = null; -+ } - } - - if (session != null) { -@@ -1331,9 +1414,28 @@ - } - X509Certificate[] peerCerts = mesg.getCertificateChain(); - if (peerCerts.length == 0) { -- fatalSE(Alerts.alert_bad_certificate, -- "empty certificate chain"); -+ fatalSE(Alerts.alert_bad_certificate, "empty certificate chain"); - } -+ -+ // Allow server certificate change in client side during renegotiation -+ // after a session-resumption abbreviated initial handshake? -+ // -+ // DO NOT need to check allowUnsafeServerCertChange here. We only -+ // reserve server certificates when allowUnsafeServerCertChange is -+ // flase. -+ if (reservedServerCerts != null) { -+ // It is not necessary to check the certificate update if endpoint -+ // identification is enabled. -+ String identityAlg = getEndpointIdentificationAlgorithmSE(); -+ if ((identityAlg == null || identityAlg.length() == 0) && -+ !isIdentityEquivalent(peerCerts[0], reservedServerCerts[0])) { -+ -+ fatalSE(Alerts.alert_bad_certificate, -+ "server certificate change is restricted " + -+ "during renegotiation"); -+ } -+ } -+ - // ask the trust manager to verify the chain - X509TrustManager tm = sslContext.getX509TrustManager(); - try { -@@ -1370,4 +1472,81 @@ - } - session.setPeerCertificates(peerCerts); - } -+ -+ /* -+ * Whether the certificates can represent the same identity? -+ * -+ * The certificates can be used to represent the same identity: -+ * 1. If the subject alternative names of IP address are present in -+ * both certificates, they should be identical; otherwise, -+ * 2. if the subject alternative names of DNS name are present in -+ * both certificates, they should be identical; otherwise, -+ * 3. if the subject fields are present in both certificates, the -+ * certificate subjects and issuers should be identical. -+ */ -+ private static boolean isIdentityEquivalent(X509Certificate thisCert, -+ X509Certificate prevCert) { -+ if (thisCert.equals(prevCert)) { -+ return true; -+ } -+ -+ // check the iPAddress field in subjectAltName extension -+ Object thisIPAddress = getSubjectAltName(thisCert, 7); // 7: iPAddress -+ Object prevIPAddress = getSubjectAltName(prevCert, 7); -+ if (thisIPAddress != null && prevIPAddress!= null) { -+ // only allow the exactly match -+ return Objects.equals(thisIPAddress, prevIPAddress); -+ } -+ -+ // check the dNSName field in subjectAltName extension -+ Object thisDNSName = getSubjectAltName(thisCert, 2); // 2: dNSName -+ Object prevDNSName = getSubjectAltName(prevCert, 2); -+ if (thisDNSName != null && prevDNSName!= null) { -+ // only allow the exactly match -+ return Objects.equals(thisDNSName, prevDNSName); -+ } -+ -+ // check the certificate subject and issuer -+ X500Principal thisSubject = thisCert.getSubjectX500Principal(); -+ X500Principal prevSubject = prevCert.getSubjectX500Principal(); -+ X500Principal thisIssuer = thisCert.getIssuerX500Principal(); -+ X500Principal prevIssuer = prevCert.getIssuerX500Principal(); -+ if (!thisSubject.getName().isEmpty() && -+ !prevSubject.getName().isEmpty() && -+ thisSubject.equals(prevSubject) && -+ thisIssuer.equals(prevIssuer)) { -+ return true; -+ } -+ -+ return false; -+ } -+ -+ /* -+ * Returns the subject alternative name of the specified type in the -+ * subjectAltNames extension of a certificate. -+ */ -+ private static Object getSubjectAltName(X509Certificate cert, int type) { -+ Collection<List<?>> subjectAltNames; -+ -+ try { -+ subjectAltNames = cert.getSubjectAlternativeNames(); -+ } catch (CertificateParsingException cpe) { -+ if (debug != null && Debug.isOn("handshake")) { -+ System.out.println( -+ "Attempt to obtain subjectAltNames extension failed!"); -+ } -+ return null; -+ } -+ -+ if (subjectAltNames != null) { -+ for (List<?> subjectAltName : subjectAltNames) { -+ int subjectAltNameType = (Integer)subjectAltName.get(0); -+ if (subjectAltNameType == type) { -+ return subjectAltName.get(1); -+ } -+ } -+ } -+ -+ return null; -+ } - } ---- ./jdk/src/share/classes/sun/security/ssl/Handshaker.java Wed Jul 30 18:42:59 2014 +0100 -+++ ./jdk/src/share/classes/sun/security/ssl/Handshaker.java Tue Sep 09 12:00:58 2014 -0700 -@@ -1,5 +1,5 @@ - /* -- * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved. -+ * Copyright (c) 1996, 2014, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it -@@ -359,6 +359,17 @@ - } - } - -+ String getEndpointIdentificationAlgorithmSE() { -+ SSLParameters paras; -+ if (conn != null) { -+ paras = conn.getSSLParameters(); -+ } else { -+ paras = engine.getSSLParameters(); -+ } -+ -+ return paras.getEndpointIdentificationAlgorithm(); -+ } -+ - private void setVersionSE(ProtocolVersion protocolVersion) { - if (conn != null) { - conn.setVersion(protocolVersion); ---- ./jdk/src/share/classes/sun/security/ssl/SSLSessionImpl.java Wed Jul 30 18:42:59 2014 +0100 -+++ ./jdk/src/share/classes/sun/security/ssl/SSLSessionImpl.java Tue Sep 09 12:00:58 2014 -0700 -@@ -1,5 +1,5 @@ - /* -- * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved. -+ * Copyright (c) 1996, 2014, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it -@@ -115,6 +115,14 @@ - private Principal localPrincipal; - - /* -+ * Is the session currently re-established with a session-resumption -+ * abbreviated initial handshake? -+ * -+ * Note that currently we only set this variable in client side. -+ */ -+ private boolean isSessionResumption = false; -+ -+ /* - * We count session creations, eventually for statistical data but - * also since counters make shorter debugging IDs than the big ones - * we use in the protocol for uniqueness-over-time. -@@ -325,6 +333,22 @@ - } - - /** -+ * Return true if the session is currently re-established with a -+ * session-resumption abbreviated initial handshake. -+ */ -+ boolean isSessionResumption() { -+ return isSessionResumption; -+ } -+ -+ /** -+ * Resets whether the session is re-established with a session-resumption -+ * abbreviated initial handshake. -+ */ -+ void setAsSessionResumption(boolean flag) { -+ isSessionResumption = flag; -+ } -+ -+ /** - * Returns the name of the cipher suite in use on this session - */ - @Override ---- ./jdk/src/share/classes/sun/tools/jconsole/resources/messages_ja.properties Wed Jul 30 18:42:59 2014 +0100 -+++ ./jdk/src/share/classes/sun/tools/jconsole/resources/messages_ja.properties Tue Sep 09 12:00:58 2014 -0700 -@@ -103,7 +103,7 @@ - HELP_ABOUT_DIALOG_JAVA_VERSION=Java VM\u30D0\u30FC\u30B8\u30E7\u30F3:<br>{0} - HELP_ABOUT_DIALOG_MASTHEAD_ACCESSIBLE_NAME=\u30DE\u30B9\u30C8\u30D8\u30C3\u30C9\u56F3\u5F62 - HELP_ABOUT_DIALOG_MASTHEAD_TITLE=JConsole\u306B\u3064\u3044\u3066 --HELP_ABOUT_DIALOG_TITLE=JConsole: \u8A73\u7D30 -+HELP_ABOUT_DIALOG_TITLE=JConsole: \u60C5\u5831 - HELP_ABOUT_DIALOG_USER_GUIDE_LINK_URL=http://docs.oracle.com/javase/{0}/docs/technotes/guides/management/jconsole.html - HELP_MENU_ABOUT_TITLE=JConsole\u306B\u3064\u3044\u3066(&A) - HELP_MENU_USER_GUIDE_TITLE=\u30AA\u30F3\u30E9\u30A4\u30F3\u30FB\u30E6\u30FC\u30B6\u30FC\u30FB\u30AC\u30A4\u30C9(&U) ---- ./jdk/src/share/classes/sun/util/locale/BaseLocale.java Wed Jul 30 18:42:59 2014 +0100 -+++ ./jdk/src/share/classes/sun/util/locale/BaseLocale.java Tue Sep 09 12:00:58 2014 -0700 -@@ -31,6 +31,7 @@ - */ - - package sun.util.locale; -+import java.lang.ref.SoftReference; - - - public final class BaseLocale { -@@ -163,11 +164,11 @@ - return h; - } - -- private static final class Key implements Comparable<Key> { -- private final String lang; -- private final String scrt; -- private final String regn; -- private final String vart; -+ private static final class Key { -+ private final SoftReference<String> lang; -+ private final SoftReference<String> scrt; -+ private final SoftReference<String> regn; -+ private final SoftReference<String> vart; - private final boolean normalized; - private final int hash; - -@@ -179,10 +180,10 @@ - assert language.intern() == language - && region.intern() == region; - -- lang = language; -- scrt = ""; -- regn = region; -- vart = ""; -+ lang = new SoftReference(language); -+ scrt = new SoftReference(""); -+ regn = new SoftReference(region); -+ vart = new SoftReference(""); - this.normalized = true; - - int h = language.hashCode(); -@@ -203,40 +204,40 @@ - String variant, boolean normalized) { - int h = 0; - if (language != null) { -- lang = language; -+ lang = new SoftReference(language); - int len = language.length(); - for (int i = 0; i < len; i++) { - h = 31*h + LocaleUtils.toLower(language.charAt(i)); - } - } else { -- lang = ""; -+ lang = new SoftReference(""); - } - if (script != null) { -- scrt = script; -+ scrt = new SoftReference(script); - int len = script.length(); - for (int i = 0; i < len; i++) { - h = 31*h + LocaleUtils.toLower(script.charAt(i)); - } - } else { -- scrt = ""; -+ scrt = new SoftReference(""); - } - if (region != null) { -- regn = region; -+ regn = new SoftReference(region); - int len = region.length(); - for (int i = 0; i < len; i++) { - h = 31*h + LocaleUtils.toLower(region.charAt(i)); - } - } else { -- regn = ""; -+ regn = new SoftReference(""); - } - if (variant != null) { -- vart = variant; -+ vart = new SoftReference(variant); - int len = variant.length(); - for (int i = 0; i < len; i++) { - h = 31*h + variant.charAt(i); - } - } else { -- vart = ""; -+ vart = new SoftReference(""); - } - hash = h; - this.normalized = normalized; -@@ -244,28 +245,31 @@ - - @Override - public boolean equals(Object obj) { -- return (this == obj) || -- (obj instanceof Key) -- && this.hash == ((Key)obj).hash -- && LocaleUtils.caseIgnoreMatch(((Key)obj).lang, this.lang) -- && LocaleUtils.caseIgnoreMatch(((Key)obj).scrt, this.scrt) -- && LocaleUtils.caseIgnoreMatch(((Key)obj).regn, this.regn) -- && ((Key)obj).vart.equals(vart); // variant is case sensitive in JDK! -+ if (this == obj) { -+ return true; - } - -- @Override -- public int compareTo(Key other) { -- int res = LocaleUtils.caseIgnoreCompare(this.lang, other.lang); -- if (res == 0) { -- res = LocaleUtils.caseIgnoreCompare(this.scrt, other.scrt); -- if (res == 0) { -- res = LocaleUtils.caseIgnoreCompare(this.regn, other.regn); -- if (res == 0) { -- res = this.vart.compareTo(other.vart); -+ if (obj instanceof Key && this.hash == ((Key)obj).hash) { -+ String tl = this.lang.get(); -+ String ol = ((Key)obj).lang.get(); -+ if (tl != null && ol != null && -+ LocaleUtils.caseIgnoreMatch(ol, tl)) { -+ String ts = this.scrt.get(); -+ String os = ((Key)obj).scrt.get(); -+ if (ts != null && os != null && -+ LocaleUtils.caseIgnoreMatch(os, ts)) { -+ String tr = this.regn.get(); -+ String or = ((Key)obj).regn.get(); -+ if (tr != null && or != null && -+ LocaleUtils.caseIgnoreMatch(or, tr)) { -+ String tv = this.vart.get(); -+ String ov = ((Key)obj).vart.get(); -+ return (ov != null && ov.equals(tv)); - } - } - } -- return res; -+ } -+ return false; - } - - @Override -@@ -278,10 +282,10 @@ - return key; - } - -- String lang = LocaleUtils.toLowerString(key.lang).intern(); -- String scrt = LocaleUtils.toTitleString(key.scrt).intern(); -- String regn = LocaleUtils.toUpperString(key.regn).intern(); -- String vart = key.vart.intern(); // preserve upper/lower cases -+ String lang = LocaleUtils.toLowerString(key.lang.get()).intern(); -+ String scrt = LocaleUtils.toTitleString(key.scrt.get()).intern(); -+ String regn = LocaleUtils.toUpperString(key.regn.get()).intern(); -+ String vart = key.vart.get().intern(); // preserve upper/lower cases - - return new Key(lang, scrt, regn, vart, true); - } -@@ -294,12 +298,18 @@ - - @Override - protected Key normalizeKey(Key key) { -+ assert key.lang.get() != null && -+ key.scrt.get() != null && -+ key.regn.get() != null && -+ key.vart.get() != null; -+ - return Key.normalize(key); - } - - @Override - protected BaseLocale createObject(Key key) { -- return new BaseLocale(key.lang, key.scrt, key.regn, key.vart); -+ return new BaseLocale(key.lang.get(), key.scrt.get(), -+ key.regn.get(), key.vart.get()); - } - } - } ---- ./jdk/src/share/classes/sun/util/locale/LocaleObjectCache.java Wed Jul 30 18:42:59 2014 +0100 -+++ ./jdk/src/share/classes/sun/util/locale/LocaleObjectCache.java Tue Sep 09 12:00:58 2014 -0700 -@@ -57,8 +57,10 @@ - value = entry.get(); - } - if (value == null) { -+ V newVal = createObject(key); -+ // make sure key is normalized *after* the object creation -+ // so that newVal is assured to be created from a valid key. - key = normalizeKey(key); -- V newVal = createObject(key); - if (key == null || newVal == null) { - // subclass must return non-null key/value object - return null; ---- ./jdk/src/share/javavm/export/jvm.h Wed Jul 30 18:42:59 2014 +0100 -+++ ./jdk/src/share/javavm/export/jvm.h Tue Sep 09 12:00:58 2014 -0700 -@@ -1,5 +1,5 @@ - /* -- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. -+ * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it -@@ -386,6 +386,19 @@ - JVM_FindClassFromBootLoader(JNIEnv *env, const char *name); - - /* -+ * Find a class from a given class loader. Throws ClassNotFoundException. -+ * name: name of class -+ * init: whether initialization is done -+ * loader: class loader to look up the class. This may not be the same as the caller's -+ * class loader. -+ * caller: initiating class. The initiating class may be null when a security -+ * manager is not installed. -+ */ -+JNIEXPORT jclass JNICALL -+JVM_FindClassFromCaller(JNIEnv *env, const char *name, jboolean init, -+ jobject loader, jclass caller); -+ -+/* - * Find a class from a given class loader. Throw ClassNotFoundException - * or NoClassDefFoundError depending on the value of the last - * argument. ---- ./jdk/src/share/native/java/lang/Class.c Wed Jul 30 18:42:59 2014 +0100 -+++ ./jdk/src/share/native/java/lang/Class.c Tue Sep 09 12:00:58 2014 -0700 -@@ -1,5 +1,5 @@ - /* -- * Copyright (c) 1994, 2013, Oracle and/or its affiliates. All rights reserved. -+ * Copyright (c) 1994, 2014, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it -@@ -97,7 +97,7 @@ - - JNIEXPORT jclass JNICALL - Java_java_lang_Class_forName0(JNIEnv *env, jclass this, jstring classname, -- jboolean initialize, jobject loader) -+ jboolean initialize, jobject loader, jclass caller) - { - char *clname; - jclass cls = 0; -@@ -135,8 +135,7 @@ - goto done; - } - -- cls = JVM_FindClassFromClassLoader(env, clname, initialize, -- loader, JNI_FALSE); -+ cls = JVM_FindClassFromCaller(env, clname, initialize, loader, caller); - - done: - if (clname != buf) { ---- ./jdk/src/share/native/java/util/zip/CRC32.c Wed Jul 30 18:42:59 2014 +0100 -+++ ./jdk/src/share/native/java/util/zip/CRC32.c Tue Sep 09 12:00:58 2014 -0700 -@@ -54,7 +54,8 @@ - return crc; - } - --JNIEXPORT jint ZIP_CRC32(jint crc, const jbyte *buf, jint len) -+JNIEXPORT jint JNICALL -+ZIP_CRC32(jint crc, const jbyte *buf, jint len) - { - return crc32(crc, (Bytef*)buf, len); - } ---- ./jdk/src/share/native/java/util/zip/ZipFile.c Wed Jul 30 18:42:59 2014 +0100 -+++ ./jdk/src/share/native/java/util/zip/ZipFile.c Tue Sep 09 12:00:58 2014 -0700 -@@ -1,5 +1,5 @@ - /* -- * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved. -+ * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it -@@ -172,11 +172,7 @@ - } - (*env)->GetByteArrayRegion(env, name, 0, ulen, (jbyte *)path); - path[ulen] = '\0'; -- if (addSlash == JNI_FALSE) { -- ze = ZIP_GetEntry(zip, path, 0); -- } else { -- ze = ZIP_GetEntry(zip, path, (jint)ulen); -- } -+ ze = ZIP_GetEntry2(zip, path, (jint)ulen, addSlash); - if (path != buf) { - free(path); - } -@@ -269,7 +265,7 @@ - switch (type) { - case java_util_zip_ZipFile_JZENTRY_NAME: - if (ze->name != 0) { -- len = (int)strlen(ze->name); -+ len = (int)ze->nlen; - if (len == 0 || (jba = (*env)->NewByteArray(env, len)) == NULL) - break; - (*env)->SetByteArrayRegion(env, jba, 0, len, (jbyte *)ze->name); ---- ./jdk/src/share/native/java/util/zip/zip_util.c Wed Jul 30 18:42:59 2014 +0100 -+++ ./jdk/src/share/native/java/util/zip/zip_util.c Tue Sep 09 12:00:58 2014 -0700 -@@ -1021,6 +1021,7 @@ - if ((ze->name = malloc(nlen + 1)) == NULL) goto Catch; - memcpy(ze->name, cen + CENHDR, nlen); - ze->name[nlen] = '\0'; -+ ze->nlen = nlen; - if (elen > 0) { - char *extra = cen + CENHDR + nlen; - -@@ -1118,7 +1119,34 @@ - jzentry * - ZIP_GetEntry(jzfile *zip, char *name, jint ulen) - { -- unsigned int hsh = hash(name); -+ if (ulen == 0) { -+ return ZIP_GetEntry2(zip, name, strlen(name), JNI_FALSE); -+ } -+ return ZIP_GetEntry2(zip, name, ulen, JNI_TRUE); -+} -+ -+jboolean equals(char* name1, int len1, char* name2, int len2) { -+ if (len1 != len2) { -+ return JNI_FALSE; -+ } -+ while (len1-- > 0) { -+ if (*name1++ != *name2++) { -+ return JNI_FALSE; -+ } -+ } -+ return JNI_TRUE; -+} -+ -+/* -+ * Returns the zip entry corresponding to the specified name, or -+ * NULL if not found. -+ * This method supports embedded null character in "name", use ulen -+ * for the length of "name". -+ */ -+jzentry * -+ZIP_GetEntry2(jzfile *zip, char *name, jint ulen, jboolean addSlash) -+{ -+ unsigned int hsh = hashN(name, ulen); - jint idx; - jzentry *ze = 0; - -@@ -1139,7 +1167,7 @@ - - /* Check the cached entry first */ - ze = zip->cache; -- if (ze && strcmp(ze->name,name) == 0) { -+ if (ze && equals(ze->name, ze->nlen, name, ulen)) { - /* Cache hit! Remove and return the cached entry. */ - zip->cache = 0; - ZIP_Unlock(zip); -@@ -1165,7 +1193,7 @@ - * we keep searching. - */ - ze = newEntry(zip, zc, ACCESS_RANDOM); -- if (ze && strcmp(ze->name, name)==0) { -+ if (ze && equals(ze->name, ze->nlen, name, ulen)) { - break; - } - if (ze != 0) { -@@ -1184,8 +1212,8 @@ - break; - } - -- /* If no real length was passed in, we are done */ -- if (ulen == 0) { -+ /* If no need to try appending slash, we are done */ -+ if (!addSlash) { - break; - } - -@@ -1195,11 +1223,11 @@ - } - - /* Add slash and try once more */ -- name[ulen] = '/'; -- name[ulen+1] = '\0'; -+ name[ulen++] = '/'; -+ name[ulen] = '\0'; - hsh = hash_append(hsh, '/'); - idx = zip->table[hsh % zip->tablelen]; -- ulen = 0; -+ addSlash = JNI_FALSE; - } - - Finally: ---- ./jdk/src/share/native/java/util/zip/zip_util.h Wed Jul 30 18:42:59 2014 +0100 -+++ ./jdk/src/share/native/java/util/zip/zip_util.h Tue Sep 09 12:00:58 2014 -0700 -@@ -154,6 +154,7 @@ - * - If pos <= 0 then it is the position of entry LOC header. - * If pos > 0 then it is the position of entry data. - * pos should not be accessed directly, but only by ZIP_GetEntryDataOffset. -+ * - entry name may include embedded null character, use nlen for length - */ - - typedef struct jzentry { /* Zip file entry */ -@@ -166,6 +167,7 @@ - jbyte *extra; /* optional extra data */ - jlong pos; /* position of LOC header or entry data */ - jint flag; /* general purpose flag */ -+ jint nlen; /* length of the entry name */ - } jzentry; - - /* -@@ -269,5 +271,5 @@ - jint ZIP_Read(jzfile *zip, jzentry *entry, jlong pos, void *buf, jint len); - void ZIP_FreeEntry(jzfile *zip, jzentry *ze); - jlong ZIP_GetEntryDataOffset(jzfile *zip, jzentry *entry); -- -+jzentry * ZIP_GetEntry2(jzfile *zip, char *name, jint ulen, jboolean addSlash); - #endif /* !_ZIP_H_ */ ---- ./jdk/src/share/native/sun/font/layout/ContextualSubstSubtables.cpp Wed Jul 30 18:42:59 2014 +0100 -+++ ./jdk/src/share/native/sun/font/layout/ContextualSubstSubtables.cpp Tue Sep 09 12:00:58 2014 -0700 -@@ -243,12 +243,22 @@ - le_uint16 srSetCount = SWAPW(subRuleSetCount); - - if (coverageIndex < srSetCount) { -+ LEReferenceToArrayOf<Offset> subRuleSetTableOffsetArrayRef(base, success, -+ &subRuleSetTableOffsetArray[coverageIndex], 1); -+ if (LE_FAILURE(success)) { -+ return 0; -+ } - Offset subRuleSetTableOffset = SWAPW(subRuleSetTableOffsetArray[coverageIndex]); - LEReferenceTo<SubRuleSetTable> - subRuleSetTable(base, success, (const SubRuleSetTable *) ((char *) this + subRuleSetTableOffset)); - le_uint16 subRuleCount = SWAPW(subRuleSetTable->subRuleCount); - le_int32 position = glyphIterator->getCurrStreamPosition(); - -+ LEReferenceToArrayOf<Offset> subRuleTableOffsetArrayRef(base, success, -+ subRuleSetTable->subRuleTableOffsetArray, subRuleCount); -+ if (LE_FAILURE(success)) { -+ return 0; -+ } - for (le_uint16 subRule = 0; subRule < subRuleCount; subRule += 1) { - Offset subRuleTableOffset = - SWAPW(subRuleSetTable->subRuleTableOffsetArray[subRule]); -@@ -301,13 +311,22 @@ - glyphIterator->getCurrGlyphID(), - success); - -- if (setClass < scSetCount && subClassSetTableOffsetArray[setClass] != 0) { -+ if (setClass < scSetCount) { -+ LEReferenceToArrayOf<Offset> -+ subClassSetTableOffsetArrayRef(base, success, subClassSetTableOffsetArray, setClass); -+ if (LE_FAILURE(success)) { return 0; } -+ if (subClassSetTableOffsetArray[setClass] != 0) { -+ - Offset subClassSetTableOffset = SWAPW(subClassSetTableOffsetArray[setClass]); - LEReferenceTo<SubClassSetTable> - subClassSetTable(base, success, (const SubClassSetTable *) ((char *) this + subClassSetTableOffset)); - le_uint16 subClassRuleCount = SWAPW(subClassSetTable->subClassRuleCount); - le_int32 position = glyphIterator->getCurrStreamPosition(); -- -+ LEReferenceToArrayOf<Offset> -+ subClassRuleTableOffsetArrayRef(base, success, subClassSetTable->subClassRuleTableOffsetArray, subClassRuleCount); -+ if (LE_FAILURE(success)) { -+ return 0; -+ } - for (le_uint16 scRule = 0; scRule < subClassRuleCount; scRule += 1) { - Offset subClassRuleTableOffset = - SWAPW(subClassSetTable->subClassRuleTableOffsetArray[scRule]); -@@ -331,6 +350,7 @@ - glyphIterator->setCurrStreamPosition(position); - } - } -+ } - - // XXX If we get here, the table is mal-formed... - } -@@ -442,13 +462,22 @@ - le_uint16 srSetCount = SWAPW(chainSubRuleSetCount); - - if (coverageIndex < srSetCount) { -+ LEReferenceToArrayOf<Offset> -+ chainSubRuleSetTableOffsetArrayRef(base, success, chainSubRuleSetTableOffsetArray, coverageIndex); -+ if (LE_FAILURE(success)) { -+ return 0; -+ } - Offset chainSubRuleSetTableOffset = SWAPW(chainSubRuleSetTableOffsetArray[coverageIndex]); - LEReferenceTo<ChainSubRuleSetTable> - chainSubRuleSetTable(base, success, (const ChainSubRuleSetTable *) ((char *) this + chainSubRuleSetTableOffset)); - le_uint16 chainSubRuleCount = SWAPW(chainSubRuleSetTable->chainSubRuleCount); - le_int32 position = glyphIterator->getCurrStreamPosition(); - GlyphIterator tempIterator(*glyphIterator, emptyFeatureList); -- -+ LEReferenceToArrayOf<Offset> -+ chainSubRuleTableOffsetArrayRef(base, success, chainSubRuleSetTable->chainSubRuleTableOffsetArray, chainSubRuleCount); -+ if (LE_FAILURE(success)) { -+ return 0; -+ } - for (le_uint16 subRule = 0; subRule < chainSubRuleCount; subRule += 1) { - Offset chainSubRuleTableOffset = - SWAPW(chainSubRuleSetTable->chainSubRuleTableOffsetArray[subRule]); -@@ -530,6 +559,11 @@ - le_int32 setClass = inputClassDefinitionTable->getGlyphClass(inputClassDefinitionTable, - glyphIterator->getCurrGlyphID(), - success); -+ LEReferenceToArrayOf<Offset> -+ chainSubClassSetTableOffsetArrayRef(base, success, chainSubClassSetTableOffsetArray, setClass); -+ if (LE_FAILURE(success)) { -+ return 0; -+ } - - if (setClass < scSetCount && chainSubClassSetTableOffsetArray[setClass] != 0) { - Offset chainSubClassSetTableOffset = SWAPW(chainSubClassSetTableOffsetArray[setClass]); -@@ -538,7 +572,11 @@ - le_uint16 chainSubClassRuleCount = SWAPW(chainSubClassSetTable->chainSubClassRuleCount); - le_int32 position = glyphIterator->getCurrStreamPosition(); - GlyphIterator tempIterator(*glyphIterator, emptyFeatureList); -- -+ LEReferenceToArrayOf<Offset> -+ chainSubClassRuleTableOffsetArrayRef(base, success, chainSubClassSetTable->chainSubClassRuleTableOffsetArray, chainSubClassRuleCount); -+ if (LE_FAILURE(success)) { -+ return 0; -+ } - for (le_uint16 scRule = 0; scRule < chainSubClassRuleCount; scRule += 1) { - Offset chainSubClassRuleTableOffset = - SWAPW(chainSubClassSetTable->chainSubClassRuleTableOffsetArray[scRule]); -@@ -603,12 +641,14 @@ - } - - le_uint16 backtrkGlyphCount = SWAPW(backtrackGlyphCount); -+ LEReferenceToArrayOf<Offset> backtrackGlyphArrayRef(base, success, backtrackCoverageTableOffsetArray, backtrkGlyphCount); -+ if (LE_FAILURE(success)) { -+ return 0; -+ } - le_uint16 inputGlyphCount = (le_uint16) SWAPW(backtrackCoverageTableOffsetArray[backtrkGlyphCount]); - LEReferenceToArrayOf<Offset> inputCoverageTableOffsetArray(base, success, &backtrackCoverageTableOffsetArray[backtrkGlyphCount + 1], inputGlyphCount+2); // offset - if (LE_FAILURE(success)) { return 0; } - const le_uint16 lookaheadGlyphCount = (le_uint16) SWAPW(inputCoverageTableOffsetArray[inputGlyphCount]); -- -- if( LE_FAILURE(success)) { return 0; } - LEReferenceToArrayOf<Offset> lookaheadCoverageTableOffsetArray(base, success, inputCoverageTableOffsetArray.getAlias(inputGlyphCount + 1, success), lookaheadGlyphCount+2); - - if( LE_FAILURE(success) ) { return 0; } ---- ./jdk/src/solaris/classes/sun/awt/X11/XTextAreaPeer.java Wed Jul 30 18:42:59 2014 +0100 -+++ ./jdk/src/solaris/classes/sun/awt/X11/XTextAreaPeer.java Tue Sep 09 12:00:58 2014 -0700 -@@ -1024,7 +1024,8 @@ - } - } - -- protected void uninstallListeners(JScrollPane scrollPane) { -+ @Override -+ protected void uninstallListeners(JComponent scrollPane) { - super.uninstallListeners(scrollPane); - scrollPane.removePropertyChangeListener(propertyChangeHandler); - } ---- ./jdk/src/solaris/classes/sun/print/CUPSPrinter.java Wed Jul 30 18:42:59 2014 +0100 -+++ ./jdk/src/solaris/classes/sun/print/CUPSPrinter.java Tue Sep 09 12:00:58 2014 -0700 -@@ -126,7 +126,7 @@ - /** - * Returns array of MediaSizeNames derived from PPD. - */ -- public MediaSizeName[] getMediaSizeNames() { -+ MediaSizeName[] getMediaSizeNames() { - initMedia(); - return cupsMediaSNames; - } -@@ -135,7 +135,7 @@ - /** - * Returns array of Custom MediaSizeNames derived from PPD. - */ -- public CustomMediaSizeName[] getCustomMediaSizeNames() { -+ CustomMediaSizeName[] getCustomMediaSizeNames() { - initMedia(); - return cupsCustomMediaSNames; - } -@@ -144,7 +144,7 @@ - /** - * Returns array of MediaPrintableArea derived from PPD. - */ -- public MediaPrintableArea[] getMediaPrintableArea() { -+ MediaPrintableArea[] getMediaPrintableArea() { - initMedia(); - return cupsMediaPrintables; - } -@@ -152,7 +152,7 @@ - /** - * Returns array of MediaTrays derived from PPD. - */ -- public MediaTray[] getMediaTrays() { -+ MediaTray[] getMediaTrays() { - initMedia(); - return cupsMediaTrays; - } ---- ./jdk/src/solaris/classes/sun/print/IPPPrintService.java Wed Jul 30 18:42:59 2014 +0100 -+++ ./jdk/src/solaris/classes/sun/print/IPPPrintService.java Tue Sep 09 12:00:58 2014 -0700 -@@ -993,7 +993,9 @@ - - public synchronized Class[] getSupportedAttributeCategories() { - if (supportedCats != null) { -- return supportedCats; -+ Class<?> [] copyCats = new Class<?>[supportedCats.length]; -+ System.arraycopy(supportedCats, 0, copyCats, 0, copyCats.length); -+ return copyCats; - } - - initAttributes(); -@@ -1050,7 +1052,9 @@ - } - supportedCats = new Class[catList.size()]; - catList.toArray(supportedCats); -- return supportedCats; -+ Class<?>[] copyCats = new Class<?>[supportedCats.length]; -+ System.arraycopy(supportedCats, 0, copyCats, 0, copyCats.length); -+ return copyCats; - } - - ---- ./jdk/src/solaris/native/java/net/AbstractPlainDatagramSocketImpl.c Thu Jan 01 00:00:00 1970 +0000 -+++ ./jdk/src/solaris/native/java/net/AbstractPlainDatagramSocketImpl.c Tue Sep 09 12:00:58 2014 -0700 -@@ -0,0 +1,89 @@ -+/* -+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. -+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+ * -+ * This code is free software; you can redistribute it and/or modify it -+ * under the terms of the GNU General Public License version 2 only, as -+ * published by the Free Software Foundation. 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. -+ */ -+ -+#include <sys/types.h> -+#include <sys/socket.h> -+ -+#ifdef __solaris__ -+#include <unistd.h> -+#include <stropts.h> -+ -+#ifndef BSD_COMP -+#define BSD_COMP -+#endif -+ -+#endif -+ -+#include <sys/ioctl.h> -+ -+#include "jvm.h" -+#include "jni_util.h" -+#include "net_util.h" -+ -+#include "java_net_AbstractPlainDatagramSocketImpl.h" -+ -+static jfieldID IO_fd_fdID; -+ -+static jfieldID apdsi_fdID; -+ -+ -+/* -+ * Class: java_net_AbstractPlainDatagramSocketImpl -+ * Method: init -+ * Signature: ()V -+ */ -+JNIEXPORT void JNICALL -+Java_java_net_AbstractPlainDatagramSocketImpl_init(JNIEnv *env, jclass cls) { -+ -+ apdsi_fdID = (*env)->GetFieldID(env, cls, "fd", -+ "Ljava/io/FileDescriptor;"); -+ CHECK_NULL(apdsi_fdID); -+ -+ IO_fd_fdID = NET_GetFileDescriptorID(env); -+} -+ -+/* -+ * Class: java_net_AbstractPlainDatagramSocketImpl -+ * Method: dataAvailable -+ * Signature: ()I -+ */ -+JNIEXPORT jint JNICALL Java_java_net_AbstractPlainDatagramSocketImpl_dataAvailable -+(JNIEnv *env, jobject this) { -+ int fd, retval; -+ -+ jobject fdObj = (*env)->GetObjectField(env, this, apdsi_fdID); -+ -+ if (IS_NULL(fdObj)) { -+ JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", -+ "Socket closed"); -+ return -1; -+ } -+ fd = (*env)->GetIntField(env, fdObj, IO_fd_fdID); -+ -+ if (ioctl(fd, FIONREAD, &retval) < 0) { -+ return -1; -+ } -+ return retval; -+} ---- ./jdk/src/windows/native/java/net/AbstractPlainDatagramSocketImpl.c Thu Jan 01 00:00:00 1970 +0000 -+++ ./jdk/src/windows/native/java/net/AbstractPlainDatagramSocketImpl.c Tue Sep 09 12:00:58 2014 -0700 -@@ -0,0 +1,113 @@ -+/* -+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. -+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+ * -+ * This code is free software; you can redistribute it and/or modify it -+ * under the terms of the GNU General Public License version 2 only, as -+ * published by the Free Software Foundation. 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. -+ */ -+ -+#include <windows.h> -+#include <winsock2.h> -+ -+#include "jvm.h" -+#include "jni_util.h" -+#include "net_util.h" -+ -+#include "java_net_AbstractPlainDatagramSocketImpl.h" -+ -+static jfieldID IO_fd_fdID = NULL; -+static jfieldID apdsi_fdID = NULL; -+ -+static jfieldID apdsi_fd1ID = NULL; -+static jclass two_stacks_clazz = NULL; -+ -+ -+/* -+ * Class: java_net_AbstractPlainDatagramSocketImpl -+ * Method: init -+ * Signature: ()V -+ */ -+JNIEXPORT void JNICALL -+Java_java_net_AbstractPlainDatagramSocketImpl_init(JNIEnv *env, jclass cls) { -+ -+ apdsi_fdID = (*env)->GetFieldID(env, cls, "fd", -+ "Ljava/io/FileDescriptor;"); -+ CHECK_NULL(apdsi_fdID); -+ IO_fd_fdID = NET_GetFileDescriptorID(env); -+ CHECK_NULL(IO_fd_fdID); -+ -+ two_stacks_clazz = (*env)->FindClass(env, "java/net/TwoStacksPlainDatagramSocketImpl"); -+ CHECK_NULL(two_stacks_clazz); -+ -+ /* Handle both TwoStacks and DualStack here */ -+ -+ if (JNU_Equals(env, cls, two_stacks_clazz)) { -+ /* fd1 present only in TwoStack.. */ -+ apdsi_fd1ID = (*env)->GetFieldID(env, cls, "fd1", -+ "Ljava/io/FileDescriptor;"); -+ CHECK_NULL(apdsi_fd1ID); -+ } -+ -+ JNU_CHECK_EXCEPTION(env); -+} -+ -+/* -+ * Class: java_net_AbstractPlainDatagramSocketImpl -+ * Method: dataAvailable -+ * Signature: ()I -+ */ -+JNIEXPORT jint JNICALL Java_java_net_AbstractPlainDatagramSocketImpl_dataAvailable -+(JNIEnv *env, jobject this) { -+ SOCKET fd; -+ SOCKET fd1; -+ int rv = -1, rv1 = -1; -+ jobject fdObj = (*env)->GetObjectField(env, this, apdsi_fdID); -+ -+ if (!IS_NULL(fdObj)) { -+ int retval = 0; -+ fd = (SOCKET)(*env)->GetIntField(env, fdObj, IO_fd_fdID); -+ rv = ioctlsocket(fd, FIONREAD, &retval); -+ if (retval > 0) { -+ return retval; -+ } -+ } -+ -+ if (!IS_NULL(apdsi_fd1ID)) { -+ /* TwoStacks */ -+ jobject fd1Obj = (*env)->GetObjectField(env, this, apdsi_fd1ID); -+ if (!IS_NULL(fd1Obj)) { -+ int retval = 0; -+ fd1 = (SOCKET)(*env)->GetIntField(env, fd1Obj, IO_fd_fdID); -+ rv1 = ioctlsocket(fd1, FIONREAD, &retval); -+ if (retval > 0) { -+ return retval; -+ } -+ } -+ } -+ -+ if (rv < 0 && rv1 < 0) { -+ JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", -+ "Socket closed"); -+ return -1; -+ } -+ -+ return 0; -+} -+ ---- ./jdk/src/windows/native/sun/awt/splashscreen/splashscreen_sys.c Wed Jul 30 18:42:59 2014 +0100 -+++ ./jdk/src/windows/native/sun/awt/splashscreen/splashscreen_sys.c Tue Sep 09 12:00:58 2014 -0700 -@@ -1,5 +1,5 @@ - /* -- * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved. -+ * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it -@@ -213,6 +213,14 @@ - void - SplashRedrawWindow(Splash * splash) - { -+ if (!SplashIsStillLooping(splash)) { -+ KillTimer(splash->hWnd, 0); -+ } -+ -+ if (splash->currentFrame < 0) { -+ return; -+ } -+ - SplashUpdateScreenData(splash); - if (splash->isLayered) { - BLENDFUNCTION bf; -@@ -303,9 +311,6 @@ - time = 0; - SetTimer(splash->hWnd, 0, time, NULL); - } -- else { -- KillTimer(splash->hWnd, 0); -- } - } - - void SplashReconfigureNow(Splash * splash) { ---- ./jdk/src/windows/native/sun/windows/awt_Component.cpp Wed Jul 30 18:42:59 2014 +0100 -+++ ./jdk/src/windows/native/sun/windows/awt_Component.cpp Tue Sep 09 12:00:58 2014 -0700 -@@ -6930,9 +6930,9 @@ - { - TRY; - -- return JNI_IS_TRUE(AwtToolkit::GetInstance().SyncCall( -+ return (jboolean)AwtToolkit::GetInstance().SyncCall( - (void *(*)(void *))AwtComponent::_NativeHandlesWheelScrolling, -- env->NewGlobalRef(self))); -+ env->NewGlobalRef(self)); - // global ref is deleted in _NativeHandlesWheelScrolling - - CATCH_BAD_ALLOC_RET(NULL); -@@ -6951,9 +6951,9 @@ - - jobject selfGlobalRef = env->NewGlobalRef(self); - -- return JNI_IS_TRUE(AwtToolkit::GetInstance().SyncCall( -+ return (jboolean)AwtToolkit::GetInstance().SyncCall( - (void*(*)(void*))AwtComponent::_IsObscured, -- (void *)selfGlobalRef)); -+ (void *)selfGlobalRef); - // selfGlobalRef is deleted in _IsObscured - - CATCH_BAD_ALLOC_RET(NULL); ---- ./jdk/src/windows/native/sun/windows/awt_List.cpp Wed Jul 30 18:42:59 2014 +0100 -+++ ./jdk/src/windows/native/sun/windows/awt_List.cpp Tue Sep 09 12:00:58 2014 -0700 -@@ -1018,8 +1018,8 @@ - ses->list = env->NewGlobalRef(self); - ses->index = index; - -- return JNI_IS_TRUE(AwtToolkit::GetInstance().SyncCall( -- (void *(*)(void *))AwtList::_IsSelected, ses)); -+ return (jboolean)AwtToolkit::GetInstance().SyncCall( -+ (void *(*)(void *))AwtList::_IsSelected, ses); - // global ref and ses are deleted in _IsSelected - - CATCH_BAD_ALLOC_RET(FALSE); ---- ./jdk/test/java/awt/Focus/WindowIsFocusableAccessByThreadsTest/WindowIsFocusableAccessByThreadsTest.java Thu Jan 01 00:00:00 1970 +0000 -+++ ./jdk/test/java/awt/Focus/WindowIsFocusableAccessByThreadsTest/WindowIsFocusableAccessByThreadsTest.java Tue Sep 09 12:00:58 2014 -0700 -@@ -0,0 +1,113 @@ -+/* -+ * Copyright (c) 2014 Oracle and/or its affiliates. All rights reserved. -+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -+ * -+ * This code is free software; you can redistribute it and/or modify it -+ * under the terms of the GNU General Public License version 2 only, as -+ * published by the Free Software Foundation. -+ * -+ * This code is distributed in the hope that it will be useful, but WITHOUT -+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -+ * version 2 for more details (a copy is included in the LICENSE file that -+ * accompanied this code). -+ * -+ * You should have received a copy of the GNU General Public License version -+ * 2 along with this work; if not, write to the Free Software Foundation, -+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -+ * -+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -+ * or visit www.oracle.com if you need additional information or have any -+ * questions. -+ */ -+ -+/* -+ @test -+ @bug 8047288 -+ @summary Tests method isFocusable of Window component. It should be accessed only from EDT -+ @author artem.malinko@oracle.com -+ @library ../../regtesthelpers -+ @build Util -+ @run main WindowIsFocusableAccessByThreadsTest -+*/ -+ -+import test.java.awt.regtesthelpers.Util; -+ -+import javax.swing.*; -+import java.awt.*; -+import java.util.concurrent.atomic.AtomicBoolean; -+ -+public class WindowIsFocusableAccessByThreadsTest { -+ private static AtomicBoolean testPassed = new AtomicBoolean(true); -+ private static volatile TestFrame frame; -+ private static volatile TestWindow window; -+ private static volatile Button openWindowBtn; -+ -+ public static void main(String[] args) { -+ frame = new TestFrame("Test EDT access to Window components"); -+ window = new TestWindow(frame); -+ -+ SwingUtilities.invokeLater(WindowIsFocusableAccessByThreadsTest::init); -+ -+ Util.waitTillShown(frame); -+ Robot robot = Util.createRobot(); -+ Util.clickOnComp(frame, robot, 100); -+ Util.clickOnComp(openWindowBtn, robot, 100); -+ -+ Util.waitTillShown(window); -+ -+ if (!testPassed.get()) { -+ throw new RuntimeException("Window component methods has been accessed not " + -+ "from Event Dispatching Thread"); -+ } -+ } -+ -+ private static void init() { -+ frame.setSize(400, 400); -+ frame.setLayout(new FlowLayout()); -+ openWindowBtn = new Button("open window"); -+ openWindowBtn.addActionListener(e -> { -+ window.setSize(100, 100); -+ window.setLocation(400, 100); -+ window.setVisible(true); -+ }); -+ frame.add(openWindowBtn); -+ frame.setVisible(true); -+ } -+ -+ private static void testThread() { -+ if (!SwingUtilities.isEventDispatchThread()) { -+ testPassed.set(false); -+ } -+ } -+ -+ private static class TestWindow extends Window { -+ public TestWindow(Frame owner) { -+ super(owner); -+ } -+ -+ // isFocusable method is final and we can't add this test to it. -+ // But it invokes getFocusableWindowState and here we can check -+ // if thread is EDT. -+ @Override -+ public boolean getFocusableWindowState() { -+ testThread(); -+ return super.getFocusableWindowState(); -+ } -+ } -+ -+ private static class TestFrame extends Frame { -+ private TestFrame(String title) throws HeadlessException { -+ super(title); -+ } -+ -+ // isFocusable method is final and we can't add this test to it. -+ // But it invokes getFocusableWindowState and here we can check -+ // if thread is EDT. -+ @Override -+ public boolean getFocusableWindowState() { -+ testThread(); -+ return super.getFocusableWindowState(); -+ } -+ } -+} ---- ./jdk/test/java/util/Collections/CheckedQueue.java Wed Jul 30 18:42:59 2014 +0100 -+++ ./jdk/test/java/util/Collections/CheckedQueue.java Tue Sep 09 12:00:58 2014 -0700 -@@ -1,5 +1,5 @@ - /* -- * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. -+ * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it -@@ -23,55 +23,40 @@ - - /* - * @test -- * @bug 5020931 -+ * @bug 5020931 8048207 - * @summary Unit test for Collections.checkedQueue -+ * @run testng CheckedQueue - */ - --import java.lang.reflect.Method; - import java.util.Collections; --import java.util.Iterator; - import java.util.Queue; - import java.util.concurrent.ArrayBlockingQueue; - -+import org.testng.annotations.Test; -+import static org.testng.Assert.fail; -+import static org.testng.Assert.assertEquals; -+import static org.testng.Assert.assertTrue; -+import static org.testng.Assert.assertFalse; -+ -+ - public class CheckedQueue { -- static int status = 0; -- -- public static void main(String[] args) throws Exception { -- new CheckedQueue(); -- } -- -- public CheckedQueue() throws Exception { -- run(); -- } -- -- private void run() throws Exception { -- Method[] methods = this.getClass().getDeclaredMethods(); -- -- for (int i = 0; i < methods.length; i++) { -- Method method = methods[i]; -- String methodName = method.getName(); -- -- if (methodName.startsWith("test")) { -- try { -- Object obj = method.invoke(this, new Object[0]); -- } catch(Exception e) { -- throw new Exception(this.getClass().getName() + "." + -- methodName + " test failed, test exception " -- + "follows\n" + e.getCause()); -- } -- } -- } -- } - - /** - * This test adds items to a queue. - */ -- private void test00() { -+ @Test -+ public void testAdd() { - int arrayLength = 10; -- ArrayBlockingQueue<String> abq = new ArrayBlockingQueue(arrayLength); -+ Queue<String> abq = Collections.checkedQueue(new ArrayBlockingQueue<>(arrayLength), String.class); - - for (int i = 0; i < arrayLength; i++) { -- abq.add(new String(Integer.toString(i))); -+ abq.add(Integer.toString(i)); -+ } -+ -+ try { -+ abq.add("full"); -+ } catch (IllegalStateException full) { -+ - } - } - -@@ -80,23 +65,17 @@ - * {@code String}s gets the checked queue, and attempt to add an Integer to - * the checked queue. - */ -- private void test01() throws Exception { -+ @Test(expectedExceptions = ClassCastException.class) -+ public void testAddFail1() { - int arrayLength = 10; - ArrayBlockingQueue<String> abq = new ArrayBlockingQueue(arrayLength + 1); - - for (int i = 0; i < arrayLength; i++) { -- abq.add(new String(Integer.toString(i))); -+ abq.add(Integer.toString(i)); - } - - Queue q = Collections.checkedQueue(abq, String.class); -- -- try { -- q.add(new Integer(0)); -- throw new Exception(this.getClass().getName() + "." + "test01 test" -- + " failed, should throw ClassCastException."); -- } catch(ClassCastException cce) { -- // Do nothing. -- } -+ q.add(0); - } - - /** -@@ -104,47 +83,40 @@ - * {@code String}, gets the checked queue, and attempt to add an Integer to - * the checked queue. - */ -- private void test02() throws Exception { -+ @Test(expectedExceptions = ClassCastException.class) -+ public void testAddFail2() { - ArrayBlockingQueue<String> abq = new ArrayBlockingQueue(1); - Queue q = Collections.checkedQueue(abq, String.class); - -- try { -- q.add(new Integer(0)); -- throw new Exception(this.getClass().getName() + "." + "test02 test" -- + " failed, should throw ClassCastException."); -- } catch(ClassCastException e) { -- // Do nothing. -- } -+ q.add(0); - } - - /** - * This test tests the Collections.checkedQueue method call for nulls in - * each and both of the parameters. - */ -- private void test03() throws Exception { -+ @Test -+ public void testArgs() { - ArrayBlockingQueue<String> abq = new ArrayBlockingQueue(1); - Queue q; - - try { - q = Collections.checkedQueue(null, String.class); -- throw new Exception(this.getClass().getName() + "." + "test03 test" -- + " failed, should throw NullPointerException."); -+ fail( "should throw NullPointerException."); - } catch(NullPointerException npe) { - // Do nothing - } - - try { - q = Collections.checkedQueue(abq, null); -- throw new Exception(this.getClass().getName() + "." + "test03 test" -- + " failed, should throw NullPointerException."); -+ fail( "should throw NullPointerException."); - } catch(Exception e) { - // Do nothing - } - - try { - q = Collections.checkedQueue(null, null); -- throw new Exception(this.getClass().getName() + "." + "test03 test" -- + " failed, should throw NullPointerException."); -+ fail( "should throw NullPointerException."); - } catch(Exception e) { - // Do nothing - } -@@ -153,38 +125,28 @@ - /** - * This test tests the CheckedQueue.offer method. - */ -- private void test04() throws Exception { -+ @Test -+ public void testOffer() { - ArrayBlockingQueue<String> abq = new ArrayBlockingQueue(1); - Queue q = Collections.checkedQueue(abq, String.class); - - try { - q.offer(null); -- throw new Exception(this.getClass().getName() + "." + "test04 test" -- + " failed, should throw NullPointerException."); -+ fail("should throw NullPointerException."); - } catch (NullPointerException npe) { - // Do nothing - } - - try { -- q.offer(new Integer(0)); -- throw new Exception(this.getClass().getName() + "." + "test04 test" -- + " failed, should throw ClassCastException."); -+ q.offer(0); -+ fail("should throw ClassCastException."); - } catch (ClassCastException cce) { - // Do nothing - } - -- q.offer(new String("0")); -+ assertTrue(q.offer("0"), "queue should have room"); - -- try { -- q.offer(new String("1")); -- throw new Exception(this.getClass().getName() + "." + "test04 test" -- + " failed, should throw IllegalStateException."); -- } catch(IllegalStateException ise) { -- // Do nothing -- } -- } -- -- private void test05() { -- -+ // no room at the inn! -+ assertFalse(q.offer("1"), "queue should be full"); - } - } ---- ./jdk/test/sun/java2d/cmm/ColorConvertOp/ColConvCCMTest.java Wed Jul 30 18:42:59 2014 +0100 -+++ ./jdk/test/sun/java2d/cmm/ColorConvertOp/ColConvCCMTest.java Tue Sep 09 12:00:58 2014 -0700 -@@ -23,7 +23,7 @@ - - /** - * @test -- * @bug 6476665 7033534 6830714 -+ * @bug 6476665 7033534 6830714 8052162 - * @summary Verifies color conversion of Component Color Model based images - * @run main ColConvCCMTest - */ ---- ./jdk/test/sun/security/ssl/sanity/ciphersuites/CipherSuitesInOrder.java Wed Jul 30 18:42:59 2014 +0100 -+++ ./jdk/test/sun/security/ssl/sanity/ciphersuites/CipherSuitesInOrder.java Tue Sep 09 12:00:58 2014 -0700 -@@ -69,11 +69,6 @@ - "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA", - "TLS_DHE_RSA_WITH_AES_128_CBC_SHA", - "TLS_DHE_DSS_WITH_AES_128_CBC_SHA", -- "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA", -- "TLS_ECDHE_RSA_WITH_RC4_128_SHA", -- "SSL_RSA_WITH_RC4_128_SHA", -- "TLS_ECDH_ECDSA_WITH_RC4_128_SHA", -- "TLS_ECDH_RSA_WITH_RC4_128_SHA", - - "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384", - "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256", -@@ -97,6 +92,12 @@ - "TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA", - "SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA", - "SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA", -+ -+ "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA", -+ "TLS_ECDHE_RSA_WITH_RC4_128_SHA", -+ "SSL_RSA_WITH_RC4_128_SHA", -+ "TLS_ECDH_ECDSA_WITH_RC4_128_SHA", -+ "TLS_ECDH_RSA_WITH_RC4_128_SHA", - "SSL_RSA_WITH_RC4_128_MD5", - - "TLS_EMPTY_RENEGOTIATION_INFO_SCSV", -@@ -110,10 +111,20 @@ - "TLS_DH_anon_WITH_AES_128_CBC_SHA256", - "TLS_ECDH_anon_WITH_AES_128_CBC_SHA", - "TLS_DH_anon_WITH_AES_128_CBC_SHA", -+ "TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA", -+ "SSL_DH_anon_WITH_3DES_EDE_CBC_SHA", - "TLS_ECDH_anon_WITH_RC4_128_SHA", - "SSL_DH_anon_WITH_RC4_128_MD5", -- "TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA", -- "SSL_DH_anon_WITH_3DES_EDE_CBC_SHA", -+ "SSL_RSA_WITH_DES_CBC_SHA", -+ "SSL_DHE_RSA_WITH_DES_CBC_SHA", -+ "SSL_DHE_DSS_WITH_DES_CBC_SHA", -+ "SSL_DH_anon_WITH_DES_CBC_SHA", -+ "SSL_RSA_EXPORT_WITH_DES40_CBC_SHA", -+ "SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA", -+ "SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA", -+ "SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA", -+ "SSL_RSA_EXPORT_WITH_RC4_40_MD5", -+ "SSL_DH_anon_EXPORT_WITH_RC4_40_MD5", - "TLS_RSA_WITH_NULL_SHA256", - "TLS_ECDHE_ECDSA_WITH_NULL_SHA", - "TLS_ECDHE_RSA_WITH_NULL_SHA", -@@ -122,26 +133,16 @@ - "TLS_ECDH_RSA_WITH_NULL_SHA", - "TLS_ECDH_anon_WITH_NULL_SHA", - "SSL_RSA_WITH_NULL_MD5", -- "SSL_RSA_WITH_DES_CBC_SHA", -- "SSL_DHE_RSA_WITH_DES_CBC_SHA", -- "SSL_DHE_DSS_WITH_DES_CBC_SHA", -- "SSL_DH_anon_WITH_DES_CBC_SHA", -- "SSL_RSA_EXPORT_WITH_RC4_40_MD5", -- "SSL_DH_anon_EXPORT_WITH_RC4_40_MD5", -- "SSL_RSA_EXPORT_WITH_DES40_CBC_SHA", -- "SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA", -- "SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA", -- "SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA", -+ "TLS_KRB5_WITH_3DES_EDE_CBC_SHA", -+ "TLS_KRB5_WITH_3DES_EDE_CBC_MD5", - "TLS_KRB5_WITH_RC4_128_SHA", - "TLS_KRB5_WITH_RC4_128_MD5", -- "TLS_KRB5_WITH_3DES_EDE_CBC_SHA", -- "TLS_KRB5_WITH_3DES_EDE_CBC_MD5", - "TLS_KRB5_WITH_DES_CBC_SHA", - "TLS_KRB5_WITH_DES_CBC_MD5", -+ "TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA", -+ "TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5", - "TLS_KRB5_EXPORT_WITH_RC4_40_SHA", -- "TLS_KRB5_EXPORT_WITH_RC4_40_MD5", -- "TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA", -- "TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5" -+ "TLS_KRB5_EXPORT_WITH_RC4_40_MD5" - ); - - private final static String[] protocols = { ---- ./jdk/test/sun/tools/native2ascii/NativeErrors.java Wed Jul 30 18:42:59 2014 +0100 -+++ ./jdk/test/sun/tools/native2ascii/NativeErrors.java Tue Sep 09 12:00:58 2014 -0700 -@@ -1,5 +1,5 @@ - /* -- * Copyright (c) 1998, 1999, Oracle and/or its affiliates. All rights reserved. -+ * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it -@@ -25,12 +25,18 @@ - * @test - * @bug 4136352 - * @summary Test Native2ASCII error messages -- * -+ * @library /lib/testlibrary -+ * @build jdk.testlibrary.* NativeErrors -+ * @run main NativeErrors - */ - --import java.io.*; --import sun.tools.native2ascii.*; --import java.util.*; -+ -+import java.io.File; -+import java.util.ResourceBundle; -+import java.util.MissingResourceException; -+import jdk.testlibrary.OutputAnalyzer; -+import jdk.testlibrary.JDKToolLauncher; -+import jdk.testlibrary.ProcessTools; - - public class NativeErrors { - -@@ -45,30 +51,18 @@ - } - } - -- public static void main(String args[]) throws Exception { -- String[] command; -- Process p = null; -- BufferedReader in = null; -+ public static void main(String args[]) throws Throwable { -+ // Execute command in another vm. Verify stdout for expected err msg. - -- // Construct a command that runs the test in other vm -- // Exec another vm to run test in -- // Read the result to determine if test failed -- -- command = getComString("-encoding"); -- p = Runtime.getRuntime().exec(command); -- in = new BufferedReader(new InputStreamReader(p.getInputStream())); -- checkResult(in, "err.bad.arg"); -+ // Test with no input file given. -+ checkResult(executeCmd("-encoding"), "err.bad.arg"); - - File f0 = new File(System.getProperty("test.src", "."), "test123"); - String path0 = f0.getPath(); - if ( f0.exists() ) { - throw new Error("Input file should not exist: " + path0); - } -- -- command = getComString(path0); -- p = Runtime.getRuntime().exec(command); -- in = new BufferedReader(new InputStreamReader(p.getInputStream())); -- checkResult(in, "err.cannot.read"); -+ checkResult(executeCmd(path0), "err.cannot.read"); - - File f1 = new File(System.getProperty("test.src", "."), "test1"); - File f2 = File.createTempFile("test2", ".tmp"); -@@ -81,71 +75,38 @@ - throw new Error("Output file cannot be made read only: " + path2); - } - f2.deleteOnExit(); -- -- command = getComString(path1, path2); -- p = Runtime.getRuntime().exec(command); -- in = new BufferedReader(new InputStreamReader(p.getInputStream())); -- checkResult(in, "err.cannot.write"); -+ checkResult(executeCmd(path1, path2), "err.cannot.write"); - } - -- -- private static void checkResult(BufferedReader in, String errorExpected) -- throws Exception { -- String errorReceived; -- errorReceived = in.readLine(); -- assert errorReceived != null : "First readline cannot be null"; -- errorExpected = rsrc.getString(errorExpected); -- assert errorExpected != null : "Expected message cannot be null"; -- StringBuffer error = new StringBuffer(errorExpected); -- int start = errorExpected.indexOf("{0}"); -- if (start >= 0) { -- error.delete(start, start+3); -- errorExpected = error.toString(); -+ private static String executeCmd(String... toolArgs) throws Throwable { -+ JDKToolLauncher cmd = JDKToolLauncher.createUsingTestJDK("native2ascii"); -+ for (String s : toolArgs) { -+ cmd.addToolArg(s); - } -- //System.out.println("received: " + errorReceived); -- //System.out.println("expected: " + errorExpected); -- if (!errorReceived.endsWith(errorExpected)) -- throw new RuntimeException("Native2ascii bad arg error broken."); -+ OutputAnalyzer output = ProcessTools.executeProcess(cmd.getCommand()); -+ if (output == null || output.getStdout() == null) { -+ throw new Exception("Output was null. Process did not finish correctly."); -+ } -+ if (output.getExitValue() == 0) { -+ throw new Exception("Process exit code was 0, but error was expected."); -+ } -+ return output.getStdout(); - } - -- private static String[] getComString(String arg2) { -- String[] coms = new String[2]; -- coms[0] = getPathString(); -- coms[1] = arg2; -- return coms; -- } -+ private static void checkResult( -+ String errorReceived, String errorKey) throws Exception { -+ String errorExpected = rsrc.getString(errorKey); -+ if (errorExpected == null) { -+ throw new Exception("No error message for key: " + errorKey); -+ } -+ // Remove template tag from error message. -+ errorExpected = errorExpected.replaceAll("\\{0\\}", ""); - -- private static String[] getComString(String arg2, String arg3) { -- String[] coms = new String[3]; -- coms[0] = getPathString(); -- coms[1] = arg2; -- coms[2] = arg3; -- return coms; -- } -- -- /* -- * Search for path to native2ascii -- */ -- private static String getPathString() { -- String path = System.getProperty("java.home") + File.separator + -- "bin" + File.separator + "native2ascii"; -- if (File.separatorChar == '\\') { -- path = path + ".exe"; -+ System.out.println("received: " + errorReceived); -+ System.out.println("expected: " + errorExpected); -+ if (errorReceived.indexOf(errorExpected) < 0) { -+ throw new RuntimeException("Native2ascii bad arg error broken."); - } -- File f = new File(path); -- if (!f.exists()) { -- System.out.println("Cannot find native2ascii at "+path); -- path = System.getProperty("java.home") + File.separator + ".." + -- File.separator + "bin" + File.separator + "native2ascii"; -- if (File.separatorChar == '\\') { -- path = path + ".exe"; -- } -- f = new File(path); -- if (!f.exists()) -- throw new RuntimeException("Cannot find native2ascii at "+path); -- System.out.println("Using native2ascii at "+path); -- } -- return path; - } - - } ---- ./langtools/.hgtags Wed Jul 30 03:55:11 2014 -0700 -+++ ./langtools/.hgtags Mon Sep 08 12:38:00 2014 -0700 -@@ -311,3 +311,21 @@ - 5c1d6da1445aa3a2e5cf6101c70e79bfbe2745a5 jdk8u20-b23 - 9239118487dfb47ee850d2cc9b10a0a2e510da3c jdk8u20-b24 - 9239118487dfb47ee850d2cc9b10a0a2e510da3c jdk8u20-b25 -+5e6d409a72327a31b8a8f9aa0b32ef213c8b629c jdk8u20-b26 -+f491f1581f196950c2cb858508dd06601968c417 jdk8u25-b00 -+5bc865e0a2e3c59c1c8bc41e731509e1737ddea1 jdk8u25-b01 -+4dec0c684a9ead80ea2bca6b042682367c1abf90 jdk8u25-b02 -+1d039298d33f8062a0aa75442bd39434e16ee2df jdk8u25-b03 -+5c806c4b2830056caaca3329e634ff040bfe1c7b jdk8u25-b04 -+f1625806cabab809993fbc650b77c5a28d70035d jdk8u25-b05 -+7a6309461a7294cc78789f547b0a652757d17156 jdk8u25-b06 -+aad835b33337c22f4d632c2531c453de00a8f778 jdk8u25-b07 -+224b8260b2c72e2902e48522240c97de11b3570a jdk8u25-b08 -+a5fa1a2bd63cfcce67dae074c07cd0f2baa8ddc0 jdk8u25-b09 -+0dfd4099658397efa118918cd43f79e194c320ea jdk8u25-b10 -+eee8277448304f5d785310edff072d993a0c1868 jdk8u25-b11 -+664a10268f61616b682985855015663c30d0476f jdk8u25-b12 -+89b2f04998c7a1f987cadb4c42801d1ec500a870 jdk8u25-b13 -+a340d68b020585cad7aa6e38d1aafb19ad0e4e07 jdk8u25-b14 -+6e0c19cd42d7c4d307bea26840ee831cbd14e2fc jdk8u25-b15 -+7fa6fa7cc204de988e224c6f8f75e62128fa84cd jdk8u25-b16 ---- ./langtools/src/share/classes/com/sun/tools/javac/resources/compiler_ja.properties Wed Jul 30 03:55:11 2014 -0700 -+++ ./langtools/src/share/classes/com/sun/tools/javac/resources/compiler_ja.properties Mon Sep 08 12:38:00 2014 -0700 -@@ -1677,6 +1677,9 @@ - # 0: string - compiler.err.static.intf.methods.not.supported.in.source=static\u30A4\u30F3\u30BF\u30D5\u30A7\u30FC\u30B9\u306F-source {0}\u3067\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u307E\u305B\u3093\n(static\u30A4\u30F3\u30BF\u30D5\u30A7\u30FC\u30B9\u3092\u4F7F\u7528\u53EF\u80FD\u306B\u3059\u308B\u306B\u306F\u3001-source 8\u4EE5\u4E0A\u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044) - -+# 0: string -+compiler.err.static.intf.method.invoke.not.supported.in.source=static\u30A4\u30F3\u30BF\u30D5\u30A7\u30FC\u30B9\u30FB\u30E1\u30BD\u30C3\u30C9\u547C\u51FA\u3057\u306F-source {0}\u3067\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u307E\u305B\u3093\n(static\u30A4\u30F3\u30BF\u30D5\u30A7\u30FC\u30B9\u30FB\u30E1\u30BD\u30C3\u30C9\u547C\u51FA\u3057\u3092\u4F7F\u7528\u53EF\u80FD\u306B\u3059\u308B\u306B\u306F\u3001-source 8\u4EE5\u4E0A\u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044) -+ - ######################################## - # Diagnostics for verbose resolution - # used by Resolve (debug only) ---- ./langtools/src/share/classes/com/sun/tools/javac/resources/compiler_zh_CN.properties Wed Jul 30 03:55:11 2014 -0700 -+++ ./langtools/src/share/classes/com/sun/tools/javac/resources/compiler_zh_CN.properties Mon Sep 08 12:38:00 2014 -0700 -@@ -1677,6 +1677,9 @@ - # 0: string - compiler.err.static.intf.methods.not.supported.in.source=-source {0} \u4E2D\u4E0D\u652F\u6301\u9759\u6001\u63A5\u53E3\u65B9\u6CD5\n(\u8BF7\u4F7F\u7528 -source 8 \u6216\u66F4\u9AD8\u7248\u672C\u4EE5\u542F\u7528\u9759\u6001\u63A5\u53E3\u65B9\u6CD5) - -+# 0: string -+compiler.err.static.intf.method.invoke.not.supported.in.source=-source {0} \u4E2D\u4E0D\u652F\u6301\u9759\u6001\u63A5\u53E3\u65B9\u6CD5\u8C03\u7528\n(\u8BF7\u4F7F\u7528 -source 8 \u6216\u66F4\u9AD8\u7248\u672C\u4EE5\u542F\u7528\u9759\u6001\u63A5\u53E3\u65B9\u6CD5\u8C03\u7528) -+ - ######################################## - # Diagnostics for verbose resolution - # used by Resolve (debug only) ---- ./nashorn/.hgtags Wed Jul 30 03:55:26 2014 -0700 -+++ ./nashorn/.hgtags Mon Sep 08 12:38:15 2014 -0700 -@@ -299,3 +299,21 @@ - ad36f9454ce38d78be39fc819902e1223765ee5e jdk8u20-b23 - d3da140e179343011017669a6dbfcc52b0e56f52 jdk8u20-b24 - d3da140e179343011017669a6dbfcc52b0e56f52 jdk8u20-b25 -+a23ac9db4227d78b3389e01fa94a8cb695a8fb0a jdk8u20-b26 -+7001e9f95b443a75e432205a29974c05b88e0fdc jdk8u25-b00 -+a9f77bd14874d5f8fdf935704dd54a0451f2bc69 jdk8u25-b01 -+895e47783e2ee6823496a5ae84039a4f50311c7d jdk8u25-b02 -+b84d92194c367411fcd8b5f510d4589709a8e71e jdk8u25-b03 -+894ab2f06c93987f8596f5906985ff0a452f2fb2 jdk8u25-b04 -+25b89ca363c41e1a1d90d7e95d5227d23e4292f3 jdk8u25-b05 -+0a50d568a901700213fe40c38089748ca1d1af88 jdk8u25-b06 -+25b719b33ac8f8ffb7e4353fddcda93ca6027b0d jdk8u25-b07 -+0f74f65763a300cfe5f897b6b21f36d64f9d2115 jdk8u25-b08 -+158837f537e45fc4664a56ad4759f8a1b30cab73 jdk8u25-b09 -+7e00c05fc54b0404bf2eedda35dd38ae1ad23e50 jdk8u25-b10 -+8cd6af10dd4de9e28ffe30c9107954fffd15dc99 jdk8u25-b11 -+f76715cd4e902602bdbb4ba9a3774c10afeee012 jdk8u25-b12 -+34c95bcacff79a5794416a8e715a8e63bfe7fc58 jdk8u25-b13 -+6a93467eaa36f732b84ecd463e046c4066fef40c jdk8u25-b14 -+71e8403a2f8279315419adf5f4e9d6b232b6835c jdk8u25-b15 -+1500138ce513600457be6bfa10979ecce6515aa6 jdk8u25-b16 |