changeset 10846:cdcf2e599e42 jdk9-b36

Merge
author lana
date Thu, 16 Oct 2014 14:14:57 -0700
parents d0a14815b48b 882f47790152
children c8efbf0a974b a0ee740e01a5
files test/java/security/cert/CertificateFactory/invalidEncodedCerts/invalidcert.pem test/javax/xml/jaxp/testng/validation/8037819/BaseTest.java test/javax/xml/jaxp/testng/validation/8037819/BasicTest.java test/javax/xml/jaxp/testng/validation/8037819/FixedAttrTest.java test/javax/xml/jaxp/testng/validation/8037819/IdIdrefCheckingTest.java test/javax/xml/jaxp/testng/validation/8037819/IdentityConstraintCheckingTest.java test/javax/xml/jaxp/testng/validation/8037819/IgnoreXSITypeTest_A_A.java test/javax/xml/jaxp/testng/validation/8037819/IgnoreXSITypeTest_A_C.java test/javax/xml/jaxp/testng/validation/8037819/IgnoreXSITypeTest_C_A.java test/javax/xml/jaxp/testng/validation/8037819/IgnoreXSITypeTest_C_AC.java test/javax/xml/jaxp/testng/validation/8037819/IgnoreXSITypeTest_C_C.java test/javax/xml/jaxp/testng/validation/8037819/IgnoreXSITypeTest_C_CA.java test/javax/xml/jaxp/testng/validation/8037819/RootTypeDefinitionTest.java test/javax/xml/jaxp/testng/validation/8037819/SpecialCaseErrorHandler.java test/javax/xml/jaxp/testng/validation/8037819/TEST.properties test/javax/xml/jaxp/testng/validation/8037819/UnparsedEntityCheckingTest.java test/javax/xml/jaxp/testng/validation/8037819/UseGrammarPoolOnlyTest_False.java test/javax/xml/jaxp/testng/validation/8037819/UseGrammarPoolOnlyTest_True.java test/javax/xml/jaxp/testng/validation/8037819/base.xml test/javax/xml/jaxp/testng/validation/8037819/base.xsd test/javax/xml/jaxp/testng/validation/8037819/fixedAttr.xml test/javax/xml/jaxp/testng/validation/8037819/idIdref.xml test/javax/xml/jaxp/testng/validation/8037819/idc.xml test/javax/xml/jaxp/testng/validation/8037819/idc.xsd test/javax/xml/jaxp/testng/validation/8037819/otherNamespace.xml test/javax/xml/jaxp/testng/validation/8037819/otherNamespace.xsd test/javax/xml/jaxp/testng/validation/8037819/unparsedEntity.dtd test/javax/xml/jaxp/testng/validation/8037819/unparsedEntity.xml test/javax/xml/jaxp/testng/validation/8037819/xsitype_A_A.xml test/javax/xml/jaxp/testng/validation/8037819/xsitype_A_C.xml test/javax/xml/jaxp/testng/validation/8037819/xsitype_C_A.xml test/javax/xml/jaxp/testng/validation/8037819/xsitype_C_AC.xml test/javax/xml/jaxp/testng/validation/8037819/xsitype_C_C.xml test/javax/xml/jaxp/testng/validation/8037819/xsitype_C_CA.xml test/tools/jar/normalize/TestNormal.java
diffstat 207 files changed, 7896 insertions(+), 3726 deletions(-) [+]
line wrap: on
line diff
--- a/make/gensrc/Gensrc-java.base.gmk	Thu Oct 16 12:02:05 2014 -0700
+++ b/make/gensrc/Gensrc-java.base.gmk	Thu Oct 16 14:14:57 2014 -0700
@@ -25,10 +25,6 @@
 
 include GensrcCommon.gmk
 
-# TODO: maybe split into separate modules?
-include GensrcProperties.gmk
-GENSRC_JAVA_BASE += $(GENSRC_PROPERTIES)
-
 include GensrcLocaleData.gmk
 include GensrcCharacterData.gmk
 include GensrcMisc.gmk
@@ -37,6 +33,34 @@
 include GensrcBuffer.gmk
 include GensrcExceptions.gmk
 
+################################################################################
+
+include GensrcProperties.gmk
+
+$(eval $(call SetupCompileProperties,LIST_RESOURCE_BUNDLE, \
+    $(filter %.properties, \
+        $(call CacheFind, $(JDK_TOPDIR)/src/java.base/share/classes/sun/launcher/resources)), \
+    ListResourceBundle))
+
+$(eval $(call SetupCompileProperties,SUN_UTIL, \
+    $(filter %.properties, \
+        $(call CacheFind, $(JDK_TOPDIR)/src/java.base/share/classes/sun/util/resources)), \
+    sun.util.resources.LocaleNamesBundle))
+
+GENSRC_JAVA_BASE += $(LIST_RESOURCE_BUNDLE) $(SUN_UTIL)
+
+# Some resources bundles are already present as java files but still need to be
+# copied to zh_HK locale.
+$(eval $(call SetupCopy-zh_HK,COPY_ZH_HK, \
+    $(addprefix $(JDK_TOPDIR)/src/java.base/share/classes/, \
+        sun/misc/resources/Messages_zh_TW.java \
+        sun/security/util/AuthResources_zh_TW.java \
+        sun/security/util/Resources_zh_TW.java)))
+
+GENSRC_JAVA_BASE += $(COPY_ZH_HK)
+
+################################################################################
+
 java.base: $(GENSRC_JAVA_BASE)
 
 all: java.base
--- a/make/gensrc/Gensrc-java.desktop.gmk	Thu Oct 16 12:02:05 2014 -0700
+++ b/make/gensrc/Gensrc-java.desktop.gmk	Thu Oct 16 14:14:57 2014 -0700
@@ -38,6 +38,48 @@
 
 include GensrcSwing.gmk
 
+################################################################################
+
+include GensrcProperties.gmk
+
+PROP_SRC_DIRS := \
+    $(JDK_TOPDIR)/src/java.desktop/share/classes/sun/awt/resources \
+    $(JDK_TOPDIR)/src/java.desktop/share/classes/com/sun/accessibility/internal/resources \
+    $(JDK_TOPDIR)/src/java.desktop/share/classes/com/sun/java/swing/plaf/motif/resources \
+    $(JDK_TOPDIR)/src/java.desktop/share/classes/com/sun/java/swing/plaf/windows/resources \
+    $(JDK_TOPDIR)/src/java.desktop/share/classes/com/sun/swing/internal/plaf/basic/resources \
+    $(JDK_TOPDIR)/src/java.desktop/share/classes/com/sun/swing/internal/plaf/metal/resources \
+    $(JDK_TOPDIR)/src/java.desktop/share/classes/com/sun/swing/internal/plaf/synth/resources \
+    $(JDK_TOPDIR)/src/java.desktop/share/classes/sun/print/resources \
+    #
+
+ifeq ($(OPENJDK_TARGET_OS), macosx)
+  PROP_SRC_DIRS += \
+      $(JDK_TOPDIR)/src/java.desktop/macosx/classes/com/apple/laf/resources \
+      $(JDK_TOPDIR)/src/java.desktop/macosx/classes/sun/awt/resources \
+      #
+endif
+
+ifeq ($(OPENJDK_TARGET_OS), windows)
+  PROP_SRC_DIRS += $(JDK_TOPDIR)/src/java.desktop/windows/classes/sun/awt/windows
+else
+  PROP_SRC_DIRS += $(JDK_TOPDIR)/src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/resources
+endif
+
+$(eval $(call SetupCompileProperties,COMPILE_PROPERTIES, \
+    $(filter %.properties, $(call CacheFind, $(PROP_SRC_DIRS))), ListResourceBundle))
+
+GENSRC_JAVA_DESKTOP += $(COMPILE_PROPERTIES)
+
+# Some resources bundles are already present as java files but still need to be
+# copied to zh_HK locale.
+$(eval $(call SetupCopy-zh_HK,COPY_ZH_HK, \
+    $(JDK_TOPDIR)/src/java.desktop/share/classes/sun/applet/resources/MsgAppletViewer_zh_TW.java))
+
+GENSRC_JAVA_DESKTOP += $(COPY_ZH_HK)
+
+################################################################################
+
 java.desktop: $(GENSRC_JAVA_DESKTOP)
 
 all: java.desktop
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/make/gensrc/Gensrc-java.logging.gmk	Thu Oct 16 14:14:57 2014 -0700
@@ -0,0 +1,43 @@
+#
+# 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 GensrcCommon.gmk
+
+################################################################################
+
+include GensrcProperties.gmk
+
+$(eval $(call SetupCompileProperties,COMPILE_PROPERTIES, \
+    $(filter %.properties, \
+        $(call CacheFind, $(JDK_TOPDIR)/src/java.logging/share/classes/sun/util/logging/resources)), \
+    ListResourceBundle))
+
+TARGETS += $(COMPILE_PROPERTIES)
+
+################################################################################
+
+all: $(TARGETS)
+
+.PHONY: all
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/make/gensrc/Gensrc-java.management.gmk	Thu Oct 16 14:14:57 2014 -0700
@@ -0,0 +1,43 @@
+#
+# Copyright (c) 2011, 2013, 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 GensrcCommon.gmk
+
+################################################################################
+
+include GensrcProperties.gmk
+
+$(eval $(call SetupCompileProperties,COMPILE_PROPERTIES, \
+    $(filter %.properties, \
+        $(call CacheFind, $(JDK_TOPDIR)/src/java.management/share/classes/sun/management/resources)), \
+    ListResourceBundle))
+
+TARGETS += $(COMPILE_PROPERTIES)
+
+################################################################################
+
+all: $(TARGETS)
+
+.PHONY: all
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/make/gensrc/Gensrc-jdk.dev.gmk	Thu Oct 16 14:14:57 2014 -0700
@@ -0,0 +1,43 @@
+#
+# 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 GensrcCommon.gmk
+
+################################################################################
+
+include GensrcProperties.gmk
+
+$(eval $(call SetupCompileProperties,COMPILE_PROPERTIES, \
+    $(filter %.properties, \
+        $(call CacheFind, $(JDK_TOPDIR)/src/jdk.dev/share/classes/sun/tools/jar/resources)), \
+    ListResourceBundle))
+
+TARGETS += $(COMPILE_PROPERTIES)
+
+################################################################################
+
+all: $(TARGETS)
+
+.PHONY: all
--- a/make/gensrc/Gensrc-jdk.jdi.gmk	Thu Oct 16 12:02:05 2014 -0700
+++ b/make/gensrc/Gensrc-jdk.jdi.gmk	Thu Oct 16 14:14:57 2014 -0700
@@ -69,6 +69,17 @@
 
 ################################################################################
 
+include GensrcProperties.gmk
+
+$(eval $(call SetupCompileProperties,COMPILE_PROPERTIES, \
+    $(filter %.properties, \
+        $(call CacheFind, $(JDK_TOPDIR)/src/jdk.jdi/share/classes/com/sun/tools/jdi/resources)), \
+    ListResourceBundle))
+
+GENSRC_JDK_JDI += $(COMPILE_PROPERTIES)
+
+################################################################################
+
 jdk.jdi: $(GENSRC_JDK_JDI)
 
 all: jdk.jdi
--- a/make/gensrc/Gensrc-jdk.localedata.gmk	Thu Oct 16 12:02:05 2014 -0700
+++ b/make/gensrc/Gensrc-jdk.localedata.gmk	Thu Oct 16 14:14:57 2014 -0700
@@ -31,6 +31,20 @@
 include GensrcLocaleData.gmk
 include GensrcCLDR.gmk
 
+################################################################################
+
+include GensrcProperties.gmk
+
+$(eval $(call SetupCompileProperties,COMPILE_PROPERTIES, \
+    $(filter %.properties, \
+        $(call CacheFind, $(JDK_TOPDIR)/src/jdk.localedata/share/classes/sun/util/resources)), \
+    sun.util.resources.LocaleNamesBundle))
+
+# Skip generating zh_HK from zh_TW for this module.
+GENSRC_JDK_LOCALEDATA += $(filter-out %_zh_HK.java, $(COMPILE_PROPERTIES))
+
+################################################################################
+
 jdk.localedata: $(GENSRC_JDK_LOCALEDATA)
 
 all: jdk.localedata
--- a/make/gensrc/GensrcProperties.gmk	Thu Oct 16 12:02:05 2014 -0700
+++ b/make/gensrc/GensrcProperties.gmk	Thu Oct 16 14:14:57 2014 -0700
@@ -23,132 +23,81 @@
 # questions.
 #
 
-# All .properties files to be compiled are appended to this variable.
-ALL_COMPILED_PROPSOURCES :=
-# All generated .java files from compilation are appended to this variable.
-ALL_COMPILED_PROPJAVAS :=
-# The (very long) command line for compilation, stored in a file, prior to use.
-COMPILE_PROPCMDLINE :=
+# This file defines macros that sets up rules for generating java classes
+# from resource bundle properties files.
 
-define add_properties_to_compile
-  # $1 is the name of the properties group
-  # $2 is the files belonging to this group
-  # $3 is the super class for the generated java file.
+################################################################################
+# Helper macro for SetupCopy-zh_HK.
+define SetupOneCopy-zh_HK
+  $1_$2_TARGET := $$(patsubst $(JDK_TOPDIR)/src/$(MODULE)/share/classes/%, \
+      $(JDK_OUTPUTDIR)/gensrc/$(MODULE)/%, \
+      $$(subst _zh_TW,_zh_HK, $2))
 
-  # Convert <root>/jdk/src/<module>/share/classes/sun/util/resources/CurrencyNames_sv.properties
-  # to <build>/jdk/gensrc/<module/sun/util/resources/CurrencyNames_sv.java
-  $1_PROPJAVAS := $$(patsubst $(JDK_TOPDIR)/src/%.properties, \
-      $(JDK_OUTPUTDIR)/gensrc/%.java, \
-      $$(subst /share/classes,, \
-      $$(subst /$(OPENJDK_TARGET_OS_API_DIR)/classes,, \
-      $$(subst /$(OPENJDK_TARGET_OS)/classes,, $2))))
+  $$($1_$2_TARGET): $2
+	$(MKDIR) -p $$(@D)
+	$(CAT) $$< | $(SED) -e '/class/s/_zh_TW/_zh_HK/' > $$@
 
-  # Accumulate all found properties files.
-  ALL_COMPILED_PROPSOURCES += $2
-
-  # Generate the list of to be created java files.
-  ALL_COMPILED_PROPJAVAS += $$($1_PROPJAVAS)
-
-  # Now generate a sequence of 
-  # "-compile ...CurrencyNames_sv.properties ...CurrencyNames_sv.java ListResourceBundle"
-  # suitable to be fed into the CompileProperties command.
-  COMPILE_PROPCMDLINE += $$(subst _SPACE_,$(SPACE),$$(join $$(addprefix -compile_SPACE_, $2), \
-      $$(addsuffix _SPACE_$(strip $3), \
-      $$(addprefix _SPACE_, $$($1_PROPJAVAS)))))
+  $1 += $$($1_$2_TARGET)
 endef
 
 ################################################################################
-# Some packages have properties that need to be converted to java source files.
-COMPILE_PROP_SRC_FILES := \
-    $(filter %.properties, $(call CacheFind, \
-        $(JDK_TOPDIR)/src/java.desktop/share/classes/com/sun/accessibility/internal/resources \
-        $(JDK_TOPDIR)/src/java.desktop/share/classes/com/sun/java/swing/plaf/motif/resources \
-        $(JDK_TOPDIR)/src/java.desktop/share/classes/com/sun/java/swing/plaf/windows/resources \
-        $(JDK_TOPDIR)/src/java.desktop/share/classes/com/sun/swing/internal/plaf/basic/resources \
-        $(JDK_TOPDIR)/src/java.desktop/share/classes/com/sun/swing/internal/plaf/metal/resources \
-        $(JDK_TOPDIR)/src/java.desktop/share/classes/com/sun/swing/internal/plaf/synth/resources \
-        $(JDK_TOPDIR)/src/jdk.jdi/share/classes/com/sun/tools/jdi/resources \
-        $(JDK_TOPDIR)/src/java.desktop/share/classes/sun/awt/resources \
-        $(JDK_TOPDIR)/src/java.base/share/classes/sun/launcher/resources \
-        $(JDK_TOPDIR)/src/java.management/share/classes/sun/management/resources \
-        $(JDK_TOPDIR)/src/java.desktop/share/classes/sun/print/resources \
-        $(JDK_TOPDIR)/src/jdk.dev/share/classes/sun/tools/jar/resources \
-        $(JDK_TOPDIR)/src/java.logging/share/classes/sun/util/logging/resources)) \
-    #
-
-ifeq ($(OPENJDK_TARGET_OS), macosx)
-  COMPILE_PROP_SRC_FILES += \
-      $(filter %.properties, $(call CacheFind, \
-          $(JDK_TOPDIR)/src/java.desktop/macosx/classes/com/apple/laf/resources \
-          $(JDK_TOPDIR)/src/java.desktop/macosx/classes/sun/awt/resources)) \
-      #
-endif
-
-ifeq ($(OPENJDK_TARGET_OS), windows)
-  COMPILE_PROP_SRC_FILES += \
-      $(filter %.properties, $(call CacheFind, \
-          $(JDK_TOPDIR)/src/java.desktop/windows/classes/sun/awt/windows)) \
-      #
-else # ! windows
-  COMPILE_PROP_SRC_FILES += \
-      $(filter %.properties, $(call CacheFind, \
-          $(JDK_TOPDIR)/src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/resources)) \
-      #
-endif
-
-$(eval $(call add_properties_to_compile,LIST_RESOURCE_BUNDLE, \
-    $(COMPILE_PROP_SRC_FILES), ListResourceBundle))
-
-# sun/util/resources
-$(eval $(call add_properties_to_compile,SUN_UTIL, \
-    $(filter %.properties, \
-        $(call CacheFind, $(JDK_TOPDIR)/src/java.base/share/classes/sun/util/resources) \
-        $(call CacheFind, $(JDK_TOPDIR)/src/jdk.localedata/share/classes/sun/util/resources)), \
-    sun.util.resources.LocaleNamesBundle))
+# Creates rules for copying zh_TW resources to zh_HK.
+# Param 1 - Variable to add targets to
+# Param 2 - Files to copy from
+define SetupCopy-zh_HK
+  $$(foreach f, $2, $$(eval $$(call SetupOneCopy-zh_HK,$1,$$f)))
+endef
 
 ################################################################################
-# Now setup the rule for the generation of the resource bundles.
-$(JDK_OUTPUTDIR)/gensrc/_the.compiled_properties: $(ALL_COMPILED_PROPSOURCES) $(BUILD_TOOLS_JDK)
-        # Generate all output directories in advance since the build tool does not do that...
-	$(MKDIR) -p $(sort $(dir $(ALL_COMPILED_PROPJAVAS)))
-	$(ECHO) Compiling $(words $(ALL_COMPILED_PROPSOURCES)) properties into resource bundles
-	$(call ListPathsSafely,COMPILE_PROPCMDLINE,\n, >> $(JDK_OUTPUTDIR)/gensrc/_the.cmdline)
-	$(TOOL_COMPILEPROPERTIES) -quiet @$(JDK_OUTPUTDIR)/gensrc/_the.cmdline
-	$(TOUCH) $@
+# Creates a rule that runs CompileProperties on a set of properties files.
+# Param 1 - Variable to add targets to, must not contain space
+# Param 2 - Properties files to process
+# Param 3 - The super class for the generated classes
+define SetupCompileProperties
+  $1_SRCS := $2
+  $1_CLASS := $3
 
-$(ALL_COMPILED_PROPJAVAS): $(JDK_OUTPUTDIR)/gensrc/_the.compiled_properties
+  # Convert .../src/<module>/share/classes/com/sun/tools/javac/resources/javac_zh_CN.properties
+  # to .../langtools/gensrc/<module>/com/sun/tools/javac/resources/javac_zh_CN.java
+  # Strip away prefix and suffix, leaving for example only: 
+  # "<module>/share/classes/com/sun/tools/javac/resources/javac_zh_CN"
+  $1_JAVAS := $$(patsubst $(JDK_TOPDIR)/src/%, \
+      $(JDK_OUTPUTDIR)/gensrc/%, \
+      $$(patsubst %.properties, %.java, \
+      $$(subst /share/classes,, $$($1_SRCS))))
+
+  # Generate the package dirs for the to be generated java files. Sort to remove
+  # duplicates.
+  $1_DIRS := $$(sort $$(dir $$($1_JAVAS)))
+
+  # Now generate a sequence of:
+  # "-compile ...javac_zh_CN.properties ...javac_zh_CN.java java.util.ListResourceBundle"
+  # suitable to be fed into the CompileProperties command.
+  $1_CMDLINE := $$(subst _SPACE_, $(SPACE), \
+      $$(join $$(addprefix -compile_SPACE_, $$($1_SRCS)), \
+      $$(addsuffix _SPACE_$$($1_CLASS), \
+      $$(addprefix _SPACE_, $$($1_JAVAS)))))
+
+  $1_TARGET := $(JDK_OUTPUTDIR)/gensrc/$(MODULE)/_the.$1.done
+  $1_CMDLINE_FILE := $(JDK_OUTPUTDIR)/gensrc/$(MODULE)/_the.$1.cmdline
+
+  # Now setup the rule for the generation of the resource bundles.
+  $$($1_TARGET): $$($1_SRCS) $$($1_JAVAS) $(BUILD_TOOLS_JDK)
+	$(MKDIR) -p $$(@D) $$($1_DIRS)
+	$(ECHO) Compiling $$(words $$($1_SRCS)) properties into resource bundles for $(MODULE)
+	$(RM) $$($1_CMDLINE_FILE)
+	$$(call ListPathsSafely,$1_CMDLINE,\n, >> $$($1_CMDLINE_FILE))
+	$(TOOL_COMPILEPROPERTIES) -quiet @$$($1_CMDLINE_FILE)
+	$(TOUCH) $$@
+
+  $$($1_JAVAS): $$($1_SRCS)
+
+  # Create zh_HK versions of all zh_TW files created above
+  $$(eval $$(call SetupCopy-zh_HK,$1_HK,$$(filter %_zh_TW.java, $$($1_JAVAS))))
+  # The zh_HK copy must wait for the compile properties tool to run
+  $$($1_HK): $$($1_TARGET)
+
+  $1 += $$($1_JAVAS) $$($1_TARGET) $$($1_HK)
+endef
 
 ################################################################################
-# Some zh_HK resources are just copies of zh_TW
-
-define convert_tw_to_hk
-  $(MKDIR) -p $(@D)
-  $(CAT) $< | $(SED) -e '/class/s/_zh_TW/_zh_HK/' > $@
-endef
-
-# Some are copies of existing sources
-$(JDK_OUTPUTDIR)/gensrc/java.desktop/%_zh_HK.java: \
-    $(JDK_TOPDIR)/src/java.desktop/share/classes/%_zh_TW.java
-	$(call convert_tw_to_hk)
-
-$(JDK_OUTPUTDIR)/gensrc/java.base/%_zh_HK.java: \
-    $(JDK_TOPDIR)/src/java.base/share/classes/%_zh_TW.java
-	$(call convert_tw_to_hk)
-
-# Others are copies of sources generated by this makefile
-$(JDK_OUTPUTDIR)/gensrc/%_zh_HK.java: $(JDK_OUTPUTDIR)/gensrc/%_zh_TW.java
-	$(call convert_tw_to_hk)
-
-# The existing sources
-ZH_HK_JAVA := java.desktop/sun/applet/resources/MsgAppletViewer_zh_HK.java \
-    java.base/sun/misc/resources/Messages_zh_HK.java \
-    java.base/sun/security/util/AuthResources_zh_HK.java \
-    java.base/sun/security/util/Resources_zh_HK.java
-
-ZH_HK_JAVA_FILES := $(addprefix $(JDK_OUTPUTDIR)/gensrc/, $(ZH_HK_JAVA)) \
-    $(filter-out $(JDK_OUTPUTDIR)/gensrc/jdk.localedata/sun/util/resources/zh/%, \
-    $(subst _zh_TW,_zh_HK,$(filter %_zh_TW.java, $(ALL_COMPILED_PROPJAVAS))))
-
-################################################################################
-
-GENSRC_PROPERTIES := $(ALL_COMPILED_PROPJAVAS) $(ZH_HK_JAVA_FILES)
--- a/make/lib/CoreLibraries.gmk	Thu Oct 16 12:02:05 2014 -0700
+++ b/make/lib/CoreLibraries.gmk	Thu Oct 16 14:14:57 2014 -0700
@@ -224,7 +224,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, \
--- a/make/mapfiles/libjfr/mapfile-vers	Thu Oct 16 12:02:05 2014 -0700
+++ b/make/mapfiles/libjfr/mapfile-vers	Thu Oct 16 14:14:57 2014 -0700
@@ -10,8 +10,13 @@
       Java_oracle_jrockit_jfr_Process_getpid;
       Java_oracle_jrockit_jfr_Timing_counterTime;
       Java_oracle_jrockit_jfr_Timing_init;
-      Java_oracle_jrockit_jfr_NativeLogger_output0;
-      Java_oracle_jrockit_jfr_VMJFR_isEnabled;
+      Java_oracle_jrockit_jfr_Logger_output0;
+      Java_oracle_jrockit_jfr_JFR_isCommercialFeaturesUnlocked;
+      Java_oracle_jrockit_jfr_JFR_isStarted;
+      Java_oracle_jrockit_jfr_JFR_isSupportedInVM;
+      Java_oracle_jrockit_jfr_JFR_startFlightRecorder;
+      Java_oracle_jrockit_jfr_JFR_isDisabledOnCommandLine;
+      Java_oracle_jrockit_jfr_JFR_isEnabled;
       Java_oracle_jrockit_jfr_VMJFR_options;
       Java_oracle_jrockit_jfr_VMJFR_init;
       Java_oracle_jrockit_jfr_VMJFR_addConstPool;
@@ -33,7 +38,6 @@
       Java_oracle_jrockit_jfr_VMJFR_setPeriod;
       Java_oracle_jrockit_jfr_VMJFR_getPeriod;
       Java_oracle_jrockit_jfr_VMJFR_descriptors;
-      Java_oracle_jrockit_jfr_VMJFR_redefineClass0;
       Java_oracle_jrockit_jfr_VMJFR_retransformClasses0;
       JNI_OnLoad;
   local:
--- a/make/mapfiles/libnet/mapfile-vers	Thu Oct 16 12:02:05 2014 -0700
+++ b/make/mapfiles/libnet/mapfile-vers	Thu Oct 16 14:14:57 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;
--- a/make/src/classes/build/tools/module/GenModulesList.java	Thu Oct 16 12:02:05 2014 -0700
+++ b/make/src/classes/build/tools/module/GenModulesList.java	Thu Oct 16 14:14:57 2014 -0700
@@ -112,8 +112,7 @@
     }
 
     static final List<String> AGGREGATORS = Arrays.asList(new String[] {
-            "java.se", "java.compact1", "java.compact2",
-            "java.compact3", "jdk.compact3"});
+            "java.se", "java.compact1", "java.compact2", "java.compact3"});
 
     class TopoSorter {
         final Deque<Module> result = new LinkedList<>();
--- a/src/java.base/share/classes/java/lang/Class.java	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.base/share/classes/java/lang/Class.java	Thu Oct 16 14:14:57 2014 -0700
@@ -262,8 +262,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);
     }
 
 
@@ -333,22 +333,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;
 
     /**
--- a/src/java.base/share/classes/java/lang/String.java	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.base/share/classes/java/lang/String.java	Thu Oct 16 14:14:57 2014 -0700
@@ -1045,8 +1045,9 @@
             }
         }
         // Argument is a String
-        if (cs.equals(this))
-            return true;
+        if (cs instanceof String) {
+            return equals(cs);
+        }
         // Argument is a generic CharSequence
         char v1[] = value;
         int n = v1.length;
--- a/src/java.base/share/classes/java/lang/invoke/MethodHandleImpl.java	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.base/share/classes/java/lang/invoke/MethodHandleImpl.java	Thu Oct 16 14:14:57 2014 -0700
@@ -594,6 +594,9 @@
     static class Lazy {
         private static final Class<?> MHI = MethodHandleImpl.class;
 
+        private static final MethodHandle[] ARRAYS;
+        private static final MethodHandle[] FILL_ARRAYS;
+
         static final NamedFunction NF_checkSpreadArgument;
         static final NamedFunction NF_guardWithCatch;
         static final NamedFunction NF_throwException;
@@ -606,6 +609,9 @@
         static final MethodHandle MH_arrayIdentity;
 
         static {
+            ARRAYS      = makeArrays();
+            FILL_ARRAYS = makeFillArrays();
+
             try {
                 NF_checkSpreadArgument = new NamedFunction(MHI.getDeclaredMethod("checkSpreadArgument", Object.class, int.class));
                 NF_guardWithCatch      = new NamedFunction(MHI.getDeclaredMethod("guardWithCatch", MethodHandle.class, Class.class,
@@ -1268,7 +1274,6 @@
         assert(mhs.size() == 11);  // current number of methods
         return mhs.toArray(new MethodHandle[MAX_ARITY+1]);
     }
-    private static final MethodHandle[] ARRAYS = makeArrays();
 
     // filling versions of the above:
     // using Integer len instead of int len and no varargs to avoid bootstrapping problems
@@ -1315,6 +1320,9 @@
                                   Object a4, Object a5, Object a6, Object a7,
                                   Object a8, Object a9)
                 { fillWithArguments(a, pos, a0, a1, a2, a3, a4, a5, a6, a7, a8, a9); return a; }
+
+    private static final int FILL_ARRAYS_COUNT = 11; // current number of fillArray methods
+
     private static MethodHandle[] makeFillArrays() {
         ArrayList<MethodHandle> mhs = new ArrayList<>();
         mhs.add(null);  // there is no empty fill; at least a0 is required
@@ -1323,10 +1331,9 @@
             if (mh == null)  break;
             mhs.add(mh);
         }
-        assert(mhs.size() == 11);  // current number of methods
+        assert(mhs.size() == FILL_ARRAYS_COUNT);
         return mhs.toArray(new MethodHandle[0]);
     }
-    private static final MethodHandle[] FILL_ARRAYS = makeFillArrays();
 
     private static Object copyAsPrimitiveArray(Wrapper w, Object... boxes) {
         Object a = w.makeArray(boxes.length);
@@ -1338,15 +1345,15 @@
      *  arguments and returns an Object array of them, as if for varargs.
      */
     static MethodHandle varargsArray(int nargs) {
-        MethodHandle mh = ARRAYS[nargs];
+        MethodHandle mh = Lazy.ARRAYS[nargs];
         if (mh != null)  return mh;
         mh = findCollector("array", nargs, Object[].class);
         if (mh != null)  mh = makeIntrinsic(mh, Intrinsic.NEW_ARRAY);
-        if (mh != null)  return ARRAYS[nargs] = mh;
+        if (mh != null)  return Lazy.ARRAYS[nargs] = mh;
         mh = buildVarargsArray(Lazy.MH_fillNewArray, Lazy.MH_arrayIdentity, nargs);
         assert(assertCorrectArity(mh, nargs));
         mh = makeIntrinsic(mh, Intrinsic.NEW_ARRAY);
-        return ARRAYS[nargs] = mh;
+        return Lazy.ARRAYS[nargs] = mh;
     }
 
     private static boolean assertCorrectArity(MethodHandle mh, int arity) {
@@ -1382,7 +1389,7 @@
         return mh;
     }
 
-    private static final int LEFT_ARGS = (FILL_ARRAYS.length - 1);
+    private static final int LEFT_ARGS = FILL_ARRAYS_COUNT - 1;
     private static final MethodHandle[] FILL_ARRAY_TO_RIGHT = new MethodHandle[MAX_ARITY+1];
     /** fill_array_to_right(N).invoke(a, argL..arg[N-1])
      *  fills a[L]..a[N-1] with corresponding arguments,
@@ -1413,7 +1420,7 @@
         if (midLen < LEFT_ARGS) rightLen = nargs - (midLen = LEFT_ARGS);
         assert(rightLen > 0);
         MethodHandle midFill = fillToRight(midLen);  // recursive fill
-        MethodHandle rightFill = FILL_ARRAYS[rightLen].bindTo(midLen);  // [midLen..nargs-1]
+        MethodHandle rightFill = Lazy.FILL_ARRAYS[rightLen].bindTo(midLen);  // [midLen..nargs-1]
         assert(midFill.type().parameterCount()   == 1 + midLen - LEFT_ARGS);
         assert(rightFill.type().parameterCount() == 1 + rightLen);
 
--- a/src/java.base/share/classes/java/lang/invoke/MethodType.java	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.base/share/classes/java/lang/invoke/MethodType.java	Thu Oct 16 14:14:57 2014 -0700
@@ -727,7 +727,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() {
--- a/src/java.base/share/classes/java/net/AbstractPlainDatagramSocketImpl.java	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.base/share/classes/java/net/AbstractPlainDatagramSocketImpl.java	Thu Oct 16 14:14:57 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();
 }
--- a/src/java.base/share/classes/java/net/DatagramSocket.java	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.base/share/classes/java/net/DatagramSocket.java	Thu Oct 16 14:14:57 2014 -0700
@@ -85,6 +85,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
@@ -144,6 +155,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
@@ -492,6 +512,7 @@
             connectedAddress = null;
             connectedPort = -1;
             connectState = ST_NOT_CONNECTED;
+            explicitFilter = false;
         }
     }
 
@@ -750,10 +771,12 @@
                     } // end of while
                 }
             }
-            if (connectState == ST_CONNECTED_NO_IMPL) {
+            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;
@@ -772,8 +795,12 @@
                     if ((!connectedAddress.equals(peekAddress)) ||
                         (connectedPort != peekPort)) {
                         // throw the packet away and silently continue
-                        DatagramPacket tmp = new DatagramPacket(new byte[1], 1);
+                        DatagramPacket tmp = new DatagramPacket(
+                                                new byte[1024], 1024);
                         getImpl().receive(tmp);
+                        if (explicitFilter) {
+                            bytesLeftToFilter -= tmp.getLength();
+                        }
                     } else {
                         stop = true;
                     }
@@ -782,6 +809,15 @@
             // If the security check succeeds, or the datagram is
             // connected then receive the packet
             getImpl().receive(p);
+            if (explicitFilter) {
+                bytesLeftToFilter -= p.getLength();
+                if (bytesLeftToFilter <= 0) {
+                    explicitFilter = false;
+                } else {
+                    // break out of filter, if there is no more data queued
+                    explicitFilter = getImpl().dataAvailable() > 0;
+                }
+            }
         }
     }
 
--- a/src/java.base/share/classes/java/net/DatagramSocketImpl.java	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.base/share/classes/java/net/DatagramSocketImpl.java	Thu Oct 16 14:14:57 2014 -0700
@@ -63,6 +63,12 @@
         return socket;
     }
 
+    int dataAvailable() {
+        // default impl returns zero, which disables the calling
+        // functionality
+        return 0;
+    }
+
     /**
      * Creates a datagram socket.
      * @exception SocketException if there is an error in the
--- a/src/java.base/share/classes/java/security/Signature.java	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.base/share/classes/java/security/Signature.java	Thu Oct 16 14:14:57 2014 -0700
@@ -604,9 +604,13 @@
      * @return the number of bytes placed into {@code outbuf}.
      *
      * @exception SignatureException if this signature object is not
-     * initialized properly, if this signature algorithm is unable to
-     * process the input data provided, or if {@code len} is less
-     * than the actual signature length.
+     *     initialized properly, if this signature algorithm is unable to
+     *     process the input data provided, or if {@code len} is less
+     *     than the actual signature length.
+     * @exception IllegalArgumentException if {@code outbuf} is {@code null},
+     *     or {@code offset} or {@code len} is less than 0, or the sum of
+     *     {@code offset} and {@code len} is greater than the length of
+     *     {@code outbuf}.
      *
      * @since 1.2
      */
@@ -615,6 +619,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");
@@ -683,9 +690,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);
@@ -733,11 +747,25 @@
      * @param len the number of bytes to use, starting at offset.
      *
      * @exception SignatureException if this signature object is not
-     * initialized properly.
+     *     initialized properly.
+     * @exception IllegalArgumentException if {@code data} is {@code null},
+     *     or {@code off} or {@code len} is less than 0, or the sum of
+     *     {@code off} and {@code len} is greater than the length of
+     *     {@code data}.
      */
     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 "
--- a/src/java.base/share/classes/java/security/cert/CertificateRevokedException.java	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.base/share/classes/java/security/cert/CertificateRevokedException.java	Thu Oct 16 14:14:57 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
@@ -84,6 +84,8 @@
      * @throws NullPointerException if {@code revocationDate},
      *    {@code reason}, {@code authority}, or
      *    {@code extensions} is {@code null}
+     * @throws ClassCastException if {@code extensions} contains an incorrectly
+     *    typed key or value
      */
     public CertificateRevokedException(Date revocationDate, CRLReason reason,
         X500Principal authority, Map<String, Extension> extensions) {
@@ -94,7 +96,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 +177,8 @@
     public String getMessage() {
         return "Certificate has been revoked, reason: "
                + reason + ", revocation date: " + revocationDate
-               + ", authority: " + authority + ", extensions: " + extensions;
+               + ", authority: " + authority + ", extension OIDs: "
+               + extensions.keySet();
     }
 
     /**
--- a/src/java.base/share/classes/java/text/DigitList.java	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.base/share/classes/java/text/DigitList.java	Thu Oct 16 14:14:57 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
@@ -290,25 +290,26 @@
 
         FloatingDecimal.BinaryToASCIIConverter fdConverter  = FloatingDecimal.getBinaryToASCIIConverter(source);
         boolean hasBeenRoundedUp = fdConverter.digitsRoundedUp();
-        boolean allDecimalDigits = fdConverter.decimalDigitsExact();
+        boolean valueExactAsDecimal = fdConverter.decimalDigitsExact();
         assert !fdConverter.isExceptional();
         String digitsString = fdConverter.toJavaFormatString();
 
         set(isNegative, digitsString,
-            hasBeenRoundedUp, allDecimalDigits,
+            hasBeenRoundedUp, valueExactAsDecimal,
             maximumDigits, fixedPoint);
     }
 
     /**
      * Generate a representation of the form DDDDD, DDDDD.DDDDD, or
      * DDDDDE+/-DDDDD.
-     * @param roundedUp Boolean value indicating if the s digits were rounded-up.
-     * @param allDecimalDigits Boolean value indicating if the digits in s are
-     * an exact decimal representation of the double that was passed.
+     * @param roundedUp whether or not rounding up has already happened.
+     * @param valueExactAsDecimal whether or not collected digits provide
+     * an exact decimal representation of the value.
      */
     private void set(boolean isNegative, String s,
-                     boolean roundedUp, boolean allDecimalDigits,
+                     boolean roundedUp, boolean valueExactAsDecimal,
                      int maximumDigits, boolean fixedPoint) {
+
         this.isNegative = isNegative;
         int len = s.length();
         char[] source = getDataChars(len);
@@ -361,7 +362,7 @@
             } else if (-decimalAt == maximumDigits) {
                 // If we round 0.0009 to 3 fractional digits, then we have to
                 // create a new one digit in the least significant location.
-                if (shouldRoundUp(0, roundedUp, allDecimalDigits)) {
+                if (shouldRoundUp(0, roundedUp, valueExactAsDecimal)) {
                     count = 1;
                     ++decimalAt;
                     digits[0] = '1';
@@ -381,25 +382,26 @@
         // Eliminate digits beyond maximum digits to be displayed.
         // Round up if appropriate.
         round(fixedPoint ? (maximumDigits + decimalAt) : maximumDigits,
-              roundedUp, allDecimalDigits);
-    }
+              roundedUp, valueExactAsDecimal);
+
+     }
 
     /**
      * Round the representation to the given number of digits.
      * @param maximumDigits The maximum number of digits to be shown.
-     * @param alreadyRounded Boolean indicating if rounding up already happened.
-     * @param allDecimalDigits Boolean indicating if the digits provide an exact
-     * representation of the value.
+     * @param alreadyRounded whether or not rounding up has already happened.
+     * @param valueExactAsDecimal whether or not collected digits provide
+     * an exact decimal representation of the value.
      *
      * Upon return, count will be less than or equal to maximumDigits.
      */
     private final void round(int maximumDigits,
                              boolean alreadyRounded,
-                             boolean allDecimalDigits) {
+                             boolean valueExactAsDecimal) {
         // Eliminate digits beyond maximum digits to be displayed.
         // Round up if appropriate.
         if (maximumDigits >= 0 && maximumDigits < count) {
-            if (shouldRoundUp(maximumDigits, alreadyRounded, allDecimalDigits)) {
+            if (shouldRoundUp(maximumDigits, alreadyRounded, valueExactAsDecimal)) {
                 // Rounding up involved incrementing digits from LSD to MSD.
                 // In most cases this is simple, but in a worst case situation
                 // (9999..99) we have to adjust the decimalAt value.
@@ -440,6 +442,9 @@
      * <code>count-1</code>.  If 0, then all digits are rounded away, and
      * this method returns true if a one should be generated (e.g., formatting
      * 0.09 with "#.#").
+     * @param alreadyRounded whether or not rounding up has already happened.
+     * @param valueExactAsDecimal whether or not collected digits provide
+     * an exact decimal representation of the value.
      * @exception ArithmeticException if rounding is needed with rounding
      *            mode being set to RoundingMode.UNNECESSARY
      * @return true if digit <code>maximumDigits-1</code> should be
@@ -447,7 +452,7 @@
      */
     private boolean shouldRoundUp(int maximumDigits,
                                   boolean alreadyRounded,
-                                  boolean allDecimalDigits) {
+                                  boolean valueExactAsDecimal) {
         if (maximumDigits < count) {
             /*
              * To avoid erroneous double-rounding or truncation when converting
@@ -460,7 +465,7 @@
              *   account what FloatingDecimal has done in the binary to decimal
              *   conversion.
              *
-             *   Considering the tie cases, FloatingDecimal may round-up the
+             *   Considering the tie cases, FloatingDecimal may round up the
              *   value (returning decimal digits equal to tie when it is below),
              *   or "truncate" the value to the tie while value is above it,
              *   or provide the exact decimal digits when the binary value can be
@@ -490,7 +495,7 @@
              *
              * - For other numbers that are always converted to exact digits
              *   (like BigInteger, Long, ...), the passed alreadyRounded boolean
-             *   have to be  set to false, and allDecimalDigits has to be set to
+             *   have to be  set to false, and valueExactAsDecimal has to be set to
              *   true in the upper DigitList call stack, providing the right state
              *   for those situations..
              */
@@ -520,42 +525,31 @@
                 }
                 break;
             case HALF_UP:
-                if (digits[maximumDigits] >= '5') {
-                    // We should not round up if the rounding digits position is
-                    // exactly the last index and if digits were already rounded.
-                    if ((maximumDigits == (count - 1)) &&
-                        (alreadyRounded))
-                        return false;
-
-                    // Value was exactly at or was above tie. We must round up.
-                    return true;
-                }
-                break;
             case HALF_DOWN:
                 if (digits[maximumDigits] > '5') {
+                    // Value is above tie ==> must round up
                     return true;
-                } else if (digits[maximumDigits] == '5' ) {
-                    if (maximumDigits == (count - 1)) {
-                        // The rounding position is exactly the last index.
-                        if (allDecimalDigits || alreadyRounded)
-                            /* FloatingDecimal rounded up (value was below tie),
-                             * or provided the exact list of digits (value was
-                             * an exact tie). We should not round up, following
-                             * the HALF_DOWN rounding rule.
-                             */
-                            return false;
-                        else
-                            // Value was above the tie, we must round up.
-                            return true;
-                    }
-
-                    // We must round up if it gives a non null digit after '5'.
-                    for (int i=maximumDigits+1; i<count; ++i) {
-                        if (digits[i] != '0') {
-                            return true;
+                } else if (digits[maximumDigits] == '5') {
+                    // Digit at rounding position is a '5'. Tie cases.
+                    if (maximumDigits != (count - 1)) {
+                        // There are remaining digits. Above tie => must round up
+                        return true;
+                    } else {
+                        // Digit at rounding position is the last one !
+                        if (valueExactAsDecimal) {
+                            // Exact binary representation. On the tie.
+                            // Apply rounding given by roundingMode.
+                            return roundingMode == RoundingMode.HALF_UP;
+                        } else {
+                            // Not an exact binary representation.
+                            // Digit sequence either rounded up or truncated.
+                            // Round up only if it was truncated.
+                            return !alreadyRounded;
                         }
                     }
                 }
+                // Digit at rounding position is < '5' ==> no round up.
+                // Just let do the default, which is no round up (thus break).
                 break;
             case HALF_EVEN:
                 // Implement IEEE half-even rounding
@@ -569,7 +563,7 @@
                             // then we should not round up again.
                             return false;
 
-                        if (!allDecimalDigits)
+                        if (!valueExactAsDecimal)
                             // Otherwise if the digits don't represent exact value,
                             // value was above tie and FloatingDecimal truncated
                             // digits to tie. We must round up.
--- a/src/java.base/share/classes/java/util/ResourceBundle.java	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.base/share/classes/java/util/ResourceBundle.java	Thu Oct 16 14:14:57 2014 -0700
@@ -2646,7 +2646,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;
@@ -2800,7 +2803,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;
@@ -2934,6 +2940,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 {
--- a/src/java.base/share/classes/java/util/concurrent/FutureTask.java	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.base/share/classes/java/util/concurrent/FutureTask.java	Thu Oct 16 14:14:57 2014 -0700
@@ -163,7 +163,7 @@
 
     public boolean cancel(boolean mayInterruptIfRunning) {
         if (!(state == NEW &&
-              UNSAFE.compareAndSwapInt(this, stateOffset, NEW,
+              U.compareAndSwapInt(this, STATE, NEW,
                   mayInterruptIfRunning ? INTERRUPTING : CANCELLED)))
             return false;
         try {    // in case call to interrupt throws exception
@@ -173,7 +173,7 @@
                     if (t != null)
                         t.interrupt();
                 } finally { // final state
-                    UNSAFE.putOrderedInt(this, stateOffset, INTERRUPTED);
+                    U.putOrderedInt(this, STATE, INTERRUPTED);
                 }
             }
         } finally {
@@ -227,9 +227,9 @@
      * @param v the value
      */
     protected void set(V v) {
-        if (UNSAFE.compareAndSwapInt(this, stateOffset, NEW, COMPLETING)) {
+        if (U.compareAndSwapInt(this, STATE, NEW, COMPLETING)) {
             outcome = v;
-            UNSAFE.putOrderedInt(this, stateOffset, NORMAL); // final state
+            U.putOrderedInt(this, STATE, NORMAL); // final state
             finishCompletion();
         }
     }
@@ -245,17 +245,16 @@
      * @param t the cause of failure
      */
     protected void setException(Throwable t) {
-        if (UNSAFE.compareAndSwapInt(this, stateOffset, NEW, COMPLETING)) {
+        if (U.compareAndSwapInt(this, STATE, NEW, COMPLETING)) {
             outcome = t;
-            UNSAFE.putOrderedInt(this, stateOffset, EXCEPTIONAL); // final state
+            U.putOrderedInt(this, STATE, EXCEPTIONAL); // final state
             finishCompletion();
         }
     }
 
     public void run() {
         if (state != NEW ||
-            !UNSAFE.compareAndSwapObject(this, runnerOffset,
-                                         null, Thread.currentThread()))
+            !U.compareAndSwapObject(this, RUNNER, null, Thread.currentThread()))
             return;
         try {
             Callable<V> c = callable;
@@ -296,8 +295,7 @@
      */
     protected boolean runAndReset() {
         if (state != NEW ||
-            !UNSAFE.compareAndSwapObject(this, runnerOffset,
-                                         null, Thread.currentThread()))
+            !U.compareAndSwapObject(this, RUNNER, null, Thread.currentThread()))
             return false;
         boolean ran = false;
         int s = state;
@@ -364,7 +362,7 @@
     private void finishCompletion() {
         // assert state > COMPLETING;
         for (WaitNode q; (q = waiters) != null;) {
-            if (UNSAFE.compareAndSwapObject(this, waitersOffset, q, null)) {
+            if (U.compareAndSwapObject(this, WAITERS, q, null)) {
                 for (;;) {
                     Thread t = q.thread;
                     if (t != null) {
@@ -391,11 +389,18 @@
      *
      * @param timed true if use timed waits
      * @param nanos time to wait, if timed
-     * @return state upon completion
+     * @return state upon completion or at timeout
      */
     private int awaitDone(boolean timed, long nanos)
         throws InterruptedException {
-        final long deadline = timed ? System.nanoTime() + nanos : 0L;
+        // The code below is very delicate, to achieve these goals:
+        // - call nanoTime exactly once for each call to park
+        // - if nanos <= 0, return promptly without allocation or nanoTime
+        // - if nanos == Long.MIN_VALUE, don't underflow
+        // - if nanos == Long.MAX_VALUE, and nanoTime is non-monotonic
+        //   and we suffer a spurious wakeup, we will do no worse than
+        //   to park-spin for a while
+        long startTime = 0L;    // Special value 0L means not yet parked
         WaitNode q = null;
         boolean queued = false;
         for (;;) {
@@ -412,18 +417,30 @@
             }
             else if (s == COMPLETING) // cannot time out yet
                 Thread.yield();
-            else if (q == null)
+            else if (q == null) {
+                if (timed && nanos <= 0L)
+                    return s;
                 q = new WaitNode();
+            }
             else if (!queued)
-                queued = UNSAFE.compareAndSwapObject(this, waitersOffset,
-                                                     q.next = waiters, q);
+                queued = U.compareAndSwapObject(this, WAITERS,
+                                                q.next = waiters, q);
             else if (timed) {
-                nanos = deadline - System.nanoTime();
-                if (nanos <= 0L) {
-                    removeWaiter(q);
-                    return state;
+                final long parkNanos;
+                if (startTime == 0L) { // first time
+                    startTime = System.nanoTime();
+                    if (startTime == 0L)
+                        startTime = 1L;
+                    parkNanos = nanos;
+                } else {
+                    long elapsed = System.nanoTime() - startTime;
+                    if (elapsed >= nanos) {
+                        removeWaiter(q);
+                        return state;
+                    }
+                    parkNanos = nanos - elapsed;
                 }
-                LockSupport.parkNanos(this, nanos);
+                LockSupport.parkNanos(this, parkNanos);
             }
             else
                 LockSupport.park(this);
@@ -454,8 +471,7 @@
                         if (pred.thread == null) // check for race
                             continue retry;
                     }
-                    else if (!UNSAFE.compareAndSwapObject(this, waitersOffset,
-                                                          q, s))
+                    else if (!U.compareAndSwapObject(this, WAITERS, q, s))
                         continue retry;
                 }
                 break;
@@ -464,20 +480,17 @@
     }
 
     // Unsafe mechanics
-    private static final sun.misc.Unsafe UNSAFE;
-    private static final long stateOffset;
-    private static final long runnerOffset;
-    private static final long waitersOffset;
+    private static final sun.misc.Unsafe U;
+    private static final long STATE;
+    private static final long RUNNER;
+    private static final long WAITERS;
     static {
         try {
-            UNSAFE = sun.misc.Unsafe.getUnsafe();
+            U = sun.misc.Unsafe.getUnsafe();
             Class<?> k = FutureTask.class;
-            stateOffset = UNSAFE.objectFieldOffset
-                (k.getDeclaredField("state"));
-            runnerOffset = UNSAFE.objectFieldOffset
-                (k.getDeclaredField("runner"));
-            waitersOffset = UNSAFE.objectFieldOffset
-                (k.getDeclaredField("waiters"));
+            STATE   = U.objectFieldOffset(k.getDeclaredField("state"));
+            RUNNER  = U.objectFieldOffset(k.getDeclaredField("runner"));
+            WAITERS = U.objectFieldOffset(k.getDeclaredField("waiters"));
         } catch (Exception e) {
             throw new Error(e);
         }
--- a/src/java.base/share/classes/javax/crypto/CipherInputStream.java	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.base/share/classes/javax/crypto/CipherInputStream.java	Thu Oct 16 14:14:57 2014 -0700
@@ -107,9 +107,10 @@
             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 +121,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;
@@ -302,6 +306,7 @@
             }
         }
         catch (BadPaddingException | IllegalBlockSizeException ex) {
+            throw new IOException(ex);
         }
         ostart = 0;
         ofinish = 0;
--- a/src/java.base/share/classes/sun/invoke/util/VerifyAccess.java	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.base/share/classes/sun/invoke/util/VerifyAccess.java	Thu Oct 16 14:14:57 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) {
--- a/src/java.base/share/classes/sun/nio/ch/DatagramChannelImpl.java	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.base/share/classes/sun/nio/ch/DatagramChannelImpl.java	Thu Oct 16 14:14:57 2014 -0700
@@ -740,6 +740,25 @@
 
                     // set or refresh local address
                     localAddress = Net.localAddress(fd);
+
+                    // flush any packets already received.
+                    boolean blocking = false;
+                    synchronized (blockingLock()) {
+                        try {
+                            blocking = isBlocking();
+                            ByteBuffer tmpBuf = ByteBuffer.allocate(100);
+                            if (blocking) {
+                                configureBlocking(false);
+                            }
+                            do {
+                                tmpBuf.clear();
+                            } while (read(tmpBuf) > 0);
+                        } finally {
+                            if (blocking) {
+                                configureBlocking(true);
+                            }
+                        }
+                    }
                 }
             }
         }
--- a/src/java.base/share/classes/sun/reflect/annotation/AnnotationInvocationHandler.java	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.base/share/classes/sun/reflect/annotation/AnnotationInvocationHandler.java	Thu Oct 16 14:14:57 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()) {
--- a/src/java.base/share/classes/sun/security/provider/X509Factory.java	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.base/share/classes/sun/security/provider/X509Factory.java	Thu Oct 16 14:14:57 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
@@ -80,6 +80,7 @@
      *
      * @exception CertificateException on parsing errors.
      */
+    @Override
     public Certificate engineGenerateCertificate(InputStream is)
         throws CertificateException
     {
@@ -103,8 +104,8 @@
                 throw new IOException("Empty input");
             }
         } catch (IOException ioe) {
-            throw (CertificateException)new CertificateException
-            ("Could not parse certificate: " + ioe.toString()).initCause(ioe);
+            throw new CertificateException("Could not parse certificate: " +
+                    ioe.toString(), ioe);
         }
     }
 
@@ -140,6 +141,12 @@
      * It is useful for certificates that cannot be created via
      * generateCertificate() and for converting other X509Certificate
      * implementations to an X509CertImpl.
+     *
+     * @param c The source X509Certificate
+     * @return An X509CertImpl object that is either a cached certificate or a
+     *      newly built X509CertImpl from the provided X509Certificate
+     * @throws CertificateException if failures occur while obtaining the DER
+     *      encoding for certificate data.
      */
     public static synchronized X509CertImpl intern(X509Certificate c)
             throws CertificateException {
@@ -170,6 +177,12 @@
     /**
      * Return an interned X509CRLImpl for the given certificate.
      * For more information, see intern(X509Certificate).
+     *
+     * @param c The source X509CRL
+     * @return An X509CRLImpl object that is either a cached CRL or a
+     *      newly built X509CRLImpl from the provided X509CRL
+     * @throws CRLException if failures occur while obtaining the DER
+     *      encoding for CRL data.
      */
     public static synchronized X509CRLImpl intern(X509CRL c)
             throws CRLException {
@@ -229,6 +242,7 @@
      * @exception CertificateException if an exception occurs while decoding
      * @since 1.4
      */
+    @Override
     public CertPath engineGenerateCertPath(InputStream inStream)
         throws CertificateException
     {
@@ -260,6 +274,7 @@
      *   the encoding requested is not supported
      * @since 1.4
      */
+    @Override
     public CertPath engineGenerateCertPath(InputStream inStream,
         String encoding) throws CertificateException
     {
@@ -292,6 +307,7 @@
      * @exception CertificateException if an exception occurs
      * @since 1.4
      */
+    @Override
     public CertPath
         engineGenerateCertPath(List<? extends Certificate> certificates)
         throws CertificateException
@@ -311,6 +327,7 @@
      *         <code>CertPath</code> encodings (as <code>String</code>s)
      * @since 1.4
      */
+    @Override
     public Iterator<String> engineGetCertPathEncodings() {
         return(X509CertPath.getEncodingsStatic());
     }
@@ -326,6 +343,7 @@
      *
      * @exception CertificateException on parsing errors.
      */
+    @Override
     public Collection<? extends java.security.cert.Certificate>
             engineGenerateCertificates(InputStream is)
             throws CertificateException {
@@ -351,6 +369,7 @@
      *
      * @exception CRLException on parsing errors.
      */
+    @Override
     public CRL engineGenerateCRL(InputStream is)
         throws CRLException
     {
@@ -388,6 +407,7 @@
      *
      * @exception CRLException on parsing errors.
      */
+    @Override
     public Collection<? extends java.security.cert.CRL> engineGenerateCRLs(
             InputStream is) throws CRLException
     {
@@ -410,11 +430,30 @@
         parseX509orPKCS7Cert(InputStream is)
         throws CertificateException, IOException
     {
+        int peekByte;
+        byte[] data;
+        PushbackInputStream pbis = new PushbackInputStream(is);
         Collection<X509CertImpl> coll = new ArrayList<>();
-        byte[] data = readOneBlock(is);
+
+        // Test the InputStream for end-of-stream.  If the stream's
+        // initial state is already at end-of-stream then return
+        // an empty collection.  Otherwise, push the byte back into the
+        // stream and let readOneBlock look for the first certificate.
+        peekByte = pbis.read();
+        if (peekByte == -1) {
+            return new ArrayList<>(0);
+        } else {
+            pbis.unread(peekByte);
+            data = readOneBlock(pbis);
+        }
+
+        // If we end up with a null value after reading the first block
+        // then we know the end-of-stream has been reached and no certificate
+        // data has been found.
         if (data == null) {
-            return new ArrayList<>(0);
+            throw new CertificateException("No certificate data found");
         }
+
         try {
             PKCS7 pkcs7 = new PKCS7(data);
             X509Certificate[] certs = pkcs7.getCertificates();
@@ -422,13 +461,13 @@
             if (certs != null) {
                 return Arrays.asList(certs);
             } else {
-                // no crls provided
+                // no certificates provided
                 return new ArrayList<>(0);
             }
         } catch (ParsingException e) {
             while (data != null) {
                 coll.add(new X509CertImpl(data));
-                data = readOneBlock(is);
+                data = readOneBlock(pbis);
             }
         }
         return coll;
@@ -443,11 +482,30 @@
         parseX509orPKCS7CRL(InputStream is)
         throws CRLException, IOException
     {
+        int peekByte;
+        byte[] data;
+        PushbackInputStream pbis = new PushbackInputStream(is);
         Collection<X509CRLImpl> coll = new ArrayList<>();
-        byte[] data = readOneBlock(is);
+
+        // Test the InputStream for end-of-stream.  If the stream's
+        // initial state is already at end-of-stream then return
+        // an empty collection.  Otherwise, push the byte back into the
+        // stream and let readOneBlock look for the first CRL.
+        peekByte = pbis.read();
+        if (peekByte == -1) {
+            return new ArrayList<>(0);
+        } else {
+            pbis.unread(peekByte);
+            data = readOneBlock(pbis);
+        }
+
+        // If we end up with a null value after reading the first block
+        // then we know the end-of-stream has been reached and no CRL
+        // data has been found.
         if (data == null) {
-            return new ArrayList<>(0);
+            throw new CRLException("No CRL data found");
         }
+
         try {
             PKCS7 pkcs7 = new PKCS7(data);
             X509CRL[] crls = pkcs7.getCRLs();
@@ -461,7 +519,7 @@
         } catch (ParsingException e) {
             while (data != null) {
                 coll.add(new X509CRLImpl(data));
-                data = readOneBlock(is);
+                data = readOneBlock(pbis);
             }
         }
         return coll;
@@ -623,7 +681,7 @@
 
         int n = is.read();
         if (n == -1) {
-            throw new IOException("BER/DER length info ansent");
+            throw new IOException("BER/DER length info absent");
         }
         bout.write(n);
 
--- a/src/java.base/share/classes/sun/security/ssl/ClientHandshaker.java	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.base/share/classes/sun/security/ssl/ClientHandshaker.java	Thu Oct 16 14:14:57 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;
+    }
 }
--- a/src/java.base/share/classes/sun/security/ssl/Handshaker.java	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.base/share/classes/sun/security/ssl/Handshaker.java	Thu Oct 16 14:14:57 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);
--- a/src/java.base/share/classes/sun/security/ssl/SSLSessionImpl.java	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.base/share/classes/sun/security/ssl/SSLSessionImpl.java	Thu Oct 16 14:14:57 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
--- a/src/java.base/share/classes/sun/security/tools/keytool/Main.java	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.base/share/classes/sun/security/tools/keytool/Main.java	Thu Oct 16 14:14:57 2014 -0700
@@ -64,6 +64,7 @@
 import javax.security.auth.x500.X500Principal;
 import java.util.Base64;
 
+import sun.security.util.KeyUtil;
 import sun.security.util.ObjectIdentifier;
 import sun.security.pkcs10.PKCS10;
 import sun.security.pkcs10.PKCS10Attribute;
@@ -1103,8 +1104,13 @@
             doChangeKeyPasswd(alias);
             kssave = true;
         } else if (command == LIST) {
+            if (storePass == null
+                    && !KeyStoreUtil.isWindowsKeyStore(storetype)) {
+                printWarning();
+            }
+
             if (alias != null) {
-                doPrintEntry(alias, out, true);
+                doPrintEntry(alias, out);
             } else {
                 doPrintEntries(out);
             }
@@ -1765,15 +1771,9 @@
     /**
      * Prints a single keystore entry.
      */
-    private void doPrintEntry(String alias, PrintStream out,
-                              boolean printWarning)
+    private void doPrintEntry(String alias, PrintStream out)
         throws Exception
     {
-        if (storePass == null && printWarning
-                && !KeyStoreUtil.isWindowsKeyStore(storetype)) {
-            printWarning();
-        }
-
         if (keyStore.containsAlias(alias) == false) {
             MessageFormat form = new MessageFormat
                 (rb.getString("Alias.alias.does.not.exist"));
@@ -2090,13 +2090,6 @@
     private void doPrintEntries(PrintStream out)
         throws Exception
     {
-        if (storePass == null
-                && !KeyStoreUtil.isWindowsKeyStore(storetype)) {
-            printWarning();
-        } else {
-            out.println();
-        }
-
         out.println(rb.getString("Keystore.type.") + keyStore.getType());
         out.println(rb.getString("Keystore.provider.") +
                 keyStore.getProvider().getName());
@@ -2115,7 +2108,7 @@
         for (Enumeration<String> e = keyStore.aliases();
                                         e.hasMoreElements(); ) {
             String alias = e.nextElement();
-            doPrintEntry(alias, out, false);
+            doPrintEntry(alias, out);
             if (verbose || rfc) {
                 out.println(rb.getString("NEWLINE"));
                 out.println(rb.getString
@@ -2922,6 +2915,7 @@
 
         MessageFormat form = new MessageFormat
                 (rb.getString(".PATTERN.printX509Cert"));
+        PublicKey pkey = cert.getPublicKey();
         Object[] source = {cert.getSubjectDN().toString(),
                         cert.getIssuerDN().toString(),
                         cert.getSerialNumber().toString(16),
@@ -2931,7 +2925,9 @@
                         getCertFingerPrint("SHA1", cert),
                         getCertFingerPrint("SHA-256", cert),
                         cert.getSigAlgName(),
-                        cert.getVersion()
+                        pkey.getAlgorithm(),
+                        KeyUtil.getKeySize(pkey),
+                        cert.getVersion(),
                         };
         out.println(form.format(source));
 
--- a/src/java.base/share/classes/sun/security/tools/keytool/Resources.java	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.base/share/classes/sun/security/tools/keytool/Resources.java	Thu Oct 16 14:14:57 2014 -0700
@@ -347,7 +347,7 @@
         {".RETURN.if.same.as.for.otherAlias.",
                 "\t(RETURN if same as for <{0}>)"},
         {".PATTERN.printX509Cert",
-                "Owner: {0}\nIssuer: {1}\nSerial number: {2}\nValid from: {3} until: {4}\nCertificate fingerprints:\n\t MD5:  {5}\n\t SHA1: {6}\n\t SHA256: {7}\n\t Signature algorithm name: {8}\n\t Version: {9}"},
+                "Owner: {0}\nIssuer: {1}\nSerial number: {2}\nValid from: {3} until: {4}\nCertificate fingerprints:\n\t MD5:  {5}\n\t SHA1: {6}\n\t SHA256: {7}\nSignature algorithm name: {8}\nSubject Public Key Algorithm: {9} ({10,number,#})\nVersion: {11}"},
         {"What.is.your.first.and.last.name.",
                 "What is your first and last name?"},
         {"What.is.the.name.of.your.organizational.unit.",
--- a/src/java.base/share/classes/sun/util/locale/BaseLocale.java	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.base/share/classes/sun/util/locale/BaseLocale.java	Thu Oct 16 14:14:57 2014 -0700
@@ -31,6 +31,7 @@
  */
 
 package sun.util.locale;
+import java.lang.ref.SoftReference;
 
 import java.util.StringJoiner;
 
@@ -151,11 +152,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;
 
@@ -167,10 +168,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();
@@ -191,40 +192,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;
@@ -232,28 +233,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
@@ -266,10 +270,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);
         }
@@ -282,12 +286,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());
         }
     }
 }
--- a/src/java.base/share/classes/sun/util/locale/LocaleObjectCache.java	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.base/share/classes/sun/util/locale/LocaleObjectCache.java	Thu Oct 16 14:14:57 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;
--- a/src/java.base/share/native/include/jvm.h	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.base/share/native/include/jvm.h	Thu Oct 16 14:14:57 2014 -0700
@@ -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.
--- a/src/java.base/share/native/libjava/Class.c	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.base/share/native/libjava/Class.c	Thu Oct 16 14:14:57 2014 -0700
@@ -93,7 +93,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;
@@ -131,8 +131,7 @@
         goto done;
     }
 
-    cls = JVM_FindClassFromClassLoader(env, clname, initialize,
-                                       loader, JNI_FALSE);
+    cls = JVM_FindClassFromCaller(env, clname, initialize, loader, caller);
 
  done:
     if (clname != buf) {
--- a/src/java.base/share/native/libzip/CRC32.c	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.base/share/native/libzip/CRC32.c	Thu Oct 16 14:14:57 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);
 }
--- a/src/java.base/share/native/libzip/ZipFile.c	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.base/share/native/libzip/ZipFile.c	Thu Oct 16 14:14:57 2014 -0700
@@ -174,11 +174,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);
     }
@@ -271,7 +267,7 @@
     switch (type) {
     case java_util_zip_ZipFile_JZENTRY_NAME:
         if (ze->name != 0) {
-            len = (int)strlen(ze->name);
+            len = (int)ze->nlen;
             // Unlike for extra and comment, we never return null for
             // an (extremely rarely seen) empty name
             if ((jba = (*env)->NewByteArray(env, len)) == NULL)
--- a/src/java.base/share/native/libzip/zip_util.c	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.base/share/native/libzip/zip_util.c	Thu Oct 16 14:14:57 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:
--- a/src/java.base/share/native/libzip/zip_util.h	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.base/share/native/libzip/zip_util.h	Thu Oct 16 14:14:57 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_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java.base/unix/native/libnet/AbstractPlainDatagramSocketImpl.c	Thu Oct 16 14:14:57 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;
+}
--- a/src/java.base/windows/conf/tzmappings	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.base/windows/conf/tzmappings	Thu Oct 16 14:14:57 2014 -0700
@@ -193,5 +193,10 @@
 Turkey Standard Time:926,926::Asia/Istanbul:
 Bahia Standard Time:927,927::America/Bahia:
 Libya Standard Time:928,928:LY:Africa/Tripoli:
-Western Brazilian Standard Time:929,929:BR:America/Rio_Branco:
-Armenian Standard Time:930,930:AM:Asia/Yerevan:
+Belarus Standard Time:929,929:BY:Europe/Minsk:
+Line Islands Standard Time:930,930::Pacific/Kiritimati:
+Russia Time Zone 10:931,931::Asia/Srednekolymsk:
+Russia Time Zone 11:932,932::Asia/Anadyr:
+Russia Time Zone 3:933,933::Europe/Samara:
+Western Brazilian Standard Time:934,934:BR:America/Rio_Branco:
+Armenian Standard Time:935,935:AM:Asia/Yerevan:
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java.base/windows/native/libnet/AbstractPlainDatagramSocketImpl.c	Thu Oct 16 14:14:57 2014 -0700
@@ -0,0 +1,82 @@
+/*
+ * 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;
+
+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);
+    CHECK_NULL(IO_fd_fdID);
+
+    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;
+    int  retval;
+
+    jobject fdObj = (*env)->GetObjectField(env, this, apdsi_fdID);
+
+    if (IS_NULL(fdObj)) {
+        JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException",
+                        "Socket closed");
+        return -1;
+    }
+    fd = (SOCKET)(*env)->GetIntField(env, fdObj, IO_fd_fdID);
+
+    if (ioctlsocket(fd, FIONREAD, &retval) < 0) {
+        return -1;
+    }
+    return retval;
+}
+
--- a/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java	Thu Oct 16 14:14:57 2014 -0700
@@ -567,7 +567,10 @@
                     CWrapper.NSWindow.makeKeyWindow(nsWindowPtr);
                 }
             } else {
+                // immediately hide the window
                 CWrapper.NSWindow.orderOut(nsWindowPtr);
+                // process the close
+                CWrapper.NSWindow.close(nsWindowPtr);
             }
         } else {
             // otherwise, put it in a proper z-order
--- a/src/java.desktop/macosx/classes/sun/lwawt/macosx/CWrapper.java	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.desktop/macosx/classes/sun/lwawt/macosx/CWrapper.java	Thu Oct 16 14:14:57 2014 -0700
@@ -54,8 +54,26 @@
         static native void orderFront(long window);
         static native void orderFrontRegardless(long window);
         static native void orderWindow(long window, int ordered, long relativeTo);
+
+        /**
+         * Removes the window from the screen.
+         *
+         * @param window the pointer of the NSWindow
+         */
         static native void orderOut(long window);
 
+        /**
+         * Removes the window from the screen and releases it. According to
+         * documentation this method should be similar to {@link #orderOut},
+         * because we use ReleasedWhenClosed:NO, so the window shouldn't be
+         * released. But the close method works differently, for example it
+         * close the space if the window was in the full screen via
+         * {@link CPlatformWindow#toggleFullScreen()}.
+         *
+         * @param window the pointer of the NSWindow
+         */
+        static native void close(long window);
+
         static native void addChildWindow(long parent, long child, int ordered);
         static native void removeChildWindow(long parent, long child);
 
--- a/src/java.desktop/macosx/native/libawt_lwawt/awt/CWrapper.m	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.desktop/macosx/native/libawt_lwawt/awt/CWrapper.m	Thu Oct 16 14:14:57 2014 -0700
@@ -175,6 +175,23 @@
 
 /*
  * Class:     sun_lwawt_macosx_CWrapper$NSWindow
+ * Method:    close
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL
+Java_sun_lwawt_macosx_CWrapper_00024NSWindow_close
+        (JNIEnv *env, jclass cls, jlong windowPtr)
+{
+JNF_COCOA_ENTER(env);
+    NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr);
+    [ThreadUtilities performOnMainThreadWaiting:NO block:^(){
+        [window close];
+    }];
+JNF_COCOA_EXIT(env);
+}
+
+/*
+ * Class:     sun_lwawt_macosx_CWrapper$NSWindow
  * Method:    orderFrontRegardless
  * Signature: (J)V
  */
--- a/src/java.desktop/share/classes/com/sun/media/sound/AbstractMidiDeviceProvider.java	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.desktop/share/classes/com/sun/media/sound/AbstractMidiDeviceProvider.java	Thu Oct 16 14:14:57 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
@@ -117,7 +117,7 @@
         }
     }
 
-
+    @Override
     public final MidiDevice.Info[] getDeviceInfo() {
         readDeviceInfos();
         Info[] infos = getInfoCache();
@@ -126,7 +126,7 @@
         return localArray;
     }
 
-
+    @Override
     public final MidiDevice getDevice(MidiDevice.Info info) {
         if (info instanceof Info) {
             readDeviceInfos();
@@ -143,9 +143,7 @@
                 }
             }
         }
-
-        throw new IllegalArgumentException("MidiDevice " + info.toString()
-                                           + " not supported by this provider.");
+        throw MidiUtils.unsupportedDevice(info);
     }
 
 
--- a/src/java.desktop/share/classes/com/sun/media/sound/MidiUtils.java	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.desktop/share/classes/com/sun/media/sound/MidiUtils.java	Thu Oct 16 14:14:57 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
@@ -25,9 +25,15 @@
 
 package com.sun.media.sound;
 
-import javax.sound.midi.*;
 import java.util.ArrayList;
 
+import javax.sound.midi.MetaMessage;
+import javax.sound.midi.MidiDevice;
+import javax.sound.midi.MidiEvent;
+import javax.sound.midi.MidiMessage;
+import javax.sound.midi.Sequence;
+import javax.sound.midi.Track;
+
 // TODO:
 // - define and use a global symbolic constant for 60000000 (see convertTempo)
 
@@ -48,6 +54,17 @@
     private MidiUtils() {
     }
 
+    /**
+     * Returns an exception which should be thrown if MidiDevice is unsupported.
+     *
+     * @param  info an info object that describes the desired device
+     * @return an exception instance
+     */
+    static RuntimeException unsupportedDevice(final MidiDevice.Info info) {
+        return new IllegalArgumentException(String.format(
+                "MidiDevice %s not supported by this provider", info));
+    }
+
     /** return true if the passed message is Meta End Of Track */
     public static boolean isMetaEndOfTrack(MidiMessage midiMsg) {
         // first check if it is a META message at all
--- a/src/java.desktop/share/classes/com/sun/media/sound/RealTimeSequencer.java	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.desktop/share/classes/com/sun/media/sound/RealTimeSequencer.java	Thu Oct 16 14:14:57 2014 -0700
@@ -64,7 +64,7 @@
     /**
      * All RealTimeSequencers share this info object.
      */
-    static final RealTimeSequencerInfo info = new RealTimeSequencerInfo();
+    static final MidiDevice.Info info = new RealTimeSequencerInfo();
 
 
     private static final Sequencer.SyncMode[] masterSyncModes = { Sequencer.SyncMode.INTERNAL_CLOCK };
@@ -154,7 +154,7 @@
 
     /* ****************************** CONSTRUCTOR ****************************** */
 
-    RealTimeSequencer() throws MidiUnavailableException {
+    RealTimeSequencer(){
         super(info);
 
         if (Printer.trace) Printer.trace(">> RealTimeSequencer CONSTRUCTOR");
@@ -1088,7 +1088,7 @@
         private static final String description = "Software sequencer";
         private static final String version = "Version 1.0";
 
-        private RealTimeSequencerInfo() {
+        RealTimeSequencerInfo() {
             super(name, vendor, description, version);
         }
     } // class Info
--- a/src/java.desktop/share/classes/com/sun/media/sound/RealTimeSequencerProvider.java	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.desktop/share/classes/com/sun/media/sound/RealTimeSequencerProvider.java	Thu Oct 16 14:14:57 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
@@ -26,7 +26,6 @@
 package com.sun.media.sound;
 
 import javax.sound.midi.MidiDevice;
-import javax.sound.midi.MidiUnavailableException;
 import javax.sound.midi.spi.MidiDeviceProvider;
 
 /**
@@ -36,23 +35,16 @@
  */
 public final class RealTimeSequencerProvider extends MidiDeviceProvider {
 
-
+    @Override
     public MidiDevice.Info[] getDeviceInfo() {
-
-        MidiDevice.Info[] localArray = { RealTimeSequencer.info };
-        return localArray;
+        return new MidiDevice.Info[]{RealTimeSequencer.info};
     }
 
-
-    public MidiDevice getDevice(MidiDevice.Info info) {
-        if ((info != null) && (!info.equals(RealTimeSequencer.info))) {
-            return null;
+    @Override
+    public MidiDevice getDevice(final MidiDevice.Info info) {
+        if (RealTimeSequencer.info.equals(info)) {
+            return new RealTimeSequencer();
         }
-
-        try {
-            return new RealTimeSequencer();
-        } catch (MidiUnavailableException e) {
-            return null;
-        }
+        throw MidiUtils.unsupportedDevice(info);
     }
 }
--- a/src/java.desktop/share/classes/com/sun/media/sound/SoftProvider.java	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.desktop/share/classes/com/sun/media/sound/SoftProvider.java	Thu Oct 16 14:14:57 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
@@ -22,11 +22,10 @@
  * or visit www.oracle.com if you need additional information or have any
  * questions.
  */
+
 package com.sun.media.sound;
 
-import java.util.Arrays;
 import javax.sound.midi.MidiDevice;
-import javax.sound.midi.MidiDevice.Info;
 import javax.sound.midi.spi.MidiDeviceProvider;
 
 /**
@@ -36,17 +35,16 @@
  */
 public final class SoftProvider extends MidiDeviceProvider {
 
-    static final Info softinfo = SoftSynthesizer.info;
-    private static final Info[] softinfos = {softinfo};
-
+    @Override
     public MidiDevice.Info[] getDeviceInfo() {
-        return Arrays.copyOf(softinfos, softinfos.length);
+        return new MidiDevice.Info[]{SoftSynthesizer.info};
     }
 
-    public MidiDevice getDevice(MidiDevice.Info info) {
-        if (info == softinfo) {
+    @Override
+    public MidiDevice getDevice(final MidiDevice.Info info) {
+        if (SoftSynthesizer.info.equals(info)) {
             return new SoftSynthesizer();
         }
-        return null;
+        throw MidiUtils.unsupportedDevice(info);
     }
 }
--- a/src/java.desktop/share/classes/java/awt/GraphicsEnvironment.java	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.desktop/share/classes/java/awt/GraphicsEnvironment.java	Thu Oct 16 14:14:57 2014 -0700
@@ -182,7 +182,8 @@
                                                      "SunOS".equals(osName) ||
                                                      "FreeBSD".equals(osName) ||
                                                      "NetBSD".equals(osName) ||
-                                                     "OpenBSD".equals(osName)) &&
+                                                     "OpenBSD".equals(osName) ||
+                                                     "AIX".equals(osName)) &&
                                                      (System.getenv("DISPLAY") == null));
                             }
                         }
--- a/src/java.desktop/share/classes/javax/print/PrintServiceLookup.java	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.desktop/share/classes/javax/print/PrintServiceLookup.java	Thu Oct 16 14:14:57 2014 -0700
@@ -245,7 +245,7 @@
 
     public static boolean registerService(PrintService service) {
         synchronized (PrintServiceLookup.class) {
-            if (service instanceof StreamPrintService) {
+            if (service == null || service instanceof StreamPrintService) {
                 return false;
             }
             ArrayList<PrintService> registeredServices = getRegisteredServices();
--- a/src/java.desktop/share/classes/javax/sound/midi/MidiSystem.java	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.desktop/share/classes/javax/sound/midi/MidiSystem.java	Thu Oct 16 14:14:57 2014 -0700
@@ -31,6 +31,7 @@
 import java.io.OutputStream;
 import java.net.URL;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
@@ -162,18 +163,11 @@
      *         of length 0 is returned.
      */
     public static MidiDevice.Info[] getMidiDeviceInfo() {
-        List<MidiDevice.Info> allInfos = new ArrayList<>();
-        List<MidiDeviceProvider> providers = getMidiDeviceProviders();
-
-        for(int i = 0; i < providers.size(); i++) {
-            MidiDeviceProvider provider = providers.get(i);
-            MidiDevice.Info[] tmpinfo = provider.getDeviceInfo();
-            for (int j = 0; j < tmpinfo.length; j++) {
-                allInfos.add( tmpinfo[j] );
-            }
+        final List<MidiDevice.Info> allInfos = new ArrayList<>();
+        for (final MidiDeviceProvider provider : getMidiDeviceProviders()) {
+            Collections.addAll(allInfos, provider.getDeviceInfo());
         }
-        MidiDevice.Info[] infosArray = allInfos.toArray(new MidiDevice.Info[0]);
-        return infosArray;
+        return allInfos.toArray(new MidiDevice.Info[allInfos.size()]);
     }
 
     /**
@@ -187,17 +181,15 @@
      *         MIDI device installed on the system
      * @see #getMidiDeviceInfo
      */
-    public static MidiDevice getMidiDevice(MidiDevice.Info info) throws MidiUnavailableException {
-        List<MidiDeviceProvider> providers = getMidiDeviceProviders();
-
-        for(int i = 0; i < providers.size(); i++) {
-            MidiDeviceProvider provider = providers.get(i);
+    public static MidiDevice getMidiDevice(final MidiDevice.Info info)
+            throws MidiUnavailableException {
+        for (final MidiDeviceProvider provider : getMidiDeviceProviders()) {
             if (provider.isDeviceSupported(info)) {
-                MidiDevice device = provider.getDevice(info);
-                return device;
+                return provider.getDevice(info);
             }
         }
-        throw new IllegalArgumentException("Requested device not installed: " + info);
+        throw new IllegalArgumentException(String.format(
+                "Requested device not installed: %s", info));
     }
 
     /**
--- a/src/java.desktop/share/classes/javax/sound/midi/spi/MidiDeviceProvider.java	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.desktop/share/classes/javax/sound/midi/spi/MidiDeviceProvider.java	Thu Oct 16 14:14:57 2014 -0700
@@ -25,6 +25,8 @@
 
 package javax.sound.midi.spi;
 
+import java.util.Arrays;
+
 import javax.sound.midi.MidiDevice;
 
 /**
@@ -45,16 +47,8 @@
      * @return {@code true} if the specified device is supported, otherwise
      *         {@code false}
      */
-    public boolean isDeviceSupported(MidiDevice.Info info) {
-
-        MidiDevice.Info infos[] = getDeviceInfo();
-
-        for(int i=0; i<infos.length; i++) {
-            if( info.equals( infos[i] ) ) {
-                return true;
-            }
-        }
-        return false;
+    public boolean isDeviceSupported(final MidiDevice.Info info) {
+        return Arrays.asList(getDeviceInfo()).contains(info);
     }
 
     /**
--- a/src/java.desktop/share/classes/javax/swing/JComponent.java	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.desktop/share/classes/javax/swing/JComponent.java	Thu Oct 16 14:14:57 2014 -0700
@@ -56,6 +56,7 @@
 import java.io.IOException;
 import java.io.ObjectInputValidation;
 import java.io.InvalidObjectException;
+import java.util.concurrent.atomic.AtomicBoolean;
 
 import javax.swing.border.*;
 import javax.swing.event.*;
@@ -354,7 +355,8 @@
     private static final int AUTOSCROLLS_SET                          = 25;
     private static final int FOCUS_TRAVERSAL_KEYS_FORWARD_SET         = 26;
     private static final int FOCUS_TRAVERSAL_KEYS_BACKWARD_SET        = 27;
-    private static final int REVALIDATE_RUNNABLE_SCHEDULED            = 28;
+
+    private transient AtomicBoolean revalidateRunnableScheduled = new AtomicBoolean(false);
 
     /**
      * Temporary rectangles.
@@ -4901,16 +4903,11 @@
             // To avoid a flood of Runnables when constructing GUIs off
             // the EDT, a flag is maintained as to whether or not
             // a Runnable has been scheduled.
-            synchronized(this) {
-                if (getFlag(REVALIDATE_RUNNABLE_SCHEDULED)) {
-                    return;
-                }
-                setFlag(REVALIDATE_RUNNABLE_SCHEDULED, true);
+            if (revalidateRunnableScheduled.getAndSet(true)) {
+                return;
             }
             SunToolkit.executeOnEventHandlerThread(this, () -> {
-                synchronized(JComponent.this) {
-                    setFlag(REVALIDATE_RUNNABLE_SCHEDULED, false);
-                }
+                revalidateRunnableScheduled.set(false);
                 revalidate();
             });
         }
@@ -5567,6 +5564,7 @@
             ToolTipManager.sharedInstance().registerComponent(this);
         }
         setWriteObjCounter(this, (byte)0);
+        revalidateRunnableScheduled = new AtomicBoolean(false);
     }
 
 
--- a/src/java.desktop/share/classes/javax/swing/JTable.java	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.desktop/share/classes/javax/swing/JTable.java	Thu Oct 16 14:14:57 2014 -0700
@@ -3688,17 +3688,17 @@
 //
 
     /**
-     * Sets the data model for this table to <code>newModel</code> and registers
+     * Sets the data model for this table to {@code dataModel} and registers
      * with it for listener notifications from the new data model.
      *
-     * @param   dataModel        the new data source for this table
-     * @exception IllegalArgumentException      if <code>newModel</code> is <code>null</code>
-     * @see     #getModel
+     * @param  dataModel the new data source for this table
+     * @throws IllegalArgumentException if {@code dataModel} is {@code null}
+     * @see #getModel
      * @beaninfo
      *  bound: true
      *  description: The model that is the source of the data for this view.
      */
-    public void setModel(TableModel dataModel) {
+    public void setModel(final TableModel dataModel) {
         if (dataModel == null) {
             throw new IllegalArgumentException("Cannot set a null TableModel");
         }
@@ -3721,29 +3721,30 @@
     }
 
     /**
-     * Returns the <code>TableModel</code> that provides the data displayed by this
-     * <code>JTable</code>.
-     *
-     * @return  the <code>TableModel</code> that provides the data displayed by this <code>JTable</code>
-     * @see     #setModel
+     * Returns the {@code TableModel} that provides the data displayed by this
+     * {@code JTable}.
+     *
+     * @return the {@code TableModel} that provides the data displayed by this
+     *         {@code JTable}
+     * @see #setModel
      */
     public TableModel getModel() {
         return dataModel;
     }
 
     /**
-     * Sets the column model for this table to <code>newModel</code> and registers
-     * for listener notifications from the new column model. Also sets
-     * the column model of the <code>JTableHeader</code> to <code>columnModel</code>.
-     *
-     * @param   columnModel        the new data source for this table
-     * @exception IllegalArgumentException      if <code>columnModel</code> is <code>null</code>
-     * @see     #getColumnModel
+     * Sets the column model for this table to {@code columnModel} and registers
+     * for listener notifications from the new column model. Also sets the
+     * column model of the {@code JTableHeader} to {@code columnModel}.
+     *
+     * @param  columnModel the new data source for this table
+     * @throws IllegalArgumentException if {@code columnModel} is {@code null}
+     * @see #getColumnModel
      * @beaninfo
      *  bound: true
      *  description: The object governing the way columns appear in the view.
      */
-    public void setColumnModel(TableColumnModel columnModel) {
+    public void setColumnModel(final TableColumnModel columnModel) {
         if (columnModel == null) {
             throw new IllegalArgumentException("Cannot set a null ColumnModel");
         }
@@ -3766,54 +3767,55 @@
     }
 
     /**
-     * Returns the <code>TableColumnModel</code> that contains all column information
+     * Returns the {@code TableColumnModel} that contains all column information
      * of this table.
      *
-     * @return  the object that provides the column state of the table
-     * @see     #setColumnModel
+     * @return the object that provides the column state of the table
+     * @see #setColumnModel
      */
     public TableColumnModel getColumnModel() {
         return columnModel;
     }
 
     /**
-     * Sets the row selection model for this table to <code>newModel</code>
+     * Sets the row selection model for this table to {@code selectionModel}
      * and registers for listener notifications from the new selection model.
      *
-     * @param   newModel        the new selection model
-     * @exception IllegalArgumentException      if <code>newModel</code> is <code>null</code>
-     * @see     #getSelectionModel
+     * @param  selectionModel the new selection model
+     * @throws IllegalArgumentException if {@code selectionModel} is
+     *         {@code null}
+     * @see #getSelectionModel
      * @beaninfo
      *      bound: true
      *      description: The selection model for rows.
      */
-    public void setSelectionModel(ListSelectionModel newModel) {
-        if (newModel == null) {
+    public void setSelectionModel(final ListSelectionModel selectionModel) {
+        if (selectionModel == null) {
             throw new IllegalArgumentException("Cannot set a null SelectionModel");
         }
 
-        ListSelectionModel oldModel = selectionModel;
-
-        if (newModel != oldModel) {
+        ListSelectionModel oldModel = this.selectionModel;
+
+        if (selectionModel != oldModel) {
             if (oldModel != null) {
                 oldModel.removeListSelectionListener(this);
             }
 
-            selectionModel = newModel;
-            newModel.addListSelectionListener(this);
-
-            firePropertyChange("selectionModel", oldModel, newModel);
+            this.selectionModel = selectionModel;
+            selectionModel.addListSelectionListener(this);
+
+            firePropertyChange("selectionModel", oldModel, selectionModel);
             repaint();
         }
     }
 
     /**
-     * Returns the <code>ListSelectionModel</code> that is used to maintain row
+     * Returns the {@code ListSelectionModel} that is used to maintain row
      * selection state.
      *
-     * @return  the object that provides row selection state, <code>null</code>
-     *          if row selection is not allowed
-     * @see     #setSelectionModel
+     * @return the object that provides row selection state, {@code null} if row
+     *         selection is not allowed
+     * @see #setSelectionModel
      */
     public ListSelectionModel getSelectionModel() {
         return selectionModel;
--- a/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicTextUI.java	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicTextUI.java	Thu Oct 16 14:14:57 2014 -0700
@@ -1122,6 +1122,11 @@
                     Position.Bias b, int direction, Position.Bias[] biasRet)
                     throws BadLocationException{
         Document doc = editor.getDocument();
+
+        if (pos < -1 || pos > doc.getLength()) {
+            throw new BadLocationException("Invalid position", pos);
+        }
+
         if (doc instanceof AbstractDocument) {
             ((AbstractDocument)doc).readLock();
         }
@@ -1594,7 +1599,7 @@
                                              int direction,
                                              Position.Bias[] biasRet)
             throws BadLocationException {
-            if (pos < -1) {
+            if (pos < -1 || pos > getDocument().getLength()) {
                 throw new BadLocationException("invalid position", pos);
             }
             if( view != null ) {
--- a/src/java.desktop/share/classes/javax/swing/text/AsyncBoxView.java	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.desktop/share/classes/javax/swing/text/AsyncBoxView.java	Thu Oct 16 14:14:57 2014 -0700
@@ -854,7 +854,7 @@
                                          int direction,
                                          Position.Bias[] biasRet)
                                                   throws BadLocationException {
-        if (pos < -1) {
+        if (pos < -1 || pos > getDocument().getLength()) {
             throw new BadLocationException("invalid position", pos);
         }
         return Utilities.getNextVisualPositionFrom(
--- a/src/java.desktop/share/classes/javax/swing/text/CompositeView.java	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.desktop/share/classes/javax/swing/text/CompositeView.java	Thu Oct 16 14:14:57 2014 -0700
@@ -463,7 +463,7 @@
     public int getNextVisualPositionFrom(int pos, Position.Bias b, Shape a,
                                          int direction, Position.Bias[] biasRet)
       throws BadLocationException {
-        if (pos < -1) {
+        if (pos < -1 || pos > getDocument().getLength()) {
             throw new BadLocationException("invalid position", pos);
         }
         Rectangle alloc = getInsideAllocation(a);
@@ -723,6 +723,9 @@
                                                       Shape a, int direction,
                                                       Position.Bias[] biasRet)
                                                 throws BadLocationException {
+        if (pos < -1 || pos > getDocument().getLength()) {
+            throw new BadLocationException("invalid position", pos);
+        }
         return Utilities.getNextVisualPositionFrom(
                             this, pos, b, a, direction, biasRet);
     }
@@ -754,6 +757,9 @@
                                                     int direction,
                                                     Position.Bias[] biasRet)
                                                 throws BadLocationException {
+        if (pos < -1 || pos > getDocument().getLength()) {
+            throw new BadLocationException("invalid position", pos);
+        }
         return Utilities.getNextVisualPositionFrom(
                             this, pos, b, a, direction, biasRet);
     }
--- a/src/java.desktop/share/classes/javax/swing/text/GlyphView.java	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.desktop/share/classes/javax/swing/text/GlyphView.java	Thu Oct 16 14:14:57 2014 -0700
@@ -900,7 +900,7 @@
                                          Position.Bias[] biasRet)
         throws BadLocationException {
 
-        if (pos < -1) {
+        if (pos < -1 || pos > getDocument().getLength()) {
             throw new BadLocationException("invalid position", pos);
         }
         return painter.getNextVisualPositionFrom(this, pos, b, a, direction, biasRet);
--- a/src/java.desktop/share/classes/javax/swing/text/View.java	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.desktop/share/classes/javax/swing/text/View.java	Thu Oct 16 14:14:57 2014 -0700
@@ -500,7 +500,7 @@
     public int getNextVisualPositionFrom(int pos, Position.Bias b, Shape a,
                                          int direction, Position.Bias[] biasRet)
       throws BadLocationException {
-        if (pos < -1) {
+        if (pos < -1 || pos > getDocument().getLength()) {
             // -1 is a reserved value, see the code below
             throw new BadLocationException("Invalid position", pos);
         }
--- a/src/java.desktop/share/classes/sun/awt/image/BytePackedRaster.java	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.desktop/share/classes/sun/awt/image/BytePackedRaster.java	Thu Oct 16 14:14:57 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");
--- a/src/java.desktop/share/classes/sun/datatransfer/DataFlavorUtil.java	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.desktop/share/classes/sun/datatransfer/DataFlavorUtil.java	Thu Oct 16 14:14:57 2014 -0700
@@ -581,6 +581,15 @@
                     return comp;
                 }
 
+                // Next prefer text types
+                if (flavor1.isFlavorTextType()) {
+                    return 1;
+                }
+
+                if (flavor2.isFlavorTextType()) {
+                    return -1;
+                }
+
                 // Next, look for application/x-java-* types. Prefer unknown
                 // MIME types because if the user provides his own data flavor,
                 // it will likely be the most descriptive one.
--- a/src/java.desktop/share/native/libfontmanager/freetypeScaler.c	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.desktop/share/native/libfontmanager/freetypeScaler.c	Thu Oct 16 14:14:57 2014 -0700
@@ -425,7 +425,6 @@
     jobject metrics;
     jfloat ax, ay, dx, dy, bx, by, lx, ly, mx, my;
     jfloat f0 = 0.0;
-    FT_Pos bmodifier = 0;
     FTScalerContext *context =
         (FTScalerContext*) jlong_to_ptr(pScalerContext);
     FTScalerInfo *scalerInfo =
@@ -458,43 +457,38 @@
        So, we have to do adust them explicitly and stay consistent with what
        freetype does to outlines. */
 
-    /* For bolding glyphs are not just widened. Height is also changed
-       (see ftsynth.c).
-
-       TODO: In vertical direction we could do better job and adjust metrics
-       proportionally to glyoh shape. */
-    if (context->doBold) {
-        bmodifier = FT_MulFix(
-                       scalerInfo->face->units_per_EM,
-                       scalerInfo->face->size->metrics.y_scale)/24;
-    }
-
 
     /**** Note: only some metrics are affected by styling ***/
 
+    /* See https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=657854 */
+#define FT_MulFixFloatShift6(a, b) (((float) (a)) * ((float) (b)) / 65536.0 / 64.0)
+
+    /*
+     * See FreeType source code: src/base/ftobjs.c ft_recompute_scaled_metrics()
+     * http://icedtea.classpath.org/bugzilla/show_bug.cgi?id=1659
+     */
     /* ascent */
     ax = 0;
-    ay = -(jfloat) FT26Dot6ToFloat(FT_MulFix(
-                       ((jlong) scalerInfo->face->ascender + bmodifier/2),
+    ay = -(jfloat) (FT_MulFixFloatShift6(
+                       ((jlong) scalerInfo->face->ascender),
                        (jlong) scalerInfo->face->size->metrics.y_scale));
     /* descent */
     dx = 0;
-    dy = -(jfloat) FT26Dot6ToFloat(FT_MulFix(
-                       ((jlong) scalerInfo->face->descender + bmodifier/2),
+    dy = -(jfloat) (FT_MulFixFloatShift6(
+                       ((jlong) scalerInfo->face->descender),
                        (jlong) scalerInfo->face->size->metrics.y_scale));
     /* baseline */
     bx = by = 0;
 
     /* leading */
     lx = 0;
-    ly = (jfloat) FT26Dot6ToFloat(FT_MulFix(
-                      (jlong) scalerInfo->face->height + bmodifier,
+    ly = (jfloat) (FT_MulFixFloatShift6(
+                      (jlong) scalerInfo->face->height,
                       (jlong) scalerInfo->face->size->metrics.y_scale))
                   + ay - dy;
     /* max advance */
     mx = (jfloat) FT26Dot6ToFloat(
                      scalerInfo->face->size->metrics.max_advance +
-                     2*bmodifier +
                      OBLIQUE_MODIFIER(scalerInfo->face->size->metrics.height));
     my = 0;
 
--- a/src/java.desktop/share/native/libfontmanager/layout/ContextualSubstSubtables.cpp	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.desktop/share/native/libfontmanager/layout/ContextualSubstSubtables.cpp	Thu Oct 16 14:14:57 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,34 +311,44 @@
                                                                 glyphIterator->getCurrGlyphID(),
                                                                 success);
 
-        if (setClass < scSetCount && 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();
+        if (setClass < scSetCount) {
+            LEReferenceToArrayOf<Offset>
+                 subClassSetTableOffsetArrayRef(base, success, subClassSetTableOffsetArray, setClass);
+            if (LE_FAILURE(success)) { return 0; }
+            if (subClassSetTableOffsetArray[setClass] != 0) {
 
-            for (le_uint16 scRule = 0; scRule < subClassRuleCount; scRule += 1) {
-                Offset subClassRuleTableOffset =
-                    SWAPW(subClassSetTable->subClassRuleTableOffsetArray[scRule]);
-                LEReferenceTo<SubClassRuleTable>
-                     subClassRuleTable(subClassSetTable, success, subClassRuleTableOffset);
-                le_uint16 matchCount = SWAPW(subClassRuleTable->glyphCount) - 1;
-                le_uint16 substCount = SWAPW(subClassRuleTable->substCount);
+                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]);
+                    LEReferenceTo<SubClassRuleTable>
+                        subClassRuleTable(subClassSetTable, success, subClassRuleTableOffset);
+                    le_uint16 matchCount = SWAPW(subClassRuleTable->glyphCount) - 1;
+                    le_uint16 substCount = SWAPW(subClassRuleTable->substCount);
 
-                LEReferenceToArrayOf<le_uint16> classArray(base, success, subClassRuleTable->classArray, matchCount+1);
+                    LEReferenceToArrayOf<le_uint16> classArray(base, success, subClassRuleTable->classArray, matchCount+1);
 
-                if (LE_FAILURE(success)) { return 0; }
-                if (matchGlyphClasses(classArray, matchCount, glyphIterator, classDefinitionTable, success)) {
-                    LEReferenceToArrayOf<SubstitutionLookupRecord>
-                      substLookupRecordArray(base, success, (const SubstitutionLookupRecord *) &subClassRuleTable->classArray[matchCount], substCount);
+                    if (LE_FAILURE(success)) { return 0; }
+                    if (matchGlyphClasses(classArray, matchCount, glyphIterator, classDefinitionTable, success)) {
+                        LEReferenceToArrayOf<SubstitutionLookupRecord>
+                          substLookupRecordArray(base, success, (const SubstitutionLookupRecord *) &subClassRuleTable->classArray[matchCount], substCount);
 
-                    applySubstitutionLookups(lookupProcessor, substLookupRecordArray, substCount, glyphIterator, fontInstance, position, success);
+                        applySubstitutionLookups(lookupProcessor, substLookupRecordArray, substCount, glyphIterator, fontInstance, position, success);
 
-                    return matchCount + 1;
+                        return matchCount + 1;
+                    }
+
+                    glyphIterator->setCurrStreamPosition(position);
                 }
-
-                glyphIterator->setCurrStreamPosition(position);
             }
         }
 
@@ -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; }
--- a/src/java.desktop/unix/classes/sun/print/CUPSPrinter.java	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.desktop/unix/classes/sun/print/CUPSPrinter.java	Thu Oct 16 14:14:57 2014 -0700
@@ -136,7 +136,7 @@
     /**
      * Returns array of MediaSizeNames derived from PPD.
      */
-    public MediaSizeName[] getMediaSizeNames() {
+    MediaSizeName[] getMediaSizeNames() {
         initMedia();
         return cupsMediaSNames;
     }
@@ -145,7 +145,7 @@
     /**
      * Returns array of Custom MediaSizeNames derived from PPD.
      */
-    public CustomMediaSizeName[] getCustomMediaSizeNames() {
+    CustomMediaSizeName[] getCustomMediaSizeNames() {
         initMedia();
         return cupsCustomMediaSNames;
     }
@@ -157,7 +157,7 @@
     /**
      * Returns array of MediaPrintableArea derived from PPD.
      */
-    public MediaPrintableArea[] getMediaPrintableArea() {
+    MediaPrintableArea[] getMediaPrintableArea() {
         initMedia();
         return cupsMediaPrintables;
     }
@@ -165,7 +165,7 @@
     /**
      * Returns array of MediaTrays derived from PPD.
      */
-    public MediaTray[] getMediaTrays() {
+    MediaTray[] getMediaTrays() {
         initMedia();
         return cupsMediaTrays;
     }
--- a/src/java.desktop/unix/classes/sun/print/IPPPrintService.java	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.desktop/unix/classes/sun/print/IPPPrintService.java	Thu Oct 16 14:14:57 2014 -0700
@@ -1002,7 +1002,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();
@@ -1065,7 +1067,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;
     }
 
 
--- a/src/java.desktop/unix/native/common/awt/awt_util.h	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.desktop/unix/native/common/awt/awt_util.h	Thu Oct 16 14:14:57 2014 -0700
@@ -52,6 +52,8 @@
  */
 extern XErrorHandler current_native_xerror_handler;
 
+Window get_xawt_root_shell(JNIEnv *env);
+
 #endif /* !HEADLESS */
 
 #ifndef INTERSECTS
--- a/src/java.desktop/unix/native/libawt_xawt/xawt/XlibWrapper.c	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.desktop/unix/native/libawt_xawt/xawt/XlibWrapper.c	Thu Oct 16 14:14:57 2014 -0700
@@ -2011,10 +2011,14 @@
  * Toolkit thread to process PropertyNotify or SelectionNotify events.
  */
 static Bool
-secondary_loop_event(Display* dpy, XEvent* event, char* arg) {
-    return (event->type == SelectionNotify ||
-            event->type == SelectionClear  ||
-            event->type == PropertyNotify) ? True : False;
+secondary_loop_event(Display* dpy, XEvent* event, XPointer xawt_root_window) {
+    return (
+                event->type == SelectionNotify ||
+                event->type == SelectionClear  ||
+                event->type == PropertyNotify  ||
+                (event->type == ConfigureNotify
+                    && event->xany.window == *(Window*) xawt_root_window)
+            ) ? True : False;
 }
 
 
@@ -2025,8 +2029,11 @@
 
     AWT_CHECK_HAVE_LOCK_RETURN(JNI_FALSE);
     exitSecondaryLoop = False;
+    Window xawt_root_window = get_xawt_root_shell(env);
+
     while (!exitSecondaryLoop) {
-        if (XCheckIfEvent((Display*) jlong_to_ptr(display), (XEvent*) jlong_to_ptr(ptr), secondary_loop_event, NULL)) {
+        if (XCheckIfEvent((Display*) jlong_to_ptr(display),
+                (XEvent*) jlong_to_ptr(ptr), secondary_loop_event, (XPointer) &xawt_root_window)) {
             return JNI_TRUE;
         }
         timeout = (timeout < AWT_SECONDARY_LOOP_TIMEOUT) ? (timeout << 1) : AWT_SECONDARY_LOOP_TIMEOUT;
--- a/src/java.desktop/windows/native/libawt/java2d/windows/GDIRenderer.cpp	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.desktop/windows/native/libawt/java2d/windows/GDIRenderer.cpp	Thu Oct 16 14:14:57 2014 -0700
@@ -670,7 +670,7 @@
         if (ypoints != NULL) {
             pPoints = TransformPoly(xpoints, ypoints, transx, transy,
                                 tmpPts, &npoints, FALSE, FALSE);
-            env->ReleasePrimitiveArrayCritical(ypointsarray, xpoints, JNI_ABORT);
+            env->ReleasePrimitiveArrayCritical(ypointsarray, ypoints, JNI_ABORT);
         }
         env->ReleasePrimitiveArrayCritical(xpointsarray, xpoints, JNI_ABORT);
     }
--- a/src/java.desktop/windows/native/libawt/windows/awt_Component.cpp	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.desktop/windows/native/libawt/windows/awt_Component.cpp	Thu Oct 16 14:14:57 2014 -0700
@@ -3936,7 +3936,6 @@
         DASSERT(stringCls);
         CHECK_NULL(stringCls);
         clauseReading = env->NewObjectArray(cClause, stringCls, NULL);
-        env->DeleteLocalRef(stringCls);
         DASSERT(clauseReading);
         CHECK_NULL(clauseReading);
         for (int i=0; i<cClause; i++)   env->SetObjectArrayElement(clauseReading, i, rgClauseReading[i]);
--- a/src/java.desktop/windows/native/libawt/windows/awt_TextArea.cpp	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.desktop/windows/native/libawt/windows/awt_TextArea.cpp	Thu Oct 16 14:14:57 2014 -0700
@@ -47,16 +47,12 @@
 
 jfieldID AwtTextArea::scrollbarVisibilityID;
 
-WNDPROC AwtTextArea::sm_pDefWindowProc = NULL;
-
 /************************************************************************
  * AwtTextArea methods
  */
 
 AwtTextArea::AwtTextArea() {
-    m_bIgnoreEnChange = FALSE;
     m_bCanUndo        = FALSE;
-    m_hEditCtrl       = NULL;
     m_lHDeltaAccum    = 0;
     m_lVDeltaAccum    = 0;
 }
@@ -67,10 +63,6 @@
 
 void AwtTextArea::Dispose()
 {
-    if (m_hEditCtrl != NULL) {
-        VERIFY(::DestroyWindow(m_hEditCtrl));
-        m_hEditCtrl = NULL;
-    }
     AwtTextComponent::Dispose();
 }
 
@@ -91,10 +83,6 @@
     }
 }
 
-void AwtTextArea::EditGetSel(CHARRANGE &cr) {
-    SendMessage(EM_EXGETSEL, 0, reinterpret_cast<LPARAM>(&cr));
-}
-
 /* Count how many '\n's are there in jStr */
 size_t AwtTextArea::CountNewLines(JNIEnv *env, jstring jStr, size_t maxlen)
 {
@@ -149,159 +137,6 @@
     return retValue;
 }
 
-/*
- * This routine is a window procedure for the subclass of the standard edit control
- * used to generate context menu. RichEdit controls don't have built-in context menu.
- * To implement this functionality we have to create an invisible edit control and
- * forward WM_CONTEXTMENU messages from a RichEdit control to this helper edit control.
- * While the edit control context menu is active we intercept the message generated in
- * response to particular item selection and forward it back to the RichEdit control.
- * (See AwtTextArea::WmContextMenu for more details).
- */
-LRESULT
-AwtTextArea::EditProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
-
-    static BOOL bContextMenuActive = FALSE;
-
-    LRESULT retValue = 0;
-    MsgRouting mr = mrDoDefault;
-
-    DASSERT(::IsWindow(::GetParent(hWnd)));
-
-    switch (message) {
-    case WM_UNDO:
-    case WM_CUT:
-    case WM_COPY:
-    case WM_PASTE:
-    case WM_CLEAR:
-    case EM_SETSEL:
-        if (bContextMenuActive) {
-            ::SendMessage(::GetParent(hWnd), message, wParam, lParam);
-            mr = mrConsume;
-        }
-        break;
-    case WM_CONTEXTMENU:
-        bContextMenuActive = TRUE;
-        break;
-    }
-
-    if (mr == mrDoDefault) {
-        DASSERT(sm_pDefWindowProc != NULL);
-        retValue = ::CallWindowProc(sm_pDefWindowProc,
-                                    hWnd, message, wParam, lParam);
-    }
-
-    if (message == WM_CONTEXTMENU) {
-        bContextMenuActive = FALSE;
-    }
-
-    return retValue;
-}
-
-MsgRouting
-AwtTextArea::WmContextMenu(HWND hCtrl, UINT xPos, UINT yPos) {
-    /* Use the system provided edit control class to generate context menu. */
-    if (m_hEditCtrl == NULL) {
-        DWORD dwStyle = WS_CHILD;
-        DWORD dwExStyle = 0;
-        m_hEditCtrl = ::CreateWindowEx(dwExStyle,
-                                        L"EDIT",
-                                        L"TEXT",
-                                        dwStyle,
-                                        0, 0, 0, 0,
-                                        GetHWnd(),
-                                        reinterpret_cast<HMENU>(
-                                         static_cast<INT_PTR>(
-                                             CreateControlID())),
-                                        AwtToolkit::GetInstance().GetModuleHandle(),
-                                        NULL);
-        DASSERT(m_hEditCtrl != NULL);
-        if (sm_pDefWindowProc == NULL) {
-            sm_pDefWindowProc = (WNDPROC)::GetWindowLongPtr(m_hEditCtrl,
-                                                         GWLP_WNDPROC);
-        }
-        ::SetLastError(0);
-        INT_PTR ret = ::SetWindowLongPtr(m_hEditCtrl, GWLP_WNDPROC,
-                                   (INT_PTR)AwtTextArea::EditProc);
-        DASSERT(ret != 0 || ::GetLastError() == 0);
-    }
-
-    /*
-     * Tricks on the edit control to ensure that its context menu has
-     * the correct set of enabled items according to the RichEdit state.
-     */
-    ::SetWindowText(m_hEditCtrl, TEXT("TEXT"));
-
-    if (m_bCanUndo == TRUE && SendMessage(EM_CANUNDO)) {
-        /* Enable 'Undo' item. */
-        ::SendMessage(m_hEditCtrl, WM_CHAR, 'A', 0);
-    }
-
-    {
-        /*
-         * Initial selection for the edit control - (0,1).
-         * This enables 'Cut', 'Copy' and 'Delete' and 'Select All'.
-         */
-        INT nStart = 0;
-        INT nEnd = 1;
-        if (SendMessage(EM_SELECTIONTYPE) == SEL_EMPTY) {
-            /*
-             * RichEdit selection is empty - clear selection of the edit control.
-             * This disables 'Cut', 'Copy' and 'Delete'.
-             */
-            nStart = -1;
-            nEnd = 0;
-        } else {
-
-            CHARRANGE cr;
-            EditGetSel(cr);
-            /* Check if all the text is selected. */
-            if (cr.cpMin == 0) {
-
-                int len = ::GetWindowTextLength(GetHWnd());
-                if (cr.cpMin == 0 && cr.cpMax >= len) {
-                    /*
-                     * All the text is selected in RichEdit - select all the
-                     * text in the edit control. This disables 'Select All'.
-                     */
-                    nStart = 0;
-                    nEnd = -1;
-                }
-            }
-        }
-        ::SendMessage(m_hEditCtrl, EM_SETSEL, (WPARAM)nStart, (LPARAM)nEnd);
-    }
-
-    /* Disable 'Paste' item if the RichEdit control is read-only. */
-    ::SendMessage(m_hEditCtrl, EM_SETREADONLY,
-                  GetStyle() & ES_READONLY ? TRUE : FALSE, 0);
-
-    POINT p;
-    p.x = xPos;
-    p.y = yPos;
-
-    /*
-     * If the context menu is requested with SHIFT+F10 or VK_APPS key,
-     * we position its top left corner to the center of the RichEdit
-     * client rect.
-     */
-    if (p.x == -1 && p.y == -1) {
-        RECT r;
-        VERIFY(::GetClientRect(GetHWnd(), &r));
-        p.x = (r.left + r.right) / 2;
-        p.y = (r.top + r.bottom) / 2;
-        VERIFY(::ClientToScreen(GetHWnd(), &p));
-    }
-
-    // The context menu steals focus from the proxy.
-    // So, set the focus-restore flag up.
-    SetRestoreFocus(TRUE);
-    ::SendMessage(m_hEditCtrl, WM_CONTEXTMENU, (WPARAM)m_hEditCtrl, MAKELPARAM(p.x, p.y));
-    SetRestoreFocus(FALSE);
-
-    return mrConsume;
-}
-
 MsgRouting
 AwtTextArea::WmNcHitTest(UINT x, UINT y, LRESULT& retVal)
 {
@@ -314,27 +149,8 @@
 
 
 MsgRouting
-AwtTextArea::WmNotify(UINT notifyCode)
-{
-    if (notifyCode == EN_CHANGE) {
-        /*
-         * Ignore notifications if the text hasn't been changed.
-         * EN_CHANGE sent on character formatting changes as well.
-         */
-        if (m_bIgnoreEnChange == FALSE) {
-            m_bCanUndo = TRUE;
-            DoCallback("valueChanged", "()V");
-        } else {
-            m_bCanUndo = FALSE;
-        }
-    }
-    return mrDoDefault;
-}
-
-MsgRouting
 AwtTextArea::HandleEvent(MSG *msg, BOOL synthetic)
 {
-    MsgRouting returnVal;
     /*
      * RichEdit 1.0 control starts internal message loop if the
      * left mouse button is pressed while the cursor is not over
@@ -486,26 +302,6 @@
         }
         delete msg;
         return mrConsume;
-    } else if (msg->message == WM_RBUTTONUP ||
-               (msg->message == WM_SYSKEYDOWN && msg->wParam == VK_F10 &&
-                HIBYTE(::GetKeyState(VK_SHIFT)))) {
-        POINT p;
-        if (msg->message == WM_RBUTTONUP) {
-            VERIFY(::GetCursorPos(&p));
-        } else {
-            p.x = -1;
-            p.y = -1;
-        }
-
-        if (!::PostMessage(GetHWnd(), WM_CONTEXTMENU, (WPARAM)GetHWnd(),
-                           MAKELPARAM(p.x, p.y))) {
-            JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
-            JNU_ThrowInternalError(env, "Message not posted, native event queue may be full.");
-            env->ExceptionDescribe();
-            env->ExceptionClear();
-        }
-        delete msg;
-        return mrConsume;
     } else if (msg->message == WM_MOUSEWHEEL) {
         // 4417236: If there is an old version of RichEd32.dll which
         // does not provide the mouse wheel scrolling we have to
@@ -596,15 +392,7 @@
         // 4417236: end of fix
     }
 
-    /*
-     * Store the 'synthetic' parameter so that the WM_PASTE security check
-     * happens only for synthetic events.
-     */
-    m_synthetic = synthetic;
-    returnVal = AwtComponent::HandleEvent(msg, synthetic);
-    m_synthetic = FALSE;
-
-    return returnVal;
+    return AwtTextComponent::HandleEvent(msg, synthetic);
 }
 
 
--- a/src/java.desktop/windows/native/libawt/windows/awt_TextArea.h	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.desktop/windows/native/libawt/windows/awt_TextArea.h	Thu Oct 16 14:14:57 2014 -0700
@@ -57,17 +57,11 @@
     static size_t GetALength(JNIEnv* env, jstring jStr, size_t maxlen);
 
     LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam);
-    static LRESULT CALLBACK EditProc(HWND hWnd, UINT message,
-                                     WPARAM wParam, LPARAM lParam);
 
     MsgRouting WmEnable(BOOL fEnabled);
-    MsgRouting WmContextMenu(HWND hCtrl, UINT xPos, UINT yPos);
-    MsgRouting WmNotify(UINT notifyCode);
     MsgRouting WmNcHitTest(UINT x, UINT y, LRESULT &retVal);
     MsgRouting HandleEvent(MSG *msg, BOOL synthetic);
 
-    INLINE void SetIgnoreEnChange(BOOL b) { m_bIgnoreEnChange = b; }
-
     virtual BOOL InheritsNativeMouseWheelBehavior();
     virtual void Reshape(int x, int y, int w, int h);
 
@@ -81,22 +75,7 @@
 protected:
 
     void EditSetSel(CHARRANGE &cr);
-    void EditGetSel(CHARRANGE &cr);
   private:
-    // RichEdit 1.0 control generates EN_CHANGE notifications not only
-    // on text changes, but also on any character formatting change.
-    // This flag is true when the latter case is detected.
-    BOOL    m_bIgnoreEnChange;
-
-    // RichEdit 1.0 control undoes a character formatting change
-    // if it is the latest. We don't create our own undo buffer,
-    // but just prohibit undo in case if the latest operation
-    // is a formatting change.
-    BOOL    m_bCanUndo;
-
-    HWND    m_hEditCtrl;
-    static WNDPROC sm_pDefWindowProc;
-
     LONG    m_lHDeltaAccum;
     LONG    m_lVDeltaAccum;
 
--- a/src/java.desktop/windows/native/libawt/windows/awt_TextComponent.cpp	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.desktop/windows/native/libawt/windows/awt_TextComponent.cpp	Thu Oct 16 14:14:57 2014 -0700
@@ -66,6 +66,8 @@
     m_lLastPos  = -1;
     m_isLFonly        = FALSE;
     m_EOLchecked      = FALSE;
+    m_hEditCtrl       = NULL;
+    m_bIgnoreEnChange = FALSE;
 //    javaEventsMask = 0;    // accessibility support
 }
 
@@ -213,6 +215,16 @@
     return c;
 }
 
+void AwtTextComponent::Dispose()
+{
+    if (m_hEditCtrl != NULL) {
+        VERIFY(::DestroyWindow(m_hEditCtrl));
+        m_hEditCtrl = NULL;
+    }
+    AwtComponent::Dispose();
+}
+
+
 LRESULT
 AwtTextComponent::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) {
 
@@ -322,7 +334,16 @@
 AwtTextComponent::WmNotify(UINT notifyCode)
 {
     if (notifyCode == EN_CHANGE) {
-      DoCallback("valueChanged", "()V");
+        /*
+         * Ignore notifications if the text hasn't been changed.
+         * EN_CHANGE sent on character formatting changes as well.
+         */
+        if (m_bIgnoreEnChange == FALSE) {
+            m_bCanUndo = TRUE;
+            DoCallback("valueChanged", "()V");
+        } else {
+            m_bCanUndo = FALSE;
+        }
     }
     return mrDoDefault;
 }
@@ -337,6 +358,28 @@
 {
     MsgRouting returnVal;
 
+    if (msg->message == WM_RBUTTONUP ||
+               (msg->message == WM_SYSKEYDOWN && msg->wParam == VK_F10 &&
+                HIBYTE(::GetKeyState(VK_SHIFT)))) {
+        POINT p;
+        if (msg->message == WM_RBUTTONUP) {
+            VERIFY(::GetCursorPos(&p));
+        } else {
+            p.x = -1;
+            p.y = -1;
+        }
+
+        if (!::PostMessage(GetHWnd(), WM_CONTEXTMENU, (WPARAM)GetHWnd(),
+                           MAKELPARAM(p.x, p.y))) {
+            JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
+            JNU_ThrowInternalError(env, "Message not posted, native event queue may be full.");
+            env->ExceptionDescribe();
+            env->ExceptionClear();
+        }
+        delete msg;
+        return mrConsume;
+    }
+
     /*
      * Store the 'synthetic' parameter so that the WM_PASTE security check
      * happens only for synthetic events.
@@ -701,6 +744,10 @@
     SendMessage(EM_SETBKGNDCOLOR, (WPARAM)FALSE, (LPARAM)GetBackgroundColor());
 }
 
+void AwtTextComponent::EditGetSel(CHARRANGE &cr) {
+    SendMessage(EM_EXGETSEL, 0, reinterpret_cast<LPARAM>(&cr));
+}
+
 
 /************************************************************************
  * WTextComponentPeer native methods
@@ -983,6 +1030,161 @@
 }
 
 
+/*
+ * This routine is a window procedure for the subclass of the standard edit control
+ * used to generate context menu. RichEdit controls don't have built-in context menu.
+ * To implement this functionality we have to create an invisible edit control and
+ * forward WM_CONTEXTMENU messages from a RichEdit control to this helper edit control.
+ * While the edit control context menu is active we intercept the message generated in
+ * response to particular item selection and forward it back to the RichEdit control.
+ * (See AwtTextArea::WmContextMenu for more details).
+ */
+
+WNDPROC AwtTextComponent::sm_pDefWindowProc = NULL;
+
+LRESULT
+AwtTextComponent::EditProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
+
+    static BOOL bContextMenuActive = FALSE;
+
+    LRESULT retValue = 0;
+    MsgRouting mr = mrDoDefault;
+
+    DASSERT(::IsWindow(::GetParent(hWnd)));
+
+    switch (message) {
+    case WM_UNDO:
+    case WM_CUT:
+    case WM_COPY:
+    case WM_PASTE:
+    case WM_CLEAR:
+    case EM_SETSEL:
+        if (bContextMenuActive) {
+            ::SendMessage(::GetParent(hWnd), message, wParam, lParam);
+            mr = mrConsume;
+        }
+        break;
+    case WM_CONTEXTMENU:
+        bContextMenuActive = TRUE;
+        break;
+    }
+
+    if (mr == mrDoDefault) {
+        DASSERT(sm_pDefWindowProc != NULL);
+        retValue = ::CallWindowProc(sm_pDefWindowProc,
+                                    hWnd, message, wParam, lParam);
+    }
+
+    if (message == WM_CONTEXTMENU) {
+        bContextMenuActive = FALSE;
+    }
+
+    return retValue;
+}
+
+MsgRouting
+AwtTextComponent::WmContextMenu(HWND hCtrl, UINT xPos, UINT yPos) {
+    /* Use the system provided edit control class to generate context menu. */
+    if (m_hEditCtrl == NULL) {
+        DWORD dwStyle = WS_CHILD;
+        DWORD dwExStyle = 0;
+        m_hEditCtrl = ::CreateWindowEx(dwExStyle,
+                                        L"EDIT",
+                                        L"TEXT",
+                                        dwStyle,
+                                        0, 0, 0, 0,
+                                        GetHWnd(),
+                                        reinterpret_cast<HMENU>(
+                                         static_cast<INT_PTR>(
+                                             CreateControlID())),
+                                        AwtToolkit::GetInstance().GetModuleHandle(),
+                                        NULL);
+        DASSERT(m_hEditCtrl != NULL);
+        if (sm_pDefWindowProc == NULL) {
+            sm_pDefWindowProc = (WNDPROC)::GetWindowLongPtr(m_hEditCtrl,
+                                                         GWLP_WNDPROC);
+        }
+        ::SetLastError(0);
+        INT_PTR ret = ::SetWindowLongPtr(m_hEditCtrl, GWLP_WNDPROC,
+                                   (INT_PTR)AwtTextArea::EditProc);
+        DASSERT(ret != 0 || ::GetLastError() == 0);
+    }
+
+    /*
+     * Tricks on the edit control to ensure that its context menu has
+     * the correct set of enabled items according to the RichEdit state.
+     */
+    ::SetWindowText(m_hEditCtrl, TEXT("TEXT"));
+
+    if (m_bCanUndo == TRUE && SendMessage(EM_CANUNDO)) {
+        /* Enable 'Undo' item. */
+        ::SendMessage(m_hEditCtrl, WM_CHAR, 'A', 0);
+    }
+
+    {
+        /*
+         * Initial selection for the edit control - (0,1).
+         * This enables 'Cut', 'Copy' and 'Delete' and 'Select All'.
+         */
+        INT nStart = 0;
+        INT nEnd = 1;
+        if (SendMessage(EM_SELECTIONTYPE) == SEL_EMPTY) {
+            /*
+             * RichEdit selection is empty - clear selection of the edit control.
+             * This disables 'Cut', 'Copy' and 'Delete'.
+             */
+            nStart = -1;
+            nEnd = 0;
+        } else {
+
+            CHARRANGE cr;
+            EditGetSel(cr);
+            /* Check if all the text is selected. */
+            if (cr.cpMin == 0) {
+
+                int len = ::GetWindowTextLength(GetHWnd());
+                if (cr.cpMin == 0 && cr.cpMax >= len) {
+                    /*
+                     * All the text is selected in RichEdit - select all the
+                     * text in the edit control. This disables 'Select All'.
+                     */
+                    nStart = 0;
+                    nEnd = -1;
+                }
+            }
+        }
+        ::SendMessage(m_hEditCtrl, EM_SETSEL, (WPARAM)nStart, (LPARAM)nEnd);
+    }
+
+    /* Disable 'Paste' item if the RichEdit control is read-only. */
+    ::SendMessage(m_hEditCtrl, EM_SETREADONLY,
+                  GetStyle() & ES_READONLY ? TRUE : FALSE, 0);
+
+    POINT p;
+    p.x = xPos;
+    p.y = yPos;
+
+    /*
+     * If the context menu is requested with SHIFT+F10 or VK_APPS key,
+     * we position its top left corner to the center of the RichEdit
+     * client rect.
+     */
+    if (p.x == -1 && p.y == -1) {
+        RECT r;
+        VERIFY(::GetClientRect(GetHWnd(), &r));
+        p.x = (r.left + r.right) / 2;
+        p.y = (r.top + r.bottom) / 2;
+        VERIFY(::ClientToScreen(GetHWnd(), &p));
+    }
+
+    // The context menu steals focus from the proxy.
+    // So, set the focus-restore flag up.
+    SetRestoreFocus(TRUE);
+    ::SendMessage(m_hEditCtrl, WM_CONTEXTMENU, (WPARAM)m_hEditCtrl, MAKELPARAM(p.x, p.y));
+    SetRestoreFocus(FALSE);
+
+    return mrConsume;
+}
 
 //
 // Accessibility support
--- a/src/java.desktop/windows/native/libawt/windows/awt_TextComponent.h	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.desktop/windows/native/libawt/windows/awt_TextComponent.h	Thu Oct 16 14:14:57 2014 -0700
@@ -47,6 +47,8 @@
 
     static AwtTextComponent* Create(jobject self, jobject parent, BOOL isMultiline);
 
+    virtual void Dispose();
+
     virtual LPCTSTR GetClassName();
     LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam);
 
@@ -83,6 +85,8 @@
     MsgRouting HandleEvent(MSG *msg, BOOL synthetic);
     MsgRouting WmPaste();
 
+    INLINE void SetIgnoreEnChange(BOOL b) { m_bIgnoreEnChange = b; }
+
     virtual BOOL IsFocusingMouseMessage(MSG *pMsg);
 
 /*  To be fully implemented in a future release
@@ -115,11 +119,24 @@
     INLINE VOID SetEndSelectionPos(LONG lPos) { m_lEndPos = lPos; }
     INLINE VOID SetLastSelectionPos(LONG lPos) { m_lLastPos = lPos; }
 
+    void EditGetSel(CHARRANGE &cr);
+
     // Used to prevent untrusted code from synthesizing a WM_PASTE message
     // by posting a <CTRL>-V KeyEvent
     BOOL    m_synthetic;
     LONG EditGetCharFromPos(POINT& pt);
 
+    // RichEdit 1.0 control generates EN_CHANGE notifications not only
+    // on text changes, but also on any character formatting change.
+    // This flag is true when the latter case is detected.
+    BOOL    m_bIgnoreEnChange;
+
+    // RichEdit 1.0 control undoes a character formatting change
+    // if it is the latest. We don't create our own undo buffer,
+    // but just prohibit undo in case if the latest operation
+    // is a formatting change.
+    BOOL    m_bCanUndo;
+
     /*****************************************************************
      * Inner class OleCallback declaration.
      */
@@ -166,6 +183,13 @@
 
     static OleCallback sm_oleCallback;
 
+    static WNDPROC sm_pDefWindowProc;
+    HWND    m_hEditCtrl;
+
+    static LRESULT CALLBACK EditProc(HWND hWnd, UINT message,
+                                     WPARAM wParam, LPARAM lParam);
+    MsgRouting WmContextMenu(HWND hCtrl, UINT xPos, UINT yPos);
+
     //
     // Accessibility support
     //
--- a/src/java.desktop/windows/native/libawt/windows/awt_TextField.cpp	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.desktop/windows/native/libawt/windows/awt_TextField.cpp	Thu Oct 16 14:14:57 2014 -0700
@@ -249,13 +249,7 @@
         }
     }
 
-    /*
-     * Store the 'synthetic' parameter so that the WM_PASTE security check
-     * happens only for synthetic events.
-     */
-    m_synthetic = synthetic;
-    returnVal = AwtComponent::HandleEvent(msg, synthetic);
-    m_synthetic = FALSE;
+    returnVal = AwtTextComponent::HandleEvent(msg, synthetic);
 
     if(systemBeeperEnabled){
         SystemParametersInfo(SPI_SETBEEP, 1, NULL, 0);
--- a/src/java.desktop/windows/native/libsplashscreen/splashscreen_sys.c	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.desktop/windows/native/libsplashscreen/splashscreen_sys.c	Thu Oct 16 14:14:57 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) {
--- a/src/java.logging/share/classes/java/util/logging/LogRecord.java	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.logging/share/classes/java/util/logging/LogRecord.java	Thu Oct 16 14:14:57 2014 -0700
@@ -509,7 +509,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.
--- a/src/java.logging/share/classes/java/util/logging/Logger.java	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.logging/share/classes/java/util/logging/Logger.java	Thu Oct 16 14:14:57 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
@@ -1937,6 +1937,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
@@ -2170,11 +2173,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();
         }
--- a/src/java.naming/share/classes/javax/naming/spi/NamingManager.java	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.naming/share/classes/javax/naming/spi/NamingManager.java	Thu Oct 16 14:14:57 2014 -0700
@@ -25,9 +25,7 @@
 
 package javax.naming.spi;
 
-import java.util.Enumeration;
-import java.util.Hashtable;
-import java.util.StringTokenizer;
+import java.util.*;
 import java.net.MalformedURLException;
 
 import javax.naming.*;
@@ -625,15 +623,28 @@
     /**
      * Creates an initial context using the specified environment
      * properties.
-     *<p>
-     * If an InitialContextFactoryBuilder has been installed,
-     * it is used to create the factory for creating the initial context.
-     * Otherwise, the class specified in the
-     * <tt>Context.INITIAL_CONTEXT_FACTORY</tt> environment property is used.
-     * Note that an initial context factory (an object that implements the
-     * InitialContextFactory interface) must be public and must have a
-     * public constructor that accepts no arguments.
-     *
+     * <p>
+     * This is done as follows:
+     * <ul>
+     * <li>If an InitialContextFactoryBuilder has been installed,
+     *     it is used to create the factory for creating the initial
+     *     context</li>
+     * <li>Otherwise, the class specified in the
+     *     <tt>Context.INITIAL_CONTEXT_FACTORY</tt> environment property
+     *     is used
+     *     <ul>
+     *     <li>First, the {@linkplain java.util.ServiceLoader ServiceLoader}
+     *         mechanism tries to locate an {@code InitialContextFactory}
+     *         provider using the current thread's context class loader</li>
+     *     <li>Failing that, this implementation tries to locate a suitable
+     *         {@code InitialContextFactory} using a built-in mechanism
+     *         <br>
+     *         (Note that an initial context factory (an object that implements
+     *         the InitialContextFactory interface) must be public and must have
+     *         a public constructor that accepts no arguments)</li>
+     *     </ul>
+     * </li>
+     * </ul>
      * @param env The possibly null environment properties used when
      *                  creating the context.
      * @return A non-null initial context.
@@ -649,11 +660,11 @@
      */
     public static Context getInitialContext(Hashtable<?,?> env)
         throws NamingException {
-        InitialContextFactory factory;
+        InitialContextFactory factory = null;
 
         InitialContextFactoryBuilder builder = getInitialContextFactoryBuilder();
         if (builder == null) {
-            // No factory installed, use property
+            // No builder installed, use property
             // Get initial context factory class name
 
             String className = env != null ?
@@ -666,16 +677,39 @@
                 throw ne;
             }
 
+            ServiceLoader<InitialContextFactory> loader =
+                    ServiceLoader.load(InitialContextFactory.class);
+
+            Iterator<InitialContextFactory> iterator = loader.iterator();
             try {
-                factory = (InitialContextFactory)
-                    helper.loadClass(className).newInstance();
-            } catch(Exception e) {
+                while (iterator.hasNext()) {
+                    InitialContextFactory f = iterator.next();
+                    if (f.getClass().getName().equals(className)) {
+                        factory = f;
+                        break;
+                    }
+                }
+            } catch (ServiceConfigurationError e) {
                 NoInitialContextException ne =
-                    new NoInitialContextException(
-                        "Cannot instantiate class: " + className);
+                        new NoInitialContextException(
+                                "Cannot load initial context factory "
+                                        + "'" + className + "'");
                 ne.setRootCause(e);
                 throw ne;
             }
+
+            if (factory == null) {
+                try {
+                    factory = (InitialContextFactory)
+                            helper.loadClass(className).newInstance();
+                } catch (Exception e) {
+                    NoInitialContextException ne =
+                            new NoInitialContextException(
+                                    "Cannot instantiate class: " + className);
+                    ne.setRootCause(e);
+                    throw ne;
+                }
+            }
         } else {
             factory = builder.createInitialContextFactory(env);
         }
--- a/src/java.security.jgss/share/classes/sun/security/jgss/krb5/Krb5Context.java	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.security.jgss/share/classes/sun/security/jgss/krb5/Krb5Context.java	Thu Oct 16 14:14:57 2014 -0700
@@ -244,8 +244,11 @@
      * establishment.
      */
     public final void requestCredDeleg(boolean value) throws GSSException {
-        if (state == STATE_NEW && isInitiator())
-            credDelegState  = value;
+        if (state == STATE_NEW && isInitiator()) {
+            if (myCred == null || !(myCred instanceof Krb5ProxyCredential)) {
+                credDelegState  = value;
+            }
+        }
     }
 
     /**
--- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/Init.java	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/Init.java	Thu Oct 16 14:14:57 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();
         }
     }
 
--- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/algorithms/JCEMapper.java	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/algorithms/JCEMapper.java	Thu Oct 16 14:14:57 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);
     }
 
@@ -296,8 +300,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;
     }
 
--- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/algorithms/SignatureAlgorithm.java	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/algorithms/SignatureAlgorithm.java	Thu Oct 16 14:14:57 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);
         }
--- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/c14n/Canonicalizer.java	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/c14n/Canonicalizer.java	Thu Oct 16 14:14:57 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);
 
--- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/KeyResolver.java	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/KeyResolver.java	Thu Oct 16 14:14:57 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 =
--- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/transforms/Transform.java	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/transforms/Transform.java	Thu Oct 16 14:14:57 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) {
--- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/ElementProxy.java	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/ElementProxy.java	Thu Oct 16 14:14:57 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)) {
--- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/JavaUtils.java	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/JavaUtils.java	Thu Oct 16 14:14:57 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
     }
@@ -147,6 +152,23 @@
     }
 
     /**
+     * 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);
+        }
+    }
+
+    /**
      * Converts an ASN.1 DSA value to a XML Signature DSA Value.
      *
      * The JCE DSA Signature algorithm creates ASN.1 encoded (r,s) value
--- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/XMLUtils.java	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/XMLUtils.java	Thu Oct 16 14:14:57 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;
     }
 
--- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/ResourceResolver.java	Thu Oct 16 12:02:05 2014 -0700
+++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/ResourceResolver.java	Thu Oct 16 14:14:57 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));
--- a/test/com/sun/tools/attach/StartManagementAgent.java	Thu Oct 16 12:02:05 2014 -0700
+++ b/test/com/sun/tools/attach/StartManagementAgent.java	Thu Oct 16 14:14:57 2014 -0700
@@ -53,7 +53,9 @@
     public static void main(String[] args) throws Throwable {
         ProcessThread processThread = null;
         try {
+            System.out.println("Starting test application");
             processThread = RunnerUtil.startApplication();
+            System.out.println("Application started");
             runTests(processThread.getPid());
         } catch (Throwable t) {
             System.out.println("StartManagementAgent got unexpected exception: " + t);
@@ -70,6 +72,7 @@
         // Try calling with null argument
         boolean exception = false;
         try {
+            System.out.println("Starting management agent with null");
             vm.startManagementAgent(null);
         } catch (NullPointerException e) {
             exception = true;
@@ -86,6 +89,7 @@
         }
         p.put("com.sun.management.config.file", f.getAbsolutePath());
         try {
+            System.out.println("Starting management agent with bogus port");
             vm.startManagementAgent(p);
         } catch(AttachOperationFailedException ex) {
             // We expect parsing of "apa" above to fail, but if the file path
@@ -93,6 +97,9 @@
             if (!ex.getMessage().contains("Invalid com.sun.management.jmxremote.port number")) {
                 throw ex;
             }
+            ex.printStackTrace(System.err);
+        } catch (Throwable t) {
+            t.printStackTrace(System.err);
         }
     }
 
@@ -134,14 +141,19 @@
     }
 
     public static void testLocalAgent(VirtualMachine vm) throws Exception {
+        System.out.println("Getting VM properties");
         Properties agentProps = vm.getAgentProperties();
         String address = (String) agentProps.get(LOCAL_CONNECTOR_ADDRESS_PROP);
         if (address != null) {
             throw new Exception("Local management agent already started");
         }
 
+        System.out.println("Starting local agent");
+
         String result = vm.startLocalManagementAgent();
 
+        System.out.println("Agent started");
+
         // try to parse the return value as a JMXServiceURL
         new JMXServiceURL(result);
 
--- a/test/java/awt/Focus/SortingFPT/JDK8048887.java	Thu Oct 16 12:02:05 2014 -0700
+++ b/test/java/awt/Focus/SortingFPT/JDK8048887.java	Thu Oct 16 14:14:57 2014 -0700
@@ -26,7 +26,7 @@
   @bug       8048887
   @summary   Tests SortingFTP for an exception caused by the tim-sort algo.
   @author    anton.tarasov: area=awt.focus
-  @run       main JDK8040632
+  @run       main JDK8048887
 */
 
 import javax.swing.JFrame;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/awt/GraphicsEnvironment/TestDetectHeadless/TestDetectHeadless.java	Thu Oct 16 14:14:57 2014 -0700
@@ -0,0 +1,32 @@
+/*
+ * 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.
+ */
+
+/*
+ * Portions Copyright (c) 2014 IBM Corporation
+ */
+
+public class TestDetectHeadless {
+    public static void main(String[] args) throws Exception {
+        Class.forName("javax.swing.plaf.basic.BasicInternalFrameTitlePane");
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/awt/GraphicsEnvironment/TestDetectHeadless/TestDetectHeadless.sh	Thu Oct 16 14:14:57 2014 -0700
@@ -0,0 +1,47 @@
+#!/bin/sh
+
+#
+# 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.
+#
+
+#
+# Portions Copyright (c) 2014 IBM Corporation
+#
+
+# @test
+# @bug 8058930
+# @summary java.awt.GraphicsEnvironment.getHeadlessProperty() does not work for AIX
+#
+# @build TestDetectHeadless
+# @run shell TestDetectHeadless.sh
+
+OS=`uname -s`
+case "$OS" in
+    Windows* | CYGWIN* )
+        echo "Passed"; exit 0 ;;
+    * ) unset DISPLAY ;;
+esac
+
+${TESTJAVA}/bin/java ${TESTVMOPTS} \
+    -cp ${TESTCLASSES} TestDetectHeadless
+
+exit $?
--- a/test/java/lang/invoke/LFCaching/LambdaFormTestCase.java	Thu Oct 16 12:02:05 2014 -0700
+++ b/test/java/lang/invoke/LFCaching/LambdaFormTestCase.java	Thu Oct 16 14:14:57 2014 -0700
@@ -22,6 +22,8 @@
  */
 
 import com.oracle.testlibrary.jsr292.Helper;
+import com.sun.management.HotSpotDiagnosticMXBean;
+import java.lang.management.ManagementFactory;
 import java.lang.reflect.Method;
 import java.util.Collection;
 import java.util.function.Function;
@@ -37,6 +39,8 @@
 
     private final static String METHOD_HANDLE_CLASS_NAME = "java.lang.invoke.MethodHandle";
     private final static String INTERNAL_FORM_METHOD_NAME = "internalForm";
+    private static final double ITERATIONS_TO_CODE_CACHE_SIZE_RATIO
+            = 45 / (128.0 * 1024 * 1024);
 
     /**
      * Reflection link to {@code j.l.i.MethodHandle.internalForm} method. It is
@@ -87,7 +91,35 @@
         boolean passed = true;
         int testCounter = 0;
         int failCounter = 0;
-        long iterations = Math.max(1, Helper.TEST_LIMIT / testMethods.size());
+        long testCaseNum = testMethods.size();
+        long iterations = Math.max(1, Helper.TEST_LIMIT / testCaseNum);
+        System.out.printf("Number of iterations according to -DtestLimit is %d (%d cases)%n",
+                iterations, iterations * testCaseNum);
+        HotSpotDiagnosticMXBean hsDiagBean = ManagementFactory.getPlatformMXBean(HotSpotDiagnosticMXBean.class);
+        long codeCacheSize = Long.parseLong(
+                hsDiagBean.getVMOption("ReservedCodeCacheSize").getValue());
+        System.out.printf("Code cache size is %d bytes%n", codeCacheSize);
+        long iterationsByCodeCacheSize = (long) (codeCacheSize
+                * ITERATIONS_TO_CODE_CACHE_SIZE_RATIO);
+        long nonProfiledCodeCacheSize = Long.parseLong(
+                hsDiagBean.getVMOption("NonProfiledCodeHeapSize").getValue());
+        System.out.printf("Non-profiled code cache size is %d bytes%n", nonProfiledCodeCacheSize);
+        long iterationsByNonProfiledCodeCacheSize = (long) (nonProfiledCodeCacheSize
+                * ITERATIONS_TO_CODE_CACHE_SIZE_RATIO);
+        System.out.printf("Number of iterations limited by code cache size is %d (%d cases)%n",
+                iterationsByCodeCacheSize, iterationsByCodeCacheSize * testCaseNum);
+        System.out.printf("Number of iterations limited by non-profiled code cache size is %d (%d cases)%n",
+                iterationsByNonProfiledCodeCacheSize, iterationsByNonProfiledCodeCacheSize * testCaseNum);
+        iterations = Math.min(iterationsByCodeCacheSize,
+                Math.min(iterations, iterationsByNonProfiledCodeCacheSize));
+        if (iterations == 0) {
+            System.out.println("Warning: code cache size is too small to provide at"
+                    + " least one iteration! Test will try to do one iteration.");
+            iterations = 1;
+        }
+        System.out.printf("Number of iterations is set to %d (%d cases)%n",
+                iterations, iterations * testCaseNum);
+        System.out.flush();
         for (long i = 0; i < iterations; i++) {
             System.err.println(String.format("Iteration %d:", i));
             for (TestMethods testMethod : testMethods) {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/net/SetFactoryPermission/SetFactoryPermission.java	Thu Oct 16 14:14:57 2014 -0700
@@ -0,0 +1,87 @@
+/*
+ * 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 8048052
+ * @summary Test a series of methods which requires "setFactory" runtime permission
+ * @run main SetFactoryPermission success
+ * @run main/othervm/policy=policy.fail SetFactoryPermission fail
+ * @run main/othervm/policy=policy.success SetFactoryPermission success
+ */
+import java.net.ServerSocket;
+import java.net.Socket;
+import java.net.URL;
+import java.net.URLConnection;
+import java.rmi.server.RMISocketFactory;
+import java.security.AccessControlException;
+
+public class SetFactoryPermission {
+    static boolean success = false;
+
+    interface Runner {
+        public void run() throws Exception;
+    }
+
+    public static void main (String[] args) throws Exception {
+        if (args.length > 0) {
+            success = System.getSecurityManager() == null || args[0].equals("success");
+        }
+
+        doTest(()->{
+            System.out.println("Verify URLConnection.setContentHandlerFactor()");
+            URLConnection.setContentHandlerFactory(null);
+        });
+        doTest(()->{
+            System.out.println("Verify URL.setURLStreamHandlerFactory()");
+            URL.setURLStreamHandlerFactory(null);
+        });
+        doTest(()->{
+            System.out.println("Verify ServerSocket.setSocketFactory()");
+            ServerSocket.setSocketFactory(null);
+        });
+        doTest(()->{
+            System.out.println("Verify Socket.setSocketImplFactory()");
+            Socket.setSocketImplFactory(null);
+        });
+        doTest(()->{
+            System.out.println("Verify RMISocketFactory.setSocketFactory()");
+            RMISocketFactory.setSocketFactory(null);
+        });
+    }
+
+    static void doTest(Runner func) throws Exception {
+        try {
+            func.run();
+            if (!success) {
+                throw new RuntimeException("AccessControlException is not thrown. Test failed");
+            }
+        } catch (SecurityException e) {
+            if (success) {
+                e.printStackTrace();
+                throw new RuntimeException("AccessControlException is thrown unexpectedly. Test failed");
+            }
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/net/SetFactoryPermission/policy.fail	Thu Oct 16 14:14:57 2014 -0700
@@ -0,0 +1,3 @@
+grant {
+	
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/net/SetFactoryPermission/policy.success	Thu Oct 16 14:14:57 2014 -0700
@@ -0,0 +1,4 @@
+grant {
+	permission java.lang.RuntimePermission "setFactory";
+};
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/net/SocketPermission/SocketPermissionTest.java	Thu Oct 16 14:14:57 2014 -0700
@@ -0,0 +1,236 @@
+/*
+ * 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 8047031
+ * @summary SocketPermission tests for legacy socket types
+ * @library ../../../lib/testlibrary
+ * @run testng/othervm/policy=policy SocketPermissionTest
+ */
+import java.io.IOException;
+import java.net.DatagramPacket;
+import java.net.DatagramSocket;
+import java.net.InetAddress;
+import java.net.MulticastSocket;
+import java.net.ServerSocket;
+import java.net.Socket;
+import java.net.SocketPermission;
+import java.security.AccessControlContext;
+import java.security.AccessController;
+import java.security.Permission;
+import java.security.Permissions;
+import java.security.PrivilegedAction;
+import java.security.ProtectionDomain;
+import java.util.Arrays;
+import java.util.function.Function;
+import java.util.function.IntConsumer;
+import static jdk.testlibrary.Utils.getFreePort;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+
+public class SocketPermissionTest {
+    private int freePort = -1;
+
+    //positive tests
+    @Test(dataProvider = "positiveProvider")
+    public void testPositive(Function<String, AccessControlContext> genAcc, IntConsumer func) {
+        String addr = "localhost:" + freePort;
+        AccessControlContext acc = genAcc.apply(addr);
+        AccessController.doPrivileged((PrivilegedAction) () -> {
+            func.accept(freePort);
+            return null;
+        }, acc);
+    }
+
+    //negative tests
+    @Test(dataProvider = "negativeProvider", expectedExceptions = SecurityException.class)
+    public void testNegative(AccessControlContext acc, IntConsumer func) {
+        AccessController.doPrivileged((PrivilegedAction) () -> {
+            func.accept(freePort);
+            return null;
+        }, acc);
+    }
+
+    @BeforeMethod
+    public void setFreePort() throws Exception {
+        freePort = getFreePort();
+    }
+
+    @DataProvider
+    public Object[][] positiveProvider() {
+        //test for SocketPermission "host:port","connect,resolve";
+        Function<String, AccessControlContext> generateAcc1 = (addr) -> getAccessControlContext(
+                new SocketPermission(addr, "listen, connect,resolve"));
+        IntConsumer func1 = (i) -> connectSocketTest(i);
+        IntConsumer func2 = (i) -> connectDatagramSocketTest(i);
+
+        //test for SocketPermission "localhost:1024-","accept";
+        Function<String, AccessControlContext> generateAcc2 = (addr) -> getAccessControlContext(
+                new SocketPermission(addr, "listen,connect,resolve"),
+                new SocketPermission("localhost:1024-", "accept"));
+        IntConsumer func3 = (i) -> acceptServerSocketTest(i);
+
+        //test for SocketPermission "229.227.226.221", "connect,accept"
+        Function<String, AccessControlContext> generateAcc3 = (addr) -> getAccessControlContext(
+                new SocketPermission(addr, "listen,resolve"),
+                new SocketPermission("229.227.226.221", "connect,accept"));
+        IntConsumer func4 = (i) -> sendDatagramPacketTest(i);
+        IntConsumer func5 = (i) -> joinGroupMulticastTest(i);
+
+        //test for SocketPermission "host:port", "listen"
+        Function<String, AccessControlContext> generateAcc4 = (addr) -> getAccessControlContext(
+                new SocketPermission(addr, "listen"));
+        IntConsumer func6 = (i) -> listenDatagramSocketTest(i);
+        IntConsumer func7 = (i) -> listenMulticastSocketTest(i);
+        IntConsumer func8 = (i) -> listenServerSocketTest(i);
+
+        return new Object[][]{
+            {generateAcc1, func1},
+            {generateAcc1, func2},
+            {generateAcc2, func3},
+            {generateAcc3, func4},
+            {generateAcc3, func5},
+            {generateAcc4, func6},
+            {generateAcc4, func7},
+            {generateAcc4, func8}
+        };
+    }
+
+    @DataProvider
+    public Object[][] negativeProvider() {
+        IntConsumer[] funcs = {i -> connectSocketTest(i),
+            i -> connectDatagramSocketTest(i), i -> acceptServerSocketTest(i),
+            i -> sendDatagramPacketTest(i), i -> joinGroupMulticastTest(i),
+            i -> listenDatagramSocketTest(i), i -> listenMulticastSocketTest(i),
+            i -> listenServerSocketTest(i)};
+        return Arrays.stream(funcs).map(f -> {
+            //Construct an AccessControlContext without SocketPermission
+            AccessControlContext acc = getAccessControlContext(
+                    new java.io.FilePermission("<<ALL FILES>>", "read,write,execute,delete"),
+                    new java.net.NetPermission("*"),
+                    new java.util.PropertyPermission("*", "read,write"),
+                    new java.lang.reflect.ReflectPermission("*"),
+                    new java.lang.RuntimePermission("*"),
+                    new java.security.SecurityPermission("*"),
+                    new java.io.SerializablePermission("*"));
+            return new Object[]{acc, f};
+        }).toArray(Object[][]::new);
+    }
+
+    public void connectSocketTest(int port) {
+        try (ServerSocket server = new ServerSocket(port);
+                Socket client = new Socket(InetAddress.getLocalHost(), port);) {
+        } catch (IOException ex) {
+            throw new RuntimeException(ex);
+        }
+    }
+
+    public void connectDatagramSocketTest(int port) {
+        String msg = "Hello";
+        try {
+            InetAddress me = InetAddress.getLocalHost();
+            try (DatagramSocket ds = new DatagramSocket(port, me)) {
+                DatagramPacket dp = new DatagramPacket(msg.getBytes(),
+                        msg.length(), me, port);
+                ds.send(dp);
+            }
+        } catch (IOException ex) {
+            throw new RuntimeException(ex);
+        }
+    }
+
+    public void acceptServerSocketTest(int port) {
+        try {
+            InetAddress me = InetAddress.getLocalHost();
+            try (ServerSocket server = new ServerSocket(port)) {
+                Socket client = new Socket(me, port);
+                server.accept();
+            }
+        } catch (IOException ex) {
+            throw new RuntimeException(ex);
+        }
+    }
+
+    public static void sendDatagramPacketTest(int port) {
+        String msg = "Hello";
+        try {
+            InetAddress group = InetAddress.getByName("229.227.226.221");
+            try (DatagramSocket s = new DatagramSocket(port)) {
+                DatagramPacket hi = new DatagramPacket(msg.getBytes(),
+                        msg.length(), group, port);
+                s.send(hi);
+            }
+        } catch (IOException ex) {
+            throw new RuntimeException(ex);
+        }
+    }
+
+    public void joinGroupMulticastTest(int port) {
+        try {
+            InetAddress group = InetAddress.getByName("229.227.226.221");
+            try (MulticastSocket s = new MulticastSocket(port)) {
+                s.joinGroup(group);
+                s.leaveGroup(group);
+            }
+        } catch (IOException ex) {
+            throw new RuntimeException(ex);
+        }
+    }
+
+    public void listenDatagramSocketTest(int port) {
+        try (DatagramSocket ds = new DatagramSocket(port)) {
+        } catch (IOException ex) {
+            throw new RuntimeException(ex);
+        }
+    }
+
+    public void listenMulticastSocketTest(int port) {
+        try (MulticastSocket ms = new MulticastSocket(port)) {
+        } catch (IOException ex) {
+            throw new RuntimeException(ex);
+        }
+    }
+
+    public void listenServerSocketTest(int port) {
+        try (ServerSocket ms = new ServerSocket(port)) {
+        } catch (IOException ex) {
+            throw new RuntimeException(ex);
+        }
+    }
+
+    private static AccessControlContext getAccessControlContext(Permission... ps) {
+        Permissions perms = new Permissions();
+        for (Permission p : ps) {
+            perms.add(p);
+        }
+        /*
+         *Create an AccessControlContext that consist a single protection domain
+         * with only the permissions calculated above
+         */
+        ProtectionDomain pd = new ProtectionDomain(null, perms);
+        return new AccessControlContext(new ProtectionDomain[]{pd});
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/net/SocketPermission/policy	Thu Oct 16 14:14:57 2014 -0700
@@ -0,0 +1,3 @@
+grant {
+ permission java.security.AllPermission;
+};
\ No newline at end of file
--- a/test/java/security/cert/CertificateFactory/invalidEncodedCerts/DetectInvalidEncoding.java	Thu Oct 16 12:02:05 2014 -0700
+++ b/test/java/security/cert/CertificateFactory/invalidEncodedCerts/DetectInvalidEncoding.java	Thu Oct 16 14:14:57 2014 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 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
@@ -23,27 +23,548 @@
 
 /**
  * @test
- * @bug 4776466
+ * @bug 4776466 8032573
  * @summary check that CertificateFactory rejects invalid encoded X.509 certs
  */
 
 import java.io.*;
+import java.util.Collection;
+import java.util.List;
+import java.util.LinkedList;
+import javax.security.auth.x500.X500Principal;
+import java.security.GeneralSecurityException;
 import java.security.cert.*;
 
 public class DetectInvalidEncoding {
 
+    // Originally found in the test file:
+    // java/security/cert/CertificateFactory/invalidEncodedCerts/invalidcert.pem
+    // The first character of the PEM encoding has been changed from "M" to
+    // "X" to force a failure during decoding.
+    private static final String INVALID_CERT =
+        "-----BEGIN CERTIFICATE-----\n" +
+        "XIICJjCCAdCgAwIBAgIBITANBgkqhkiG9w0BAQQFADCBqTELMAkGA1UEBhMCVVMx\n" +
+        "EzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFuY2lzY28xFTAT\n" +
+        "BgNVBAoTDEJFQSBXZWJMb2dpYzERMA8GA1UECxMIU2VjdXJpdHkxIzAhBgNVBAMT\n" +
+        "GkRlbW8gQ2VydGlmaWNhdGUgQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9zdXBw\n" +
+        "b3J0QGJlYS5jb20wHhcNMDAwNTMwMjEzODAxWhcNMDQwNTEzMjEzODAxWjCBjDEL\n" +
+        "MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG\n" +
+        "cmFuY2lzY28xFTATBgNVBAoTDEJFQSBXZWJMb2dpYzEZMBcGA1UEAxMQd2VibG9n\n" +
+        "aWMuYmVhLmNvbTEeMBwGCSqGSIb3DQEJARYPc3VwcG9ydEBiZWEuY29tMFwwDQYJ\n" +
+        "KoZIhvcNAQEBBQADSwAwSAJBALdsXEHqKHgs6zj0hU5sXMAUHzoT8kgWXmNkKHXH\n" +
+        "79qbPh6EfdlriW9G/AbRF/pKrCQu7hhllAxREbqTuSlf2EMCAwEAATANBgkqhkiG\n" +
+        "9w0BAQQFAANBACgmqflL5m5LNeJGpWx9aIoABCiuDcpw1fFyegsqGX7CBhffcruS\n" +
+        "1p8h5vkHVbMu1frD1UgGnPlOO/K7Ig/KrsU=\n" +
+        "-----END CERTIFICATE-----";
+
+    // Created with keytool:
+    // keytool -genkeypair -keyalg rsa -keysize 2048 -keystore <KS_FILE>
+    //      -alias root -sigalg SHA256withRSA -dname "CN=Root, O=SomeCompany"
+    //      -validity 730 -ext bc:critical=ca:true
+    //      -ext ku:critical=keyCertSign,cRLSign
+    private static final String SINGLE_ROOT_CERT =
+        "-----BEGIN CERTIFICATE-----\n" +
+        "MIIDCjCCAfKgAwIBAgIEDUiw+DANBgkqhkiG9w0BAQsFADAlMRQwEgYDVQQKEwtT\n" +
+        "b21lQ29tcGFueTENMAsGA1UEAxMEUm9vdDAeFw0xNDA4MjgyMTI5MjZaFw0xNjA4\n" +
+        "MjcyMTI5MjZaMCUxFDASBgNVBAoTC1NvbWVDb21wYW55MQ0wCwYDVQQDEwRSb290\n" +
+        "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0VFecSNdH6CJhPOSG127\n" +
+        "tuvld4y7GGJ0kQf3Q0b8qgprsXAmn0/bQR+YX7PfS408cFW+q2SWXeY2kC/3chvi\n" +
+        "2syMsGdUJrDzuMbYsbvKPKyuJ2GJskX3mSbLMJj5Tzhg4qmwbzDTFIJ51yGa1Wmh\n" +
+        "i2+4PhltqT0TohvSVJlBrOWNhmvwv5UWsF4e2i04rebDZQoWkmD3MpImZXF/HYre\n" +
+        "9P8NP97vN0xZmh5PySHy2ILXN3ZhTn3tq0YxNSQTaMUfhgoyzWFvZKAnm/tZIh/1\n" +
+        "oswwEQPIZJ25AUTm9r3YPQXl1hsNdLU0asEVYRsgzGSTX5gCuUY+KzhStzisOcUY\n" +
+        "uQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNV\n" +
+        "HQ4EFgQUz1FBNixG/KCgcn6FOWzxP1hujG0wDQYJKoZIhvcNAQELBQADggEBAL60\n" +
+        "ZaNc6eIMbKntGVE/pdxxyKwPdDyAAeEevX23KRWoLbQjHXo5jrfDPhI5k45ztlyU\n" +
+        "+tIQbc81LlCl88I4dIx0fvEbxjNaAYhFNXwwSQBs2CuEAdRK8hodXbRcEeI+G10F\n" +
+        "ARIVs2C7JNm/RhxskCWgj6tFIOGaTZ9gHyvlQUEM18sr5fXZlXTqspZCmz3t5XPi\n" +
+        "5/wYLv6vk7k3G8WzMHbBE0bYI+61cCc8rbMHldtymbwSwiqfKC9y7oPEfRCbzVUe\n" +
+        "fgrKcOyVWDuw0y0hhsQL/oONjPp4uK/bl9B7T84t4+ihxdocWKx6eyhFvOvZH9t2\n" +
+        "kUylb9yBUYStwGExMHg=\n" +
+        "-----END CERTIFICATE-----";
+
+    // Created with keytool:
+    // keytool -genkeypair -keyalg rsa -keysize 2048 -keystore <KS_FILE>
+    //      -alias root -sigalg SHA256withRSA
+    //      -dname "CN=Intermed, O=SomeCompany" -validity 730
+    //      -ext bc:critical=ca:true -ext ku:critical=keyCertSign,cRLSign
+    // keytool -certreq -keystore <KS_FILE> -sigalg SHA256withRSA
+    //      -alias intermed -dname "CN=Intermed, O=SomeCompany"
+    // keytool -gencert -keystore <KS_FILE> -alias intermed
+    //      -sigalg SHA256withRSA -validity 730
+    //      -ext bc:critical=ca:true -ext ku:critical=keyCertSign,cRLSign
+    private static final String INTERMED_CA_CERT =
+        "-----BEGIN CERTIFICATE-----\n" +
+        "MIIDLzCCAhegAwIBAgIEIIgOyDANBgkqhkiG9w0BAQsFADAlMRQwEgYDVQQKEwtT\n" +
+        "b21lQ29tcGFueTENMAsGA1UEAxMEUm9vdDAeFw0xNDA4MjgyMjUyNDJaFw0xNjA4\n" +
+        "MDcyMjUyNDJaMCkxFDASBgNVBAoTC1NvbWVDb21wYW55MREwDwYDVQQDEwhJbnRl\n" +
+        "cm1lZDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJEecvTWla8kdWx+\n" +
+        "HHu5ryfBpJ95I7V4MEajnmzJVZcwvKhDjlDgABDMuVwFEUUSyeOdbWJF3DLKnyMD\n" +
+        "KTx6/58kuVak3NX2TJ8cmmIlKf1upFbdrEtjYViSnNrApprfO8B3ORdBbO6QDYza\n" +
+        "IkAWdI5GllFnVkb4yhMUBg3zfhglF+bl3D3lVRlp9bCrUZoNRs+mZjhVbcMn22ej\n" +
+        "TfG5Y3VpNM4SN8dFIxPQLLk/aao+cmWEQdbQ0R6ydemRukqrw170olSVLeoGGala\n" +
+        "3D4oJckde8EgNPcghcsdQ6tpGhkpFhmoyzEsuToR7Gq9UT5V2kkqJneiKXqQg4wz\n" +
+        "vMAlUGECAwEAAaNjMGEwHwYDVR0jBBgwFoAUOw+92bevFoJz96pR1DrAkPPUKb0w\n" +
+        "DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFLbnErBs\n" +
+        "q/Mhci5XElfjjLZp3GRyMA0GCSqGSIb3DQEBCwUAA4IBAQAq8y2DpkSV31IXZ1vr\n" +
+        "/Ye+Nj/2NvBydFeHVRGMAN1LJv6/Q42TCSXbr6cDQ4NWQUtPm90yZBYJSznkbShx\n" +
+        "HOJEE6R8PRJvoUtMm7fJrNtkybTt6jX4j50Lw8gdYB/rgZb4z8ZQZVEo/0zpW4HV\n" +
+        "Gs+q4z8TkdmLR18hl39sUEsxt99AOBk8NtKKVNfBWq9b0QDhRkXfmqhyeXdDsHOV\n" +
+        "8ksulsa7hseheHhdjziEOpQugh8qzSea2kFPrLB53VjWfa4qDzEPaNhahho9piCu\n" +
+        "82XDnOrcEk9KyHWM7sa7vtK7++W+0MXD/p9nkZ6NHrJXweLriU0DXO6ZY3mzNKJK\n" +
+        "435M\n" +
+        "-----END CERTIFICATE-----";
+
+    // Subordinate cert created using keytool, both certs exported to
+    // files individually, then use openssl to place in a PKCS#7:
+    // openssl crl2pkcs7 -nocrl -certfile <INTERMED-CERT-PEM>
+    //      -certfile <ROOT-CERT-PEM> -out <P7-DEST-PEM-FILE>
+    private static final String PKCS7_INTERMED_ROOT_CERTS =
+        "-----BEGIN PKCS7-----\n" +
+        "MIIGbgYJKoZIhvcNAQcCoIIGXzCCBlsCAQExADALBgkqhkiG9w0BBwGgggZBMIID\n" +
+        "LzCCAhegAwIBAgIEIIgOyDANBgkqhkiG9w0BAQsFADAlMRQwEgYDVQQKEwtTb21l\n" +
+        "Q29tcGFueTENMAsGA1UEAxMEUm9vdDAeFw0xNDA4MjgyMjUyNDJaFw0xNjA4MDcy\n" +
+        "MjUyNDJaMCkxFDASBgNVBAoTC1NvbWVDb21wYW55MREwDwYDVQQDEwhJbnRlcm1l\n" +
+        "ZDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJEecvTWla8kdWx+HHu5\n" +
+        "ryfBpJ95I7V4MEajnmzJVZcwvKhDjlDgABDMuVwFEUUSyeOdbWJF3DLKnyMDKTx6\n" +
+        "/58kuVak3NX2TJ8cmmIlKf1upFbdrEtjYViSnNrApprfO8B3ORdBbO6QDYzaIkAW\n" +
+        "dI5GllFnVkb4yhMUBg3zfhglF+bl3D3lVRlp9bCrUZoNRs+mZjhVbcMn22ejTfG5\n" +
+        "Y3VpNM4SN8dFIxPQLLk/aao+cmWEQdbQ0R6ydemRukqrw170olSVLeoGGala3D4o\n" +
+        "Jckde8EgNPcghcsdQ6tpGhkpFhmoyzEsuToR7Gq9UT5V2kkqJneiKXqQg4wzvMAl\n" +
+        "UGECAwEAAaNjMGEwHwYDVR0jBBgwFoAUOw+92bevFoJz96pR1DrAkPPUKb0wDwYD\n" +
+        "VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFLbnErBsq/Mh\n" +
+        "ci5XElfjjLZp3GRyMA0GCSqGSIb3DQEBCwUAA4IBAQAq8y2DpkSV31IXZ1vr/Ye+\n" +
+        "Nj/2NvBydFeHVRGMAN1LJv6/Q42TCSXbr6cDQ4NWQUtPm90yZBYJSznkbShxHOJE\n" +
+        "E6R8PRJvoUtMm7fJrNtkybTt6jX4j50Lw8gdYB/rgZb4z8ZQZVEo/0zpW4HVGs+q\n" +
+        "4z8TkdmLR18hl39sUEsxt99AOBk8NtKKVNfBWq9b0QDhRkXfmqhyeXdDsHOV8ksu\n" +
+        "lsa7hseheHhdjziEOpQugh8qzSea2kFPrLB53VjWfa4qDzEPaNhahho9piCu82XD\n" +
+        "nOrcEk9KyHWM7sa7vtK7++W+0MXD/p9nkZ6NHrJXweLriU0DXO6ZY3mzNKJK435M\n" +
+        "MIIDCjCCAfKgAwIBAgIEdffjKTANBgkqhkiG9w0BAQsFADAlMRQwEgYDVQQKEwtT\n" +
+        "b21lQ29tcGFueTENMAsGA1UEAxMEUm9vdDAeFw0xNDA4MjgyMjQ2MzZaFw0xNjA4\n" +
+        "MjcyMjQ2MzZaMCUxFDASBgNVBAoTC1NvbWVDb21wYW55MQ0wCwYDVQQDEwRSb290\n" +
+        "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAhnXc8Avv54Gk2xjVa2yA\n" +
+        "lBL/Cug1nyvKl5wqmN+foT6cMOX6bneCkJOJ4lSbch3gvl4ctlX/9hm3pB/+HhSr\n" +
+        "em2NcLQrLEq8l9Ar4RnqfoXQR4Uy+4P6wj9OcVV7e/v/+ZPnStOoEAtb5nAwsR2b\n" +
+        "hOC/tIFNwflrsmsmtMSoOiNftpYLFF4eOAdpDrXYMrqNu6ZxZsOQ7WZl4SsVOx1N\n" +
+        "/IINXwBLyoHJDzLZ0iJEV0O6mh846s0n6QXeK1P5d0uLcoZaZ1k8Q4sRcdoLA6rS\n" +
+        "e1WffipBFMvIuoDIigkHZIKVYRLG828rO+PFnRah0ybybkVsN6s3oLxfhswZDvut\n" +
+        "OwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNV\n" +
+        "HQ4EFgQUOw+92bevFoJz96pR1DrAkPPUKb0wDQYJKoZIhvcNAQELBQADggEBACBN\n" +
+        "wEaV70FKKBINHtNwesd7TB6fgSaVgDZOO08aseHbXnm7AUhtDV3P5rQR2AsKtbg4\n" +
+        "COhlKw2/Ki18D4DfdCccFKFTRZBjqj2PxNmn6C68l1/bT4PuUXuM7rW++53RcOA7\n" +
+        "TbgLuzA25kSz7XinRvR8L4VwHtppu5tSYEthMIMgLZLGGV9r7kBfpY8lXdxQM8vb\n" +
+        "xZUIysasvVtVUFPOTV6g2dfn8QCoqLOmxyzTLdXe4M6acP6f7lmhgr3LMqDtB6K9\n" +
+        "pN+OImr77zNdZ+jTB+5e9a8gAvc5ZfG7Nk5RfwUatYTAFZ6Uggy2cKmIRpXCia18\n" +
+        "If78mc7goS1+lHkGCs2hADEA\n" +
+        "-----END PKCS7-----";
+
+    // Empty PKCS#7 in DER form can be created with openssl:
+    // openssl crl2pkcs7 -nocrl -outform DER
+    private static final byte[] PKCS7_BER_EMPTY = {
+          48,   39,    6,    9,   42, -122,   72, -122,
+          -9,   13,    1,    7,    2,  -96,   26,   48,
+          24,    2,    1,    1,   49,    0,   48,   11,
+           6,    9,   42, -122,   72, -122,   -9,   13,
+           1,    7,    1,  -96,    0,  -95,    0,   49,
+           0
+    };
+
+    private static final String JTEST_ROOT_CRL =
+        "-----BEGIN X509 CRL-----\n" +
+        "MIICoTCBigIBATANBgkqhkiG9w0BAQsFADA1MQ4wDAYDVQQKEwVKVGVzdDELMAkG\n" +
+        "A1UECxMCSVQxFjAUBgNVBAMTDUpUZXN0IFJvb3QgQ0EXDTE0MDkwNDE4NDIyMVqg\n" +
+        "MDAuMB8GA1UdIwQYMBaAFO6bllCV6kctH77MfqAtefNeRdsmMAsGA1UdFAQEAgIA\n" +
+        "jjANBgkqhkiG9w0BAQsFAAOCAgEAmp8ihtiRthknDC+VzehmlQw5u8MftMZYQYk5\n" +
+        "EI04SwyzY9JTL8QHb4u7fXjnZAyN89aYPypI5OSyDsyyGP/JDNsBt2Um/fl0aaCl\n" +
+        "Z4Np6x+dB9+oIU1XY7y2+uyQUC5MHivQ5ddbGPoAvK/msbugTGAjHvZpM+l0okiV\n" +
+        "3SofDrii5BSosFEkXfkf2oG9ZLO3YamsFMEZaOj/eWDyGhTyJMGsq2/8NeTF21Tp\n" +
+        "YkeDcTHqR5KHoYXjOIaS7NjmErm+uDpKH9Lq+JUcYrbUhmjnq5z04EsPF2F2L7Vb\n" +
+        "THI+awQAUQit16lXGuz7fFRZi2vPyiaRP5n2QT5D+ac1dAs+oWLDJw6Tf2v9KVTe\n" +
+        "OmW62yd6zQqCwBg+n57UcNu3sv/Sq3t7iRuN0AmWlIhu659POPQv7Np6bEo6dIpp\n" +
+        "u7Ze6D2KPtM177ETHYlCx2a3g9VEZYKrVhQ2749St0Cp5szVq691jFZAWYOzcfEO\n" +
+        "XfK1y25pmlBjvhNIIVRlU+T5rjNb8GaleYKVYnKOcv700K32QxFzcPf7nbNKwW99\n" +
+        "tcaNHFNP+LW/XP8I3CJ8toXLLcOITKVwMA+0GlO5eL7eX5POc+vE9+7IzGuybmU4\n" +
+        "uslxoLdJ0NSZWpYmf6a6qrJ67cj5i3706H+eBsWQcShfSYreh+TyWQaGk+fkEiUV\n" +
+        "iy4QdJ0=\n" +
+        "-----END X509 CRL-----";
+
+    private static final String JTEST_INTERMED_CRL =
+        "-----BEGIN X509 CRL-----\n" +
+        "MIICzzCBuAIBATANBgkqhkiG9w0BAQsFADA/MQ4wDAYDVQQKEwVKVGVzdDELMAkG\n" +
+        "A1UECxMCSVQxIDAeBgNVBAMTF0pUZXN0IEludGVybWVkaWF0ZSBDQSAxFw0xNDA5\n" +
+        "MDQyMjE2NTRaMCIwIAIBBhcNMTQwOTA0MjIxNjU0WjAMMAoGA1UdFQQDCgEFoDAw\n" +
+        "LjAfBgNVHSMEGDAWgBSvRdjbkSMJ3A7s5H6EWghQ+lkw/zALBgNVHRQEBAICAJsw\n" +
+        "DQYJKoZIhvcNAQELBQADggIBALJmikMwil8oywhenoO8o9xxCOIU0xrt3KdfiSXw\n" +
+        "8MtQXZHT9d1C6tlLAsYkWAfmfTvM2OU6wquFCLLsFmDZszbbCqmn4JhYBSKQMqlm\n" +
+        "IHnsiOFPvITW2FU08fWNLM+FtQzPnTFmx/CJo+wfGpq5tZMIbsccsCJ5uvZVAWGh\n" +
+        "0KbPmYcJG/O384+kzr/2H2IaoZoMMABec5c5FEF/tpp8jawzY+0VFyaVrumKWdan\n" +
+        "+3OvRQxT1wLxfNi2vdxB2rmNPo423qanXZAoVv260um3LYlmXBNK1jwQ9lp78jkT\n" +
+        "B7zMVa4hOUWVxdWc/LE6fUYgPsNqZd+hWy/PolIRp5TS21B5hkc5K87LT59GkexK\n" +
+        "vNVKQennOLGtH+Q7htK4UeY4Gm/W7UydOQ0k7hZzyfMDkCfLfNfK0l63qKwUku36\n" +
+        "UdeI1LXqulPEvb/d7rRAAM9p5Sm+RsECj2bcrZBMdIGXcSo26A5tzZpTEC79i4S1\n" +
+        "yxYIooeBnouUkDJ9+VBsJTSKY5fpU8JSkQPRyHKt+trGAkBt2Ka5MqrHtITzQ1vP\n" +
+        "5q4tNr45JGEXllH83NlBpWURfsdtkDHa3lxTD/pkrywOCyzz7wQ22D8Kul7EN8nT\n" +
+        "7LDbN+O3G9GHICxvWlJHp6HMsqGTuH1MIUR+5uZFOJa1S0IzorUIEieLncDUPgzO\n" +
+        "M4JA\n" +
+        "-----END X509 CRL-----";
+
+    // PKCS#7 CRL Set containing JTEST root and intermediate CRLs
+    private static final String PKCS7_CRL_SET =
+        "-----BEGIN PKCS7-----\n" +
+        "MIIFpQYJKoZIhvcNAQcCoIIFljCCBZICAQExADALBgkqhkiG9w0BBwGgAKGCBXgw\n" +
+        "ggKhMIGKAgEBMA0GCSqGSIb3DQEBCwUAMDUxDjAMBgNVBAoTBUpUZXN0MQswCQYD\n" +
+        "VQQLEwJJVDEWMBQGA1UEAxMNSlRlc3QgUm9vdCBDQRcNMTQwOTA0MTg0MjIxWqAw\n" +
+        "MC4wHwYDVR0jBBgwFoAU7puWUJXqRy0fvsx+oC15815F2yYwCwYDVR0UBAQCAgCO\n" +
+        "MA0GCSqGSIb3DQEBCwUAA4ICAQCanyKG2JG2GScML5XN6GaVDDm7wx+0xlhBiTkQ\n" +
+        "jThLDLNj0lMvxAdvi7t9eOdkDI3z1pg/Kkjk5LIOzLIY/8kM2wG3ZSb9+XRpoKVn\n" +
+        "g2nrH50H36ghTVdjvLb67JBQLkweK9Dl11sY+gC8r+axu6BMYCMe9mkz6XSiSJXd\n" +
+        "Kh8OuKLkFKiwUSRd+R/agb1ks7dhqawUwRlo6P95YPIaFPIkwayrb/w15MXbVOli\n" +
+        "R4NxMepHkoehheM4hpLs2OYSub64Okof0ur4lRxittSGaOernPTgSw8XYXYvtVtM\n" +
+        "cj5rBABRCK3XqVca7Pt8VFmLa8/KJpE/mfZBPkP5pzV0Cz6hYsMnDpN/a/0pVN46\n" +
+        "ZbrbJ3rNCoLAGD6fntRw27ey/9Kre3uJG43QCZaUiG7rn0849C/s2npsSjp0imm7\n" +
+        "tl7oPYo+0zXvsRMdiULHZreD1URlgqtWFDbvj1K3QKnmzNWrr3WMVkBZg7Nx8Q5d\n" +
+        "8rXLbmmaUGO+E0ghVGVT5PmuM1vwZqV5gpVico5y/vTQrfZDEXNw9/uds0rBb321\n" +
+        "xo0cU0/4tb9c/wjcIny2hcstw4hMpXAwD7QaU7l4vt5fk85z68T37sjMa7JuZTi6\n" +
+        "yXGgt0nQ1JlaliZ/prqqsnrtyPmLfvTof54GxZBxKF9Jit6H5PJZBoaT5+QSJRWL\n" +
+        "LhB0nTCCAs8wgbgCAQEwDQYJKoZIhvcNAQELBQAwPzEOMAwGA1UEChMFSlRlc3Qx\n" +
+        "CzAJBgNVBAsTAklUMSAwHgYDVQQDExdKVGVzdCBJbnRlcm1lZGlhdGUgQ0EgMRcN\n" +
+        "MTQwOTA0MjIxNjU0WjAiMCACAQYXDTE0MDkwNDIyMTY1NFowDDAKBgNVHRUEAwoB\n" +
+        "BaAwMC4wHwYDVR0jBBgwFoAUr0XY25EjCdwO7OR+hFoIUPpZMP8wCwYDVR0UBAQC\n" +
+        "AgCbMA0GCSqGSIb3DQEBCwUAA4ICAQCyZopDMIpfKMsIXp6DvKPccQjiFNMa7dyn\n" +
+        "X4kl8PDLUF2R0/XdQurZSwLGJFgH5n07zNjlOsKrhQiy7BZg2bM22wqpp+CYWAUi\n" +
+        "kDKpZiB57IjhT7yE1thVNPH1jSzPhbUMz50xZsfwiaPsHxqaubWTCG7HHLAiebr2\n" +
+        "VQFhodCmz5mHCRvzt/OPpM6/9h9iGqGaDDAAXnOXORRBf7aafI2sM2PtFRcmla7p\n" +
+        "ilnWp/tzr0UMU9cC8XzYtr3cQdq5jT6ONt6mp12QKFb9utLpty2JZlwTStY8EPZa\n" +
+        "e/I5Ewe8zFWuITlFlcXVnPyxOn1GID7DamXfoVsvz6JSEaeU0ttQeYZHOSvOy0+f\n" +
+        "RpHsSrzVSkHp5zixrR/kO4bSuFHmOBpv1u1MnTkNJO4Wc8nzA5Any3zXytJet6is\n" +
+        "FJLt+lHXiNS16rpTxL2/3e60QADPaeUpvkbBAo9m3K2QTHSBl3EqNugObc2aUxAu\n" +
+        "/YuEtcsWCKKHgZ6LlJAyfflQbCU0imOX6VPCUpED0chyrfraxgJAbdimuTKqx7SE\n" +
+        "80Nbz+auLTa+OSRhF5ZR/NzZQaVlEX7HbZAx2t5cUw/6ZK8sDgss8+8ENtg/Crpe\n" +
+        "xDfJ0+yw2zfjtxvRhyAsb1pSR6ehzLKhk7h9TCFEfubmRTiWtUtCM6K1CBIni53A\n" +
+        "1D4MzjOCQDEA\n" +
+        "-----END PKCS7-----";
+
     public static void main(String[] args) throws Exception {
         CertificateFactory cf = CertificateFactory.getInstance("X.509");
-        File f = new File
-            (System.getProperty("test.src", "."), "invalidcert.pem");
-        InputStream inStream = new FileInputStream(f);
-        try {
-            X509Certificate cert =
-                (X509Certificate) cf.generateCertificate(inStream);
-        } catch (CertificateParsingException ce) {
-            return;
+        List<DecodeTest> validTests = new LinkedList<>();
+        List<DecodeTest> invalidTests = new LinkedList<>();
+
+        // Load up positive test cases (for sanity checks)
+        StringBuilder sb = new StringBuilder();
+
+        validTests.add(new GenMultiCertTest("Single, valid certificate",
+                    SINGLE_ROOT_CERT.getBytes(), null,
+                    new X500Principal("CN=Root, O=SomeCompany")));
+        validTests.add(new GenMultiCertTest("PEM-encoded PKCS#7 chain",
+                    PKCS7_INTERMED_ROOT_CERTS.getBytes(), null,
+                    new X500Principal("CN=Intermed, O=SomeCompany"),
+                    new X500Principal("CN=Root, O=SomeCompany")));
+        validTests.add(new GenMultiCertTest("Two PEM-encoded X509 certs",
+                    (INTERMED_CA_CERT + "\n" + SINGLE_ROOT_CERT).getBytes(),
+                    null,
+                    new X500Principal("CN=Intermed, O=SomeCompany"),
+                    new X500Principal("CN=Root, O=SomeCompany")));
+        validTests.add(new GenMultiCertTest("Empty data", new byte[0], null));
+
+        sb.append("Certificate 1: CN=Root, O=SomeCompany\n");
+        sb.append(SINGLE_ROOT_CERT).append("\n");
+        sb.append("Certificate 2: CN=Intermed, O=SomeCompany\n");
+        sb.append(INTERMED_CA_CERT).append("\n");
+        sb.append("Extra trailing data\n");
+        validTests.add(new GenMultiCertTest(
+                    "Two PEM-encoded certs with leading/trailing " +
+                    "text data around each.", sb.toString().getBytes(), null,
+                    new X500Principal("CN=Root, O=SomeCompany"),
+                    new X500Principal("CN=Intermed, O=SomeCompany")));
+        validTests.add(new GenMultiCertTest(
+                    "BER-encoded PKCS#7 with empty certificates segment",
+                    PKCS7_BER_EMPTY, null));
+        validTests.add(new GenMultiCRLTest(
+                    "CRL with leading and trailing text data",
+                    ("This is a CRL\n" + JTEST_ROOT_CRL +
+                     "\nSee? Told you so\n\n").getBytes(), null,
+                    new X500Principal("CN=JTest Root CA,OU=IT,O=JTest")));
+        validTests.add(new GenMultiCRLTest(
+                    "Two CRLs, one after the other with leading/trailing text",
+                    ("This is a CRL\n" + JTEST_ROOT_CRL +
+                     "\nAnd this is another CRL\n" + JTEST_INTERMED_CRL +
+                     "\nAnd this is trailing text\n").getBytes(), null,
+                    new X500Principal("CN=JTest Root CA,OU=IT,O=JTest"),
+                    new X500Principal(
+                        "CN=JTest Intermediate CA 1,OU=IT,O=JTest")));
+        validTests.add(new GenMultiCRLTest("Two CRLs in a PKCS#7 CRL set",
+                PKCS7_CRL_SET.getBytes(), null,
+                new X500Principal("CN=JTest Root CA,OU=IT,O=JTest"),
+                new X500Principal("CN=JTest Intermediate CA 1,OU=IT,O=JTest")));
+
+        // Load up all test cases where we expect failures
+        invalidTests.add(new GenSingleCertTest("Invalid PEM encoding",
+                    INVALID_CERT.getBytes(),
+                    new CertificateParsingException()));
+        invalidTests.add(new GenMultiCertTest("Invalid PEM encoding",
+                    INVALID_CERT.getBytes(),
+                    new CertificateParsingException()));
+        invalidTests.add(new GenMultiCertTest(
+                    "Two cert sequence, one valid and one invalid",
+                    (INTERMED_CA_CERT + "\n" + INVALID_CERT).getBytes(),
+                    new CertificateParsingException()));
+        invalidTests.add(new GenMultiCertTest("Non-certificate text",
+                    "This is not a certificate".getBytes(),
+                    new CertificateException()));
+        invalidTests.add(new GenMultiCertTest(
+                    "Non-certificate text with partial PEM header (4 hyphens)",
+                    "----This is not a valid x509 certificate".getBytes(),
+                    new CertificateException()));
+        invalidTests.add(new GenMultiCertTest(
+                    "Leading non-certificate text plus valid PEM header, " +
+                    "but not on new line",
+                    "This is not valid -----BEGIN CERTIFICATE-----".getBytes(),
+                    new CertificateException()));
+        byte[] emptyCString = {0};
+        invalidTests.add(new GenMultiCertTest("Empty C-style string",
+                    emptyCString, new CertificateException()));
+        invalidTests.add(new GenMultiCRLTest("Non-CRL text",
+                    "This is not a CRL".getBytes(), new CRLException()));
+        invalidTests.add(new GenMultiCRLTest("Valid headers, but not a CRL",
+                    INTERMED_CA_CERT.getBytes(), new CRLException()));
+
+        System.out.println("===== Valid Tests =====");
+        for (DecodeTest dt : validTests) {
+            dt.passTest();
         }
-        throw new Exception("CertificateFactory.generateCertificate() did not "
-            + "throw CertificateParsingException on invalid X.509 cert data");
+        System.out.print("\n");
+
+        System.out.println("===== Invalid Tests =====");
+        for (DecodeTest dt : invalidTests) {
+            dt.failTest();
+        }
+    }
+
+    public static abstract class DecodeTest {
+        protected String testName;
+        protected byte[] testData;
+        protected Throwable expectedException;
+        protected X500Principal[] principals;
+        protected CertificateFactory cf;
+
+        /**
+         * Construct a DecodeTest
+         *
+         * @param name The test name
+         * @param input A byte array consisting of the input for this test
+         * @param failType An exception whose class should match the expected
+         *        exception that will be thrown when this test is run
+         * @param princs Zero of more X500Principals which will be used
+         *        to compare the output in a success case.
+         */
+        DecodeTest(String name, byte[] input, Throwable failType,
+                X500Principal... princs) throws CertificateException {
+            testName = name;
+            testData = input.clone();
+            expectedException = failType;
+            principals = princs;
+            cf = CertificateFactory.getInstance("X.509");
+        }
+
+        public abstract void passTest() throws GeneralSecurityException;
+
+        public abstract void failTest() throws GeneralSecurityException;
+    }
+
+    public static class GenMultiCertTest extends DecodeTest {
+        public GenMultiCertTest(String name, byte[] input, Throwable failType,
+                X500Principal... princs) throws CertificateException {
+            super(name, input, failType, princs);
+        }
+
+        @Override
+        public void passTest() throws GeneralSecurityException {
+            Collection<? extends Certificate> certs;
+
+            System.out.println("generateCertificates(): " + testName);
+            certs = cf.generateCertificates(new ByteArrayInputStream(testData));
+
+            // Walk the certs Collection and do a comparison of subject names
+            int i = 0;
+            if (certs.size() == principals.length) {
+                for (Certificate crt : certs) {
+                    X509Certificate xc = (X509Certificate)crt;
+                    if (!xc.getSubjectX500Principal().equals(
+                                principals[i])) {
+                        throw new RuntimeException("Name mismatch: " +
+                                "cert: " + xc.getSubjectX500Principal() +
+                                ", expected: " + principals[i]);
+                    }
+                    i++;
+                }
+            } else {
+                throw new RuntimeException("Size mismatch: certs = " +
+                        certs.size() + ", expected = " +
+                        principals.length);
+            }
+        }
+
+        @Override
+        public void failTest() throws GeneralSecurityException {
+            Throwable caughtException = null;
+            Collection<? extends Certificate> certs = null;
+
+            System.out.println("generateCertificates(): " + testName);
+            if (expectedException == null) {
+                throw new RuntimeException("failTest requires non-null " +
+                        "expectedException");
+            }
+
+            try {
+                certs =
+                    cf.generateCertificates(new ByteArrayInputStream(testData));
+            } catch (CertificateException ce) {
+                caughtException = ce;
+            }
+
+            if (caughtException != null) {
+                // It has to be the right kind of exception though...
+                if (!caughtException.getClass().equals(
+                        expectedException.getClass())) {
+                    System.err.println("Unexpected exception thrown. " +
+                            "Received: " + caughtException + ", Expected: " +
+                            expectedException.getClass());
+                    throw new RuntimeException(caughtException);
+                }
+            } else {
+                // For a failure test, we'd expect some kind of exception
+                // to be thrown.
+                throw new RuntimeException("Failed to catch expected " +
+                        "exception " + expectedException.getClass());
+            }
+        }
+    }
+
+    public static class GenSingleCertTest extends DecodeTest {
+        public GenSingleCertTest(String name, byte[] input, Throwable failType,
+                X500Principal... princs) throws CertificateException {
+            super(name, input, failType, princs);
+        }
+
+        @Override
+        public void passTest() throws GeneralSecurityException {
+            X509Certificate cert;
+
+            System.out.println("generateCertificate(): " + testName);
+            cert = (X509Certificate)cf.generateCertificate(
+                    new ByteArrayInputStream(testData));
+
+            // Compare the cert's subject name against the expected value
+            // provided in the test.  If multiple X500Principals were provided
+            // just use the first one as the expected value.
+            if (!cert.getSubjectX500Principal().equals(principals[0])) {
+                throw new RuntimeException("Name mismatch: " +
+                        "cert: " + cert.getSubjectX500Principal() +
+                        ", expected: " + principals[0]);
+            }
+        }
+
+        @Override
+        public void failTest() throws GeneralSecurityException {
+            Throwable caughtException = null;
+            X509Certificate cert = null;
+            System.out.println("generateCertificate(): " + testName);
+
+            if (expectedException == null) {
+                throw new RuntimeException("failTest requires non-null " +
+                        "expectedException");
+            }
+
+            try {
+                cert = (X509Certificate)cf.generateCertificate(
+                        new ByteArrayInputStream(testData));
+            } catch (CertificateException e) {
+                caughtException = e;
+            }
+
+            if (caughtException != null) {
+                // It has to be the right kind of exception though...
+                if (!caughtException.getClass().equals(
+                        expectedException.getClass())) {
+                    System.err.println("Unexpected exception thrown. " +
+                            "Received: " + caughtException + ", Expected: " +
+                            expectedException.getClass());
+                    throw new RuntimeException(caughtException);
+                }
+            } else {
+                // For a failure test, we'd expect some kind of exception
+                // to be thrown.
+                throw new RuntimeException("Failed to catch expected " +
+                        "exception " + expectedException.getClass());
+            }
+        }
+    }
+
+    public static class GenMultiCRLTest extends DecodeTest {
+        public GenMultiCRLTest(String name, byte[] input, Throwable failType,
+                X500Principal... princs) throws CertificateException {
+            super(name, input, failType, princs);
+        }
+
+        @Override
+        public void passTest() throws GeneralSecurityException {
+            Collection<? extends CRL> crls;
+
+            System.out.println("generateCRLs(): " + testName);
+            crls = cf.generateCRLs(new ByteArrayInputStream(testData));
+
+            // Walk the crls Collection and do a comparison of issuer names
+            int i = 0;
+            if (crls.size() == principals.length) {
+                for (CRL revlist : crls) {
+                    X509CRL xc = (X509CRL)revlist;
+                    if (!xc.getIssuerX500Principal().equals(principals[i])) {
+                        throw new RuntimeException("Name mismatch: " +
+                                "CRL: " + xc.getIssuerX500Principal() +
+                                ", expected: " + principals[i]);
+                    }
+                    i++;
+                }
+            } else {
+                throw new RuntimeException("Size mismatch: crls = " +
+                        crls.size() + ", expected = " +
+                        principals.length);
+            }
+        }
+
+        @Override
+        public void failTest() throws GeneralSecurityException {
+            Throwable caughtException = null;
+            Collection<? extends CRL> crls = null;
+
+            System.out.println("generateCRLs(): " + testName);
+            if (expectedException == null) {
+                throw new RuntimeException("failTest requires non-null " +
+                        "expectedException");
+            }
+
+            try {
+                crls =
+                    cf.generateCRLs(new ByteArrayInputStream(testData));
+            } catch (CRLException e) {
+                caughtException = e;
+            }
+
+            if (caughtException != null) {
+                // It has to be the right kind of exception though...
+                if (!caughtException.getClass().equals(
+                        expectedException.getClass())) {
+                    System.err.println("Unexpected exception thrown. " +
+                            "Received: " + caughtException + ", Expected: " +
+                            expectedException.getClass());
+                    throw new RuntimeException(caughtException);
+                }
+            } else {
+                // For a failure test, we'd expect some kind of exception
+                // to be thrown.
+                throw new RuntimeException("Failed to catch expected " +
+                        "exception " + expectedException.getClass());
+            }
+        }
     }
 }
--- a/test/java/security/cert/CertificateFactory/invalidEncodedCerts/invalidcert.pem	Thu Oct 16 12:02:05 2014 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,14 +0,0 @@
------BEGIN CERTIFICATE-----
-XIICJjCCAdCgAwIBAgIBITANBgkqhkiG9w0BAQQFADCBqTELMAkGA1UEBhMCVVMx
-EzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFuY2lzY28xFTAT
-BgNVBAoTDEJFQSBXZWJMb2dpYzERMA8GA1UECxMIU2VjdXJpdHkxIzAhBgNVBAMT
-GkRlbW8gQ2VydGlmaWNhdGUgQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9zdXBw
-b3J0QGJlYS5jb20wHhcNMDAwNTMwMjEzODAxWhcNMDQwNTEzMjEzODAxWjCBjDEL
-MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
-cmFuY2lzY28xFTATBgNVBAoTDEJFQSBXZWJMb2dpYzEZMBcGA1UEAxMQd2VibG9n
-aWMuYmVhLmNvbTEeMBwGCSqGSIb3DQEJARYPc3VwcG9ydEBiZWEuY29tMFwwDQYJ
-KoZIhvcNAQEBBQADSwAwSAJBALdsXEHqKHgs6zj0hU5sXMAUHzoT8kgWXmNkKHXH
-79qbPh6EfdlriW9G/AbRF/pKrCQu7hhllAxREbqTuSlf2EMCAwEAATANBgkqhkiG
-9w0BAQQFAANBACgmqflL5m5LNeJGpWx9aIoABCiuDcpw1fFyegsqGX7CBhffcruS
-1p8h5vkHVbMu1frD1UgGnPlOO/K7Ig/KrsU=
------END CERTIFICATE-----
--- a/test/java/text/Format/DecimalFormat/TieRoundingTest.java	Thu Oct 16 12:02:05 2014 -0700
+++ b/test/java/text/Format/DecimalFormat/TieRoundingTest.java	Thu Oct 16 14:14:57 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
@@ -23,7 +23,7 @@
 
 /* @test
  *
- * @bug 7131459
+ * @bug 7131459 8039915
  * @summary test various situations of NumberFormat rounding when close to tie
  * @author Olivier Lagneau
  * @run main TieRoundingTest
@@ -56,7 +56,7 @@
         if (!result.equals(expectedOutput)) {
             System.out.println();
             System.out.println("========================================");
-            System.out.println("***Error formatting double value from string : " +
+            System.out.println("***Failure : error formatting value from string : " +
                                inputDigits);
             System.out.println("NumberFormat pattern is  : " +
                                ((DecimalFormat ) nf).toPattern());
@@ -103,7 +103,7 @@
         if (!result.equals(expectedOutput)) {
             System.out.println();
             System.out.println("========================================");
-            System.out.println("***Error formatting double value from string : " +
+            System.out.println("***Failure : error formatting value from string : " +
                                inputDigits);
             System.out.println("NumberFormat pattern is  : " +
                                ((DecimalFormat ) nf).toPattern());
@@ -144,7 +144,7 @@
         if (!result.equals(expectedOutput)) {
             System.out.println();
             System.out.println("========================================");
-            System.out.println("***Error formatting number value from string : " +
+            System.out.println("***Failure : error formatting value from string : " +
                                inputDigits);
             System.out.println("NumberFormat pattern is  : " +
                                ((DecimalFormat ) nf).toPattern());
@@ -174,7 +174,7 @@
 
     public static void main(String[] args) {
 
-        // Only the 3 rounding modes below may be impacted by bug 7131459.
+        // The 3 HALF_* rounding modes are impacted by bugs 7131459, 8039915.
         // So we do not test the other rounding modes.
         RoundingMode[] roundingModes = {
             RoundingMode.HALF_DOWN,
@@ -183,10 +183,14 @@
         };
 
         // Precise the relative position of input value against its closest tie.
+        // The double values tested below for 3 and 5 fractional digits must follow
+        // this scheme (position toward tie).
         String[] tieRelativePositions = {
             "below", "exact", "above",
             "below", "exact", "above",
             "below", "exact", "above",
+            "below", "above", "above",
+            "below", "below", "above",
             "below", "exact", "above"
         };
 
@@ -196,9 +200,13 @@
         double[] values3FractDigits = {
             // unimpacting values close to tie, with less than 3 input fract digits
             1.115d, 1.125d, 1.135d,
-            // impacting close to tie values covering all 6 cases
+            // HALF_* impacting close to tie values covering all 6 tie cases
             0.3115d, 0.3125d, 0.3135d,
             0.6865d, 0.6875d, 0.6885d,
+            // specific HALF_UP close to tie values
+            0.3124d, 0.3126d, 0.3128d,
+            // specific HALF_DOWN close to tie values
+            0.6864d, 0.6865d, 0.6868d,
             // unimpacting values close to tie, with more than 3 input fract digits
             1.46885d, 2.46875d, 1.46865d
         };
@@ -207,6 +215,8 @@
             "1.115d", "1.125d", "1.135d",
             "0.3115d", "0.3125d", "0.3135d",
             "0.6865d", "0.6875d", "0.6885d",
+            "0.3124d", "0.3126d", "0.3128d",
+            "0.6864d", "0.6865d", "0.6868d",
             "1.46885d", "2.46875d", "1.46865d"
         };
 
@@ -214,16 +224,22 @@
             {"1.115", "1.125", "1.135",
              "0.311", "0.312", "0.314",
              "0.686", "0.687", "0.689",
+             "0.312", "0.313", "0.313",
+             "0.686", "0.686", "0.687",
              "1.469", "2.469", "1.469"
             },
             {"1.115", "1.125", "1.135",
              "0.311", "0.312", "0.314",
              "0.686", "0.688", "0.689",
+             "0.312", "0.313", "0.313",
+             "0.686", "0.686", "0.687",
              "1.469", "2.469", "1.469"
             },
             {"1.115", "1.125", "1.135",
              "0.311", "0.313", "0.314",
              "0.686", "0.688", "0.689",
+             "0.312", "0.313", "0.313",
+             "0.686", "0.686", "0.687",
              "1.469", "2.469", "1.469"
             },
         };
@@ -250,9 +266,13 @@
         double[] values5FractDigits = {
             // unimpacting values close to tie, with less than 5 input fract digits
             1.3135d, 1.3125d, 1.3115d,
-            // impacting values close to tie, covering all 6 cases
+            // HALF_* impacting values close to tie, covering all 6 cases
             1.328115d, 1.328125d, 1.328135d,
             1.796865d, 1.796875d, 1.796885d,
+            // specific HALF_UP close to tie values
+            1.328124d, 1.798876d, 1.796889d,
+            // specific HALF_DOWN close to tie values
+            1.328114d, 1.796865d, 1.328138d,
             // unimpacting values close to tie, with more than 5 input fract digits
             1.3281149999999d, 1.75390625d, 1.7968750000001d
         };
@@ -261,6 +281,8 @@
             "1.3135d", "1.3125d", "1.3115d",
             "1.328115d", "1.328125d", "1.328135d",
             "1.796865d", "1.796875d", "1.796885d",
+            "1.328124d", "1.798876d", "1.796889d",
+            "1.328114d", "1.796865d", "1.328138d",
             "1.3281149999999d", "1.75390625d", "1.7968750000001d"
         };
 
@@ -268,16 +290,22 @@
             {"1.3135", "1.3125", "1.3115",
              "1.32811", "1.32812", "1.32814",
              "1.79686", "1.79687", "1.79689",
+             "1.32812", "1.79888", "1.79689",
+             "1.32811", "1.79686", "1.32814",
              "1.32811", "1.75391", "1.79688"
             },
             {"1.3135", "1.3125", "1.3115",
              "1.32811", "1.32812", "1.32814",
              "1.79686", "1.79688", "1.79689",
+             "1.32812", "1.79888", "1.79689",
+             "1.32811", "1.79686", "1.32814",
              "1.32811", "1.75391", "1.79688"
             },
             {"1.3135", "1.3125", "1.3115",
              "1.32811", "1.32813", "1.32814",
              "1.79686", "1.79688", "1.79689",
+             "1.32812", "1.79888", "1.79689",
+             "1.32811", "1.79686", "1.32814",
              "1.32811", "1.75391", "1.79688"
             }
         };
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/util/concurrent/FutureTask/NegativeTimeout.java	Thu Oct 16 14:14:57 2014 -0700
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2014 Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8060052
+ * @summary FutureTask; fix underflow when timeout = Long.MIN_VALUE
+ * @author Chris Hegarty
+ */
+
+import java.util.concurrent.FutureTask;
+import java.util.concurrent.TimeoutException;
+import java.util.concurrent.TimeUnit;
+
+// If the bug exists the test will eventually be interrupted by the
+// test harness and fail with an InterruptedException, otherwise it
+// will throw a TimeoutException almost immediately and return silently.
+
+public class NegativeTimeout {
+    public static void main(String[] args) throws Exception {
+        FutureTask<Void> task = new FutureTask<>( () -> { return null; } );
+        try {
+            task.get(Long.MIN_VALUE, TimeUnit.NANOSECONDS);
+        } catch (TimeoutException success) {}
+    }
+}
+
--- a/test/java/util/zip/InterruptibleZip.java	Thu Oct 16 12:02:05 2014 -0700
+++ b/test/java/util/zip/InterruptibleZip.java	Thu Oct 16 14:14:57 2014 -0700
@@ -30,32 +30,14 @@
 import java.util.zip.*;
 
 public class InterruptibleZip {
-    private static String rtJar() {
-        String bcp = System.getProperty("sun.boot.class.path");
-        for (String pathElement : bcp.split(File.pathSeparator)) {
-            if (pathElement.endsWith(File.separator + "rt.jar") &&
-                new File(pathElement).exists()) {
-                System.out.println("rtJar="+pathElement);
-                return pathElement;
-            }
-            if (pathElement.endsWith(File.separator + "classes") &&
-                new File(pathElement).isDirectory()) {
-                System.out.println("rt.jar not available");
-                return null;
-            }
-        }
-        throw new Error("Can't find rt.jar or classes directory");
-    }
 
     public static void main(String[] args) throws Exception {
         /* Interrupt the current thread. The is.read call below
-           should continue reading rt.jar.
+           should continue reading input.jar.
         */
-        String rtJar = rtJar();
-        if (rtJar == null) return;
         Thread.currentThread().interrupt();
-        ZipFile zf = new ZipFile(rtJar);
-        ZipEntry ze = zf.getEntry("java/lang/Object.class");
+        ZipFile zf = new ZipFile(new File(System.getProperty("test.src", "."), "input.jar"));
+        ZipEntry ze = zf.getEntry("Available.java");
         InputStream is = zf.getInputStream(ze);
         byte[] buf = new byte[512];
         int n = is.read(buf);
--- a/test/java/util/zip/ZipFile/FinalizeZipFile.java	Thu Oct 16 12:02:05 2014 -0700
+++ b/test/java/util/zip/ZipFile/FinalizeZipFile.java	Thu Oct 16 14:14:57 2014 -0700
@@ -51,12 +51,11 @@
 
     private static void makeGarbage() throws Throwable {
         final Random rnd = new Random();
-        final String javaHome = System.getProperty("java.home");
         // Create some ZipFiles.
-        // Find some .jar files in JDK's lib directory.
-        final File lib = new File(javaHome, "lib");
-        check(lib.isDirectory());
-        final File[] jars = lib.listFiles(
+        // Find some .jar files in test directory.
+        final File testdir = new File(System.getProperty("test.src", "."));
+        check(testdir.isDirectory());
+        final File[] jars = testdir.listFiles(
             new FilenameFilter() {
                 public boolean accept(File dir, String name) {
                     return name.endsWith(".jar");}});
--- a/test/javax/management/MBeanInfo/NotificationInfoTest.java	Thu Oct 16 12:02:05 2014 -0700
+++ b/test/javax/management/MBeanInfo/NotificationInfoTest.java	Thu Oct 16 14:14:57 2014 -0700
@@ -36,7 +36,6 @@
 import java.lang.management.*;
 import java.lang.reflect.*;
 import java.net.*;
-import java.security.CodeSource;
 import java.util.*;
 import java.util.jar.*;
 import javax.management.*;
@@ -83,27 +82,10 @@
         System.out.println("Checking platform MBeans...");
         checkPlatformMBeans();
 
-        CodeSource cs =
-            javax.management.MBeanServer.class.getProtectionDomain()
-            .getCodeSource();
-        URL codeBase;
-        if (cs == null) {
-            String javaHome = System.getProperty("java.home");
-            String[] candidates = {"/lib/rt.jar", "/classes/"};
-            codeBase = null;
-            for (String candidate : candidates) {
-                File file = new File(javaHome + candidate);
-                if (file.exists()) {
-                    codeBase = file.toURI().toURL();
-                    break;
-                }
-            }
-            if (codeBase == null) {
-                throw new Exception(
-                        "Could not determine codeBase for java.home=" + javaHome);
-            }
-        } else
-            codeBase = cs.getLocation();
+        URL codeBase = ClassLoader.getSystemResource("javax/management/MBeanServer.class");
+        if (codeBase == null) {
+            throw new Exception("Could not determine codeBase for " + MBeanServer.class);
+        }
 
         System.out.println();
         System.out.println("Looking for standard MBeans...");
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/javax/naming/spi/providers/InitialContextTest.java	Thu Oct 16 14:14:57 2014 -0700
@@ -0,0 +1,372 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import javax.naming.Context;
+import java.io.*;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.*;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+import static java.lang.String.format;
+import static java.util.Arrays.asList;
+import static java.util.Collections.singleton;
+import static java.util.Collections.singletonMap;
+
+/*
+ * @test
+ * @bug 8044627
+ * @summary Examines different ways JNDI providers can hook up themselves and
+ *          become available. Each case mimics the most straightforward way of
+ *          executing scenarios.
+ */
+public class InitialContextTest {
+
+    public static void main(String[] args) throws Throwable {
+        unknownInitialContextFactory();
+        initialContextFactoryInAJar();
+        initialContextFactoryAsService();
+    }
+
+    private static void unknownInitialContextFactory() throws Throwable {
+
+        // This is a parameter of this test case, it should work for any value
+        // of it, provided a class with this FQN is not available in a runtime.
+        // So pick any name you like.
+        String factoryClassFqn =
+                "net.java.openjdk.test.UnknownInitialContextFactory";
+
+        Path tmp = Files.createDirectory(Paths.get("InitialContextTest-1"));
+
+        Path src = templatesHome().resolve("test.template");
+        Path dst = tmp.resolve("Test.java");
+        Files.copy(src, dst);
+
+        javac(tmp, dst);
+
+        Path build = Files.createDirectory(tmp.resolve("build"));
+        Files.copy(tmp.resolve("Test.class"), build.resolve("Test.class"));
+
+        Map<String, String> props
+                = singletonMap(Context.INITIAL_CONTEXT_FACTORY, factoryClassFqn);
+
+        Result r = java(props, singleton(build), "Test");
+
+        if (r.exitValue == 0 || !r.output.startsWith(
+                stackTraceStringForClassNotFound(factoryClassFqn))) {
+            throw new RuntimeException(
+                    "Expected a different kind of failure: " + r.output);
+        }
+    }
+
+    private static String stackTraceStringForClassNotFound(String fqn) {
+        return String.format(
+                "Exception in thread \"main\" javax.naming.NoInitialContextException: "
+                        + "Cannot instantiate class: %s "
+                        + "[Root exception is java.lang.ClassNotFoundException: %s]",
+                fqn, fqn);
+    }
+
+    private static void initialContextFactoryInAJar() throws Throwable {
+
+        String factoryClassFqn =
+                "net.java.openjdk.test.DummyInitialContextFactory";
+
+        Path tmp = Files.createDirectory(Paths.get("InitialContextTest-2"));
+
+        Path src = templatesHome().resolve("test.template");
+        Path dst = tmp.resolve("Test.java");
+        Files.copy(src, dst);
+
+        Path dst1 = createFactoryFrom(templatesHome().resolve("factory.template"),
+                factoryClassFqn, tmp);
+
+        javac(tmp, dst);
+        Path explodedJar = Files.createDirectory(tmp.resolve("exploded-jar"));
+        javac(explodedJar, dst1);
+        jar(tmp.resolve("test.jar"), explodedJar);
+
+        Path build = Files.createDirectory(tmp.resolve("build"));
+        Files.copy(tmp.resolve("Test.class"), build.resolve("Test.class"));
+        Files.copy(tmp.resolve("test.jar"), build.resolve("test.jar"));
+
+        Map<String, String> props
+                = singletonMap(Context.INITIAL_CONTEXT_FACTORY, factoryClassFqn);
+
+        Result r = java(props, asList(build.resolve("test.jar"), build), "Test");
+
+        if (r.exitValue != 0 || !r.output.isEmpty())
+            throw new RuntimeException(r.output);
+    }
+
+
+    private static Path createFactoryFrom(Path srcTemplate,
+                                          String factoryFqn,
+                                          Path dstFolder) throws IOException {
+
+        String factorySimpleName, packageName;
+        int i = factoryFqn.lastIndexOf('.');
+        if (i < 0) {
+            packageName = "";
+            factorySimpleName = factoryFqn;
+        } else {
+            packageName = factoryFqn.substring(0, i);
+            factorySimpleName = factoryFqn.substring(i + 1);
+        }
+
+        Path result = dstFolder.resolve(factorySimpleName + ".java");
+        File dst = result.toFile();
+        File src = srcTemplate.toFile();
+        try (BufferedReader r = new BufferedReader(new FileReader(src));
+             BufferedWriter w = new BufferedWriter(new FileWriter(dst))) {
+
+            List<String> lines = processTemplate(packageName, factorySimpleName,
+                    r.lines()).collect(Collectors.toList());
+
+            Iterator<String> it = lines.iterator();
+            if (it.hasNext())
+                w.write(it.next());
+            while (it.hasNext()) {
+                w.newLine();
+                w.write(it.next());
+            }
+        }
+        return result;
+    }
+
+    private static Stream<String> processTemplate(String packageName,
+                                                  String factorySimpleName,
+                                                  Stream<String> lines) {
+        Function<String, String> pckg;
+
+        if (packageName.isEmpty()) {
+            pckg = s -> s.contains("$package") ? "" : s;
+        } else {
+            pckg = s -> s.replaceAll("\\$package", packageName);
+        }
+
+        Function<String, String> factory
+                = s -> s.replaceAll("\\$factoryName", factorySimpleName);
+
+        return lines.map(pckg).map(factory);
+    }
+
+    private static void initialContextFactoryAsService() throws Throwable {
+
+        String factoryClassFqn =
+                "net.java.openjdk.test.BrokenInitialContextFactory";
+
+        Path tmp = Files.createDirectory(Paths.get("InitialContextTest-3"));
+
+        Path src = templatesHome().resolve("test.template");
+        Path dst = tmp.resolve("Test.java");
+        Files.copy(src, dst);
+
+        Path dst1 = createFactoryFrom(templatesHome().resolve("broken_factory.template"),
+                factoryClassFqn, tmp);
+
+        javac(tmp, dst);
+
+        Path explodedJar = Files.createDirectory(tmp.resolve("exploded-jar"));
+        Path services = Files.createDirectories(explodedJar.resolve("META-INF")
+                .resolve("services"));
+
+        Path s = services.resolve("javax.naming.spi.InitialContextFactory");
+        FileWriter fw = new FileWriter(s.toFile());
+        try {
+            fw.write(factoryClassFqn);
+        } finally {
+            fw.close();
+        }
+
+        javac(explodedJar, dst1);
+        jar(tmp.resolve("test.jar"), explodedJar);
+
+        Path build = Files.createDirectory(tmp.resolve("build"));
+        Files.copy(tmp.resolve("Test.class"), build.resolve("Test.class"));
+        Files.copy(tmp.resolve("test.jar"), build.resolve("test.jar"));
+
+        Map<String, String> props = new HashMap<>();
+        props.put("java.ext.dirs", build.toString());
+        props.put(Context.INITIAL_CONTEXT_FACTORY, factoryClassFqn);
+
+        Result r = java(props, singleton(build), "Test");
+
+        if (r.exitValue == 0 || !verifyOutput(r.output, factoryClassFqn))
+            throw new RuntimeException(r.output);
+    }
+
+    // IMO, that's the easiest way that gives you a fair amount of confidence in
+    // that j.u.ServiceLoader is loading a factory rather than Class.forName
+    private static boolean verifyOutput(String output, String fqn) {
+        String s1 = String.format(
+                "Exception in thread \"main\" javax.naming.NoInitialContextException: "
+                        + "Cannot load initial context factory '%s' "
+                        + "[Root exception is java.util.ServiceConfigurationError: "
+                        + "javax.naming.spi.InitialContextFactory: "
+                        + "Provider %s could not be instantiated]", fqn, fqn);
+
+        String s2 = String.format("Caused by: java.util.ServiceConfigurationError: "
+                + "javax.naming.spi.InitialContextFactory: "
+                + "Provider %s could not be instantiated", fqn);
+
+        String s3 = "Caused by: java.lang.RuntimeException: "
+                + "This is a broken factory. It is supposed to throw this exception.";
+
+        return output.startsWith(s1) && output.contains(s2)
+                && output.contains(s1);
+    }
+
+    private static void jar(Path jarName, Path jarRoot) {
+        String jar = getJDKTool("jar");
+        ProcessBuilder p = new ProcessBuilder(jar, "cf", jarName.toString(),
+                "-C", jarRoot.toString(), ".");
+        quickFail(run(p));
+    }
+
+    private static void javac(Path compilationOutput, Path... sourceFiles) {
+        String javac = getJDKTool("javac");
+        List<String> commands = new ArrayList<>();
+        commands.addAll(asList(javac, "-d", compilationOutput.toString()));
+        List<Path> paths = asList(sourceFiles);
+        commands.addAll(paths.stream()
+                .map(Path::toString)
+                .collect(Collectors.toList()));
+        quickFail(run(new ProcessBuilder(commands)));
+    }
+
+    private static void quickFail(Result r) {
+        if (r.exitValue != 0)
+            throw new RuntimeException(r.output);
+    }
+
+    private static Result java(Map<String, String> properties,
+                               Collection<Path> classpath,
+                               String classname) {
+
+        String java = getJDKTool("java");
+
+        List<String> commands = new ArrayList<>();
+        commands.add(java);
+        commands.addAll(properties.entrySet()
+                .stream()
+                .map(e -> "-D" + e.getKey() + "=" + e.getValue())
+                .collect(Collectors.toList()));
+
+        String cp = classpath.stream()
+                .map(Path::toString)
+                .collect(Collectors.joining(File.pathSeparator));
+        commands.add("-cp");
+        commands.add(cp);
+        commands.add(classname);
+
+        return run(new ProcessBuilder(commands));
+    }
+
+    private static Result run(ProcessBuilder b) {
+        Process p = null;
+        try {
+            p = b.start();
+        } catch (IOException e) {
+            throw new RuntimeException(
+                    format("Couldn't start process '%s'", b.command()), e);
+        }
+
+        String output;
+        try {
+            output = toString(p.getInputStream(), p.getErrorStream());
+        } catch (IOException e) {
+            throw new RuntimeException(
+                    format("Couldn't read process output '%s'", b.command()), e);
+        }
+
+        try {
+            p.waitFor();
+        } catch (InterruptedException e) {
+            throw new RuntimeException(
+                    format("Process hasn't finished '%s'", b.command()), e);
+        }
+
+        return new Result(p.exitValue(), output);
+    }
+
+    private static String getJDKTool(String name) {
+        String testJdk = System.getProperty("test.jdk");
+        if (testJdk == null)
+            throw new RuntimeException("Please provide test.jdk property at a startup");
+        return testJdk + File.separator + "bin" + File.separator + name;
+    }
+
+    private static Path templatesHome() {
+        String testSrc = System.getProperty("test.src");
+        if (testSrc == null)
+            throw new RuntimeException("Please provide test.src property at a startup");
+        return Paths.get(testSrc);
+    }
+
+    private static String toString(InputStream... src) throws IOException {
+        StringWriter dst = new StringWriter();
+        Reader concatenated =
+                new InputStreamReader(
+                        new SequenceInputStream(
+                                Collections.enumeration(asList(src))));
+        copy(concatenated, dst);
+        return dst.toString();
+    }
+
+    private static void copy(Reader src, Writer dst) throws IOException {
+        int len;
+        char[] buf = new char[1024];
+        try {
+            while ((len = src.read(buf)) != -1)
+                dst.write(buf, 0, len);
+        } finally {
+            try {
+                src.close();
+            } catch (IOException ignored1) {
+            } finally {
+                try {
+                    dst.close();
+                } catch (IOException ignored2) {
+                }
+            }
+        }
+    }
+
+    private static class Result {
+
+        final int exitValue;
+        final String output;
+
+        private Result(int exitValue, String output) {
+            this.exitValue = exitValue;
+            this.output = output;
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/javax/naming/spi/providers/broken_factory.template	Thu Oct 16 14:14:57 2014 -0700
@@ -0,0 +1,178 @@
+/*
+ * 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.
+ */
+
+package $package;
+
+import javax.naming.*;
+import javax.naming.spi.InitialContextFactory;
+import java.util.Hashtable;
+
+public class $factoryName implements InitialContextFactory {
+
+    public $factoryName() {
+        throw new RuntimeException(
+                "This is a broken factory. It is supposed to throw this exception.");
+    }
+
+    @Override
+    public Context getInitialContext(Hashtable<?, ?> env) throws NamingException {
+        return new DummyInitialContext();
+    }
+
+    private class DummyInitialContext implements Context {
+
+        @Override
+        public Object lookup(Name name) {
+            return null;
+        }
+
+        @Override
+        public Object lookup(String name) {
+            return null;
+        }
+
+        @Override
+        public void bind(Name name, Object obj) {
+        }
+
+        @Override
+        public void bind(String name, Object obj) {
+        }
+
+        @Override
+        public void rebind(Name name, Object obj) {
+        }
+
+        @Override
+        public void rebind(String name, Object obj) {
+        }
+
+        @Override
+        public void unbind(Name name) {
+        }
+
+        @Override
+        public void unbind(String name) {
+        }
+
+        @Override
+        public void rename(Name oldName, Name newName) {
+        }
+
+        @Override
+        public void rename(String oldName, String newName) {
+        }
+
+        @Override
+        public NamingEnumeration<NameClassPair> list(Name name) {
+            return null;
+        }
+
+        @Override
+        public NamingEnumeration<NameClassPair> list(String name) {
+            return null;
+        }
+
+        @Override
+        public NamingEnumeration<Binding> listBindings(Name name) {
+            return null;
+        }
+
+        @Override
+        public NamingEnumeration<Binding> listBindings(String name) {
+            return null;
+        }
+
+        @Override
+        public void destroySubcontext(Name name) {
+        }
+
+        @Override
+        public void destroySubcontext(String name) {
+        }
+
+        @Override
+        public Context createSubcontext(Name name) {
+            return null;
+        }
+
+        @Override
+        public Context createSubcontext(String name) {
+            return null;
+        }
+
+        @Override
+        public Object lookupLink(Name name) {
+            return null;
+        }
+
+        @Override
+        public Object lookupLink(String name) {
+            return null;
+        }
+
+        @Override
+        public NameParser getNameParser(Name name) {
+            return null;
+        }
+
+        @Override
+        public NameParser getNameParser(String name) {
+            return null;
+        }
+
+        @Override
+        public Name composeName(Name name, Name prefix) {
+            return null;
+        }
+
+        @Override
+        public String composeName(String name, String prefix) {
+            return null;
+        }
+
+        @Override
+        public Object addToEnvironment(String propName, Object propVal) {
+            return null;
+        }
+
+        @Override
+        public Object removeFromEnvironment(String propName) {
+            return null;
+        }
+
+        @Override
+        public Hashtable<?, ?> getEnvironment() {
+            return null;
+        }
+
+        @Override
+        public void close() {
+        }
+
+        @Override
+        public String getNameInNamespace() {
+            return null;
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/javax/naming/spi/providers/factory.template	Thu Oct 16 14:14:57 2014 -0700
@@ -0,0 +1,173 @@
+/*
+ * 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.
+ */
+
+package $package;
+
+import javax.naming.*;
+import javax.naming.spi.InitialContextFactory;
+import java.util.Hashtable;
+
+public class $factoryName implements InitialContextFactory {
+
+    @Override
+    public Context getInitialContext(Hashtable<?, ?> env) throws NamingException {
+        return new DummyInitialContext();
+    }
+
+    private class DummyInitialContext implements Context {
+
+        @Override
+        public Object lookup(Name name) {
+            return null;
+        }
+
+        @Override
+        public Object lookup(String name) {
+            return null;
+        }
+
+        @Override
+        public void bind(Name name, Object obj) {
+        }
+
+        @Override
+        public void bind(String name, Object obj) {
+        }
+
+        @Override
+        public void rebind(Name name, Object obj) {
+        }
+
+        @Override
+        public void rebind(String name, Object obj) {
+        }
+
+        @Override
+        public void unbind(Name name) {
+        }
+
+        @Override
+        public void unbind(String name) {
+        }
+
+        @Override
+        public void rename(Name oldName, Name newName) {
+        }
+
+        @Override
+        public void rename(String oldName, String newName) {
+        }
+
+        @Override
+        public NamingEnumeration<NameClassPair> list(Name name) {
+            return null;
+        }
+
+        @Override
+        public NamingEnumeration<NameClassPair> list(String name) {
+            return null;
+        }
+
+        @Override
+        public NamingEnumeration<Binding> listBindings(Name name) {
+            return null;
+        }
+
+        @Override
+        public NamingEnumeration<Binding> listBindings(String name) {
+            return null;
+        }
+
+        @Override
+        public void destroySubcontext(Name name) {
+        }
+
+        @Override
+        public void destroySubcontext(String name) {
+        }
+
+        @Override
+        public Context createSubcontext(Name name) {
+            return null;
+        }
+
+        @Override
+        public Context createSubcontext(String name) {
+            return null;
+        }
+
+        @Override
+        public Object lookupLink(Name name) {
+            return null;
+        }
+
+        @Override
+        public Object lookupLink(String name) {
+            return null;
+        }
+
+        @Override
+        public NameParser getNameParser(Name name) {
+            return null;
+        }
+
+        @Override
+        public NameParser getNameParser(String name) {
+            return null;
+        }
+
+        @Override
+        public Name composeName(Name name, Name prefix) {
+            return null;
+        }
+
+        @Override
+        public String composeName(String name, String prefix) {
+            return null;
+        }
+
+        @Override
+        public Object addToEnvironment(String propName, Object propVal) {
+            return null;
+        }
+
+        @Override
+        public Object removeFromEnvironment(String propName) {
+            return null;
+        }
+
+        @Override
+        public Hashtable<?, ?> getEnvironment() {
+            return null;
+        }
+
+        @Override
+        public void close() {
+        }
+
+        @Override
+        public String getNameInNamespace() {
+            return null;
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/javax/naming/spi/providers/test.template	Thu Oct 16 14:14:57 2014 -0700
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import javax.naming.Context;
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
+import java.util.Properties;
+
+public class Test {
+
+    public static void main(String[] args) throws NamingException {
+        Properties env = System.getProperties();
+        Context ctx = new InitialContext(env);
+        try {
+            ctx.lookup("");
+        } finally {
+            ctx.close();
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/javax/print/RegisterNullService.java	Thu Oct 16 14:14:57 2014 -0700
@@ -0,0 +1,49 @@
+/*
+ * 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 8059219
+ * @summary Should not be able to register null service.
+ * @run main RegisterNullService
+*/
+
+import javax.print.PrintService;
+import javax.print.PrintServiceLookup;
+
+public class RegisterNullService {
+    public static void main (String [] args) throws RuntimeException {
+
+        boolean registered = PrintServiceLookup.registerService(null);
+        if (registered) {
+           throw new RuntimeException("Null service was registered");
+        }
+        PrintService[] services =
+            PrintServiceLookup.lookupPrintServices(null, null);
+        for (int i = 0; i < services.length; i++) {
+            if (services[i] == null) {
+                throw new RuntimeException("Null service found.");
+            }
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/javax/sound/midi/MidiDeviceProvider/NullInfo.java	Thu Oct 16 14:14:57 2014 -0700
@@ -0,0 +1,71 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.util.Collection;
+import java.util.HashSet;
+
+import javax.sound.midi.MidiDevice;
+import javax.sound.midi.MidiSystem;
+import javax.sound.midi.MidiUnavailableException;
+import javax.sound.midi.spi.MidiDeviceProvider;
+
+import static java.util.ServiceLoader.load;
+
+/**
+ * @test
+ * @bug 8058115
+ * @summary MidiDeviceProvider shouldn't returns incorrect results or throw NPE
+ *          in case of null MidiDevice.Info
+ * @author Sergey Bylokhov
+ */
+public final class NullInfo {
+
+    public static void main(final String[] args) {
+        // MidiSystem API
+        try {
+            MidiSystem.getMidiDevice(null);
+            throw new RuntimeException("IllegalArgumentException expected");
+        } catch (final MidiUnavailableException e) {
+            throw new RuntimeException("IllegalArgumentException expected", e);
+        } catch (final IllegalArgumentException ignored) {
+            // expected
+        }
+        // MidiDeviceProvider API
+        final Collection<String> errors = new HashSet<>();
+        for (final MidiDeviceProvider mdp : load(MidiDeviceProvider.class)) {
+            try {
+                if (mdp.isDeviceSupported(null)) {
+                    throw new RuntimeException("null is supported");
+                }
+                final MidiDevice device = mdp.getDevice(null);
+                System.err.println("MidiDevice: " + device);
+                throw new RuntimeException("IllegalArgumentException expected");
+            } catch (final IllegalArgumentException e) {
+                errors.add(e.getMessage());
+            }
+        }
+        if (errors.size() != 1) {
+            throw new RuntimeException("Wrong number of messages:" + errors);
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/javax/sound/midi/MidiDeviceProvider/UnsupportedInfo.java	Thu Oct 16 14:14:57 2014 -0700
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import javax.sound.midi.MidiDevice;
+import javax.sound.midi.MidiSystem;
+import javax.sound.midi.spi.MidiDeviceProvider;
+
+import static java.util.ServiceLoader.load;
+
+/**
+ * @test
+ * @bug 8058115
+ * @summary MidiDeviceProvider shouldn't returns incorrect results in case of
+ *          unsupported MidiDevice.Info
+ * @author Sergey Bylokhov
+ */
+public final class UnsupportedInfo {
+
+    public static void main(final String[] args) {
+        final MidiDevice.Info[] infos = MidiSystem.getMidiDeviceInfo();
+        for (final MidiDeviceProvider mdp : load(MidiDeviceProvider.class)) {
+            for (final MidiDevice.Info info : infos) {
+                if (mdp.isDeviceSupported(info)) {
+                    if (mdp.getDevice(info) == null) {
+                        throw new RuntimeException("MidiDevice is null");
+                    }
+                } else {
+                    try {
+                        mdp.getDevice(info);
+                        throw new RuntimeException(
+                                "IllegalArgumentException expected");
+                    } catch (final IllegalArgumentException ignored) {
+                        // expected
+                    }
+                }
+            }
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/javax/swing/text/NavigationFilter/8058305/bug8058305.java	Thu Oct 16 14:14:57 2014 -0700
@@ -0,0 +1,70 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+import javax.swing.JFormattedTextField;
+import javax.swing.JFrame;
+import javax.swing.SwingConstants;
+import javax.swing.SwingUtilities;
+import javax.swing.text.BadLocationException;
+import javax.swing.text.NavigationFilter;
+import javax.swing.text.Position;
+
+/*
+ * @test
+ * @bug 8058305
+ * @summary BadLocationException is not thrown by
+ *   javax.swing.text.View.getNextVisualPositionFrom() for invalid positions
+ * @run main bug8058305
+ */
+public class bug8058305 {
+
+    public static void main(String[] args) throws Exception {
+        SwingUtilities.invokeAndWait(bug8058305::createAndShowGUI);
+    }
+
+    private static void createAndShowGUI() {
+        JFrame frame = new JFrame();
+
+        JFormattedTextField textField = new JFormattedTextField();
+        NavigationFilter navigationFilter = new NavigationFilter();
+        textField.setText("Test for Tests");
+        frame.getContentPane().add(textField);
+        frame.pack();
+
+        Position.Bias[] biasRet = {Position.Bias.Forward};
+        try {
+            navigationFilter.getNextVisualPositionFrom(textField, 100,
+                    Position.Bias.Backward, SwingConstants.EAST, biasRet);
+            throw new RuntimeException("BadLocationException is not thrown!");
+        } catch (BadLocationException expectedException) {
+        }
+
+        frame.setVisible(true);
+
+        try {
+            navigationFilter.getNextVisualPositionFrom(textField, 200,
+                    Position.Bias.Forward, SwingConstants.WEST, biasRet);
+            throw new RuntimeException("BadLocationException is not thrown!");
+        } catch (BadLocationException expectedException) {
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/javax/xml/jaxp/testng/TEST.properties	Thu Oct 16 14:14:57 2014 -0700
@@ -0,0 +1,3 @@
+# This file identifies root(s) of the test-ng hierarchy.
+
+TestNG.dirs = .
--- a/test/javax/xml/jaxp/testng/validation/8037819/BaseTest.java	Thu Oct 16 12:02:05 2014 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,338 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import java.io.File;
-import java.net.URL;
-
-import javax.xml.XMLConstants;
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.transform.Result;
-import javax.xml.transform.Source;
-import javax.xml.transform.dom.DOMResult;
-import javax.xml.transform.dom.DOMSource;
-import javax.xml.validation.Schema;
-import javax.xml.validation.SchemaFactory;
-import javax.xml.validation.Validator;
-
-
-import com.sun.org.apache.xerces.internal.dom.PSVIElementNSImpl;
-import com.sun.org.apache.xerces.internal.impl.Constants;
-import com.sun.org.apache.xerces.internal.impl.xs.SchemaGrammar;
-import com.sun.org.apache.xerces.internal.xs.ElementPSVI;
-import com.sun.org.apache.xerces.internal.xs.ItemPSVI;
-import com.sun.org.apache.xerces.internal.xs.XSElementDeclaration;
-import com.sun.org.apache.xerces.internal.xs.XSTypeDefinition;
-import javax.xml.transform.stream.StreamSource;
-import org.w3c.dom.Document;
-import org.w3c.dom.Node;
-
-public abstract class BaseTest {
-    protected final static String ROOT_TYPE = Constants.XERCES_PROPERTY_PREFIX
-            + Constants.ROOT_TYPE_DEFINITION_PROPERTY;
-
-    protected final static String IGNORE_XSI_TYPE = Constants.XERCES_FEATURE_PREFIX
-            + Constants.IGNORE_XSI_TYPE_FEATURE;
-
-    protected final static String ID_IDREF_CHECKING = Constants.XERCES_FEATURE_PREFIX
-            + Constants.ID_IDREF_CHECKING_FEATURE;
-
-    protected final static String IDC_CHECKING = Constants.XERCES_FEATURE_PREFIX
-            + Constants.IDC_CHECKING_FEATURE;
-
-    protected final static String UNPARSED_ENTITY_CHECKING = Constants.XERCES_FEATURE_PREFIX
-            + Constants.UNPARSED_ENTITY_CHECKING_FEATURE;
-
-    protected final static String USE_GRAMMAR_POOL_ONLY = Constants.XERCES_FEATURE_PREFIX
-            + Constants.USE_GRAMMAR_POOL_ONLY_FEATURE;
-
-    protected final static String DYNAMIC_VALIDATION = Constants.XERCES_FEATURE_PREFIX
-            + Constants.DYNAMIC_VALIDATION_FEATURE;
-
-    protected final static String DOCUMENT_CLASS_NAME = Constants.XERCES_PROPERTY_PREFIX
-            + Constants.DOCUMENT_CLASS_NAME_PROPERTY;
-
-    protected Schema schema;
-    protected Validator fValidator;
-
-    protected SpecialCaseErrorHandler fErrorHandler;
-
-    DocumentBuilder builder;
-    protected Document fDocument;
-
-    protected ElementPSVI fRootNode;
-
-    protected URL fDocumentURL;
-    protected String documentPath;
-    protected String fDocumentId;
-
-    static String errMessage;
-
-    int passed = 0, failed = 0;
-
-    public static boolean isWindows = false;
-    static {
-        if (System.getProperty("os.name").indexOf("Windows")>-1) {
-            isWindows = true;
-        }
-    };
-    public static final String USER_DIR = System.getProperty("user.dir", ".");
-    public static final String BASE_DIR = System.getProperty("test.src", USER_DIR)
-            .replaceAll("\\" + System.getProperty("file.separator"), "/");
-
-    protected abstract String getSchemaFile();
-
-    protected abstract String getXMLDocument();
-
-    public BaseTest(String name) {
-        fErrorHandler = new SpecialCaseErrorHandler(getRelevantErrorIDs());
-    }
-
-    protected void setUp() throws Exception {
-
-        DocumentBuilderFactory docFactory = DocumentBuilderFactory
-                .newInstance();
-        docFactory.setAttribute(DOCUMENT_CLASS_NAME,
-                "com.sun.org.apache.xerces.internal.dom.PSVIDocumentImpl");
-        docFactory.setNamespaceAware(true);
-        builder = docFactory.newDocumentBuilder();
-
-        documentPath = BASE_DIR + "/" + getXMLDocument();
-System.out.println("documentPath:"+documentPath);
-        if (isWindows) {
-            fDocumentId = "file:/" + documentPath;
-        } else {
-            fDocumentId = "file:" + documentPath;
-        }
-        //fDocumentURL = ClassLoader.getSystemResource(documentPath);
-        //fDocumentURL = getClass().getResource(documentPath);
-System.out.println("fDocumentId:"+fDocumentId);
-//System.out.println("fDocumentURL.toExternalForm:"+fDocumentURL.toExternalForm());
-/**
-        if (fDocumentURL == null) {
-            throw new FileNotFoundException("Couldn't find xml file for test: " + documentPath);
-        }
-        fDocument = builder.parse(fDocumentURL.toExternalForm());
-        fRootNode = (ElementPSVI) fDocument.getDocumentElement();
-        */
-        SchemaFactory sf = SchemaFactory
-                .newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
-        sf.setFeature(USE_GRAMMAR_POOL_ONLY, getUseGrammarPoolOnly());
-        String schemaPath = BASE_DIR + "/" + getSchemaFile();
-        /**
-        URL schemaURL = ClassLoader.getSystemResource(schemaPath);
-        if (schemaURL == null) {
-            throw new FileNotFoundException("Couldn't find schema file for test: " + schemaPath);
-        }
-        */
-        schema = sf.newSchema(new StreamSource(new File(schemaPath)));
-    }
-
-    protected void tearDown() throws Exception {
-        fValidator = null;
-        fDocument = null;
-        fRootNode = null;
-        fErrorHandler.reset();
-        System.out.println("\nNumber of tests passed: " + passed);
-        System.out.println("Number of tests failed: " + failed + "\n");
-
-        if (errMessage != null) {
-            throw new RuntimeException(errMessage);
-        }
-    }
-
-    protected void validateDocument() throws Exception {
-        Source source = new DOMSource(fDocument);
-        source.setSystemId(fDocumentId);
-        Result result = new DOMResult(fDocument);
-        fValidator.validate(source, result);
-    }
-
-    protected void validateFragment() throws Exception {
-        Source source = new DOMSource((Node) fRootNode);
-        source.setSystemId(fDocumentId);
-        Result result = new DOMResult((Node) fRootNode);
-        fValidator.validate(source, result);
-    }
-
-    protected void reset() throws Exception {
-        try {
-System.out.println("new File(documentPath)" + new File(documentPath));
-
-        fDocument = builder.parse(new File(documentPath));
-        fRootNode = (ElementPSVI) fDocument.getDocumentElement();
-System.out.println("fDocument" + fDocument);
-System.out.println("fRootNode" + fRootNode);
-        fValidator = schema.newValidator();
-        fErrorHandler.reset();
-        fValidator.setErrorHandler(fErrorHandler);
-        fValidator.setFeature(DYNAMIC_VALIDATION, false);
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-    }
-
-    protected PSVIElementNSImpl getChild(int n) {
-        int numFound = 0;
-        Node child = ((Node) fRootNode).getFirstChild();
-        while (child != null) {
-            if (child.getNodeType() == Node.ELEMENT_NODE) {
-                numFound++;
-                if (numFound == n) {
-                    return (PSVIElementNSImpl) child;
-                }
-            }
-            child = child.getNextSibling();
-        }
-        return null;
-    }
-
-    protected String[] getRelevantErrorIDs() {
-        return new String[] {};
-    }
-
-    protected boolean getUseGrammarPoolOnly() {
-        return false;
-    }
-
-    // specialized asserts
-
-    protected void assertValidity(short expectedValidity, short actualValidity) {
-        String expectedString = expectedValidity == ItemPSVI.VALIDITY_VALID ? "valid"
-                : (expectedValidity == ItemPSVI.VALIDITY_INVALID ? "invalid"
-                        : "notKnown");
-        String actualString = actualValidity == ItemPSVI.VALIDITY_VALID ? "valid"
-                : (actualValidity == ItemPSVI.VALIDITY_INVALID ? "invalid"
-                        : "notKnown");
-        String message = "{validity} was <" + actualString
-                + "> but it should have been <" + expectedString + ">";
-        assertEquals(message, expectedValidity, actualValidity);
-    }
-
-    protected void assertValidationAttempted(short expectedAttempted,
-            short actualAttempted) {
-        String expectedString = expectedAttempted == ItemPSVI.VALIDATION_FULL ? "full"
-                : (expectedAttempted == ItemPSVI.VALIDATION_PARTIAL ? "partial"
-                        : "none");
-        String actualString = actualAttempted == ItemPSVI.VALIDATION_FULL ? "full"
-                : (actualAttempted == ItemPSVI.VALIDATION_PARTIAL ? "partial"
-                        : "none");
-        String message = "{validity} was <" + actualString
-                + "> but it should have been <" + expectedString + ">";
-        assertEquals(message, expectedAttempted, actualAttempted);
-    }
-
-    protected void assertElementName(String expectedName, String actualName) {
-        assertEquals("Local name of element declaration is wrong.",
-                expectedName, actualName);
-    }
-
-    protected void assertElementNull(XSElementDeclaration elem) {
-        assertNull("Element declaration should be null.", elem);
-    }
-
-    protected void assertElementNamespace(String expectedName, String actualName) {
-        assertEquals("Namespace of element declaration is wrong.",
-                expectedName, actualName);
-    }
-
-    protected void assertElementNamespaceNull(String actualName) {
-        assertNull("Local name of element declaration should be null.",
-                actualName);
-    }
-
-    protected void assertTypeName(String expectedName, String actualName) {
-        assertEquals("Local name of type definition is wrong.", expectedName,
-                actualName);
-    }
-
-    protected void assertTypeNull(XSTypeDefinition type) {
-        assertNull("Type definition should be null.", type);
-    }
-
-    protected void assertTypeNamespace(String expectedName, String actualName) {
-        assertEquals("Namespace of type definition is wrong.", expectedName,
-                actualName);
-    }
-
-    protected void assertTypeNamespaceNull(String actualName) {
-        assertNull("Namespace of type definition should be null.", actualName);
-    }
-
-    protected void assertError(String error) {
-        assertTrue("Error <" + error + "> should have occured, but did not.",
-                fErrorHandler.specialCaseFound(error));
-    }
-
-    protected void assertNoError(String error) {
-        assertFalse("Error <" + error
-                + "> should not have occured (but it did)", fErrorHandler
-                .specialCaseFound(error));
-    }
-
-    protected void assertAnyType(XSTypeDefinition type) {
-        assertEquals("Type is supposed to be anyType", SchemaGrammar.fAnyType,
-                type);
-    }
-
-    void assertEquals(String msg, Object expected, Object actual) {
-        if (!expected.equals(actual)) {
-            fail(msg + " Expected: " + expected + " Actual: " + actual);
-        } else {
-            success(null);
-        }
-    }
-    void assertNull(String msg, Object value) {
-        if (value != null) {
-            fail(msg);
-        } else {
-            success(null);
-        }
-    }
-    void assertTrue(String msg, boolean value) {
-        if (!value) {
-            fail(msg);
-        } else {
-            success(null);
-        }
-    }
-    void assertFalse(String msg, boolean value) {
-        if (value) {
-            fail(msg);
-        } else {
-            success(null);
-        }
-    }
-    void fail(String errMsg) {
-        if (errMessage == null) {
-            errMessage = errMsg;
-        } else {
-            errMessage = errMessage + "\n" + errMsg;
-        }
-        failed++;
-    }
-
-    void success(String msg) {
-        passed++;
-        System.out.println(msg);
-        if (msg != null) {
-            if (msg.length() != 0) {
-                System.out.println(msg);
-            }
-        }
-    }
-}
--- a/test/javax/xml/jaxp/testng/validation/8037819/BasicTest.java	Thu Oct 16 12:02:05 2014 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,82 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import com.sun.org.apache.xerces.internal.dom.PSVIElementNSImpl;
-import com.sun.org.apache.xerces.internal.xs.ItemPSVI;
-import org.testng.annotations.AfterClass;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.Test;
-
-public class BasicTest extends BaseTest {
-
-    protected String getXMLDocument() {
-        return "base.xml";
-    }
-
-    protected String getSchemaFile() {
-        return "base.xsd";
-    }
-
-    public BasicTest(String name) {
-        super(name);
-    }
-
-    @BeforeClass
-    protected void setUp() throws Exception {
-        super.setUp();
-    }
-
-    @AfterClass
-    protected void tearDown() throws Exception {
-        super.tearDown();
-    }
-
-    @Test
-    public void testSimpleValidation() {
-        try {
-            reset();
-            validateDocument();
-        } catch (Exception e) {
-            fail("Validation failed: " + e.getMessage());
-        }
-        doValidityAsserts();
-    }
-
-    @Test
-    public void testSimpleValidationWithTrivialXSIType() {
-        try {
-            reset();
-            ((PSVIElementNSImpl) fRootNode).setAttributeNS(
-                "http://www.w3.org/2001/XMLSchema-instance", "type", "X");
-            validateDocument();
-        } catch (Exception e) {
-            fail("Validation failed: " + e.getMessage());
-        }
-        doValidityAsserts();
-    }
-
-    private void doValidityAsserts() {
-        assertValidity(ItemPSVI.VALIDITY_VALID, fRootNode.getValidity());
-        assertValidationAttempted(ItemPSVI.VALIDATION_FULL, fRootNode
-                .getValidationAttempted());
-        assertElementName("A", fRootNode.getElementDeclaration().getName());
-        assertElementNamespaceNull(fRootNode.getElementDeclaration()
-                .getNamespace());
-        assertTypeName("X", fRootNode.getTypeDefinition().getName());
-        assertTypeNamespaceNull(fRootNode.getTypeDefinition().getNamespace());
-    }
-}
--- a/test/javax/xml/jaxp/testng/validation/8037819/FixedAttrTest.java	Thu Oct 16 12:02:05 2014 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,81 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import com.sun.org.apache.xerces.internal.dom.PSVIElementNSImpl;
-import com.sun.org.apache.xerces.internal.xs.ItemPSVI;
-import org.testng.annotations.AfterClass;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.Test;
-
-/**
- * The purpose of this test is to execute all of the isComparable calls in
- * XMLSchemaValidator. There are two calls in processElementContent and two
- * calls in processOneAttribute.
- *
- * @author peterjm
- */
-public class FixedAttrTest extends BaseTest {
-
-    protected String getXMLDocument() {
-        return "fixedAttr.xml";
-    }
-
-    protected String getSchemaFile() {
-        return "base.xsd";
-    }
-
-    public FixedAttrTest(String name) {
-        super(name);
-    }
-
-    @BeforeClass
-    protected void setUp() throws Exception {
-        super.setUp();
-    }
-
-    @AfterClass
-    protected void tearDown() throws Exception {
-        super.tearDown();
-    }
-
-    @Test
-    public void testDefault() {
-        try {
-            reset();
-            validateDocument();
-        } catch (Exception e) {
-            fail("Validation failed: " + e.getMessage());
-        }
-
-        assertValidity(ItemPSVI.VALIDITY_VALID, fRootNode.getValidity());
-        assertValidationAttempted(ItemPSVI.VALIDATION_FULL, fRootNode
-                .getValidationAttempted());
-        assertElementName("A", fRootNode.getElementDeclaration().getName());
-
-        PSVIElementNSImpl child = super.getChild(1);
-        assertValidity(ItemPSVI.VALIDITY_VALID, child.getValidity());
-        assertValidationAttempted(ItemPSVI.VALIDATION_FULL, child
-                .getValidationAttempted());
-        assertElementName("B", child.getElementDeclaration().getName());
-
-        child = super.getChild(2);
-        assertValidity(ItemPSVI.VALIDITY_VALID, child.getValidity());
-        assertValidationAttempted(ItemPSVI.VALIDATION_FULL, child
-                .getValidationAttempted());
-        assertElementName("D", child.getElementDeclaration().getName());
-    }
-}
--- a/test/javax/xml/jaxp/testng/validation/8037819/IdIdrefCheckingTest.java	Thu Oct 16 12:02:05 2014 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,160 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import com.sun.org.apache.xerces.internal.dom.PSVIElementNSImpl;
-import com.sun.org.apache.xerces.internal.xs.ItemPSVI;
-import org.xml.sax.SAXException;
-import org.testng.annotations.AfterClass;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.Test;
-
-// duplicate IDs
-// reference to non-existent ID
-
-public class IdIdrefCheckingTest extends BaseTest {
-    public static final String DUPLICATE_ID = "cvc-id.2";
-
-    public static final String NO_ID_BINDING = "cvc-id.1";
-
-    protected String getXMLDocument() {
-        return "idIdref.xml";
-    }
-
-    protected String getSchemaFile() {
-        return "base.xsd";
-    }
-
-    protected String[] getRelevantErrorIDs() {
-        return new String[] { DUPLICATE_ID, NO_ID_BINDING };
-    }
-
-    public IdIdrefCheckingTest(String name) {
-        super(name);
-    }
-
-    @BeforeClass
-    protected void setUp() throws Exception {
-        super.setUp();
-    }
-
-    @AfterClass
-    protected void tearDown() throws Exception {
-        super.tearDown();
-    }
-
-    @Test
-    public void testDefault() {
-        try {
-            reset();
-            validateDocument();
-        } catch (Exception e) {
-            fail("Validation failed: " + e.getMessage());
-        }
-
-        checkDefault();
-    }
-
-    @Test
-    public void testSetFalse() {
-        try {
-            reset();
-            fValidator.setFeature(ID_IDREF_CHECKING, false);
-            validateDocument();
-        } catch (Exception e) {
-            fail("Validation failed: " + e.getMessage());
-        }
-
-        checkValidResult();
-    }
-
-    @Test
-    public void testSetTrue() {
-        try {
-            reset();
-            fValidator.setFeature(ID_IDREF_CHECKING, true);
-            validateDocument();
-        } catch (Exception e) {
-            fail("Validation failed: " + e.getMessage());
-        }
-
-        checkDefault();
-    }
-
-    private void checkDefault() {
-        assertError(DUPLICATE_ID);
-        assertError(NO_ID_BINDING);
-
-        assertValidity(ItemPSVI.VALIDITY_INVALID, fRootNode.getValidity());
-        assertValidationAttempted(ItemPSVI.VALIDATION_FULL, fRootNode
-                .getValidationAttempted());
-        assertElementName("A", fRootNode.getElementDeclaration().getName());
-        assertTypeName("X", fRootNode.getTypeDefinition().getName());
-
-        PSVIElementNSImpl child = super.getChild(1);
-        assertValidity(ItemPSVI.VALIDITY_VALID, child.getValidity());
-        assertValidationAttempted(ItemPSVI.VALIDATION_FULL, child
-                .getValidationAttempted());
-        assertElementName("A", child.getElementDeclaration().getName());
-        assertTypeName("idType", child.getTypeDefinition().getName());
-
-        child = super.getChild(2);
-        assertValidity(ItemPSVI.VALIDITY_INVALID, child.getValidity());
-        assertValidationAttempted(ItemPSVI.VALIDATION_FULL, child
-                .getValidationAttempted());
-        assertElementName("A", child.getElementDeclaration().getName());
-        assertTypeName("idType", child.getTypeDefinition().getName());
-
-        child = super.getChild(3);
-        assertValidity(ItemPSVI.VALIDITY_VALID, child.getValidity());
-        assertValidationAttempted(ItemPSVI.VALIDATION_FULL, child
-                .getValidationAttempted());
-        assertElementName("A", child.getElementDeclaration().getName());
-        assertTypeName("idrefType", child.getTypeDefinition().getName());
-    }
-
-    private void checkValidResult() {
-        assertNoError(DUPLICATE_ID);
-        assertNoError(NO_ID_BINDING);
-
-        assertValidity(ItemPSVI.VALIDITY_VALID, fRootNode.getValidity());
-        assertValidationAttempted(ItemPSVI.VALIDATION_FULL, fRootNode
-                .getValidationAttempted());
-        assertElementName("A", fRootNode.getElementDeclaration().getName());
-        assertTypeName("X", fRootNode.getTypeDefinition().getName());
-
-        PSVIElementNSImpl child = super.getChild(1);
-        assertValidity(ItemPSVI.VALIDITY_VALID, child.getValidity());
-        assertValidationAttempted(ItemPSVI.VALIDATION_FULL, child
-                .getValidationAttempted());
-        assertElementName("A", child.getElementDeclaration().getName());
-        assertTypeName("idType", child.getTypeDefinition().getName());
-
-        child = super.getChild(2);
-        assertValidity(ItemPSVI.VALIDITY_VALID, child.getValidity());
-        assertValidationAttempted(ItemPSVI.VALIDATION_FULL, child
-                .getValidationAttempted());
-        assertElementName("A", child.getElementDeclaration().getName());
-        assertTypeName("idType", child.getTypeDefinition().getName());
-
-        child = super.getChild(3);
-        assertValidity(ItemPSVI.VALIDITY_VALID, child.getValidity());
-        assertValidationAttempted(ItemPSVI.VALIDATION_FULL, child
-                .getValidationAttempted());
-        assertElementName("A", child.getElementDeclaration().getName());
-        assertTypeName("idrefType", child.getTypeDefinition().getName());
-    }
-}
--- a/test/javax/xml/jaxp/testng/validation/8037819/IdentityConstraintCheckingTest.java	Thu Oct 16 12:02:05 2014 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,186 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import com.sun.org.apache.xerces.internal.dom.PSVIElementNSImpl;
-import com.sun.org.apache.xerces.internal.xs.ItemPSVI;
-import org.xml.sax.SAXException;
-import org.testng.annotations.AfterClass;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.Test;
-
-public class IdentityConstraintCheckingTest extends BaseTest {
-    // These values are unstable, since they're not actually error keys, but
-    // simply
-    // the first part of the error message.
-    public static final String DUPLICATE_UNIQUE = "cvc-identity-constraint.4.1";
-
-    public static final String DUPLICATE_KEY = "cvc-identity-constraint.4.2.2";
-
-    public static final String INVALID_KEYREF = "cvc-identity-constraint.4.3";
-
-    protected String getXMLDocument() {
-        return "idc.xml";
-    }
-
-    protected String getSchemaFile() {
-        return "idc.xsd";
-    }
-
-    protected String[] getRelevantErrorIDs() {
-        return new String[] { DUPLICATE_UNIQUE, DUPLICATE_KEY, INVALID_KEYREF };
-    }
-
-    public IdentityConstraintCheckingTest(String name) {
-        super(name);
-    }
-
-    @BeforeClass
-    protected void setUp() throws Exception {
-        super.setUp();
-    }
-
-    @AfterClass
-    protected void tearDown() throws Exception {
-        super.tearDown();
-    }
-
-    @Test
-    public void testDefault() {
-        try {
-            reset();
-            validateDocument();
-        } catch (Exception e) {
-            fail("Validation failed: " + e.getMessage());
-        }
-
-        checkDefault();
-    }
-
-    @Test
-    public void testSetFalse() {
-        try {
-            reset();
-            fValidator.setFeature(IDC_CHECKING, false);
-            validateDocument();
-        } catch (Exception e) {
-            fail("Validation failed: " + e.getMessage());
-        }
-
-        checkValidResult();
-    }
-
-    @Test
-    public void testSetTrue() {
-        try {
-            reset();
-            fValidator.setFeature(IDC_CHECKING, true);
-            validateDocument();
-        } catch (Exception e) {
-            fail("Validation failed: " + e.getMessage());
-        }
-
-        checkDefault();
-    }
-
-    private void checkDefault() {
-        assertError(DUPLICATE_UNIQUE);
-        assertError(DUPLICATE_KEY);
-        assertError(INVALID_KEYREF);
-
-        assertValidity(ItemPSVI.VALIDITY_INVALID, fRootNode.getValidity());
-        assertValidationAttempted(ItemPSVI.VALIDATION_FULL, fRootNode
-                .getValidationAttempted());
-        assertElementName("itemList", fRootNode.getElementDeclaration()
-                .getName());
-        assertTypeName("itemListType", fRootNode.getTypeDefinition().getName());
-
-        // this one is valid because it's the first one to define the unique
-        // value
-        PSVIElementNSImpl child = super.getChild(1);
-        assertValidity(ItemPSVI.VALIDITY_VALID, child.getValidity());
-        assertValidationAttempted(ItemPSVI.VALIDATION_FULL, child
-                .getValidationAttempted());
-        assertElementName("item", child.getElementDeclaration().getName());
-        assertTypeName("itemType", child.getTypeDefinition().getName());
-
-        // invalid because it repeats the unique value
-        child = super.getChild(2);
-        assertValidity(ItemPSVI.VALIDITY_INVALID, child.getValidity());
-        assertValidationAttempted(ItemPSVI.VALIDATION_FULL, child
-                .getValidationAttempted());
-        assertElementName("item", child.getElementDeclaration().getName());
-        assertTypeName("itemType", child.getTypeDefinition().getName());
-
-        // invalid because it repeats the key
-        child = super.getChild(3);
-        assertValidity(ItemPSVI.VALIDITY_INVALID, child.getValidity());
-        assertValidationAttempted(ItemPSVI.VALIDATION_FULL, child
-                .getValidationAttempted());
-        assertElementName("item", child.getElementDeclaration().getName());
-        assertTypeName("itemType", child.getTypeDefinition().getName());
-
-        // valid because key references aren't figured out until the validation
-        // root
-        child = super.getChild(4);
-        assertValidity(ItemPSVI.VALIDITY_VALID, child.getValidity());
-        assertValidationAttempted(ItemPSVI.VALIDATION_FULL, child
-                .getValidationAttempted());
-        assertElementName("itemRef", child.getElementDeclaration().getName());
-        assertTypeName("string", child.getTypeDefinition().getName());
-    }
-
-    private void checkValidResult() {
-        assertNoError(DUPLICATE_UNIQUE);
-        assertNoError(DUPLICATE_KEY);
-        assertNoError(INVALID_KEYREF);
-
-        assertValidity(ItemPSVI.VALIDITY_VALID, fRootNode.getValidity());
-        assertValidationAttempted(ItemPSVI.VALIDATION_FULL, fRootNode
-                .getValidationAttempted());
-        assertElementName("itemList", fRootNode.getElementDeclaration()
-                .getName());
-        assertTypeName("itemListType", fRootNode.getTypeDefinition().getName());
-
-        PSVIElementNSImpl child = super.getChild(1);
-        assertValidity(ItemPSVI.VALIDITY_VALID, child.getValidity());
-        assertValidationAttempted(ItemPSVI.VALIDATION_FULL, child
-                .getValidationAttempted());
-        assertElementName("item", child.getElementDeclaration().getName());
-        assertTypeName("itemType", child.getTypeDefinition().getName());
-
-        child = super.getChild(2);
-        assertValidity(ItemPSVI.VALIDITY_VALID, child.getValidity());
-        assertValidationAttempted(ItemPSVI.VALIDATION_FULL, child
-                .getValidationAttempted());
-        assertElementName("item", child.getElementDeclaration().getName());
-        assertTypeName("itemType", child.getTypeDefinition().getName());
-
-        child = super.getChild(3);
-        assertValidity(ItemPSVI.VALIDITY_VALID, child.getValidity());
-        assertValidationAttempted(ItemPSVI.VALIDATION_FULL, child
-                .getValidationAttempted());
-        assertElementName("item", child.getElementDeclaration().getName());
-        assertTypeName("itemType", child.getTypeDefinition().getName());
-
-        child = super.getChild(4);
-        assertValidity(ItemPSVI.VALIDITY_VALID, child.getValidity());
-        assertValidationAttempted(ItemPSVI.VALIDATION_FULL, child
-                .getValidationAttempted());
-        assertElementName("itemRef", child.getElementDeclaration().getName());
-        assertTypeName("string", child.getTypeDefinition().getName());
-    }
-}
--- a/test/javax/xml/jaxp/testng/validation/8037819/IgnoreXSITypeTest_A_A.java	Thu Oct 16 12:02:05 2014 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,151 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-import com.sun.org.apache.xerces.internal.dom.PSVIElementNSImpl;
-import com.sun.org.apache.xerces.internal.xs.ItemPSVI;
-import org.testng.annotations.AfterClass;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.Test;
-
-public class IgnoreXSITypeTest_A_A extends BaseTest {
-
-    protected String getXMLDocument() {
-        return "xsitype_A_A.xml";
-    }
-
-    protected String getSchemaFile() {
-        return "base.xsd";
-    }
-
-    public IgnoreXSITypeTest_A_A(String name) {
-        super(name);
-    }
-
-    @BeforeClass
-    protected void setUp() throws Exception {
-        super.setUp();
-    }
-
-    @AfterClass
-    protected void tearDown() throws Exception {
-        super.tearDown();
-    }
-
-    @Test
-    public void testDefaultDocument() {
-        try {
-            reset();
-            validateDocument();
-        } catch (Exception e) {
-            fail("Validation failed: " + e.getMessage());
-        }
-
-        // default value of the feature is false
-        checkFalseResult();
-    }
-
-    @Test
-    public void testDefaultFragment() {
-        try {
-            reset();
-            validateFragment();
-        } catch (Exception e) {
-            fail("Validation failed: " + e.getMessage());
-        }
-
-        // default value of the feature is false
-        checkFalseResult();
-    }
-
-    @Test
-    public void testSetFalseDocument() {
-        try {
-            reset();
-            fValidator.setFeature(IGNORE_XSI_TYPE, false);
-            validateDocument();
-        } catch (Exception e) {
-            fail("Validation failed: " + e.getMessage());
-        }
-
-        checkFalseResult();
-    }
-
-    @Test
-    public void testSetFalseFragment() {
-        try {
-            reset();
-            fValidator.setFeature(IGNORE_XSI_TYPE, false);
-            validateFragment();
-        } catch (Exception e) {
-            fail("Validation failed: " + e.getMessage());
-        }
-
-        checkFalseResult();
-    }
-
-    @Test
-    public void testSetTrueDocument() {
-        try {
-            reset();
-            fValidator.setFeature(IGNORE_XSI_TYPE, true);
-            validateDocument();
-        } catch (Exception e) {
-            fail("Validation failed: " + e.getMessage());
-        }
-
-        checkTrueResult();
-    }
-
-    @Test
-    public void testSetTrueFragment() {
-        try {
-            reset();
-            fValidator.setFeature(IGNORE_XSI_TYPE, true);
-            validateFragment();
-        } catch (Exception e) {
-            fail("Validation failed: " + e.getMessage());
-        }
-
-        checkTrueResult();
-    }
-
-    private void checkTrueResult() {
-        checkResult();
-    }
-
-    private void checkFalseResult() {
-        checkResult();
-    }
-
-    private void checkResult() {
-        assertValidity(ItemPSVI.VALIDITY_VALID, fRootNode.getValidity());
-        assertValidationAttempted(ItemPSVI.VALIDATION_FULL, fRootNode
-                .getValidationAttempted());
-        assertElementName("A", fRootNode.getElementDeclaration().getName());
-        assertTypeName("Y", fRootNode.getTypeDefinition().getName());
-        assertTypeNamespaceNull(fRootNode.getTypeDefinition().getNamespace());
-
-        PSVIElementNSImpl child = super.getChild(1);
-        assertValidity(ItemPSVI.VALIDITY_VALID, child.getValidity());
-        assertValidationAttempted(ItemPSVI.VALIDATION_FULL, child
-                .getValidationAttempted());
-        assertElementName("A", child.getElementDeclaration().getName());
-        assertTypeName("Y", child.getTypeDefinition().getName());
-        assertTypeNamespaceNull(child.getTypeDefinition().getNamespace());
-    }
-}
--- a/test/javax/xml/jaxp/testng/validation/8037819/IgnoreXSITypeTest_A_C.java	Thu Oct 16 12:02:05 2014 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,151 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import com.sun.org.apache.xerces.internal.dom.PSVIElementNSImpl;
-import com.sun.org.apache.xerces.internal.xs.ItemPSVI;
-import org.testng.annotations.AfterClass;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.Test;
-
-public class IgnoreXSITypeTest_A_C extends BaseTest {
-
-    protected String getXMLDocument() {
-        return "xsitype_A_C.xml";
-    }
-
-    protected String getSchemaFile() {
-        return "base.xsd";
-    }
-
-    public IgnoreXSITypeTest_A_C(String name) {
-        super(name);
-    }
-
-
-    @BeforeClass
-    protected void setUp() throws Exception {
-        super.setUp();
-    }
-
-    @AfterClass
-    protected void tearDown() throws Exception {
-        super.tearDown();
-    }
-
-    @Test
-    public void testDefaultDocument() {
-        try {
-            reset();
-            validateDocument();
-        } catch (Exception e) {
-            fail("Validation failed: " + e.getMessage());
-        }
-
-        // default value of the feature is false
-        checkFalseResult();
-    }
-
-    @Test
-    public void testDefaultFragment() {
-        try {
-            reset();
-            validateFragment();
-        } catch (Exception e) {
-            fail("Validation failed: " + e.getMessage());
-        }
-
-        // default value of the feature is false
-        checkFalseResult();
-    }
-
-    @Test
-    public void testSetFalseDocument() {
-        try {
-            reset();
-            fValidator.setFeature(IGNORE_XSI_TYPE, false);
-            validateDocument();
-        } catch (Exception e) {
-            fail("Validation failed: " + e.getMessage());
-        }
-
-        checkFalseResult();
-    }
-
-    @Test
-    public void testSetFalseFragment() {
-        try {
-            reset();
-            fValidator.setFeature(IGNORE_XSI_TYPE, false);
-            validateFragment();
-        } catch (Exception e) {
-            fail("Validation failed: " + e.getMessage());
-        }
-
-        checkFalseResult();
-    }
-
-    @Test
-    public void testSetTrueDocument() {
-        try {
-            reset();
-            fValidator.setFeature(IGNORE_XSI_TYPE, true);
-            validateDocument();
-        } catch (Exception e) {
-            fail("Validation failed: " + e.getMessage());
-        }
-
-        checkTrueResult();
-    }
-
-    @Test
-    public void testSetTrueFragment() {
-        try {
-            reset();
-            fValidator.setFeature(IGNORE_XSI_TYPE, true);
-            validateFragment();
-        } catch (Exception e) {
-            fail("Validation failed: " + e.getMessage());
-        }
-
-        checkTrueResult();
-    }
-
-    private void checkTrueResult() {
-        checkResult();
-    }
-
-    private void checkFalseResult() {
-        checkResult();
-    }
-
-    private void checkResult() {
-        assertValidity(ItemPSVI.VALIDITY_VALID, fRootNode.getValidity());
-        assertValidationAttempted(ItemPSVI.VALIDATION_FULL, fRootNode
-                .getValidationAttempted());
-        assertElementName("A", fRootNode.getElementDeclaration().getName());
-        assertTypeName("Y", fRootNode.getTypeDefinition().getName());
-        assertTypeNamespaceNull(fRootNode.getTypeDefinition().getNamespace());
-
-        PSVIElementNSImpl child = super.getChild(1);
-        assertValidity(ItemPSVI.VALIDITY_VALID, child.getValidity());
-        assertValidationAttempted(ItemPSVI.VALIDATION_FULL, child
-                .getValidationAttempted());
-        assertElementNull(child.getElementDeclaration());
-        assertTypeName("Y", child.getTypeDefinition().getName());
-        assertTypeNamespaceNull(child.getTypeDefinition().getNamespace());
-    }
-}
--- a/test/javax/xml/jaxp/testng/validation/8037819/IgnoreXSITypeTest_C_A.java	Thu Oct 16 12:02:05 2014 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,157 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import com.sun.org.apache.xerces.internal.dom.PSVIElementNSImpl;
-import com.sun.org.apache.xerces.internal.xs.ItemPSVI;
-import org.testng.annotations.AfterClass;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.Test;
-
-public class IgnoreXSITypeTest_C_A extends BaseTest {
-
-    protected String getXMLDocument() {
-        return "xsitype_C_A.xml";
-    }
-
-    protected String getSchemaFile() {
-        return "base.xsd";
-    }
-
-    public IgnoreXSITypeTest_C_A(String name) {
-        super(name);
-    }
-
-
-    @BeforeClass
-    protected void setUp() throws Exception {
-        super.setUp();
-    }
-
-    @AfterClass
-    protected void tearDown() throws Exception {
-        super.tearDown();
-    }
-
-    @Test
-    public void testDefaultDocument() {
-        try {
-            reset();
-            validateDocument();
-        } catch (Exception e) {
-            fail("Validation failed: " + e.getMessage());
-        }
-
-        // default value of the feature is false
-        checkFalseResult();
-    }
-
-    @Test
-    public void testDefaultFragment() {
-        try {
-            reset();
-            validateFragment();
-        } catch (Exception e) {
-            fail("Validation failed: " + e.getMessage());
-        }
-
-        // default value of the feature is false
-        checkFalseResult();
-    }
-
-    @Test
-    public void testSetFalseDocument() {
-        try {
-            reset();
-            fValidator.setFeature(IGNORE_XSI_TYPE, false);
-            validateDocument();
-        } catch (Exception e) {
-            fail("Validation failed: " + e.getMessage());
-        }
-
-        checkFalseResult();
-    }
-
-    @Test
-    public void testSetFalseFragment() {
-        try {
-            reset();
-            fValidator.setFeature(IGNORE_XSI_TYPE, false);
-            validateFragment();
-        } catch (Exception e) {
-            fail("Validation failed: " + e.getMessage());
-        }
-
-        checkFalseResult();
-    }
-
-    @Test
-    public void testSetTrueDocument() {
-        try {
-            reset();
-            fValidator.setFeature(IGNORE_XSI_TYPE, true);
-            validateDocument();
-        } catch (Exception e) {
-            fail("Validation failed: " + e.getMessage());
-        }
-
-        checkTrueResult();
-    }
-
-    @Test
-    public void testSetTrueFragment() {
-        try {
-            reset();
-            fValidator.setFeature(IGNORE_XSI_TYPE, true);
-            validateFragment();
-        } catch (Exception e) {
-            fail("Validation failed: " + e.getMessage());
-        }
-
-        checkTrueResult();
-    }
-
-    private void checkTrueResult() {
-        assertValidity(ItemPSVI.VALIDITY_NOTKNOWN, fRootNode.getValidity());
-        assertValidationAttempted(ItemPSVI.VALIDATION_PARTIAL, fRootNode
-                .getValidationAttempted());
-        assertElementNull(fRootNode.getElementDeclaration());
-        assertAnyType(fRootNode.getTypeDefinition());
-
-        checkChild();
-    }
-
-    private void checkFalseResult() {
-        assertValidity(ItemPSVI.VALIDITY_VALID, fRootNode.getValidity());
-        assertValidationAttempted(ItemPSVI.VALIDATION_FULL, fRootNode
-                .getValidationAttempted());
-        assertElementNull(fRootNode.getElementDeclaration());
-        assertTypeName("Y", fRootNode.getTypeDefinition().getName());
-        assertTypeNamespaceNull(fRootNode.getTypeDefinition().getNamespace());
-
-        checkChild();
-    }
-
-    private void checkChild() {
-        PSVIElementNSImpl child = super.getChild(1);
-        assertValidity(ItemPSVI.VALIDITY_VALID, child.getValidity());
-        assertValidationAttempted(ItemPSVI.VALIDATION_FULL, child
-                .getValidationAttempted());
-        assertElementName("A", child.getElementDeclaration().getName());
-        assertTypeName("Y", child.getTypeDefinition().getName());
-        assertTypeNamespaceNull(child.getTypeDefinition().getNamespace());
-    }
-}
--- a/test/javax/xml/jaxp/testng/validation/8037819/IgnoreXSITypeTest_C_AC.java	Thu Oct 16 12:02:05 2014 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,174 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import com.sun.org.apache.xerces.internal.dom.PSVIElementNSImpl;
-import com.sun.org.apache.xerces.internal.xs.ItemPSVI;
-import org.testng.annotations.AfterClass;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.Test;
-
-public class IgnoreXSITypeTest_C_AC extends BaseTest {
-
-    protected String getXMLDocument() {
-        return "xsitype_C_AC.xml";
-    }
-
-    protected String getSchemaFile() {
-        return "base.xsd";
-    }
-
-    public IgnoreXSITypeTest_C_AC(String name) {
-        super(name);
-    }
-
-
-    @BeforeClass
-    protected void setUp() throws Exception {
-        super.setUp();
-    }
-
-    @AfterClass
-    protected void tearDown() throws Exception {
-        super.tearDown();
-    }
-
-    @Test
-    public void testDefaultDocument() {
-        try {
-            reset();
-            validateDocument();
-        } catch (Exception e) {
-            fail("Validation failed: " + e.getMessage());
-        }
-
-        // default value of the feature is false
-        checkFalseResult();
-    }
-
-    @Test
-    public void testDefaultFragment() {
-        try {
-            reset();
-            validateFragment();
-        } catch (Exception e) {
-            fail("Validation failed: " + e.getMessage());
-        }
-
-        // default value of the feature is false
-        checkFalseResult();
-    }
-
-    @Test
-    public void testSetFalseDocument() {
-        try {
-            reset();
-            fValidator.setFeature(IGNORE_XSI_TYPE, false);
-            validateDocument();
-        } catch (Exception e) {
-            fail("Validation failed: " + e.getMessage());
-        }
-
-        checkFalseResult();
-    }
-
-    @Test
-    public void testSetFalseFragment() {
-        try {
-            reset();
-            fValidator.setFeature(IGNORE_XSI_TYPE, false);
-            validateFragment();
-        } catch (Exception e) {
-            fail("Validation failed: " + e.getMessage());
-        }
-
-        checkFalseResult();
-    }
-
-    @Test
-    public void testSetTrueDocument() {
-        try {
-            reset();
-            fValidator.setFeature(IGNORE_XSI_TYPE, true);
-            validateDocument();
-        } catch (Exception e) {
-            fail("Validation failed: " + e.getMessage());
-        }
-
-        checkTrueResult();
-    }
-
-    @Test
-    public void testSetTrueFragment() {
-        try {
-            reset();
-            fValidator.setFeature(IGNORE_XSI_TYPE, true);
-            validateFragment();
-        } catch (Exception e) {
-            fail("Validation failed: " + e.getMessage());
-        }
-
-        checkTrueResult();
-    }
-
-    private void checkTrueResult() {
-        assertValidity(ItemPSVI.VALIDITY_NOTKNOWN, fRootNode.getValidity());
-        assertValidationAttempted(ItemPSVI.VALIDATION_PARTIAL, fRootNode
-                .getValidationAttempted());
-        assertElementNull(fRootNode.getElementDeclaration());
-        assertAnyType(fRootNode.getTypeDefinition());
-
-        PSVIElementNSImpl child = super.getChild(1);
-        assertValidity(ItemPSVI.VALIDITY_VALID, child.getValidity());
-        assertValidationAttempted(ItemPSVI.VALIDATION_FULL, child
-                .getValidationAttempted());
-        assertElementName("A", child.getElementDeclaration().getName());
-        assertTypeName("Y", child.getTypeDefinition().getName());
-        assertTypeNamespaceNull(child.getTypeDefinition().getNamespace());
-
-        child = super.getChild(2);
-        assertValidity(ItemPSVI.VALIDITY_NOTKNOWN, child.getValidity());
-        assertValidationAttempted(ItemPSVI.VALIDATION_NONE, child
-                .getValidationAttempted());
-        assertElementNull(child.getElementDeclaration());
-        assertAnyType(child.getTypeDefinition());
-    }
-
-    private void checkFalseResult() {
-        assertValidity(ItemPSVI.VALIDITY_VALID, fRootNode.getValidity());
-