summaryrefslogtreecommitdiff
path: root/java/openjdk8/files/patch-8u25-b17
diff options
context:
space:
mode:
Diffstat (limited to 'java/openjdk8/files/patch-8u25-b17')
-rw-r--r--java/openjdk8/files/patch-8u25-b175306
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