--- a/.hgtags Thu Aug 06 17:16:31 2009 -0700
+++ b/.hgtags Thu Aug 06 17:26:35 2009 -0700
@@ -41,3 +41,4 @@ a50217eb3ee10b9f9547e0708e5c9625405083ef
a50217eb3ee10b9f9547e0708e5c9625405083ef jdk7-b64
382a27aa78d3236fa123c60577797a887fe93e09 jdk7-b65
bd31b30a5b21f20e42965b1633f18a5c7946d398 jdk7-b66
+a952aafd5181af953b0ef3010dbd2fcc28460e8a jdk7-b67
--- a/make/com/sun/crypto/provider/Makefile Thu Aug 06 17:16:31 2009 -0700
+++ b/make/com/sun/crypto/provider/Makefile Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
#
-# Copyright 2007-2008 Sun Microsystems, Inc. All Rights Reserved.
+# Copyright 2007-2009 Sun Microsystems, Inc. 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
@@ -45,54 +45,49 @@
# For OpenJDK, the jar files built here are installed directly into the
# OpenJDK.
#
-# For JDK, the binaries use pre-built/pre-signed/pre-obfuscated binary
-# files stored in the closed workspace that are not shipped in the
-# OpenJDK workspaces. We still build the JDK files here to verify the
-# files compile, and in preparation for possible signing and
-# obfuscation. Developers working on JCE in JDK must sign the JCE files
-# before testing: obfuscation is optional during development. The JCE
-# signing key is kept separate from the JDK workspace to prevent its
-# disclosure. The obfuscation tool has not been licensed for general
-# usage.
-#
+# For JDK, the binaries use pre-built/pre-signed binary files stored in
+# the closed workspace that are not shipped in the OpenJDK workspaces.
+# We still build the JDK files here to verify the files compile, and in
+# preparation for possible signing. Developers working on JCE in JDK
+# must sign the JCE files before testing. The JCE signing key is kept
+# separate from the JDK workspace to prevent its disclosure.
+#
# SPECIAL NOTE TO JCE/JDK developers: The source files must eventually
-# be built, obfuscated, signed, and then the resulting jar files MUST BE
-# CHECKED INTO THE CLOSED PART OF THE WORKSPACE*. This separate step
-# *MUST NOT BE FORGOTTEN*, otherwise a bug fixed in the source code will
-# not be reflected in the shipped binaries. The "release" target should be
+# be built and signed, and the resulting jar files MUST BE CHECKED INTO
+# THE CLOSED PART OF THE WORKSPACE*. This separate step *MUST NOT BE
+# FORGOTTEN*, otherwise a bug fixed in the source code will not be
+# reflected in the shipped binaries. The "release" target should be
# used to generate the required files.
#
# There are a number of targets to help both JDK/OpenJDK developers.
#
# Main Targets (JDK/OPENJDK):
#
-# all/clobber/clean The usual.
-# If OpenJDK, installs sunjce_provider.jar.
-# If JDK, installs prebuilt
-# sunjce_provider.jar.
-#
-# jar Builds/installs sunjce_provider.jar
-# If OpenJDK, does not sign.
-# If JDK, tries to sign.
+# all/clobber/clean The usual.
+# If OpenJDK, installs sunjce_provider.jar.
+# If JDK, installs prebuilt
+# sunjce_provider.jar.
+#
+# jar Builds/installs sunjce_provider.jar
+# If OpenJDK, does not sign.
+# If JDK, tries to sign.
#
# Other lesser-used Targets (JDK/OPENJDK):
#
-# build-jar Builds sunjce_provider.jar
-# (does not sign/install)
-#
-# install-jar Alias for "jar" above.
+# build-jar Builds sunjce_provider.jar
+# (does not sign/install)
+#
+# install-jar Alias for "jar" above.
#
# Other targets (JDK only):
#
-# sign Alias for sign-jar
-# sign-jar Builds/signs sunjce_provider.jar (no install)
-#
-# obfus Builds/obfuscates/signs sunjce_provider.jar
-#
-# release Builds all targets in preparation
-# for workspace integration.
-#
-# install-prebuilt Installs the pre-built jar files
+# sign Alias for sign-jar
+# sign-jar Builds/signs sunjce_provider.jar (no install)
+#
+# release Builds all targets in preparation
+# for workspace integration.
+#
+# install-prebuilt Installs the pre-built jar files
#
# This makefile was written to support parallel target execution.
#
@@ -103,7 +98,7 @@ PRODUCT = sun
#
# The following is for when we need to do postprocessing
-# (signing/obfuscation) against a read-only build. If the OUTPUTDIR
+# (signing) against a read-only build. If the OUTPUTDIR
# isn't writable, the build currently crashes out.
#
ifndef OPENJDK
@@ -158,8 +153,8 @@ endif # OPENJDK
#
# We use a variety of subdirectories in the $(TEMPDIR) depending on what
# part of the build we're doing. Both OPENJDK/JDK builds are initially
-# done in the unsigned area. When files are signed or obfuscated in JDK,
-# they will be placed in the appropriate areas.
+# done in the unsigned area. When files are signed in JDK, they will be
+# placed in the appropriate areas.
#
UNSIGNED_DIR = $(TEMPDIR)/unsigned
@@ -223,61 +218,15 @@ endif
endif
$(call sign-file, $(UNSIGNED_DIR)/sunjce_provider.jar)
-# =====================================================
-# Obfuscate/sign/install the JDK build. Not needed for OpenJDK.
-#
-
-OBFUS_DIR = $(JCE_BUILD_DIR)/obfus/sunjce
-
-CLOSED_DIR = $(BUILDDIR)/closed/com/sun/crypto/provider
-
-obfus: $(OBFUS_DIR)/sunjce_provider.jar
- $(release-warning)
-
-ifndef ALT_JCE_BUILD_DIR
-$(OBFUS_DIR)/sunjce_provider.jar: build-jar $(JCE_MANIFEST_FILE) \
- $(OBFUS_DIR)/sunjce.dox
-else
-$(OBFUS_DIR)/sunjce_provider.jar: $(JCE_MANIFEST_FILE) $(OBFUS_DIR)/sunjce.dox
- @if [ ! -d $(CLASSDESTDIR) ] ; then \
- $(ECHO) "Couldn't find $(CLASSDESTDIR)"; \
- exit 1; \
- fi
-endif
- @$(ECHO) ">>>Obfuscating SunJCE Provider..."
- $(presign)
- $(preobfus)
- $(prep-target)
- $(CD) $(OBFUS_DIR); \
- $(OBFUSCATOR) -fv sunjce.dox
- @$(CD) $(OBFUS_DIR); $(java-vm-cleanup)
- $(BOOT_JAR_CMD) cmf $(JCE_MANIFEST_FILE) $@ \
- -C $(OBFUS_DIR)/build com \
- $(BOOT_JAR_JFLAGS)
- $(sign-target)
- @$(java-vm-cleanup)
-
-$(OBFUS_DIR)/sunjce.dox: $(CLOSED_DIR)/obfus/sunjce.dox
- @$(ECHO) ">>>Creating sunjce.dox"
- $(prep-target)
- $(SED) "s:@@TEMPDIR@@:$(ABS_TEMPDIR):" $< > $@
-
-#
-# The current obfuscator has a limitation in that it currently only
-# supports up to v49 class file format. Force v49 classfiles in our
-# builds for now.
-#
-TARGET_CLASS_VERSION = 5
-
-
-# =====================================================
-# Create the Release Engineering files. Obfuscated builds, etc.
-#
-
-release: $(OBFUS_DIR)/sunjce_provider.jar
+
+# =====================================================
+# Create the Release Engineering files. Signed builds, etc.
+#
+
+release: $(SIGNED_DIR)/sunjce_provider.jar
$(RM) $(JCE_BUILD_DIR)/release/sunjce_provider.jar
$(MKDIR) -p $(JCE_BUILD_DIR)/release
- $(CP) $(OBFUS_DIR)/sunjce_provider.jar $(JCE_BUILD_DIR)/release
+ $(CP) $(SIGNED_DIR)/sunjce_provider.jar $(JCE_BUILD_DIR)/release
$(release-warning)
endif # OPENJDK
@@ -319,5 +268,5 @@ clobber clean::
.PHONY: build-jar jar install-jar
ifndef OPENJDK
-.PHONY: sign sign-jar obfus release install-prebuilt
-endif
+.PHONY: sign sign-jar release install-prebuilt
+endif
--- a/make/common/Defs-linux.gmk Thu Aug 06 17:16:31 2009 -0700
+++ b/make/common/Defs-linux.gmk Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
#
-# Copyright 1999-2008 Sun Microsystems, Inc. All Rights Reserved.
+# Copyright 1999-2009 Sun Microsystems, Inc. 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
--- a/make/common/Release.gmk Thu Aug 06 17:16:31 2009 -0700
+++ b/make/common/Release.gmk Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
#
-# Copyright 1997-2008 Sun Microsystems, Inc. All Rights Reserved.
+# Copyright 1997-2009 Sun Microsystems, Inc. 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
--- a/make/common/shared/Defs-control.gmk Thu Aug 06 17:16:31 2009 -0700
+++ b/make/common/shared/Defs-control.gmk Thu Aug 06 17:26:35 2009 -0700
@@ -92,9 +92,9 @@ dummy := $(shell $(MKDIR) -p $(TEMP_DIR)
dummy := $(shell $(MKDIR) -p $(TEMP_DIR))
# The language version we want for this jdk build
-SOURCE_LANGUAGE_VERSION=5
+SOURCE_LANGUAGE_VERSION=7
# The class version we want for this jdk build
-TARGET_CLASS_VERSION=5
+TARGET_CLASS_VERSION=7
# The MESSAGE, WARNING and ERROR files are used to store sanity check and
# source check messages, warnings and errors.
--- a/make/common/shared/Defs-java.gmk Thu Aug 06 17:16:31 2009 -0700
+++ b/make/common/shared/Defs-java.gmk Thu Aug 06 17:26:35 2009 -0700
@@ -122,13 +122,13 @@ ifeq ($(JAVAC_WARNINGS_FATAL), true)
JAVACFLAGS += -Werror
endif
-# Add the source level (currently all source is 1.5, should this be 1.6?)
-SOURCE_LANGUAGE_VERSION = 5
+# Add the source level
+SOURCE_LANGUAGE_VERSION = 7
LANGUAGE_VERSION = -source $(SOURCE_LANGUAGE_VERSION)
JAVACFLAGS += $(LANGUAGE_VERSION)
-# Add the class version we want (currently this is 5, should it be 6 or even 7?)
-TARGET_CLASS_VERSION = 5
+# Add the class version we want
+TARGET_CLASS_VERSION = 7
CLASS_VERSION = -target $(TARGET_CLASS_VERSION)
JAVACFLAGS += $(CLASS_VERSION)
JAVACFLAGS += -encoding ascii
--- a/make/common/shared/Defs-windows.gmk Thu Aug 06 17:16:31 2009 -0700
+++ b/make/common/shared/Defs-windows.gmk Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
#
-# Copyright 2005-2008 Sun Microsystems, Inc. All Rights Reserved.
+# Copyright 2005-2009 Sun Microsystems, Inc. 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
--- a/make/common/shared/Defs.gmk Thu Aug 06 17:16:31 2009 -0700
+++ b/make/common/shared/Defs.gmk Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
#
-# Copyright 2005-2008 Sun Microsystems, Inc. All Rights Reserved.
+# Copyright 2005-2009 Sun Microsystems, Inc. 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
--- a/make/common/shared/Sanity.gmk Thu Aug 06 17:16:31 2009 -0700
+++ b/make/common/shared/Sanity.gmk Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
#
-# Copyright 2005-2008 Sun Microsystems, Inc. All Rights Reserved.
+# Copyright 2005-2009 Sun Microsystems, Inc. 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
--- a/make/java/dyn/Makefile Thu Aug 06 17:16:31 2009 -0700
+++ b/make/java/dyn/Makefile Thu Aug 06 17:26:35 2009 -0700
@@ -33,8 +33,8 @@ AUTO_FILES_JAVA_DIRS = java/dyn sun/dyn
# The sources built here use new language syntax to generate
# method handle calls. Let's be sure we are using that format.
-#LANGUAGE_VERSION = -source 7
-#CLASS_VERSION = -target 7
+LANGUAGE_VERSION = -source 7
+CLASS_VERSION = -target 7
# Actually, it will be less disruptive to compile with the same
# -target option as the rest of the system, and just turn on
--- a/make/java/redist/Makefile Thu Aug 06 17:16:31 2009 -0700
+++ b/make/java/redist/Makefile Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
#
-# Copyright 1997-2007 Sun Microsystems, Inc. All Rights Reserved.
+# Copyright 1997-2009 Sun Microsystems, Inc. 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
--- a/make/javax/crypto/Defs-jce.gmk Thu Aug 06 17:16:31 2009 -0700
+++ b/make/javax/crypto/Defs-jce.gmk Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
#
-# Copyright 2007-2008 Sun Microsystems, Inc. All Rights Reserved.
+# Copyright 2007-2009 Sun Microsystems, Inc. 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
@@ -61,7 +61,7 @@ SIGNING_ALIAS = jce_rsa
SIGNING_ALIAS = jce_rsa
#
-# Defines for signing/obfuscating the various jar files.
+# Defines for signing the various jar files.
#
define presign
@@ -100,19 +100,4 @@ define sign-file
$(sign-target)
endef
-#
-# Location for the Obfuscation product. JDK currently has
-# the requirement that we obfuscate our JCE jars.
-#
-OBFUSCATOR = /security/tools/bin/obfus
-OBFUS_DIR = $(TEMPDIR)/obfus
-
-define preobfus
- @if [ ! -f $(OBFUSCATOR) ]; then \
- $(ECHO) "\n$(OBFUSCATOR): Obfuscator *NOT* available..." \
- $(README-MAKEFILE_WARNING); \
- exit 2; \
- fi
-endef
-
endif # !OPENJDK
--- a/make/javax/crypto/Makefile Thu Aug 06 17:16:31 2009 -0700
+++ b/make/javax/crypto/Makefile Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
#
-# Copyright 2007-2008 Sun Microsystems, Inc. All Rights Reserved.
+# Copyright 2007-2009 Sun Microsystems, Inc. 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
@@ -44,64 +44,65 @@
# For OpenJDK, the jar files built here are installed directly into the
# OpenJDK.
#
-# For JDK, the binaries use pre-built/pre-signed/pre-obfuscated binary
-# files stored in the closed workspace that are not shipped in the
-# OpenJDK workspaces. We still build the JDK files here to verify the
-# files compile, and in preparation for possible signing and
-# obfuscation. Developers working on JCE in JDK must sign the JCE files
-# before testing: obfuscation is optional during development. The JCE
-# signing key is kept separate from the JDK workspace to prevent its
-# disclosure. The obfuscation tool has not been licensed for general
-# usage.
+# For JDK, the binaries use pre-built/pre-signed binary files stored in
+# the closed workspace that are not shipped in the OpenJDK workspaces.
+# We still build the JDK files here to verify the files compile, and in
+# preparation for possible signing. Developers working on JCE in JDK
+# must sign the JCE files before testing. The JCE signing key is kept
+# separate from the JDK workspace to prevent its disclosure.
#
# SPECIAL NOTE TO JCE/JDK developers: The source files must eventually
-# be built, obfuscated, signed, and the resulting jar files *MUST BE
-# CHECKED INTO THE CLOSED PART OF THE WORKSPACE*. This separate step
-# *MUST NOT BE FORGOTTEN*, otherwise a bug fixed in the source code will
-# not be reflected in the shipped binaries. The "release" target should
-# be used to generate the required files.
+# be built and signed, and the resulting jar files *MUST BE CHECKED INTO
+# THE CLOSED PART OF THE WORKSPACE*. This separate step *MUST NOT BE
+# FORGOTTEN*, otherwise a bug fixed in the source code will not be
+# reflected in the shipped binaries. The "release" target should be
+# used to generate the required files.
#
# There are a number of targets to help both JDK/OpenJDK developers.
#
# Main Targets (JDK/OPENJDK):
#
-# all/clobber/clean The usual.
-# If OpenJDK, installs
-# jce.jar/limited policy files.
-# If JDK, installs prebuilt
-# jce.jar/limited policy files.
-#
-# jar Builds/installs jce.jar
-# If OpenJDK, does not sign
-# If JDK, tries to sign
+# all/clobber/clean The usual.
+# If OpenJDK: builds/installs the
+# jce.jar/limited policy files.
+# If JDK: builds but does not install.
+# During full tops-down builds,
+# prebuilt/presigned jce.jar &
+# limited policy files are copied
+# in by make/java/redist/Makefile.
+# If you are working in this directory
+# and want to install the prebuilts,
+# use the "install-prebuilt" target.
+#
+# jar Builds/installs jce.jar
+# If OpenJDK, does not sign
+# If JDK, tries to sign
#
# Other lesser-used Targets (JDK/OPENJDK):
#
-# build-jar Builds jce.jar (does not sign/install)
-#
-# build-policy Builds policy files (does not sign/install)
-#
-# install-jar Alias for "jar" above
-#
-# install-limited Builds/installs limited policy files
-# If OpenJDK, does not sign
-# If JDK, tries to sign
-# install-unlimited Builds/nstalls unlimited policy files
-# If OpenJDK, does not sign
-# If JDK, tries to sign
+# build-jar Builds jce.jar (does not sign/install)
+#
+# build-policy Builds policy files (does not sign/install)
+#
+# install-jar Alias for "jar" above
+#
+# install-limited Builds/installs limited policy files
+# If OpenJDK, does not sign
+# If JDK, tries to sign
+# install-unlimited Builds/nstalls unlimited policy files
+# If OpenJDK, does not sign
+# If JDK, tries to sign
#
# Other targets (JDK only):
#
-# sign Alias for sign-jar and sign-policy
-# sign-jar Builds/signs jce.jar file (no install)
-# sign-policy Builds/signs policy files (no install)
-#
-# obfus Builds/obfuscates/signs jce.jar
-#
-# release Builds all targets in preparation
-# for workspace integration.
-#
-# install-prebuilt Installs the pre-built jar files
+# sign Alias for sign-jar and sign-policy
+# sign-jar Builds/signs jce.jar file (no install)
+# sign-policy Builds/signs policy files (no install)
+#
+# release Builds all targets in preparation
+# for workspace integration.
+#
+# install-prebuilt Installs the pre-built jar files
#
# This makefile was written to support parallel target execution.
#
@@ -112,7 +113,7 @@ PRODUCT = sun
#
# The following is for when we need to do postprocessing
-# (signing/obfuscation) against a read-only build. If the OUTPUTDIR
+# (signing) against a read-only build. If the OUTPUTDIR
# isn't writable, the build currently crashes out.
#
ifndef OPENJDK
@@ -169,8 +170,8 @@ endif # OPENJDK
#
# We use a variety of subdirectories in the $(TEMPDIR) depending on what
# part of the build we're doing. Both OPENJDK/JDK builds are initially
-# done in the unsigned area. When files are signed or obfuscated in JDK,
-# they will be placed in the appropriate areas.
+# done in the unsigned area. When files are signed in JDK, they will be
+# placed in the appropriate areas.
#
UNSIGNED_DIR = $(TEMPDIR)/unsigned
@@ -178,7 +179,7 @@ include Defs-jce.gmk
# =====================================================
-# Build the unsigned jce.jar file. Signing/obfuscation comes later.
+# Build the unsigned jce.jar file. Signing comes later.
#
JAR_DESTFILE = $(LIBDIR)/jce.jar
@@ -363,68 +364,13 @@ endif
# =====================================================
-# Obfuscate/sign/install the JDK build. Not needed for OpenJDK.
-#
-
-OBFUS_DIR = $(JCE_BUILD_DIR)/obfus/jce
+# Create the Release Engineering files. Signed builds,
+# unlimited policy file distribution, etc.
+#
CLOSED_DIR = $(BUILDDIR)/closed/javax/crypto
-obfus: $(OBFUS_DIR)/jce.jar
- $(release-warning)
-
-ifndef ALT_JCE_BUILD_DIR
-$(OBFUS_DIR)/jce.jar: build-jar $(JCE_MANIFEST_FILE) $(OBFUS_DIR)/framework.dox
-else
-#
-# We have to remove the build dependency, otherwise, we'll try to rebuild it
-# which we can't do on a read-only filesystem.
-#
-$(OBFUS_DIR)/jce.jar: $(JCE_MANIFEST_FILE) $(OBFUS_DIR)/framework.dox
- @if [ ! -d $(CLASSDESTDIR) ] ; then \
- $(ECHO) "Couldn't find $(CLASSDESTDIR)"; \
- exit 1; \
- fi
-endif
- @$(ECHO) ">>>Obfuscating JCE framework..."
- $(presign)
- $(preobfus)
- $(prep-target)
- $(CD) $(OBFUS_DIR); \
- $(OBFUSCATOR) -fv framework.dox
- @$(CD) $(OBFUS_DIR); $(java-vm-cleanup)
- @#
- @# The sun.security.internal classes are currently not obfuscated
- @# due to an obfus problem. Manually copy them to the build directory
- @# so that they are included in the jce.jar file.
- @#
- $(CP) -r $(CLASSDESTDIR)/sun $(OBFUS_DIR)/build
- $(BOOT_JAR_CMD) cmf $(JCE_MANIFEST_FILE) $@ \
- -C $(OBFUS_DIR)/build javax \
- -C $(OBFUS_DIR)/build sun \
- $(BOOT_JAR_JFLAGS)
- $(sign-target)
- @$(java-vm-cleanup)
-
-$(OBFUS_DIR)/framework.dox: $(CLOSED_DIR)/obfus/framework.dox
- @$(ECHO) ">>>Creating framework.dox"
- $(prep-target)
- $(SED) "s:@@TEMPDIR@@:$(ABS_TEMPDIR):" $< > $@
-
-#
-# The current obfuscator has a limitation in that it currently only
-# supports up to v49 class file format. Force v49 classfiles in our
-# builds for now.
-#
-TARGET_CLASS_VERSION = 5
-
-
-# =====================================================
-# Create the Release Engineering files. Obfuscated builds,
-# unlimited policy file distribution, etc.
-#
-
-release: $(OBFUS_DIR)/jce.jar sign-policy $(CLOSED_DIR)/doc/COPYRIGHT.html \
+release: $(SIGNED_DIR)/jce.jar sign-policy $(CLOSED_DIR)/doc/COPYRIGHT.html \
$(CLOSED_DIR)/doc/README.txt
$(RM) -r \
$(JCE_BUILD_DIR)/release/UnlimitedJCEPolicy \
@@ -433,7 +379,7 @@ release: $(OBFUS_DIR)/jce.jar sign-polic
$(JCE_BUILD_DIR)/release/local_policy.jar \
$(JCE_BUILD_DIR)/release/UnlimitedJCEPolicy.zip
$(MKDIR) -p $(JCE_BUILD_DIR)/release/UnlimitedJCEPolicy
- $(CP) $(OBFUS_DIR)/jce.jar $(JCE_BUILD_DIR)/release
+ $(CP) $(SIGNED_DIR)/jce.jar $(JCE_BUILD_DIR)/release
$(CP) \
$(SIGNED_POLICY_BUILDDIR)/limited/US_export_policy.jar \
$(SIGNED_POLICY_BUILDDIR)/limited/local_policy.jar \
@@ -529,5 +475,5 @@ clobber clean::
.PHONY: build-jar jar build-policy unlimited limited install-jar \
install-limited install-unlimited
ifndef OPENJDK
-.PHONY: sign sign-jar sign-policy obfus release install-prebuilt
-endif
+.PHONY: sign sign-jar sign-policy release install-prebuilt
+endif
--- a/make/sun/Makefile Thu Aug 06 17:16:31 2009 -0700
+++ b/make/sun/Makefile Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
#
-# Copyright 1995-2008 Sun Microsystems, Inc. All Rights Reserved.
+# Copyright 1995-2009 Sun Microsystems, Inc. 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
--- a/make/sun/security/mscapi/Makefile Thu Aug 06 17:16:31 2009 -0700
+++ b/make/sun/security/mscapi/Makefile Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
#
-# Copyright 2005-2008 Sun Microsystems, Inc. All Rights Reserved.
+# Copyright 2005-2009 Sun Microsystems, Inc. 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
@@ -59,31 +59,31 @@
#
# Main Targets (JDK/OPENJDK):
#
-# all/clobber/clean The usual, plus the native libraries.
-# If OpenJDK, installs sunmscapi.jar.
-# If JDK, installs prebuilt
-# sunmscapi.jar.
-#
-# jar Builds/installs sunmscapi.jar
-# If OpenJDK, does not sign.
-# If JDK, tries to sign.
+# all/clobber/clean The usual, plus the native libraries.
+# If OpenJDK, installs sunmscapi.jar.
+# If JDK, installs prebuilt
+# sunmscapi.jar.
+#
+# jar Builds/installs sunmscapi.jar
+# If OpenJDK, does not sign.
+# If JDK, tries to sign.
#
# Other lesser-used Targets (JDK/OPENJDK):
#
-# build-jar Builds sunmscapi.jar
-# (does not sign/install)
-#
-# install-jar Alias for "jar" above.
+# build-jar Builds sunmscapi.jar
+# (does not sign/install)
+#
+# install-jar Alias for "jar" above.
#
# Other targets (JDK only):
#
-# sign Alias for sign-jar
-# sign-jar Builds/signs sunmscapi.jar (no install)
-#
-# release Builds all targets in preparation
-# for workspace integration.
-#
-# install-prebuilt Installs the pre-built jar files
+# sign Alias for sign-jar
+# sign-jar Builds/signs sunmscapi.jar (no install)
+#
+# release Builds all targets in preparation
+# for workspace integration.
+#
+# install-prebuilt Installs the pre-built jar files
#
# This makefile was written to support parallel target execution.
#
--- a/make/sun/security/pkcs11/Makefile Thu Aug 06 17:16:31 2009 -0700
+++ b/make/sun/security/pkcs11/Makefile Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
#
-# Copyright 2003-2008 Sun Microsystems, Inc. All Rights Reserved.
+# Copyright 2003-2009 Sun Microsystems, Inc. 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
@@ -59,31 +59,31 @@
#
# Main Targets (JDK/OPENJDK):
#
-# all/clobber/clean The usual, plus the native libraries.
-# If OpenJDK, installs sunpkcs11.jar.
-# If JDK, installs prebuilt
-# sunpkcs11.jar.
-#
-# jar Builds/installs sunpkcs11.jar
-# If OpenJDK, does not sign.
-# If JDK, tries to sign.
+# all/clobber/clean The usual, plus the native libraries.
+# If OpenJDK, installs sunpkcs11.jar.
+# If JDK, installs prebuilt
+# sunpkcs11.jar.
+#
+# jar Builds/installs sunpkcs11.jar
+# If OpenJDK, does not sign.
+# If JDK, tries to sign.
#
# Other lesser-used Targets (JDK/OPENJDK):
#
-# build-jar Builds sunpkcs11.jar
-# (does not sign/install)
-#
-# install-jar Alias for "jar" above.
+# build-jar Builds sunpkcs11.jar
+# (does not sign/install)
+#
+# install-jar Alias for "jar" above.
#
# Other targets (JDK only):
#
-# sign Alias for sign-jar
-# sign-jar Builds/signs sunpkcs11.jar (no install)
-#
-# release Builds all targets in preparation
-# for workspace integration.
-#
-# install-prebuilt Installs the pre-built jar files
+# sign Alias for sign-jar
+# sign-jar Builds/signs sunpkcs11.jar (no install)
+#
+# release Builds all targets in preparation
+# for workspace integration.
+#
+# install-prebuilt Installs the pre-built jar files
#
# This makefile was written to support parallel target execution.
#
--- a/src/share/classes/com/sun/crypto/provider/AESCipher.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/com/sun/crypto/provider/AESCipher.java Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2007 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 2002-2009 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -56,12 +56,8 @@ public final class AESCipher extends Cip
/**
* Creates an instance of AES cipher with default ECB mode and
* PKCS5Padding.
- *
- * @exception SecurityException if this constructor fails to verify
- * its own integrity
*/
public AESCipher() {
- SunJCE.ensureIntegrity(getClass());
core = new CipherCore(new AESCrypt(), AESConstants.AES_BLOCK_SIZE);
}
--- a/src/share/classes/com/sun/crypto/provider/AESKeyGenerator.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/com/sun/crypto/provider/AESKeyGenerator.java Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2007 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 2002-2009 Sun Microsystems, Inc. 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
@@ -48,16 +48,9 @@ public final class AESKeyGenerator exten
private int keySize = 16; // default keysize (in number of bytes)
/**
- * Verify the SunJCE provider in the constructor.
- *
- * @exception SecurityException if fails to verify
- * its own integrity
+ * Empty constructor.
*/
public AESKeyGenerator() {
- if (!SunJCE.verifySelfIntegrity(this.getClass())) {
- throw new SecurityException("The SunJCE provider may have " +
- "been tampered.");
- }
}
/**
--- a/src/share/classes/com/sun/crypto/provider/AESWrapCipher.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/com/sun/crypto/provider/AESWrapCipher.java Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 2004-2007 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 2004-2009 Sun Microsystems, Inc. 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
@@ -65,12 +65,8 @@ public final class AESWrapCipher extends
/**
* Creates an instance of AES KeyWrap cipher with default
* mode, i.e. "ECB" and padding scheme, i.e. "NoPadding".
- *
- * @exception SecurityException if this constructor fails to verify
- * its own integrity
*/
public AESWrapCipher() {
- SunJCE.ensureIntegrity(getClass());
cipher = new AESCrypt();
}
--- a/src/share/classes/com/sun/crypto/provider/ARCFOURCipher.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/com/sun/crypto/provider/ARCFOURCipher.java Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 2003-2007 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 2003-2009 Sun Microsystems, Inc. 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
@@ -62,7 +62,6 @@ public final class ARCFOURCipher extends
// called by the JCE framework
public ARCFOURCipher() {
- SunJCE.ensureIntegrity(getClass());
S = new int[256];
}
--- a/src/share/classes/com/sun/crypto/provider/BlowfishCipher.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/com/sun/crypto/provider/BlowfishCipher.java Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 1998-2007 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 1998-2009 Sun Microsystems, Inc. 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
@@ -60,12 +60,8 @@ public final class BlowfishCipher extend
/**
* Creates an instance of Blowfish cipher with default ECB mode and
* PKCS5Padding.
- *
- * @exception SecurityException if this constructor fails to verify
- * its own integrity
*/
public BlowfishCipher() {
- SunJCE.ensureIntegrity(getClass());
core = new CipherCore(new BlowfishCrypt(),
BlowfishConstants.BLOWFISH_BLOCK_SIZE);
}
--- a/src/share/classes/com/sun/crypto/provider/BlowfishKeyGenerator.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/com/sun/crypto/provider/BlowfishKeyGenerator.java Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 1998-2007 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 1998-2009 Sun Microsystems, Inc. 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
@@ -46,16 +46,9 @@ public final class BlowfishKeyGenerator
private int keysize = 16; // default keysize (in number of bytes)
/**
- * Verify the SunJCE provider in the constructor.
- *
- * @exception SecurityException if fails to verify
- * its own integrity
+ * Empty constructor
*/
public BlowfishKeyGenerator() {
- if (!SunJCE.verifySelfIntegrity(this.getClass())) {
- throw new SecurityException("The SunJCE provider may have " +
- "been tampered.");
- }
}
/**
--- a/src/share/classes/com/sun/crypto/provider/DESCipher.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/com/sun/crypto/provider/DESCipher.java Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 1997-2007 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -56,12 +56,8 @@ public final class DESCipher extends Cip
/**
* Creates an instance of DES cipher with default ECB mode and
* PKCS5Padding.
- *
- * @exception SecurityException if this constructor fails to verify
- * its own integrity
*/
public DESCipher() {
- SunJCE.ensureIntegrity(getClass());
core = new CipherCore(new DESCrypt(), DESConstants.DES_BLOCK_SIZE);
}
--- a/src/share/classes/com/sun/crypto/provider/DESKeyFactory.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/com/sun/crypto/provider/DESKeyFactory.java Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 1997-2007 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -42,17 +42,11 @@ public final class DESKeyFactory extends
public final class DESKeyFactory extends SecretKeyFactorySpi {
/**
- * Verify the SunJCE provider in the constructor.
- *
- * @exception SecurityException if fails to verify
- * its own integrity
+ * Empty constructor
*/
public DESKeyFactory() {
- if (!SunJCE.verifySelfIntegrity(this.getClass())) {
- throw new SecurityException("The SunJCE provider may have " +
- "been tampered.");
- }
}
+
/**
* Generates a <code>SecretKey</code> object from the provided key
* specification (key material).
--- a/src/share/classes/com/sun/crypto/provider/DESKeyGenerator.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/com/sun/crypto/provider/DESKeyGenerator.java Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 1997-2007 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 1997-2009 Sun Microsystems, Inc. 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
@@ -46,16 +46,9 @@ public final class DESKeyGenerator exten
private SecureRandom random = null;
/**
- * Verify the SunJCE provider in the constructor.
- *
- * @exception SecurityException if fails to verify
- * its own integrity
+ * Empty constructor
*/
public DESKeyGenerator() {
- if (!SunJCE.verifySelfIntegrity(this.getClass())) {
- throw new SecurityException("The SunJCE provider may have " +
- "been tampered.");
- }
}
/**
--- a/src/share/classes/com/sun/crypto/provider/DESedeCipher.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/com/sun/crypto/provider/DESedeCipher.java Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 1997-2007 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 1997-2009 Sun Microsystems, Inc. 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
@@ -53,12 +53,8 @@ public final class DESedeCipher extends
/**
* Creates an instance of DESede cipher with default ECB mode and
* PKCS5Padding.
- *
- * @exception SecurityException if this constructor fails to verify
- * its own integrity
*/
public DESedeCipher() {
- SunJCE.ensureIntegrity(getClass());
core = new CipherCore(new DESedeCrypt(), DESConstants.DES_BLOCK_SIZE);
}
--- a/src/share/classes/com/sun/crypto/provider/DESedeKeyFactory.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/com/sun/crypto/provider/DESedeKeyFactory.java Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 1997-2007 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -42,16 +42,9 @@ public final class DESedeKeyFactory exte
public final class DESedeKeyFactory extends SecretKeyFactorySpi {
/**
- * Verify the SunJCE provider in the constructor.
- *
- * @exception SecurityException if fails to verify
- * its own integrity
+ * Empty constructor
*/
public DESedeKeyFactory() {
- if (!SunJCE.verifySelfIntegrity(this.getClass())) {
- throw new SecurityException("The SunJCE provider may have been " +
- "tampered.");
- }
}
/**
--- a/src/share/classes/com/sun/crypto/provider/DESedeKeyGenerator.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/com/sun/crypto/provider/DESedeKeyGenerator.java Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 1997-2007 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 1997-2009 Sun Microsystems, Inc. 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
@@ -47,16 +47,9 @@ public final class DESedeKeyGenerator ex
private int keysize = 168;
/**
- * Verify the SunJCE provider in the constructor.
- *
- * @exception SecurityException if fails to verify
- * its own integrity
+ * Empty constructor
*/
public DESedeKeyGenerator() {
- if (!SunJCE.verifySelfIntegrity(this.getClass())) {
- throw new SecurityException("The SunJCE provider may have been " +
- "tampered.");
- }
}
/**
--- a/src/share/classes/com/sun/crypto/provider/DESedeWrapCipher.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/com/sun/crypto/provider/DESedeWrapCipher.java Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 2004-2007 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 2004-2009 Sun Microsystems, Inc. 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
@@ -74,12 +74,8 @@ public final class DESedeWrapCipher exte
/**
* Creates an instance of CMS DESede KeyWrap cipher with default
* mode, i.e. "CBC" and padding scheme, i.e. "NoPadding".
- *
- * @exception SecurityException if this constructor fails to verify
- * its own integrity.
*/
public DESedeWrapCipher() {
- SunJCE.ensureIntegrity(getClass());
cipher = new CipherBlockChaining(new DESedeCrypt());
}
--- a/src/share/classes/com/sun/crypto/provider/DHKeyAgreement.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/com/sun/crypto/provider/DHKeyAgreement.java Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 1997-2007 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 1997-2009 Sun Microsystems, Inc. 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
@@ -58,16 +58,9 @@ extends KeyAgreementSpi {
private BigInteger y = BigInteger.ZERO;
/**
- * Verify the SunJCE provider in the constructor.
- *
- * @exception SecurityException if fails to verify
- * its own integrity
+ * Empty constructor
*/
public DHKeyAgreement() {
- if (!SunJCE.verifySelfIntegrity(this.getClass())) {
- throw new SecurityException("The SunJCE provider may have been " +
- "tampered.");
- }
}
/**
--- a/src/share/classes/com/sun/crypto/provider/DHKeyFactory.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/com/sun/crypto/provider/DHKeyFactory.java Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 1997-2007 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 1997-2009 Sun Microsystems, Inc. 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
@@ -49,16 +49,9 @@ public final class DHKeyFactory extends
public final class DHKeyFactory extends KeyFactorySpi {
/**
- * Verify the SunJCE provider in the constructor.
- *
- * @exception SecurityException if fails to verify
- * its own integrity
+ * Empty constructor
*/
public DHKeyFactory() {
- if (!SunJCE.verifySelfIntegrity(this.getClass())) {
- throw new SecurityException("The SunJCE provider may have " +
- "been tampered.");
- }
}
/**
--- a/src/share/classes/com/sun/crypto/provider/HmacCore.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/com/sun/crypto/provider/HmacCore.java Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2007 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 2002-2009 Sun Microsystems, Inc. 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
@@ -241,7 +241,6 @@ final class HmacCore implements Cloneabl
public static final class HmacSHA256 extends MacSpi implements Cloneable {
private final HmacCore core;
public HmacSHA256() throws NoSuchAlgorithmException {
- SunJCE.ensureIntegrity(getClass());
core = new HmacCore("SHA-256", 64);
}
private HmacSHA256(HmacSHA256 base) throws CloneNotSupportedException {
@@ -278,7 +277,6 @@ final class HmacCore implements Cloneabl
public static final class HmacSHA384 extends MacSpi implements Cloneable {
private final HmacCore core;
public HmacSHA384() throws NoSuchAlgorithmException {
- SunJCE.ensureIntegrity(getClass());
core = new HmacCore("SHA-384", 128);
}
private HmacSHA384(HmacSHA384 base) throws CloneNotSupportedException {
@@ -315,7 +313,6 @@ final class HmacCore implements Cloneabl
public static final class HmacSHA512 extends MacSpi implements Cloneable {
private final HmacCore core;
public HmacSHA512() throws NoSuchAlgorithmException {
- SunJCE.ensureIntegrity(getClass());
core = new HmacCore("SHA-512", 128);
}
private HmacSHA512(HmacSHA512 base) throws CloneNotSupportedException {
--- a/src/share/classes/com/sun/crypto/provider/HmacMD5.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/com/sun/crypto/provider/HmacMD5.java Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 1998-2007 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 1998-2009 Sun Microsystems, Inc. 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
@@ -44,16 +44,8 @@ public final class HmacMD5 extends MacSp
/**
* Standard constructor, creates a new HmacMD5 instance.
- * Verify the SunJCE provider in the constructor.
- *
- * @exception SecurityException if fails to verify
- * its own integrity
*/
public HmacMD5() throws NoSuchAlgorithmException {
- if (!SunJCE.verifySelfIntegrity(this.getClass())) {
- throw new SecurityException("The SunJCE provider may have " +
- "been tampered.");
- }
hmac = new HmacCore(MessageDigest.getInstance("MD5"),
MD5_BLOCK_LENGTH);
}
--- a/src/share/classes/com/sun/crypto/provider/HmacMD5KeyGenerator.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/com/sun/crypto/provider/HmacMD5KeyGenerator.java Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 1999-2007 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 1999-2009 Sun Microsystems, Inc. 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
@@ -46,16 +46,9 @@ public final class HmacMD5KeyGenerator e
private int keysize = 64; // default keysize (in number of bytes)
/**
- * Verify the SunJCE provider in the constructor.
- *
- * @exception SecurityException if fails to verify
- * its own integrity
+ * Empty constructor
*/
public HmacMD5KeyGenerator() {
- if (!SunJCE.verifySelfIntegrity(this.getClass())) {
- throw new SecurityException("The SunJCE provider may have " +
- "been tampered.");
- }
}
/**
--- a/src/share/classes/com/sun/crypto/provider/HmacPKCS12PBESHA1.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/com/sun/crypto/provider/HmacPKCS12PBESHA1.java Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 2003-2007 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 2003-2009 Sun Microsystems, Inc. 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
@@ -48,13 +48,8 @@ public final class HmacPKCS12PBESHA1 ext
/**
* Standard constructor, creates a new HmacSHA1 instance.
- * Verify the SunJCE provider in the constructor.
- *
- * @exception SecurityException if fails to verify
- * its own integrity
*/
public HmacPKCS12PBESHA1() throws NoSuchAlgorithmException {
- SunJCE.ensureIntegrity(this.getClass());
this.hmac = new HmacCore(MessageDigest.getInstance("SHA1"),
SHA1_BLOCK_LENGTH);
}
--- a/src/share/classes/com/sun/crypto/provider/HmacSHA1.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/com/sun/crypto/provider/HmacSHA1.java Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 1998-2007 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 1998-2009 Sun Microsystems, Inc. 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
@@ -44,16 +44,8 @@ public final class HmacSHA1 extends MacS
/**
* Standard constructor, creates a new HmacSHA1 instance.
- * Verify the SunJCE provider in the constructor.
- *
- * @exception SecurityException if fails to verify
- * its own integrity
*/
public HmacSHA1() throws NoSuchAlgorithmException {
- if (!SunJCE.verifySelfIntegrity(this.getClass())) {
- throw new SecurityException("The SunJCE provider may have " +
- "been tampered.");
- }
this.hmac = new HmacCore(MessageDigest.getInstance("SHA1"),
SHA1_BLOCK_LENGTH);
}
--- a/src/share/classes/com/sun/crypto/provider/HmacSHA1KeyGenerator.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/com/sun/crypto/provider/HmacSHA1KeyGenerator.java Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 1999-2007 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 1999-2009 Sun Microsystems, Inc. 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
@@ -46,16 +46,9 @@ public final class HmacSHA1KeyGenerator
private int keysize = 64; // default keysize (in number of bytes)
/**
- * Verify the SunJCE provider in the constructor.
- *
- * @exception SecurityException if fails to verify
- * its own integrity
+ * Empty constructor
*/
public HmacSHA1KeyGenerator() {
- if (!SunJCE.verifySelfIntegrity(this.getClass())) {
- throw new SecurityException("The SunJCE provider may have " +
- "been tampered.");
- }
}
/**
--- a/src/share/classes/com/sun/crypto/provider/KeyGeneratorCore.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/com/sun/crypto/provider/KeyGeneratorCore.java Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 2003-2007 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 2003-2009 Sun Microsystems, Inc. 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
@@ -109,7 +109,6 @@ final class KeyGeneratorCore {
public static final class HmacSHA256KG extends KeyGeneratorSpi {
private final KeyGeneratorCore core;
public HmacSHA256KG() {
- SunJCE.ensureIntegrity(getClass());
core = new KeyGeneratorCore("HmacSHA256", 256);
}
protected void engineInit(SecureRandom random) {
@@ -131,7 +130,6 @@ final class KeyGeneratorCore {
public static final class HmacSHA384KG extends KeyGeneratorSpi {
private final KeyGeneratorCore core;
public HmacSHA384KG() {
- SunJCE.ensureIntegrity(getClass());
core = new KeyGeneratorCore("HmacSHA384", 384);
}
protected void engineInit(SecureRandom random) {
@@ -153,7 +151,6 @@ final class KeyGeneratorCore {
public static final class HmacSHA512KG extends KeyGeneratorSpi {
private final KeyGeneratorCore core;
public HmacSHA512KG() {
- SunJCE.ensureIntegrity(getClass());
core = new KeyGeneratorCore("HmacSHA512", 512);
}
protected void engineInit(SecureRandom random) {
@@ -175,7 +172,6 @@ final class KeyGeneratorCore {
public static final class RC2KeyGenerator extends KeyGeneratorSpi {
private final KeyGeneratorCore core;
public RC2KeyGenerator() {
- SunJCE.ensureIntegrity(getClass());
core = new KeyGeneratorCore("RC2", 128);
}
protected void engineInit(SecureRandom random) {
@@ -201,7 +197,6 @@ final class KeyGeneratorCore {
public static final class ARCFOURKeyGenerator extends KeyGeneratorSpi {
private final KeyGeneratorCore core;
public ARCFOURKeyGenerator() {
- SunJCE.ensureIntegrity(getClass());
core = new KeyGeneratorCore("ARCFOUR", 128);
}
protected void engineInit(SecureRandom random) {
--- a/src/share/classes/com/sun/crypto/provider/PBEKeyFactory.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/com/sun/crypto/provider/PBEKeyFactory.java Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 1997-2007 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 1997-2009 Sun Microsystems, Inc. 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
@@ -49,16 +49,9 @@ abstract class PBEKeyFactory extends Sec
private static HashSet<String> validTypes;
/**
- * Verify the SunJCE provider in the constructor.
- *
- * @exception SecurityException if fails to verify
- * its own integrity
+ * Simple constructor
*/
private PBEKeyFactory(String keytype) {
- if (!SunJCE.verifySelfIntegrity(this.getClass())) {
- throw new SecurityException("The SunJCE provider may have " +
- "been tampered.");
- }
type = keytype;
}
--- a/src/share/classes/com/sun/crypto/provider/PBEWithMD5AndDESCipher.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/com/sun/crypto/provider/PBEWithMD5AndDESCipher.java Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 1997-2007 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 1997-2009 Sun Microsystems, Inc. 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
@@ -55,16 +55,9 @@ public final class PBEWithMD5AndDESCiphe
* unavailable
* @exception NoSuchPaddingException if the required padding mechanism
* (PKCS5Padding) is unavailable
- *
- * @exception SecurityException if this constructor fails to verify
- * its own integrity
*/
public PBEWithMD5AndDESCipher()
throws NoSuchAlgorithmException, NoSuchPaddingException {
- if (!SunJCE.verifySelfIntegrity(this.getClass())) {
- throw new SecurityException("The SunJCE provider may have " +
- "been tampered.");
- }
core = new PBECipherCore("DES");
}
--- a/src/share/classes/com/sun/crypto/provider/PBEWithMD5AndTripleDESCipher.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/com/sun/crypto/provider/PBEWithMD5AndTripleDESCipher.java Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 1998-2007 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 1998-2009 Sun Microsystems, Inc. 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
@@ -61,23 +61,14 @@ public final class PBEWithMD5AndTripleDE
* Creates an instance of this cipher, and initializes its mode (CBC) and
* padding (PKCS5).
*
- * Verify the SunJCE provider in the constructor.
- *
* @exception NoSuchAlgorithmException if the required cipher mode (CBC) is
* unavailable
* @exception NoSuchPaddingException if the required padding mechanism
* (PKCS5Padding) is unavailable
- * @exception SecurityException if fails to verify
- * its own integrity
*/
public PBEWithMD5AndTripleDESCipher()
throws NoSuchAlgorithmException, NoSuchPaddingException
{
- if (!SunJCE.verifySelfIntegrity(this.getClass())) {
- throw new SecurityException("The SunJCE provider may have " +
- "been tampered.");
- }
-
// set the encapsulated cipher to do triple DES
core = new PBECipherCore("DESede");
}
--- a/src/share/classes/com/sun/crypto/provider/PBKDF2HmacSHA1Factory.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/com/sun/crypto/provider/PBKDF2HmacSHA1Factory.java Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 2005-2007 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 2005-2009 Sun Microsystems, Inc. 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
@@ -45,16 +45,9 @@ public final class PBKDF2HmacSHA1Factory
public final class PBKDF2HmacSHA1Factory extends SecretKeyFactorySpi {
/**
- * Verify the SunJCE provider in the constructor.
- *
- * @exception SecurityException if fails to verify
- * its own integrity
+ * Empty constructor
*/
public PBKDF2HmacSHA1Factory() {
- if (!SunJCE.verifySelfIntegrity(this.getClass())) {
- throw new SecurityException("The SunJCE provider may have " +
- "been tampered.");
- }
}
/**
--- a/src/share/classes/com/sun/crypto/provider/PKCS12PBECipherCore.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/com/sun/crypto/provider/PKCS12PBECipherCore.java Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 2003-2007 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 2003-2009 Sun Microsystems, Inc. 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
@@ -370,7 +370,6 @@ final class PKCS12PBECipherCore {
public static final class PBEWithSHA1AndDESede extends CipherSpi {
private final PKCS12PBECipherCore core;
public PBEWithSHA1AndDESede() throws NoSuchAlgorithmException {
- SunJCE.ensureIntegrity(this.getClass());
core = new PKCS12PBECipherCore("DESede", 24);
}
protected byte[] engineDoFinal(byte[] in, int inOff, int inLen)
@@ -446,7 +445,6 @@ final class PKCS12PBECipherCore {
public static final class PBEWithSHA1AndRC2_40 extends CipherSpi {
private final PKCS12PBECipherCore core;
public PBEWithSHA1AndRC2_40() throws NoSuchAlgorithmException {
- SunJCE.ensureIntegrity(this.getClass());
core = new PKCS12PBECipherCore("RC2", 5);
}
protected byte[] engineDoFinal(byte[] in, int inOff, int inLen)
--- a/src/share/classes/com/sun/crypto/provider/RC2Cipher.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/com/sun/crypto/provider/RC2Cipher.java Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 2003-2007 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 2003-2009 Sun Microsystems, Inc. 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
@@ -45,7 +45,6 @@ public final class RC2Cipher extends Cip
private final RC2Crypt embeddedCipher;
public RC2Cipher() {
- SunJCE.ensureIntegrity(getClass());
embeddedCipher = new RC2Crypt();
core = new CipherCore(embeddedCipher, 8);
}
--- a/src/share/classes/com/sun/crypto/provider/RSACipher.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/com/sun/crypto/provider/RSACipher.java Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 2003-2007 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 2003-2009 Sun Microsystems, Inc. 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
@@ -111,7 +111,6 @@ public final class RSACipher extends Cip
private String oaepHashAlgorithm = "SHA-1";
public RSACipher() {
- SunJCE.ensureIntegrity(getClass());
paddingType = PAD_PKCS1;
}
--- a/src/share/classes/com/sun/crypto/provider/SslMacCore.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/com/sun/crypto/provider/SslMacCore.java Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 2005-2007 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 2005-2009 Sun Microsystems, Inc. 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
@@ -226,9 +226,6 @@ final class SslMacCore {
static final byte[] md5Pad1 = genPad((byte)0x36, 48);
static final byte[] md5Pad2 = genPad((byte)0x5c, 48);
- static {
- SunJCE.ensureIntegrity(SslMacMD5.class);
- }
}
// nested static class for the SslMacMD5 implementation
@@ -262,9 +259,6 @@ final class SslMacCore {
static final byte[] shaPad1 = genPad((byte)0x36, 40);
static final byte[] shaPad2 = genPad((byte)0x5c, 40);
- static {
- SunJCE.ensureIntegrity(SslMacSHA1.class);
- }
}
}
--- a/src/share/classes/com/sun/crypto/provider/SunJCE.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/com/sun/crypto/provider/SunJCE.java Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 1997-2007 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 1997-2009 Sun Microsystems, Inc. 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
@@ -92,10 +92,6 @@ public final class SunJCE extends Provid
static final boolean debug = false;
static final SecureRandom RANDOM = new SecureRandom();
-
- // After the SunJCE passed self-integrity checking,
- // verifiedSelfIntegrity will be set to true.
- private static boolean verifiedSelfIntegrity = false;
public SunJCE() {
/* We are the "SunJCE" provider */
@@ -441,21 +437,4 @@ public final class SunJCE extends Provid
}
});
}
-
- // set to true once self verification is complete
- private static volatile boolean integrityVerified;
-
- static void ensureIntegrity(Class c) {
- if (verifySelfIntegrity(c) == false) {
- throw new SecurityException("The SunJCE provider may have " +
- "been tampered.");
- }
- }
-
- static final boolean verifySelfIntegrity(Class c) {
- if (verifiedSelfIntegrity) {
- return true;
- }
- return (integrityVerified = JarVerifier.verify(c));
- }
}
--- a/src/share/classes/com/sun/crypto/provider/TlsKeyMaterialGenerator.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/com/sun/crypto/provider/TlsKeyMaterialGenerator.java Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 2005-2007 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 2005-2009 Sun Microsystems, Inc. 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
@@ -52,7 +52,6 @@ public final class TlsKeyMaterialGenerat
private int protocolVersion;
public TlsKeyMaterialGenerator() {
- SunJCE.ensureIntegrity(getClass());
}
protected void engineInit(SecureRandom random) {
--- a/src/share/classes/com/sun/crypto/provider/TlsMasterSecretGenerator.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/com/sun/crypto/provider/TlsMasterSecretGenerator.java Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 2005-2007 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 2005-2009 Sun Microsystems, Inc. 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
@@ -51,7 +51,6 @@ public final class TlsMasterSecretGenera
private int protocolVersion;
public TlsMasterSecretGenerator() {
- SunJCE.ensureIntegrity(getClass());
}
protected void engineInit(SecureRandom random) {
--- a/src/share/classes/com/sun/crypto/provider/TlsPrfGenerator.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/com/sun/crypto/provider/TlsPrfGenerator.java Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 2005-2007 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 2005-2009 Sun Microsystems, Inc. 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
@@ -109,7 +109,6 @@ public final class TlsPrfGenerator exten
private TlsPrfParameterSpec spec;
public TlsPrfGenerator() {
- SunJCE.ensureIntegrity(getClass());
}
protected void engineInit(SecureRandom random) {
--- a/src/share/classes/com/sun/crypto/provider/TlsRsaPremasterSecretGenerator.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/com/sun/crypto/provider/TlsRsaPremasterSecretGenerator.java Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 2005-2007 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 2005-2009 Sun Microsystems, Inc. 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
@@ -48,7 +48,6 @@ public final class TlsRsaPremasterSecret
private SecureRandom random;
public TlsRsaPremasterSecretGenerator() {
- SunJCE.ensureIntegrity(getClass());
}
protected void engineInit(SecureRandom random) {
--- a/src/share/classes/com/sun/jndi/ldap/Filter.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/com/sun/jndi/ldap/Filter.java Thu Aug 06 17:26:35 2009 -0700
@@ -93,9 +93,7 @@ final class Filter {
int filtOffset[] = new int[1];
- for (filtOffset[0] = filterStart;
- filtOffset[0] < filterEnd;
- filtOffset[0]++) {
+ for (filtOffset[0] = filterStart; filtOffset[0] < filterEnd;) {
switch (filter[filtOffset[0]]) {
case '(':
filtOffset[0]++;
@@ -104,18 +102,21 @@ final class Filter {
case '&':
encodeComplexFilter(ber, filter,
LDAP_FILTER_AND, filtOffset, filterEnd);
+ // filtOffset[0] has pointed to char after right paren
parens--;
break;
case '|':
encodeComplexFilter(ber, filter,
LDAP_FILTER_OR, filtOffset, filterEnd);
+ // filtOffset[0] has pointed to char after right paren
parens--;
break;
case '!':
encodeComplexFilter(ber, filter,
LDAP_FILTER_NOT, filtOffset, filterEnd);
+ // filtOffset[0] has pointed to char after right paren
parens--;
break;
@@ -143,8 +144,8 @@ final class Filter {
encodeSimpleFilter(ber, filter, filtOffset[0], nextOffset);
- // points to right parens; for loop will increment beyond parens
- filtOffset[0] = nextOffset;
+ // points to the char after right paren.
+ filtOffset[0] = nextOffset + 1;
parens--;
break;
@@ -170,9 +171,14 @@ final class Filter {
filtOffset[0] = filterEnd; // force break from outer
break;
}
- }
-
- if (parens > 0) {
+
+ if (parens < 0) {
+ throw new InvalidSearchFilterException(
+ "Unbalanced parenthesis");
+ }
+ }
+
+ if (parens != 0) {
throw new InvalidSearchFilterException("Unbalanced parenthesis");
}
--- a/src/share/classes/com/sun/jndi/toolkit/ctx/PartialCompositeContext.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/com/sun/jndi/toolkit/ctx/PartialCompositeContext.java Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 1999-2004 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 1999-2009 Sun Microsystems, Inc. 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
--- a/src/share/classes/java/awt/Robot.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/java/awt/Robot.java Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 1999-2008 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 1999-2009 Sun Microsystems, Inc. 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
--- a/src/share/classes/java/awt/TrayIcon.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/java/awt/TrayIcon.java Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 2005-2008 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 2005-2009 Sun Microsystems, Inc. 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
--- a/src/share/classes/java/awt/color/ICC_Profile.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/java/awt/color/ICC_Profile.java Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Portions Copyright 1997-2008 Sun Microsystems, Inc. All Rights Reserved.
+ * Portions Copyright 1997-2009 Sun Microsystems, Inc. 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
--- a/src/share/classes/java/lang/Byte.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/java/lang/Byte.java Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 1996-2006 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 1996-2009 Sun Microsystems, Inc. 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
--- a/src/share/classes/java/lang/Character.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/java/lang/Character.java Thu Aug 06 17:26:35 2009 -0700
@@ -2784,8 +2784,13 @@ class Character extends Object implement
* @since 1.5
*/
public static int toCodePoint(char high, char low) {
- return ((high - MIN_HIGH_SURROGATE) << 10)
- + (low - MIN_LOW_SURROGATE) + MIN_SUPPLEMENTARY_CODE_POINT;
+ // Optimized form of:
+ // return ((high - MIN_HIGH_SURROGATE) << 10)
+ // + (low - MIN_LOW_SURROGATE)
+ // + MIN_SUPPLEMENTARY_CODE_POINT;
+ return ((high << 10) + low) + (MIN_SUPPLEMENTARY_CODE_POINT
+ - (MIN_HIGH_SURROGATE << 10)
+ - MIN_LOW_SURROGATE);
}
/**
@@ -3071,9 +3076,10 @@ class Character extends Object implement
}
static void toSurrogates(int codePoint, char[] dst, int index) {
- int offset = codePoint - MIN_SUPPLEMENTARY_CODE_POINT;
- dst[index+1] = (char)((offset & 0x3ff) + MIN_LOW_SURROGATE);
- dst[index] = (char)((offset >>> 10) + MIN_HIGH_SURROGATE);
+ // We write elements "backwards" to guarantee all-or-nothing
+ dst[index+1] = (char)((codePoint & 0x3ff) + MIN_LOW_SURROGATE);
+ dst[index] = (char)((codePoint >>> 10)
+ + (MIN_HIGH_SURROGATE - (MIN_SUPPLEMENTARY_CODE_POINT >>> 10)));
}
/**
--- a/src/share/classes/java/lang/ClassNotFoundException.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/java/lang/ClassNotFoundException.java Thu Aug 06 17:26:35 2009 -0700
@@ -50,7 +50,7 @@ package java.lang;
* @see java.lang.ClassLoader#loadClass(java.lang.String, boolean)
* @since JDK1.0
*/
-public class ClassNotFoundException extends Exception {
+public class ClassNotFoundException extends ReflectiveOperationException {
/**
* use serialVersionUID from JDK 1.1.X for interoperability
*/
--- a/src/share/classes/java/lang/Double.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/java/lang/Double.java Thu Aug 06 17:26:35 2009 -0700
@@ -529,6 +529,7 @@ public final class Double extends Number
* @param s the string to be parsed.
* @return the {@code double} value represented by the string
* argument.
+ * @throws NullPointerException if the string is null
* @throws NumberFormatException if the string does not contain
* a parsable {@code double}.
* @see java.lang.Double#valueOf(String)
--- a/src/share/classes/java/lang/Float.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/java/lang/Float.java Thu Aug 06 17:26:35 2009 -0700
@@ -438,12 +438,13 @@ public final class Float extends Number
* represented by the specified {@code String}, as performed
* by the {@code valueOf} method of class {@code Float}.
*
- * @param s the string to be parsed.
+ * @param s the string to be parsed.
* @return the {@code float} value represented by the string
* argument.
- * @throws NumberFormatException if the string does not contain a
+ * @throws NullPointerException if the string is null
+ * @throws NumberFormatException if the string does not contain a
* parsable {@code float}.
- * @see java.lang.Float#valueOf(String)
+ * @see java.lang.Float#valueOf(String)
* @since 1.2
*/
public static float parseFloat(String s) throws NumberFormatException {
--- a/src/share/classes/java/lang/IllegalAccessException.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/java/lang/IllegalAccessException.java Thu Aug 06 17:26:35 2009 -0700
@@ -56,7 +56,7 @@ package java.lang;
* @see java.lang.reflect.Constructor#newInstance(Object[])
* @since JDK1.0
*/
-public class IllegalAccessException extends Exception {
+public class IllegalAccessException extends ReflectiveOperationException {
private static final long serialVersionUID = 6616958222490762034L;
/**
--- a/src/share/classes/java/lang/InstantiationException.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/java/lang/InstantiationException.java Thu Aug 06 17:26:35 2009 -0700
@@ -43,7 +43,7 @@ package java.lang;
* @since JDK1.0
*/
public
-class InstantiationException extends Exception {
+class InstantiationException extends ReflectiveOperationException {
private static final long serialVersionUID = -8441929162975509110L;
/**
--- a/src/share/classes/java/lang/Integer.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/java/lang/Integer.java Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 1994-2006 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 1994-2009 Sun Microsystems, Inc. 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
--- a/src/share/classes/java/lang/Long.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/java/lang/Long.java Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 1994-2008 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 1994-2009 Sun Microsystems, Inc. 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
--- a/src/share/classes/java/lang/NoSuchFieldException.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/java/lang/NoSuchFieldException.java Thu Aug 06 17:26:35 2009 -0700
@@ -31,7 +31,7 @@ package java.lang;
* @author unascribed
* @since JDK1.1
*/
-public class NoSuchFieldException extends Exception {
+public class NoSuchFieldException extends ReflectiveOperationException {
private static final long serialVersionUID = -6143714805279938260L;
/**
--- a/src/share/classes/java/lang/NoSuchMethodException.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/java/lang/NoSuchMethodException.java Thu Aug 06 17:26:35 2009 -0700
@@ -32,7 +32,7 @@ package java.lang;
* @since JDK1.0
*/
public
-class NoSuchMethodException extends Exception {
+class NoSuchMethodException extends ReflectiveOperationException {
private static final long serialVersionUID = 5034388446362600923L;
/**
--- a/src/share/classes/java/lang/Short.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/java/lang/Short.java Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 1996-2006 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 1996-2009 Sun Microsystems, Inc. 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
--- a/src/share/classes/java/lang/System.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/java/lang/System.java Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 1994-2007 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 1994-2009 Sun Microsystems, Inc. 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
--- a/src/share/classes/java/lang/reflect/InvocationTargetException.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/java/lang/reflect/InvocationTargetException.java Thu Aug 06 17:26:35 2009 -0700
@@ -39,7 +39,7 @@ package java.lang.reflect;
* @see Method
* @see Constructor
*/
-public class InvocationTargetException extends Exception {
+public class InvocationTargetException extends ReflectiveOperationException {
/**
* Use serialVersionUID from JDK 1.1.X for interoperability
*/
--- a/src/share/classes/java/security/cert/CertPathHelperImpl.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/java/security/cert/CertPathHelperImpl.java Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2006 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 2002-2009 Sun Microsystems, Inc. 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
@@ -46,7 +46,7 @@ class CertPathHelperImpl extends CertPat
/**
* Initialize the helper framework. This method must be called from
* the static initializer of each class that is the target of one of
- * the methods in this class. This ensures that the helper if initialized
+ * the methods in this class. This ensures that the helper is initialized
* prior to a tunneled call from the Sun provider.
*/
synchronized static void initialize() {
@@ -59,4 +59,8 @@ class CertPathHelperImpl extends CertPat
Set<GeneralNameInterface> names) {
sel.setPathToNamesInternal(names);
}
+
+ protected void implSetDateAndTime(X509CRLSelector sel, Date date, long skew) {
+ sel.setDateAndTime(date, skew);
+ }
}
--- a/src/share/classes/java/security/cert/X509CRLSelector.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/java/security/cert/X509CRLSelector.java Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2006 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 2000-2009 Sun Microsystems, Inc. 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
@@ -72,6 +72,10 @@ import sun.security.x509.X500Name;
*/
public class X509CRLSelector implements CRLSelector {
+ static {
+ CertPathHelperImpl.initialize();
+ }
+
private static final Debug debug = Debug.getInstance("certpath");
private HashSet<Object> issuerNames;
private HashSet<X500Principal> issuerX500Principals;
@@ -79,6 +83,7 @@ public class X509CRLSelector implements
private BigInteger maxCRL;
private Date dateAndTime;
private X509Certificate certChecking;
+ private long skew = 0;
/**
* Creates an <code>X509CRLSelector</code>. Initially, no criteria are set
@@ -417,7 +422,18 @@ public class X509CRLSelector implements
if (dateAndTime == null)
this.dateAndTime = null;
else
- this.dateAndTime = (Date) dateAndTime.clone();
+ this.dateAndTime = new Date(dateAndTime.getTime());
+ this.skew = 0;
+ }
+
+ /**
+ * Sets the dateAndTime criterion and allows for the specified clock skew
+ * (in milliseconds) when checking against the validity period of the CRL.
+ */
+ void setDateAndTime(Date dateAndTime, long skew) {
+ this.dateAndTime =
+ (dateAndTime == null ? null : new Date(dateAndTime.getTime()));
+ this.skew = skew;
}
/**
@@ -657,8 +673,14 @@ public class X509CRLSelector implements
}
return false;
}
- if (crlThisUpdate.after(dateAndTime)
- || nextUpdate.before(dateAndTime)) {
+ Date nowPlusSkew = dateAndTime;
+ Date nowMinusSkew = dateAndTime;
+ if (skew > 0) {
+ nowPlusSkew = new Date(dateAndTime.getTime() + skew);
+ nowMinusSkew = new Date(dateAndTime.getTime() - skew);
+ }
+ if (nowMinusSkew.after(nextUpdate)
+ || nowPlusSkew.before(crlThisUpdate)) {
if (debug != null) {
debug.println("X509CRLSelector.match: update out of range");
}
--- a/src/share/classes/java/util/logging/LogManager.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/java/util/logging/LogManager.java Thu Aug 06 17:26:35 2009 -0700
@@ -338,7 +338,7 @@ public class LogManager {
// already been created with the given name it is returned.
// Otherwise a new logger instance is created and registered
// in the LogManager global namespace.
- synchronized Logger demandLogger(String name) {
+ Logger demandLogger(String name) {
Logger result = getLogger(name);
if (result == null) {
result = new Logger(name, null);
--- a/src/share/classes/javax/crypto/JarVerifier.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/javax/crypto/JarVerifier.java Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 2007 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 2007-2009 Sun Microsystems, Inc. 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
@@ -28,9 +28,7 @@ import java.io.*;
import java.io.*;
import java.net.*;
import java.security.*;
-import java.util.*;
import java.util.jar.*;
-import javax.crypto.CryptoPolicyParser.ParsingException;
/**
* This class verifies JAR files (and any supporting JAR files), and
@@ -135,17 +133,6 @@ final class JarVerifier {
}
/**
- * Verify that the provided JarEntry was indeed signed by the
- * framework signing certificate.
- *
- * @param je the URL of the jar entry to be checked.
- * @throws Exception if the jar entry was not signed by
- * the proper certificate
- */
- static void verifyFrameworkSigned(URL je) throws Exception {
- }
-
- /**
* Verify that the provided certs include the
* framework signing certificate.
*
--- a/src/share/classes/javax/crypto/JceSecurity.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/javax/crypto/JceSecurity.java Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 1997-2007 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 1997-2009 Sun Microsystems, Inc. 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,7 +25,6 @@
package javax.crypto;
-import java.lang.ref.*;
import java.util.*;
import java.util.jar.*;
import java.io.*;
@@ -256,11 +255,6 @@ final class JceSecurity {
("Cannot locate policy or framework files!");
}
- // Enforce the signer restraint, i.e. signer of JCE framework
- // jar should also be the signer of the two jurisdiction policy
- // jar files.
- JarVerifier.verifyFrameworkSigned(jceCipherURL);
-
// Read jurisdiction policies.
CryptoPermissions defaultExport = new CryptoPermissions();
CryptoPermissions exemptExport = new CryptoPermissions();
--- a/src/share/classes/javax/swing/DefaultDesktopManager.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/javax/swing/DefaultDesktopManager.java Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 1997-2006 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 1997-2009 Sun Microsystems, Inc. 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
--- a/src/share/classes/javax/swing/JFileChooser.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/javax/swing/JFileChooser.java Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 1997-2008 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 1997-2009 Sun Microsystems, Inc. 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
@@ -739,6 +739,11 @@ public class JFileChooser extends JCompo
dialog.show();
firePropertyChange("JFileChooserDialogIsClosingProperty", dialog, null);
+
+ // Remove all components from dialog. The MetalFileChooserUI.installUI() method (and other LAFs)
+ // registers AWT listener for dialogs and produces memory leaks. It happens when
+ // installUI invoked after the showDialog method.
+ dialog.getContentPane().removeAll();
dialog.dispose();
dialog = null;
return returnValue;
--- a/src/share/classes/javax/swing/JInternalFrame.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/javax/swing/JInternalFrame.java Thu Aug 06 17:26:35 2009 -0700
@@ -26,13 +26,10 @@ package javax.swing;
package javax.swing;
import java.awt.*;
-import java.awt.event.*;
import java.beans.PropertyVetoException;
import java.beans.PropertyChangeEvent;
-import java.util.EventListener;
-
-import javax.swing.border.Border;
+
import javax.swing.event.InternalFrameEvent;
import javax.swing.event.InternalFrameListener;
import javax.swing.plaf.*;
@@ -40,7 +37,6 @@ import javax.accessibility.*;
import javax.accessibility.*;
import java.io.ObjectOutputStream;
-import java.io.ObjectInputStream;
import java.io.IOException;
import java.lang.StringBuilder;
import java.beans.PropertyChangeListener;
@@ -1459,19 +1455,22 @@ public class JInternalFrame extends JCom
SwingUtilities2.compositeRequestFocus(getDesktopIcon());
}
else {
- // FocusPropertyChangeListener will eventually update
- // lastFocusOwner. As focus requests are asynchronous
- // lastFocusOwner may be accessed before it has been correctly
- // updated. To avoid any problems, lastFocusOwner is immediately
- // set, assuming the request will succeed.
- lastFocusOwner = getMostRecentFocusOwner();
- if (lastFocusOwner == null) {
- // Make sure focus is restored somewhere, so that
- // we don't leave a focused component in another frame while
- // this frame is selected.
- lastFocusOwner = getContentPane();
+ Component component = KeyboardFocusManager.getCurrentKeyboardFocusManager().getPermanentFocusOwner();
+ if ((component == null) || !SwingUtilities.isDescendingFrom(component, this)) {
+ // FocusPropertyChangeListener will eventually update
+ // lastFocusOwner. As focus requests are asynchronous
+ // lastFocusOwner may be accessed before it has been correctly
+ // updated. To avoid any problems, lastFocusOwner is immediately
+ // set, assuming the request will succeed.
+ setLastFocusOwner(getMostRecentFocusOwner());
+ if (lastFocusOwner == null) {
+ // Make sure focus is restored somewhere, so that
+ // we don't leave a focused component in another frame while
+ // this frame is selected.
+ setLastFocusOwner(getContentPane());
+ }
+ lastFocusOwner.requestFocus();
}
- lastFocusOwner.requestFocus();
}
}
--- a/src/share/classes/javax/swing/plaf/basic/BasicDesktopIconUI.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/javax/swing/plaf/basic/BasicDesktopIconUI.java Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 1997-2008 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 1997-2009 Sun Microsystems, Inc. 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
@@ -32,9 +32,6 @@ import javax.swing.border.*;
import javax.swing.border.*;
import javax.swing.plaf.*;
import java.beans.*;
-import java.util.EventListener;
-import java.io.Serializable;
-
/**
* Basic L&F for a minimized window on a desktop.
@@ -47,7 +44,6 @@ public class BasicDesktopIconUI extends
protected JInternalFrame.JDesktopIcon desktopIcon;
protected JInternalFrame frame;
- private DesktopIconMover desktopIconMover;
/**
* The title pane component used in the desktop icon.
@@ -128,21 +124,12 @@ public class BasicDesktopIconUI extends
mouseInputListener = createMouseInputListener();
desktopIcon.addMouseMotionListener(mouseInputListener);
desktopIcon.addMouseListener(mouseInputListener);
- getDesktopIconMover().installListeners();
}
protected void uninstallListeners() {
desktopIcon.removeMouseMotionListener(mouseInputListener);
desktopIcon.removeMouseListener(mouseInputListener);
mouseInputListener = null;
- getDesktopIconMover().uninstallListeners();
- }
-
- private DesktopIconMover getDesktopIconMover() {
- if (desktopIconMover == null) {
- desktopIconMover = new DesktopIconMover(desktopIcon);
- }
- return desktopIconMover;
}
protected void installDefaults() {
--- a/src/share/classes/javax/swing/plaf/basic/BasicDirectoryModel.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/javax/swing/plaf/basic/BasicDirectoryModel.java Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 1998-2008 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 1998-2009 Sun Microsystems, Inc. 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
@@ -232,6 +232,10 @@ public class BasicDirectoryModel extends
public void run0() {
FileSystemView fileSystem = filechooser.getFileSystemView();
+ if (isInterrupted()) {
+ return;
+ }
+
File[] list = fileSystem.getFiles(currentDirectory, filechooser.isFileHidingEnabled());
if (isInterrupted()) {
@@ -268,8 +272,8 @@ public class BasicDirectoryModel extends
// To avoid loads of synchronizations with Invoker and improve performance we
// execute the whole block on the COM thread
- DoChangeContents doChangeContents = ShellFolder.getInvoker().invoke(new Callable<DoChangeContents>() {
- public DoChangeContents call() throws Exception {
+ DoChangeContents doChangeContents = ShellFolder.invoke(new Callable<DoChangeContents>() {
+ public DoChangeContents call() {
int newSize = newFileCache.size();
int oldSize = fileCache.size();
--- a/src/share/classes/javax/swing/plaf/basic/BasicInternalFrameUI.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/javax/swing/plaf/basic/BasicInternalFrameUI.java Thu Aug 06 17:26:35 2009 -0700
@@ -27,16 +27,10 @@ package javax.swing.plaf.basic;
import java.awt.*;
import java.awt.event.*;
-import java.awt.peer.LightweightPeer;
-
import javax.swing.*;
-import javax.swing.border.*;
import javax.swing.plaf.*;
import javax.swing.event.*;
-
import java.beans.*;
-import java.io.Serializable;
-
import sun.swing.DefaultLookup;
import sun.swing.UIAction;
@@ -55,6 +49,7 @@ public class BasicInternalFrameUI extend
protected MouseInputAdapter borderListener;
protected PropertyChangeListener propertyChangeListener;
protected LayoutManager internalFrameLayout;
+ protected ComponentListener componentListener;
protected MouseInputListener glassPaneDispatcher;
private InternalFrameListener internalFrameListener;
@@ -66,9 +61,9 @@ public class BasicInternalFrameUI extend
protected BasicInternalFrameTitlePane titlePane; // access needs this
private static DesktopManager sharedDesktopManager;
+ private boolean componentListenerAdded = false;
private Rectangle parentBounds;
- private DesktopIconMover desktopIconMover;
private boolean dragging = false;
private boolean resizing = false;
@@ -209,17 +204,14 @@ public class BasicInternalFrameUI extend
frame.getGlassPane().addMouseListener(glassPaneDispatcher);
frame.getGlassPane().addMouseMotionListener(glassPaneDispatcher);
}
+ componentListener = createComponentListener();
if (frame.getParent() != null) {
parentBounds = frame.getParent().getBounds();
}
- getDesktopIconMover().installListeners();
- }
-
- private DesktopIconMover getDesktopIconMover() {
- if (desktopIconMover == null) {
- desktopIconMover = new DesktopIconMover(frame);
- }
- return desktopIconMover;
+ if ((frame.getParent() != null) && !componentListenerAdded) {
+ frame.getParent().addComponentListener(componentListener);
+ componentListenerAdded = true;
+ }
}
// Provide a FocusListener to listen for a WINDOW_LOST_FOCUS event,
@@ -290,7 +282,11 @@ public class BasicInternalFrameUI extend
* @since 1.3
*/
protected void uninstallListeners() {
- getDesktopIconMover().uninstallListeners();
+ if ((frame.getParent() != null) && componentListenerAdded) {
+ frame.getParent().removeComponentListener(componentListener);
+ componentListenerAdded = false;
+ }
+ componentListener = null;
if (glassPaneDispatcher != null) {
frame.getGlassPane().removeMouseListener(glassPaneDispatcher);
frame.getGlassPane().removeMouseMotionListener(glassPaneDispatcher);
@@ -1228,6 +1224,15 @@ public class BasicInternalFrameUI extend
}
}
+ // Relocate the icon base on the new parent bounds.
+ if (icon != null) {
+ Rectangle iconBounds = icon.getBounds();
+ int y = iconBounds.y +
+ (parentNewBounds.height - parentBounds.height);
+ icon.setBounds(iconBounds.x, y,
+ iconBounds.width, iconBounds.height);
+ }
+
// Update the new parent bounds for next resize.
if (!parentBounds.equals(parentNewBounds)) {
parentBounds = parentNewBounds;
@@ -1399,6 +1404,9 @@ public class BasicInternalFrameUI extend
// Cancel a resize in progress if the internal frame
// gets a setClosed(true) or dispose().
cancelResize();
+ if ((frame.getParent() != null) && componentListenerAdded) {
+ frame.getParent().removeComponentListener(componentListener);
+ }
closeFrame(f);
}
} else if (JInternalFrame.IS_MAXIMUM_PROPERTY == prop) {
@@ -1430,6 +1438,10 @@ public class BasicInternalFrameUI extend
parentBounds = f.getParent().getBounds();
} else {
parentBounds = null;
+ }
+ if ((frame.getParent() != null) && !componentListenerAdded) {
+ f.getParent().addComponentListener(componentListener);
+ componentListenerAdded = true;
}
} else if (JInternalFrame.TITLE_PROPERTY == prop ||
prop == "closable" || prop == "iconable" ||
--- a/src/share/classes/javax/swing/plaf/basic/BasicScrollPaneUI.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/javax/swing/plaf/basic/BasicScrollPaneUI.java Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 1997-2005 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 1997-2009 Sun Microsystems, Inc. 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
@@ -37,17 +37,12 @@ import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeEvent;
import java.awt.Component;
-import java.awt.Container;
-import java.awt.LayoutManager;
import java.awt.Rectangle;
import java.awt.Dimension;
import java.awt.Point;
import java.awt.Insets;
import java.awt.Graphics;
import java.awt.event.*;
-import java.io.Serializable;
-import java.awt.Toolkit;
-import java.awt.ComponentOrientation;
/**
* A default L&F implementation of ScrollPaneUI.
@@ -63,6 +58,7 @@ public class BasicScrollPaneUI
protected ChangeListener viewportChangeListener;
protected PropertyChangeListener spPropertyChangeListener;
private MouseWheelListener mouseScrollListener;
+ private int oldExtent = Integer.MIN_VALUE;
/**
* PropertyChangeListener installed on the vertical scrollbar.
@@ -327,9 +323,13 @@ public class BasicScrollPaneUI
* leave it until someone claims.
*/
value = Math.max(0, Math.min(max - extent, max - extent - viewPosition.x));
+ if (oldExtent > extent) {
+ value -= oldExtent - extent;
+ }
}
}
}
+ oldExtent = extent;
hsb.setValues(value, extent, 0, max);
}
@@ -1020,7 +1020,7 @@ public class BasicScrollPaneUI
if (viewport != null) {
if (e.getSource() == viewport) {
- viewportStateChanged(e);
+ syncScrollPaneWithViewport();
}
else {
JScrollBar hsb = scrollpane.getHorizontalScrollBar();
@@ -1077,11 +1077,6 @@ public class BasicScrollPaneUI
viewport.setViewPosition(p);
}
- private void viewportStateChanged(ChangeEvent e) {
- syncScrollPaneWithViewport();
- }
-
-
//
// PropertyChangeListener: This is installed on both the JScrollPane
// and the horizontal/vertical scrollbars.
--- a/src/share/classes/javax/swing/plaf/nimbus/AbstractRegionPainter.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/javax/swing/plaf/nimbus/AbstractRegionPainter.java Thu Aug 06 17:26:35 2009 -0700
@@ -227,10 +227,10 @@ public abstract class AbstractRegionPain
*
* @param x an encoded x value (0...1, or 1...2, or 2...3)
* @return the decoded x value
+ * @throws IllegalArgumentException
+ * if {@code x < 0} or {@code x > 3}
*/
protected final float decodeX(float x) {
- if (ctx.canvasSize == null) return x;
-
if (x >= 0 && x <= 1) {
return x * leftWidth;
} else if (x > 1 && x < 2) {
@@ -238,7 +238,7 @@ public abstract class AbstractRegionPain
} else if (x >= 2 && x <= 3) {
return ((x-2) * rightWidth) + leftWidth + centerWidth;
} else {
- throw new AssertionError("Invalid x");
+ throw new IllegalArgumentException("Invalid x");
}
}
@@ -248,10 +248,10 @@ public abstract class AbstractRegionPain
*
* @param y an encoded y value (0...1, or 1...2, or 2...3)
* @return the decoded y value
+ * @throws IllegalArgumentException
+ * if {@code y < 0} or {@code y > 3}
*/
protected final float decodeY(float y) {
- if (ctx.canvasSize == null) return y;
-
if (y >= 0 && y <= 1) {
return y * topHeight;
} else if (y > 1 && y < 2) {
@@ -259,7 +259,7 @@ public abstract class AbstractRegionPain
} else if (y >= 2 && y <= 3) {
return ((y-2) * bottomHeight) + topHeight + centerHeight;
} else {
- throw new AssertionError("Invalid y");
+ throw new IllegalArgumentException("Invalid y");
}
}
@@ -271,10 +271,10 @@ public abstract class AbstractRegionPain
* @param x an encoded x value of the bezier control point (0...1, or 1...2, or 2...3)
* @param dx the offset distance to the anchor from the control point x
* @return the decoded x location of the control point
+ * @throws IllegalArgumentException
+ * if {@code x < 0} or {@code x > 3}
*/
protected final float decodeAnchorX(float x, float dx) {
- if (ctx.canvasSize == null) return x + dx;
-
if (x >= 0 && x <= 1) {
return decodeX(x) + (dx * leftScale);
} else if (x > 1 && x < 2) {
@@ -282,7 +282,7 @@ public abstract class AbstractRegionPain
} else if (x >= 2 && x <= 3) {
return decodeX(x) + (dx * rightScale);
} else {
- throw new AssertionError("Invalid x");
+ throw new IllegalArgumentException("Invalid x");
}
}
@@ -294,10 +294,10 @@ public abstract class AbstractRegionPain
* @param y an encoded y value of the bezier control point (0...1, or 1...2, or 2...3)
* @param dy the offset distance to the anchor from the control point y
* @return the decoded y position of the control point
+ * @throws IllegalArgumentException
+ * if {@code y < 0} or {@code y > 3}
*/
protected final float decodeAnchorY(float y, float dy) {
- if (ctx.canvasSize == null) return y + dy;
-
if (y >= 0 && y <= 1) {
return decodeY(y) + (dy * topScale);
} else if (y > 1 && y < 2) {
@@ -305,7 +305,7 @@ public abstract class AbstractRegionPain
} else if (y >= 2 && y <= 3) {
return decodeY(y) + (dy * bottomScale);
} else {
- throw new AssertionError("Invalid y");
+ throw new IllegalArgumentException("Invalid y");
}
}
@@ -363,6 +363,15 @@ public abstract class AbstractRegionPain
* @param midpoints
* @param colors
* @return a valid LinearGradientPaint. This method never returns null.
+ * @throws NullPointerException
+ * if {@code midpoints} array is null,
+ * or {@code colors} array is null,
+ * @throws IllegalArgumentException
+ * if start and end points are the same points,
+ * or {@code midpoints.length != colors.length},
+ * or {@code colors} is less than 2 in size,
+ * or a {@code midpoints} value is less than 0.0 or greater than 1.0,
+ * or the {@code midpoints} are not provided in strictly increasing order
*/
protected final LinearGradientPaint decodeGradient(float x1, float y1, float x2, float y2, float[] midpoints, Color[] colors) {
if (x1 == x2 && y1 == y2) {
@@ -384,6 +393,15 @@ public abstract class AbstractRegionPain
* @param midpoints
* @param colors
* @return a valid RadialGradientPaint. This method never returns null.
+ * @throws NullPointerException
+ * if {@code midpoints} array is null,
+ * or {@code colors} array is null
+ * @throws IllegalArgumentException
+ * if {@code r} is non-positive,
+ * or {@code midpoints.length != colors.length},
+ * or {@code colors} is less than 2 in size,
+ * or a {@code midpoints} value is less than 0.0 or greater than 1.0,
+ * or the {@code midpoints} are not provided in strictly increasing order
*/
protected final RadialGradientPaint decodeRadialGradient(float x, float y, float r, float[] midpoints, Color[] colors) {
if (r == 0f) {
@@ -537,10 +555,10 @@ public abstract class AbstractRegionPain
this.maxVerticalScaleFactor = maxV;
if (canvasSize != null) {
- a = insets.left;
- b = canvasSize.width - insets.right;
- c = insets.top;
- d = canvasSize.height - insets.bottom;
+ a = stretchingInsets.left;
+ b = canvasSize.width - stretchingInsets.right;
+ c = stretchingInsets.top;
+ d = canvasSize.height - stretchingInsets.bottom;
this.canvasSize = canvasSize;
this.inverted = inverted;
if (inverted) {
--- a/src/share/classes/javax/swing/plaf/nimbus/NimbusIcon.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/javax/swing/plaf/nimbus/NimbusIcon.java Thu Aug 06 17:26:35 2009 -0700
@@ -84,6 +84,8 @@ class NimbusIcon extends SynthIcon {
translatex = 1;
}
}
+ } else if (c instanceof JMenu) {
+ flip = ! c.getComponentOrientation().isLeftToRight();
}
if (g instanceof Graphics2D){
Graphics2D gfx = (Graphics2D)g;
--- a/src/share/classes/javax/swing/text/GlyphView.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/javax/swing/text/GlyphView.java Thu Aug 06 17:26:35 2009 -0700
@@ -719,8 +719,9 @@ public class GlyphView extends View impl
checkPainter();
int p0 = getStartOffset();
int p1 = painter.getBoundedPosition(this, p0, pos, len);
- return ((p1 > p0) && (getBreakSpot(p0, p1) != BreakIterator.DONE)) ?
- View.ExcellentBreakWeight : View.BadBreakWeight;
+ return p1 == p0 ? View.BadBreakWeight :
+ getBreakSpot(p0, p1) != BreakIterator.DONE ?
+ View.ExcellentBreakWeight : View.GoodBreakWeight;
}
return super.getBreakWeight(axis, pos, len);
}
--- a/src/share/classes/javax/swing/text/ParagraphView.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/javax/swing/text/ParagraphView.java Thu Aug 06 17:26:35 2009 -0700
@@ -172,23 +172,6 @@ public class ParagraphView extends FlowV
*/
protected View getLayoutView(int index) {
return layoutPool.getView(index);
- }
-
- /**
- * Adjusts the given row if possible to fit within the
- * layout span. By default this will try to find the
- * highest break weight possible nearest the end of
- * the row. If a forced break is encountered, the
- * break will be positioned there.
- * <p>
- * This is meant for internal usage, and should not be used directly.
- *
- * @param r the row to adjust to the current layout
- * span
- * @param desiredSpan the current layout span >= 0
- * @param x the location r starts at
- */
- protected void adjustRow(Row r, int desiredSpan, int x) {
}
/**
--- a/src/share/classes/sun/awt/shell/ShellFolder.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/sun/awt/shell/ShellFolder.java Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2008 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 2000-2009 Sun Microsystems, Inc. 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
@@ -289,8 +289,8 @@ public abstract class ShellFolder extend
// To avoid loads of synchronizations with Invoker and improve performance we
// synchronize the whole code of the sort method once
- getInvoker().invoke(new Callable<Void>() {
- public Void call() throws Exception {
+ invoke(new Callable<Void>() {
+ public Void call() {
// Check that we can use the ShellFolder.sortChildren() method:
// 1. All files have the same non-null parent
// 2. All files is ShellFolders
@@ -330,8 +330,8 @@ public abstract class ShellFolder extend
public void sortChildren(final List<? extends File> files) {
// To avoid loads of synchronizations with Invoker and improve performance we
// synchronize the whole code of the sort method once
- getInvoker().invoke(new Callable<Void>() {
- public Void call() throws Exception {
+ invoke(new Callable<Void>() {
+ public Void call() {
Collections.sort(files, FILE_COMPARATOR);
return null;
@@ -502,17 +502,61 @@ public abstract class ShellFolder extend
}
/**
+ * Invokes the {@code task} which doesn't throw checked exceptions
+ * from its {@code call} method. If invokation is interrupted then Thread.currentThread().isInterrupted() will
+ * be set and result will be {@code null}
+ */
+ public static <T> T invoke(Callable<T> task) {
+ try {
+ return invoke(task, RuntimeException.class);
+ } catch (InterruptedException e) {
+ return null;
+ }
+ }
+
+ /**
+ * Invokes the {@code task} which throws checked exceptions from its {@code call} method.
+ * If invokation is interrupted then Thread.currentThread().isInterrupted() will
+ * be set and InterruptedException will be thrown as well.
+ */
+ public static <T, E extends Throwable> T invoke(Callable<T> task, Class<E> exceptionClass)
+ throws InterruptedException, E {
+ try {
+ return getInvoker().invoke(task);
+ } catch (Exception e) {
+ if (e instanceof RuntimeException) {
+ // Rethrow unchecked exceptions
+ throw (RuntimeException) e;
+ }
+
+ if (e instanceof InterruptedException) {
+ // Set isInterrupted flag for current thread
+ Thread.currentThread().interrupt();
+
+ // Rethrow InterruptedException
+ throw (InterruptedException) e;
+ }
+
+ if (exceptionClass.isInstance(e)) {
+ throw exceptionClass.cast(e);
+ }
+
+ throw new RuntimeException("Unexpected error", e);
+ }
+ }
+
+ /**
* Interface allowing to invoke tasks in different environments on different platforms.
*/
public static interface Invoker {
/**
- * Invokes a callable task. If the {@code task} throws a checked exception,
- * it will be wrapped into a {@link RuntimeException}
+ * Invokes a callable task.
*
* @param task a task to invoke
+ * @throws Exception {@code InterruptedException} or an exception that was thrown from the {@code task}
* @return the result of {@code task}'s invokation
*/
- <T> T invoke(Callable<T> task);
+ <T> T invoke(Callable<T> task) throws Exception;
}
/**
--- a/src/share/classes/sun/awt/shell/ShellFolderManager.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/sun/awt/shell/ShellFolderManager.java Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2008 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 2000-2009 Sun Microsystems, Inc. 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
@@ -108,12 +108,8 @@ class ShellFolderManager {
}
private static class DirectInvoker implements ShellFolder.Invoker {
- public <T> T invoke(Callable<T> task) {
- try {
- return task.call();
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
+ public <T> T invoke(Callable<T> task) throws Exception {
+ return task.call();
}
}
}
--- a/src/share/classes/sun/net/www/http/HttpClient.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/sun/net/www/http/HttpClient.java Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 1994-2008 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 1994-2009 Sun Microsystems, Inc. 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
--- a/src/share/classes/sun/nio/cs/Surrogate.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/sun/nio/cs/Surrogate.java Thu Aug 06 17:26:35 2009 -0700
@@ -30,7 +30,6 @@ import java.nio.charset.MalformedInputEx
import java.nio.charset.MalformedInputException;
import java.nio.charset.UnmappableCharacterException;
-
/**
* Utility class for dealing with surrogates.
*
@@ -41,19 +40,15 @@ public class Surrogate {
private Surrogate() { }
- // UTF-16 surrogate-character ranges
- //
- public static final char MIN_HIGH = '\uD800';
- public static final char MAX_HIGH = '\uDBFF';
- public static final char MIN_LOW = '\uDC00';
- public static final char MAX_LOW = '\uDFFF';
- public static final char MIN = MIN_HIGH;
- public static final char MAX = MAX_LOW;
-
- // Range of UCS-4 values that need surrogates in UTF-16
- //
- public static final int UCS4_MIN = 0x10000;
- public static final int UCS4_MAX = (1 << 20) + UCS4_MIN - 1;
+ // TODO: Deprecate/remove the following redundant definitions
+ public static final char MIN_HIGH = Character.MIN_HIGH_SURROGATE;
+ public static final char MAX_HIGH = Character.MAX_HIGH_SURROGATE;
+ public static final char MIN_LOW = Character.MIN_LOW_SURROGATE;
+ public static final char MAX_LOW = Character.MAX_LOW_SURROGATE;
+ public static final char MIN = Character.MIN_SURROGATE;
+ public static final char MAX = Character.MAX_SURROGATE;
+ public static final int UCS4_MIN = Character.MIN_SUPPLEMENTARY_CODE_POINT;
+ public static final int UCS4_MAX = Character.MAX_CODE_POINT;
/**
* Tells whether or not the given UTF-16 value is a high surrogate.
@@ -77,35 +72,45 @@ public class Surrogate {
}
/**
+ * Tells whether or not the given UCS-4 character is in the Basic
+ * Multilingual Plane, and can be represented using a single char.
+ */
+ public static boolean isBMP(int uc) {
+ return (int) (char) uc == uc;
+ }
+
+ /**
* Tells whether or not the given UCS-4 character must be represented as a
* surrogate pair in UTF-16.
*/
public static boolean neededFor(int uc) {
- return (uc >= UCS4_MIN) && (uc <= UCS4_MAX);
+ return Character.isSupplementaryCodePoint(uc);
}
/**
* Returns the high UTF-16 surrogate for the given UCS-4 character.
*/
public static char high(int uc) {
- assert neededFor(uc);
- return (char)(0xd800 | (((uc - UCS4_MIN) >> 10) & 0x3ff));
+ assert Character.isSupplementaryCodePoint(uc);
+ return (char)((uc >> 10)
+ + (Character.MIN_HIGH_SURROGATE
+ - (Character.MIN_SUPPLEMENTARY_CODE_POINT >> 10)));
}
/**
* Returns the low UTF-16 surrogate for the given UCS-4 character.
*/
public static char low(int uc) {
- assert neededFor(uc);
- return (char)(0xdc00 | ((uc - UCS4_MIN) & 0x3ff));
+ assert Character.isSupplementaryCodePoint(uc);
+ return (char)((uc & 0x3ff) + Character.MIN_LOW_SURROGATE);
}
/**
* Converts the given surrogate pair into a 32-bit UCS-4 character.
*/
public static int toUCS4(char c, char d) {
- assert isHigh(c) && isLow(d);
- return (((c & 0x3ff) << 10) | (d & 0x3ff)) + 0x10000;
+ assert Character.isHighSurrogate(c) && Character.isLowSurrogate(d);
+ return Character.toCodePoint(c, d);
}
/**
@@ -178,14 +183,14 @@ public class Surrogate {
* object
*/
public int parse(char c, CharBuffer in) {
- if (Surrogate.isHigh(c)) {
+ if (Character.isHighSurrogate(c)) {
if (!in.hasRemaining()) {
error = CoderResult.UNDERFLOW;
return -1;
}
char d = in.get();
- if (Surrogate.isLow(d)) {
- character = toUCS4(c, d);
+ if (Character.isLowSurrogate(d)) {
+ character = Character.toCodePoint(c, d);
isPair = true;
error = null;
return character;
@@ -193,7 +198,7 @@ public class Surrogate {
error = CoderResult.malformedForLength(1);
return -1;
}
- if (Surrogate.isLow(c)) {
+ if (Character.isLowSurrogate(c)) {
error = CoderResult.malformedForLength(1);
return -1;
}
@@ -220,14 +225,14 @@ public class Surrogate {
*/
public int parse(char c, char[] ia, int ip, int il) {
assert (ia[ip] == c);
- if (Surrogate.isHigh(c)) {
+ if (Character.isHighSurrogate(c)) {
if (il - ip < 2) {
error = CoderResult.UNDERFLOW;
return -1;
}
char d = ia[ip + 1];
- if (Surrogate.isLow(d)) {
- character = toUCS4(c, d);
+ if (Character.isLowSurrogate(d)) {
+ character = Character.toCodePoint(c, d);
isPair = true;
error = null;
return character;
@@ -235,7 +240,7 @@ public class Surrogate {
error = CoderResult.malformedForLength(1);
return -1;
}
- if (Surrogate.isLow(c)) {
+ if (Character.isLowSurrogate(c)) {
error = CoderResult.malformedForLength(1);
return -1;
}
@@ -282,7 +287,7 @@ public class Surrogate {
* error() will return a descriptive result object
*/
public int generate(int uc, int len, CharBuffer dst) {
- if (uc <= 0xffff) {
+ if (Surrogate.isBMP(uc)) {
if (Surrogate.is(uc)) {
error = CoderResult.malformedForLength(len);
return -1;
@@ -294,12 +299,7 @@ public class Surrogate {
dst.put((char)uc);
error = null;
return 1;
- }
- if (uc < Surrogate.UCS4_MIN) {
- error = CoderResult.malformedForLength(len);
- return -1;
- }
- if (uc <= Surrogate.UCS4_MAX) {
+ } else if (Character.isSupplementaryCodePoint(uc)) {
if (dst.remaining() < 2) {
error = CoderResult.OVERFLOW;
return -1;
@@ -308,9 +308,10 @@ public class Surrogate {
dst.put(Surrogate.low(uc));
error = null;
return 2;
- }
- error = CoderResult.unmappableForLength(len);
- return -1;
+ } else {
+ error = CoderResult.unmappableForLength(len);
+ return -1;
+ }
}
/**
@@ -330,7 +331,7 @@ public class Surrogate {
* error() will return a descriptive result object
*/
public int generate(int uc, int len, char[] da, int dp, int dl) {
- if (uc <= 0xffff) {
+ if (Surrogate.isBMP(uc)) {
if (Surrogate.is(uc)) {
error = CoderResult.malformedForLength(len);
return -1;
@@ -342,12 +343,7 @@ public class Surrogate {
da[dp] = (char)uc;
error = null;
return 1;
- }
- if (uc < Surrogate.UCS4_MIN) {
- error = CoderResult.malformedForLength(len);
- return -1;
- }
- if (uc <= Surrogate.UCS4_MAX) {
+ } else if (Character.isSupplementaryCodePoint(uc)) {
if (dl - dp < 2) {
error = CoderResult.OVERFLOW;
return -1;
@@ -356,11 +352,11 @@ public class Surrogate {
da[dp + 1] = Surrogate.low(uc);
error = null;
return 2;
- }
- error = CoderResult.unmappableForLength(len);
- return -1;
- }
-
+ } else {
+ error = CoderResult.unmappableForLength(len);
+ return -1;
+ }
+ }
}
}
--- a/src/share/classes/sun/security/krb5/Config.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/sun/security/krb5/Config.java Thu Aug 06 17:26:35 2009 -0700
@@ -70,7 +70,12 @@ public class Config {
private static final int BASE16_1 = 16;
private static final int BASE16_2 = 16 * 16;
private static final int BASE16_3 = 16 * 16 * 16;
- private String defaultRealm; // default kdc realm.
+
+ /**
+ * Specified by system properties. Must be both null or non-null.
+ */
+ private final String defaultRealm;
+ private final String defaultKDC;
// used for native interface
private static native String getWindowsDirectory(boolean isSystem);
@@ -81,9 +86,8 @@ public class Config {
* singleton) is returned.
*
* @exception KrbException if error occurs when constructing a Config
- * instance. Possible causes would be configuration file not
- * found, either of java.security.krb5.realm or java.security.krb5.kdc
- * not specified, error reading configuration file.
+ * instance. Possible causes would be either of java.security.krb5.realm or
+ * java.security.krb5.kdc not specified, error reading configuration file.
*/
public static synchronized Config getInstance() throws KrbException {
if (singleton == null) {
@@ -98,9 +102,8 @@ public class Config {
* the java.security.krb5.* system properties again.
*
* @exception KrbException if error occurs when constructing a Config
- * instance. Possible causes would be configuration file not
- * found, either of java.security.krb5.realm or java.security.krb5.kdc
- * not specified, error reading configuration file.
+ * instance. Possible causes would be either of java.security.krb5.realm or
+ * java.security.krb5.kdc not specified, error reading configuration file.
*/
public static synchronized void refresh() throws KrbException {
@@ -114,56 +117,37 @@ public class Config {
*/
private Config() throws KrbException {
/*
- * If these two system properties are being specified by the user,
- * we ignore configuration file. If either one system property is
- * specified, we throw exception. If neither of them are specified,
- * we load the information from configuration file.
+ * If either one system property is specified, we throw exception.
*/
- String kdchost =
+ String tmp =
java.security.AccessController.doPrivileged(
new sun.security.action.GetPropertyAction
("java.security.krb5.kdc"));
+ if (tmp != null) {
+ // The user can specify a list of kdc hosts separated by ":"
+ defaultKDC = tmp.replace(':', ' ');
+ } else {
+ defaultKDC = null;
+ }
defaultRealm =
java.security.AccessController.doPrivileged(
new sun.security.action.GetPropertyAction
("java.security.krb5.realm"));
- if ((kdchost == null && defaultRealm != null) ||
- (defaultRealm == null && kdchost != null)) {
+ if ((defaultKDC == null && defaultRealm != null) ||
+ (defaultRealm == null && defaultKDC != null)) {
throw new KrbException
("System property java.security.krb5.kdc and " +
"java.security.krb5.realm both must be set or " +
"neither must be set.");
}
- // Read the Kerberos configuration file
+ // Always read the Kerberos configuration file
try {
Vector<String> configFile;
configFile = loadConfigFile();
stanzaTable = parseStanzaTable(configFile);
} catch (IOException ioe) {
- // No krb5.conf, no problem. We'll use DNS etc.
- }
-
- if (kdchost != null) {
- /*
- * If configuration information is only specified by
- * properties java.security.krb5.kdc and
- * java.security.krb5.realm, we put both in the hashtable
- * under [libdefaults].
- */
- if (stanzaTable == null) {
- stanzaTable = new Hashtable<String,Object> ();
- }
- Hashtable<String,String> kdcs =
- (Hashtable<String,String>)stanzaTable.get("libdefaults");
- if (kdcs == null) {
- kdcs = new Hashtable<String,String> ();
- stanzaTable.put("libdefaults", kdcs);
- }
- kdcs.put("default_realm", defaultRealm);
- // The user can specify a list of kdc hosts separated by ":"
- kdchost = kdchost.replace(':', ' ');
- kdcs.put("kdc", kdchost);
+ // No krb5.conf, no problem. We'll use DNS or system property etc.
}
}
@@ -295,19 +279,6 @@ public class Config {
String result = null;
Hashtable subTable;
- /*
- * In the situation when kdc is specified by
- * java.security.krb5.kdc, we get the kdc from [libdefaults] in
- * hashtable.
- */
- if (name.equalsIgnoreCase("kdc") &&
- (section.equalsIgnoreCase(getDefault("default_realm", "libdefaults"))) &&
- (java.security.AccessController.doPrivileged(
- new sun.security.action.
- GetPropertyAction("java.security.krb5.kdc")) != null)) {
- result = getDefault("kdc", "libdefaults");
- return result;
- }
if (stanzaTable != null) {
for (Enumeration e = stanzaTable.keys(); e.hasMoreElements(); ) {
stanzaName = (String)e.nextElement();
@@ -1035,13 +1006,13 @@ public class Config {
/**
* Resets the default kdc realm.
* We do not need to synchronize these methods since assignments are atomic
+ *
+ * This method was useless. Kept here in case some class still calls it.
*/
public void resetDefaultRealm(String realm) {
- defaultRealm = realm;
if (DEBUG) {
- System.out.println(">>> Config reset default kdc " + defaultRealm);
- }
-
+ System.out.println(">>> Config try resetting default kdc " + realm);
+ }
}
/**
@@ -1098,6 +1069,9 @@ public class Config {
* @return the default realm, always non null
*/
public String getDefaultRealm() throws KrbException {
+ if (defaultRealm != null) {
+ return defaultRealm;
+ }
Exception cause = null;
String realm = getDefault("default_realm", "libdefaults");
if ((realm == null) && useDNS_Realm()) {
@@ -1141,6 +1115,9 @@ public class Config {
public String getKDCList(String realm) throws KrbException {
if (realm == null) {
realm = getDefaultRealm();
+ }
+ if (realm.equalsIgnoreCase(defaultRealm)) {
+ return defaultKDC;
}
Exception cause = null;
String kdcs = getDefault("kdc", realm);
@@ -1171,6 +1148,9 @@ public class Config {
});
}
if (kdcs == null) {
+ if (defaultKDC != null) {
+ return defaultKDC;
+ }
KrbException ke = new KrbException("Cannot locate KDC");
if (cause != null) {
ke.initCause(cause);
--- a/src/share/classes/sun/security/krb5/KrbApReq.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/sun/security/krb5/KrbApReq.java Thu Aug 06 17:26:35 2009 -0700
@@ -294,8 +294,6 @@ public class KrbApReq {
apReqMessg.ticket.sname.setRealm(apReqMessg.ticket.realm);
enc_ticketPart.cname.setRealm(enc_ticketPart.crealm);
- Config.getInstance().resetDefaultRealm(apReqMessg.ticket.realm.toString());
-
if (!authenticator.cname.equals(enc_ticketPart.cname))
throw new KrbApErrException(Krb5.KRB_AP_ERR_BADMATCH);
--- a/src/share/classes/sun/security/krb5/internal/ktab/KeyTab.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/sun/security/krb5/internal/ktab/KeyTab.java Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Portions Copyright 2000-2006 Sun Microsystems, Inc. All Rights Reserved.
+ * Portions Copyright 2000-2009 Sun Microsystems, Inc. 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
@@ -403,11 +403,11 @@ public class KeyTab implements KeyTabCon
/**
* Retrieves the key table entry with the specified service name.
* @param service the service which may have an entry in the key table.
+ * @param keyType the etype to match, returns the 1st one if -1 provided
* @return -1 if the entry is not found, else return the entry index
* in the list.
*/
private int retrieveEntry(PrincipalName service, int keyType) {
- int found = -1;
KeyTabEntry e;
if (entries != null) {
for (int i = 0; i < entries.size(); i++) {
@@ -418,7 +418,7 @@ public class KeyTab implements KeyTabCon
}
}
}
- return found;
+ return -1;
}
/**
@@ -476,12 +476,29 @@ public class KeyTab implements KeyTabCon
/**
* Removes an entry from the key table.
* @param service the service <code>PrincipalName</code>.
- */
- public void deleteEntry(PrincipalName service) {
- int result = retrieveEntry(service, -1);
+ * @param etype the etype to match, first one if -1 provided
+ * @return 1 if removed successfully, 0 otherwise
+ */
+ public int deleteEntry(PrincipalName service, int etype) {
+ int result = retrieveEntry(service, etype);
if (result != -1) {
entries.removeElementAt(result);
- }
+ return 1;
+ }
+ return 0;
+ }
+
+ /**
+ * Removes an entry from the key table.
+ * @param service the service <code>PrincipalName</code>.
+ * @return number of entries removed
+ */
+ public int deleteEntry(PrincipalName service) {
+ int count = 0;
+ while (deleteEntry(service, -1) > 0) {
+ count++;
+ }
+ return count;
}
/**
--- a/src/share/classes/sun/security/pkcs11/SunPKCS11.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/sun/security/pkcs11/SunPKCS11.java Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 2003-2008 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 2003-2009 Sun Microsystems, Inc. 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
@@ -390,24 +390,6 @@ public final class SunPKCS11 extends Aut
return sb.toString();
}
- // set to true once self verification is complete
- private static volatile boolean integrityVerified;
-
- static void verifySelfIntegrity(Class c) {
- if (integrityVerified) {
- return;
- }
- doVerifySelfIntegrity(c);
- }
-
- private static synchronized void doVerifySelfIntegrity(Class c) {
- integrityVerified = JarVerifier.verify(c);
- if (integrityVerified == false) {
- throw new ProviderException
- ("The SunPKCS11 provider may have been tampered with.");
- }
- }
-
public boolean equals(Object obj) {
return this == obj;
}
@@ -923,7 +905,6 @@ public final class SunPKCS11 extends Aut
if (type == MD) {
return new P11Digest(token, algorithm, mechanism);
} else if (type == CIP) {
- verifySelfIntegrity(getClass());
if (algorithm.startsWith("RSA")) {
return new P11RSACipher(token, algorithm, mechanism);
} else {
@@ -932,12 +913,10 @@ public final class SunPKCS11 extends Aut
} else if (type == SIG) {
return new P11Signature(token, algorithm, mechanism);
} else if (type == MAC) {
- verifySelfIntegrity(getClass());
return new P11Mac(token, algorithm, mechanism);
} else if (type == KPG) {
return new P11KeyPairGenerator(token, algorithm, mechanism);
} else if (type == KA) {
- verifySelfIntegrity(getClass());
if (algorithm.equals("ECDH")) {
return new P11ECDHKeyAgreement(token, algorithm, mechanism);
} else {
@@ -946,11 +925,8 @@ public final class SunPKCS11 extends Aut
} else if (type == KF) {
return token.getKeyFactory(algorithm);
} else if (type == SKF) {
- verifySelfIntegrity(getClass());
return new P11SecretKeyFactory(token, algorithm);
} else if (type == KG) {
- verifySelfIntegrity(getClass());
-
// reference equality
if (algorithm == "SunTlsRsaPremasterSecret") {
return new P11TlsRsaPremasterSecretGenerator(
--- a/src/share/classes/sun/security/provider/certpath/CertPathHelper.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/sun/security/provider/certpath/CertPathHelper.java Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2006 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 2002-2009 Sun Microsystems, Inc. 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,11 @@
package sun.security.provider.certpath;
+import java.util.Date;
import java.util.Set;
import java.security.cert.X509CertSelector;
+import java.security.cert.X509CRLSelector;
import sun.security.x509.GeneralNameInterface;
@@ -55,8 +57,14 @@ public abstract class CertPathHelper {
protected abstract void implSetPathToNames(X509CertSelector sel,
Set<GeneralNameInterface> names);
+ protected abstract void implSetDateAndTime(X509CRLSelector sel, Date date, long skew);
+
static void setPathToNames(X509CertSelector sel,
Set<GeneralNameInterface> names) {
instance.implSetPathToNames(sel, names);
}
+
+ static void setDateAndTime(X509CRLSelector sel, Date date, long skew) {
+ instance.implSetDateAndTime(sel, date, skew);
+ }
}
--- a/src/share/classes/sun/security/provider/certpath/CrlRevocationChecker.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/sun/security/provider/certpath/CrlRevocationChecker.java Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2008 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 2000-2009 Sun Microsystems, Inc. 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
@@ -81,6 +81,10 @@ class CrlRevocationChecker extends PKIXC
private static final boolean[] ALL_REASONS =
{true, true, true, true, true, true, true, true, true};
+ // Maximum clock skew in milliseconds (15 minutes) allowed when checking
+ // validity of CRLs
+ private static final long MAX_CLOCK_SKEW = 900000;
+
/**
* Creates a <code>CrlRevocationChecker</code>.
*
@@ -281,7 +285,7 @@ class CrlRevocationChecker extends PKIXC
try {
X509CRLSelector sel = new X509CRLSelector();
sel.setCertificateChecking(currCert);
- sel.setDateAndTime(mCurrentTime);
+ CertPathHelper.setDateAndTime(sel, mCurrentTime, MAX_CLOCK_SKEW);
for (CertStore mStore : mStores) {
for (java.security.cert.CRL crl : mStore.getCRLs(sel)) {
--- a/src/share/classes/sun/security/provider/certpath/OCSPResponse.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/sun/security/provider/certpath/OCSPResponse.java Thu Aug 06 17:26:35 2009 -0700
@@ -149,9 +149,9 @@ class OCSPResponse {
private SingleResponse singleResponse;
- // Maximum clock skew in milliseconds (10 minutes) allowed when checking
+ // Maximum clock skew in milliseconds (15 minutes) allowed when checking
// validity of OCSP responses
- private static final long MAX_CLOCK_SKEW = 600000;
+ private static final long MAX_CLOCK_SKEW = 900000;
// an array of all of the CRLReasons (used in SingleResponse)
private static CRLReason[] values = CRLReason.values();
--- a/src/share/classes/sun/security/tools/JarSigner.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/sun/security/tools/JarSigner.java Thu Aug 06 17:26:35 2009 -0700
@@ -136,7 +136,7 @@ public class JarSigner {
char[] keypass; // private key password
String sigfile; // name of .SF file
String sigalg; // name of signature algorithm
- String digestalg = "SHA1"; // name of digest algorithm
+ String digestalg = "SHA-256"; // name of digest algorithm
String signedjar; // output filename
String tsaUrl; // location of the Timestamping Authority
String tsaAlias; // alias for the Timestamping Authority's certificate
@@ -2205,7 +2205,7 @@ class SignatureFile {
if (keyAlgorithm.equalsIgnoreCase("DSA"))
digestAlgorithm = "SHA1";
else if (keyAlgorithm.equalsIgnoreCase("RSA"))
- digestAlgorithm = "SHA1";
+ digestAlgorithm = "SHA256";
else {
throw new RuntimeException("private key is not a DSA or "
+ "RSA key");
--- a/src/share/classes/sun/security/tools/KeyTool.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/sun/security/tools/KeyTool.java Thu Aug 06 17:26:35 2009 -0700
@@ -1052,7 +1052,7 @@ public final class KeyTool {
X509CertImpl signerCertImpl = new X509CertImpl(encoded);
X509CertInfo signerCertInfo = (X509CertInfo)signerCertImpl.get(
X509CertImpl.NAME + "." + X509CertImpl.INFO);
- X500Name owner = (X500Name)signerCertInfo.get(X509CertInfo.SUBJECT + "." +
+ X500Name issuer = (X500Name)signerCertInfo.get(X509CertInfo.SUBJECT + "." +
CertificateSubjectName.DN_NAME);
Date firstDate = getStartDate(startDate);
@@ -1068,7 +1068,7 @@ public final class KeyTool {
Signature signature = Signature.getInstance(sigAlgName);
signature.initSign(privateKey);
- X500Signer signer = new X500Signer(signature, owner);
+ X500Signer signer = new X500Signer(signature, issuer);
X509CertInfo info = new X509CertInfo();
info.set(X509CertInfo.VALIDITY, interval);
@@ -1102,7 +1102,8 @@ public final class KeyTool {
PKCS10 req = new PKCS10(rawReq);
info.set(X509CertInfo.KEY, new CertificateX509Key(req.getSubjectPublicKeyInfo()));
- info.set(X509CertInfo.SUBJECT, new CertificateSubjectName(req.getSubjectName()));
+ info.set(X509CertInfo.SUBJECT, new CertificateSubjectName(
+ dname==null?req.getSubjectName():new X500Name(dname)));
CertificateExtensions reqex = null;
Iterator<PKCS10Attribute> attrs = req.getAttributes().getAttributes().iterator();
while (attrs.hasNext()) {
@@ -1160,8 +1161,9 @@ public final class KeyTool {
Signature signature = Signature.getInstance(sigAlgName);
signature.initSign(privKey);
- X500Name subject =
- new X500Name(((X509Certificate)cert).getSubjectDN().toString());
+ X500Name subject = dname == null?
+ new X500Name(((X509Certificate)cert).getSubjectDN().toString()):
+ new X500Name(dname);
X500Signer signer = new X500Signer(signature, subject);
// Sign the request and base-64 encode it
@@ -1316,7 +1318,7 @@ public final class KeyTool {
if ("DSA".equalsIgnoreCase(keyAlgName)) {
return "SHA1WithDSA";
} else if ("RSA".equalsIgnoreCase(keyAlgName)) {
- return "SHA1WithRSA";
+ return "SHA256WithRSA";
} else if ("EC".equalsIgnoreCase(keyAlgName)) {
return "SHA1withECDSA";
} else {
@@ -1334,6 +1336,8 @@ public final class KeyTool {
if (keysize == -1) {
if ("EC".equalsIgnoreCase(keyAlgName)) {
keysize = 256;
+ } else if ("RSA".equalsIgnoreCase(keyAlgName)) {
+ keysize = 2048;
} else {
keysize = 1024;
}
@@ -2497,6 +2501,7 @@ public final class KeyTool {
cert.getNotAfter().toString(),
getCertFingerPrint("MD5", cert),
getCertFingerPrint("SHA1", cert),
+ getCertFingerPrint("SHA-256", cert),
cert.getSigAlgName(),
cert.getVersion()
};
@@ -3428,7 +3433,7 @@ public final class KeyTool {
int colonpos = name.indexOf(':');
if (colonpos >= 0) {
- if (name.substring(colonpos+1).equalsIgnoreCase("critical")) {
+ if (oneOf(name.substring(colonpos+1), "critical") == 0) {
isCritical = true;
}
name = name.substring(0, colonpos);
@@ -3689,6 +3694,8 @@ public final class KeyTool {
System.err.println(rb.getString
("\t [-alias <alias>] [-sigalg <sigalg>]"));
System.err.println(rb.getString
+ ("\t [-dname <dname>]"));
+ System.err.println(rb.getString
("\t [-file <csr_file>] [-keypass <keypass>]"));
System.err.println(rb.getString
("\t [-keystore <keystore>] [-storepass <storepass>]"));
@@ -3770,6 +3777,8 @@ public final class KeyTool {
("\t [-infile <infile>] [-outfile <outfile>]"));
System.err.println(rb.getString
("\t [-alias <alias>]"));
+ System.err.println(rb.getString
+ ("\t [-dname <dname>]"));
System.err.println(rb.getString
("\t [-sigalg <sigalg>]"));
System.err.println(rb.getString
--- a/src/share/classes/sun/security/util/Resources.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/sun/security/util/Resources.java Thu Aug 06 17:26:35 2009 -0700
@@ -215,7 +215,7 @@ public class Resources extends java.util
{"\t(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 Signature algorithm name: {7}\n\t Version: {8}"},
+ "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}"},
{"What is your first and last name?",
"What is your first and last name?"},
{"What is the name of your organizational unit?",
@@ -301,6 +301,7 @@ public class Resources extends java.util
"-certreq [-v] [-protected]"},
{"\t [-alias <alias>] [-sigalg <sigalg>]",
"\t [-alias <alias>] [-sigalg <sigalg>]"},
+ {"\t [-dname <dname>]", "\t [-dname <dname>]"},
{"\t [-file <csr_file>] [-keypass <keypass>]",
"\t [-file <csr_file>] [-keypass <keypass>]"},
{"\t [-keystore <keystore>] [-storepass <storepass>]",
--- a/src/share/classes/sun/swing/FilePane.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/sun/swing/FilePane.java Thu Aug 06 17:26:35 2009 -0700
@@ -1,6 +1,5 @@
-
/*
- * Copyright 2003-2008 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 2003-2009 Sun Microsystems, Inc. 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
@@ -905,8 +904,8 @@ public class FilePane extends JPanel imp
@Override
public void sort() {
- ShellFolder.getInvoker().invoke(new Callable<Void>() {
- public Void call() throws Exception {
+ ShellFolder.invoke(new Callable<Void>() {
+ public Void call() {
DetailsTableRowSorter.super.sort();
return null;
}
--- a/src/share/classes/sun/swing/MenuItemLayoutHelper.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/sun/swing/MenuItemLayoutHelper.java Thu Aug 06 17:26:35 2009 -0700
@@ -718,10 +718,10 @@ public class MenuItemLayoutHelper {
}
private void alignRect(Rectangle rect, int alignment, int origWidth) {
- if (alignment != SwingUtilities.LEFT) {
+ if (alignment == SwingConstants.RIGHT) {
rect.x = rect.x + rect.width - origWidth;
- rect.width = origWidth;
- }
+ }
+ rect.width = origWidth;
}
protected void layoutIconAndTextInLabelRect(LayoutResult lr) {
--- a/src/share/classes/sun/tools/jar/Main.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/classes/sun/tools/jar/Main.java Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 1996-2007 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 1996-2009 Sun Microsystems, Inc. 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
--- a/src/share/demo/jvmti/java_crw_demo/java_crw_demo.c Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/demo/jvmti/java_crw_demo/java_crw_demo.c Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 2003-2006 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 2003-2009 Sun Microsystems, Inc. All Rights Reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
--- a/src/share/native/sun/security/pkcs11/wrapper/p11_general.c Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/native/sun/security/pkcs11/wrapper/p11_general.c Thu Aug 06 17:26:35 2009 -0700
@@ -337,7 +337,7 @@ Java_sun_security_pkcs11_wrapper_PKCS11_
CK_ULONG ckTokenNumber;
CK_SLOT_ID_PTR ckpSlotList;
CK_BBOOL ckTokenPresent;
- jlongArray jSlotList;
+ jlongArray jSlotList = NULL;
CK_RV rv;
CK_FUNCTION_LIST_PTR ckpFunctions = getFunctionList(env, obj);
@@ -637,7 +637,7 @@ Java_sun_security_pkcs11_wrapper_PKCS11_
CK_SLOT_ID ckSlotID;
CK_ULONG ckMechanismNumber;
CK_MECHANISM_TYPE_PTR ckpMechanismList;
- jlongArray jMechanismList;
+ jlongArray jMechanismList = NULL;
CK_RV rv;
CK_FUNCTION_LIST_PTR ckpFunctions = getFunctionList(env, obj);
--- a/src/share/native/sun/security/pkcs11/wrapper/p11_keymgmt.c Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/native/sun/security/pkcs11/wrapper/p11_keymgmt.c Thu Aug 06 17:26:35 2009 -0700
@@ -73,9 +73,8 @@ JNIEXPORT jlong JNICALL Java_sun_securit
CK_MECHANISM ckMechanism;
CK_ATTRIBUTE_PTR ckpAttributes = NULL_PTR;
CK_ULONG ckAttributesLength;
- CK_OBJECT_HANDLE ckKeyHandle;
+ CK_OBJECT_HANDLE ckKeyHandle = 0;
jlong jKeyHandle = 0L;
- CK_ULONG i;
CK_RV rv;
CK_FUNCTION_LIST_PTR ckpFunctions = getFunctionList(env, obj);
@@ -151,8 +150,7 @@ JNIEXPORT jlongArray JNICALL Java_sun_se
CK_OBJECT_HANDLE_PTR ckpPublicKeyHandle; /* pointer to Public Key */
CK_OBJECT_HANDLE_PTR ckpPrivateKeyHandle; /* pointer to Private Key */
CK_OBJECT_HANDLE_PTR ckpKeyHandles; /* pointer to array with Public and Private Key */
- jlongArray jKeyHandles;
- CK_ULONG i;
+ jlongArray jKeyHandles = NULL;
CK_RV rv;
CK_FUNCTION_LIST_PTR ckpFunctions = getFunctionList(env, obj);
@@ -299,9 +297,8 @@ JNIEXPORT jlong JNICALL Java_sun_securit
CK_ULONG ckWrappedKeyLength;
CK_ATTRIBUTE_PTR ckpAttributes = NULL_PTR;
CK_ULONG ckAttributesLength;
- CK_OBJECT_HANDLE ckKeyHandle;
+ CK_OBJECT_HANDLE ckKeyHandle = 0;
jlong jKeyHandle = 0L;
- CK_ULONG i;
CK_RV rv;
CK_FUNCTION_LIST_PTR ckpFunctions = getFunctionList(env, obj);
@@ -478,8 +475,7 @@ JNIEXPORT jlong JNICALL Java_sun_securit
CK_ATTRIBUTE_PTR ckpAttributes = NULL_PTR;
CK_ULONG ckAttributesLength;
CK_OBJECT_HANDLE ckKeyHandle = 0;
- jlong jKeyHandle;
- CK_ULONG i;
+ jlong jKeyHandle = 0L;
CK_RV rv;
CK_OBJECT_HANDLE_PTR phKey = &ckKeyHandle;
--- a/src/share/native/sun/security/pkcs11/wrapper/p11_objmgmt.c Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/native/sun/security/pkcs11/wrapper/p11_objmgmt.c Thu Aug 06 17:26:35 2009 -0700
@@ -72,8 +72,7 @@ JNIEXPORT jlong JNICALL Java_sun_securit
CK_OBJECT_HANDLE ckObjectHandle;
CK_ATTRIBUTE_PTR ckpAttributes = NULL_PTR;
CK_ULONG ckAttributesLength;
- jlong jObjectHandle;
- CK_ULONG i;
+ jlong jObjectHandle = 0L;
CK_RV rv;
CK_FUNCTION_LIST_PTR ckpFunctions = getFunctionList(env, obj);
@@ -114,8 +113,7 @@ JNIEXPORT jlong JNICALL Java_sun_securit
CK_OBJECT_HANDLE ckNewObjectHandle;
CK_ATTRIBUTE_PTR ckpAttributes = NULL_PTR;
CK_ULONG ckAttributesLength;
- jlong jNewObjectHandle;
- CK_ULONG i;
+ jlong jNewObjectHandle = 0L;
CK_RV rv;
CK_FUNCTION_LIST_PTR ckpFunctions = getFunctionList(env, obj);
@@ -180,7 +178,7 @@ JNIEXPORT jlong JNICALL Java_sun_securit
CK_SESSION_HANDLE ckSessionHandle;
CK_OBJECT_HANDLE ckObjectHandle;
CK_ULONG ckObjectSize;
- jlong jObjectSize;
+ jlong jObjectSize = 0L;
CK_RV rv;
CK_FUNCTION_LIST_PTR ckpFunctions = getFunctionList(env, obj);
@@ -217,7 +215,7 @@ JNIEXPORT void JNICALL Java_sun_security
CK_ATTRIBUTE_PTR ckpAttributes = NULL_PTR;
CK_ULONG ckAttributesLength;
CK_ULONG ckBufferLength;
- CK_ULONG i, j;
+ CK_ULONG i;
jobject jAttribute;
CK_RV rv;
@@ -307,7 +305,6 @@ JNIEXPORT void JNICALL Java_sun_security
CK_OBJECT_HANDLE ckObjectHandle;
CK_ATTRIBUTE_PTR ckpAttributes = NULL_PTR;
CK_ULONG ckAttributesLength;
- CK_ULONG i;
CK_RV rv;
CK_FUNCTION_LIST_PTR ckpFunctions = getFunctionList(env, obj);
@@ -342,7 +339,6 @@ JNIEXPORT void JNICALL Java_sun_security
CK_SESSION_HANDLE ckSessionHandle;
CK_ATTRIBUTE_PTR ckpAttributes = NULL_PTR;
CK_ULONG ckAttributesLength;
- CK_ULONG i;
CK_RV rv;
CK_FUNCTION_LIST_PTR ckpFunctions = getFunctionList(env, obj);
@@ -385,7 +381,7 @@ JNIEXPORT jlongArray JNICALL Java_sun_se
CK_ULONG ckMaxObjectLength;
CK_OBJECT_HANDLE_PTR ckpObjectHandleArray;
CK_ULONG ckActualObjectCount;
- jlongArray jObjectHandleArray;
+ jlongArray jObjectHandleArray = NULL;
CK_FUNCTION_LIST_PTR ckpFunctions = getFunctionList(env, obj);
if (ckpFunctions == NULL) { return NULL; }
--- a/src/share/native/sun/security/pkcs11/wrapper/p11_sign.c Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/native/sun/security/pkcs11/wrapper/p11_sign.c Thu Aug 06 17:26:35 2009 -0700
@@ -110,7 +110,7 @@ JNIEXPORT jbyteArray JNICALL Java_sun_se
CK_BYTE_PTR ckpSignature;
CK_ULONG ckDataLength;
CK_ULONG ckSignatureLength = 0;
- jbyteArray jSignature;
+ jbyteArray jSignature = NULL;
CK_RV rv;
CK_FUNCTION_LIST_PTR ckpFunctions = getFunctionList(env, obj);
--- a/src/share/native/sun/security/pkcs11/wrapper/p11_util.c Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/native/sun/security/pkcs11/wrapper/p11_util.c Thu Aug 06 17:26:35 2009 -0700
@@ -194,16 +194,14 @@ jlong ckAssertReturnValueOK(JNIEnv *env,
jclass jPKCS11ExceptionClass;
jmethodID jConstructor;
jthrowable jPKCS11Exception;
- jlong jErrorCode;
-
- if (returnValue == CKR_OK) {
- return 0L ;
- } else {
+ jlong jErrorCode = 0L;
+
+ if (returnValue != CKR_OK) {
+ jErrorCode = ckULongToJLong(returnValue);
jPKCS11ExceptionClass = (*env)->FindClass(env, CLASS_PKCS11EXCEPTION);
if (jPKCS11ExceptionClass != NULL) {
jConstructor = (*env)->GetMethodID(env, jPKCS11ExceptionClass, "<init>", "(J)V");
if (jConstructor != NULL) {
- jErrorCode = ckULongToJLong(returnValue);
jPKCS11Exception = (jthrowable) (*env)->NewObject(env, jPKCS11ExceptionClass, jConstructor, jErrorCode);
if (jPKCS11Exception != NULL) {
(*env)->Throw(env, jPKCS11Exception);
@@ -211,8 +209,8 @@ jlong ckAssertReturnValueOK(JNIEnv *env,
}
}
(*env)->DeleteLocalRef(env, jPKCS11ExceptionClass);
- return jErrorCode ;
- }
+ }
+ return jErrorCode ;
}
/*
--- a/src/share/native/sun/security/pkcs11/wrapper/pkcs11wrapper.h Thu Aug 06 17:16:31 2009 -0700
+++ b/src/share/native/sun/security/pkcs11/wrapper/pkcs11wrapper.h Thu Aug 06 17:26:35 2009 -0700
@@ -300,7 +300,7 @@ void jAttributeArrayToCKAttributeArray(J
/* funktions to convert a CK-type array and the array length to a Java array */
-jcharArray ckByteArrayToJByteArray(JNIEnv *env, const CK_BYTE_PTR ckpArray, CK_ULONG ckLength);
+jbyteArray ckByteArrayToJByteArray(JNIEnv *env, const CK_BYTE_PTR ckpArray, CK_ULONG ckLength);
jlongArray ckULongArrayToJLongArray(JNIEnv *env, const CK_ULONG_PTR ckpArray, CK_ULONG ckLength);
jcharArray ckCharArrayToJCharArray(JNIEnv *env, const CK_CHAR_PTR ckpArray, CK_ULONG length);
jcharArray ckUTF8CharArrayToJCharArray(JNIEnv *env, const CK_UTF8CHAR_PTR ckpArray, CK_ULONG ckLength);
--- a/src/solaris/classes/sun/awt/X11/XBaseWindow.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/solaris/classes/sun/awt/X11/XBaseWindow.java Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 2003-2008 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 2003-2009 Sun Microsystems, Inc. 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
--- a/src/solaris/classes/sun/awt/X11/XRobotPeer.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/solaris/classes/sun/awt/X11/XRobotPeer.java Thu Aug 06 17:26:35 2009 -0700
@@ -27,6 +27,7 @@ import java.awt.*;
import java.awt.*;
import java.awt.peer.*;
import sun.awt.X11GraphicsConfig;
+import sun.awt.SunToolkit;
class XRobotPeer implements RobotPeer {
private X11GraphicsConfig xgc = null;
@@ -38,7 +39,8 @@ class XRobotPeer implements RobotPeer {
XRobotPeer(GraphicsConfiguration gc) {
this.xgc = (X11GraphicsConfig)gc;
- setup();
+ SunToolkit tk = (SunToolkit)Toolkit.getDefaultToolkit();
+ setup(tk.getNumberOfButtons());
}
public void dispose() {
@@ -81,7 +83,7 @@ class XRobotPeer implements RobotPeer {
return pixelArray;
}
- private static native synchronized void setup();
+ private static native synchronized void setup(int numberOfButtons);
private static native synchronized void mouseMoveImpl(X11GraphicsConfig xgc, int x, int y);
private static native synchronized void mousePressImpl(int buttons);
--- a/src/solaris/classes/sun/nio/ch/SctpChannelImpl.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/solaris/classes/sun/nio/ch/SctpChannelImpl.java Thu Aug 06 17:26:35 2009 -0700
@@ -126,8 +126,6 @@ public class SctpChannelImpl extends Sct
private Set<SocketAddress> remoteAddresses = Collections.EMPTY_SET;
/* -- End of fields protected by stateLock -- */
-
- private SctpResultContainer commUpResultContainer; /* null */
/**
* Constructor for normal connecting sockets
@@ -761,12 +759,6 @@ public class SctpChannelImpl extends Sct
if (!ensureReceiveOpen())
return null;
- if (commUpResultContainer != null) {
- resultContainer = commUpResultContainer;
- commUpResultContainer = null;
- continue;
- }
-
int n = 0;
try {
begin();
@@ -778,7 +770,7 @@ public class SctpChannelImpl extends Sct
}
do {
- n = receive(fdVal, buffer, resultContainer);
+ n = receive(fdVal, buffer, resultContainer, fromConnect);
} while ((n == IOStatus.INTERRUPTED) && isOpen());
} finally {
receiverCleanup();
@@ -809,9 +801,9 @@ public class SctpChannelImpl extends Sct
if (fromConnect) {
/* If we reach here, then it was connect that invoked
- * receive an received the COMM_UP. Save it and allow
- * the user handler to process it upon next receive. */
- commUpResultContainer = resultContainer;
+ * receive and received the COMM_UP. We have already
+ * handled the COMM_UP with the internal notification
+ * handler. Simply return. */
return null;
}
} /* receiveLock */
@@ -827,20 +819,21 @@ public class SctpChannelImpl extends Sct
private int receive(int fd,
ByteBuffer dst,
- SctpResultContainer resultContainer)
+ SctpResultContainer resultContainer,
+ boolean peek)
throws IOException {
int pos = dst.position();
int lim = dst.limit();
assert (pos <= lim);
int rem = (pos <= lim ? lim - pos : 0);
if (dst instanceof DirectBuffer && rem > 0)
- return receiveIntoNativeBuffer(fd, resultContainer, dst, rem, pos);
+ return receiveIntoNativeBuffer(fd, resultContainer, dst, rem, pos, peek);
/* Substitute a native buffer */
int newSize = Math.max(rem, 1);
ByteBuffer bb = Util.getTemporaryDirectBuffer(newSize);
try {
- int n = receiveIntoNativeBuffer(fd, resultContainer, bb, newSize, 0);
+ int n = receiveIntoNativeBuffer(fd, resultContainer, bb, newSize, 0, peek);
bb.flip();
if (n > 0 && rem > 0)
dst.put(bb);
@@ -854,10 +847,11 @@ public class SctpChannelImpl extends Sct
SctpResultContainer resultContainer,
ByteBuffer bb,
int rem,
- int pos)
+ int pos,
+ boolean peek)
throws IOException
{
- int n = receive0(fd, resultContainer, ((DirectBuffer)bb).address() + pos, rem);
+ int n = receive0(fd, resultContainer, ((DirectBuffer)bb).address() + pos, rem, peek);
if (n > 0)
bb.position(pos + n);
@@ -1089,7 +1083,7 @@ public class SctpChannelImpl extends Sct
private static native void initIDs();
static native int receive0(int fd, SctpResultContainer resultContainer,
- long address, int length) throws IOException;
+ long address, int length, boolean peek) throws IOException;
static native int send0(int fd, long address, int length,
SocketAddress target, int assocId, int streamNumber,
--- a/src/solaris/classes/sun/nio/ch/SctpMultiChannelImpl.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/solaris/classes/sun/nio/ch/SctpMultiChannelImpl.java Thu Aug 06 17:26:35 2009 -0700
@@ -31,6 +31,8 @@ import java.io.FileDescriptor;
import java.io.FileDescriptor;
import java.io.IOException;
import java.util.Collections;
+import java.util.Map.Entry;
+import java.util.Iterator;
import java.util.Set;
import java.util.HashSet;
import java.util.HashMap;
@@ -702,7 +704,7 @@ public class SctpMultiChannelImpl extend
int assocId = association.associationID();
Set<SocketAddress> addresses = null;
- try {
+ try {
addresses = SctpNet.getRemoteAddresses(fdVal, assocId);
} catch (IOException unused) {
/* OK, determining connected addresses may not be possible
@@ -723,9 +725,11 @@ public class SctpMultiChannelImpl extend
/* We cannot determine the connected addresses */
Set<java.util.Map.Entry<SocketAddress, Association>> addrAssocs =
addressMap.entrySet();
- for (java.util.Map.Entry<SocketAddress, Association> entry : addrAssocs) {
+ Iterator<Entry<SocketAddress, Association>> iterator = addrAssocs.iterator();
+ while (iterator.hasNext()) {
+ Entry<SocketAddress, Association> entry = iterator.next();
if (entry.getValue().equals(association)) {
- addressMap.remove(entry.getKey());
+ iterator.remove();
}
}
}
@@ -957,7 +961,7 @@ public class SctpMultiChannelImpl extend
int length)
throws IOException{
return SctpChannelImpl.receive0(fd, resultContainer, address,
- length);
+ length, false /*peek */);
}
private static int send0(int fd,
--- a/src/solaris/native/java/net/Inet4AddressImpl.c Thu Aug 06 17:16:31 2009 -0700
+++ b/src/solaris/native/java/net/Inet4AddressImpl.c Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2008 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 2000-2009 Sun Microsystems, Inc. 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
--- a/src/solaris/native/java/net/Inet6AddressImpl.c Thu Aug 06 17:16:31 2009 -0700
+++ b/src/solaris/native/java/net/Inet6AddressImpl.c Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2008 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 2000-2009 Sun Microsystems, Inc. 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
--- a/src/solaris/native/sun/awt/awt_Robot.c Thu Aug 06 17:16:31 2009 -0700
+++ b/src/solaris/native/sun/awt/awt_Robot.c Thu Aug 06 17:26:35 2009 -0700
@@ -51,9 +51,8 @@
extern struct X11GraphicsConfigIDs x11GraphicsConfigIDs;
-extern int32_t getNumButtons();
-
static jint * masks;
+static jint num_buttons;
static int32_t isXTestAvailable() {
int32_t major_opcode, first_event, first_error;
@@ -164,34 +163,34 @@ static XImage *getWindowImage(Display *
/*********************************************************************************************/
-JNIEXPORT void JNICALL
-Java_sun_awt_X11_XRobotPeer_setup (JNIEnv * env, jclass cls) {
+// this should be called from XRobotPeer constructor
+JNIEXPORT void JNICALL
+Java_sun_awt_X11_XRobotPeer_setup (JNIEnv * env, jclass cls, jint numberOfButtons) {
int32_t xtestAvailable;
-// this should be called from XRobotPeer constructor
+ DTRACE_PRINTLN("RobotPeer: setup()");
+
+ num_buttons = numberOfButtons;
+
jclass inputEventClazz = (*env)->FindClass(env, "java/awt/event/InputEvent");
jmethodID getButtonDownMasksID = (*env)->GetStaticMethodID(env, inputEventClazz, "getButtonDownMasks", "()[I");
jintArray obj = (jintArray)(*env)->CallStaticObjectMethod(env, inputEventClazz, getButtonDownMasksID);
- jsize len = (*env)->GetArrayLength(env, obj);
jint * tmp = (*env)->GetIntArrayElements(env, obj, JNI_FALSE);
- masks = (jint *)malloc(sizeof(jint)*len);
+ masks = (jint *)malloc(sizeof(jint) * num_buttons);
if (masks == (jint *) NULL) {
JNU_ThrowOutOfMemoryError((JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2), NULL);
goto finally;
}
int i;
- for (i = 0; i < len; i++) {
+ for (i = 0; i < num_buttons; i++) {
masks[i] = tmp[i];
}
(*env)->ReleaseIntArrayElements(env, obj, tmp, 0);
(*env)->DeleteLocalRef(env, obj);
- DTRACE_PRINTLN("RobotPeer: setup()");
-
- AWT_LOCK();
-
+ AWT_LOCK();
xtestAvailable = isXTestAvailable();
DTRACE_PRINTLN1("RobotPeer: XTest available = %d", xtestAvailable);
if (!xtestAvailable) {
@@ -337,8 +336,6 @@ void mouseAction(JNIEnv *env,
Bool isMousePress)
{
AWT_LOCK();
-
- int32_t num_buttons = getNumButtons(); //from XToolkit.c
DTRACE_PRINTLN1("RobotPeer: mouseAction(%i)", buttonMask);
DTRACE_PRINTLN1("RobotPeer: mouseAction, press = %d", isMousePress);
--- a/src/solaris/native/sun/nio/ch/SctpChannelImpl.c Thu Aug 06 17:16:31 2009 -0700
+++ b/src/solaris/native/sun/nio/ch/SctpChannelImpl.c Thu Aug 06 17:26:35 2009 -0700
@@ -417,11 +417,11 @@ void handleMessage
/*
* Class: sun_nio_ch_SctpChannelImpl
* Method: receive0
- * Signature: (ILsun/nio/ch/SctpResultContainer;JI)I
+ * Signature: (ILsun/nio/ch/SctpResultContainer;JIZ)I
*/
JNIEXPORT jint JNICALL Java_sun_nio_ch_SctpChannelImpl_receive0
(JNIEnv *env, jclass klass, jint fd, jobject resultContainerObj,
- jlong address, jint length) {
+ jlong address, jint length, jboolean peek) {
SOCKADDR sa;
int sa_len = sizeof(sa);
ssize_t rv = 0;
@@ -429,6 +429,7 @@ JNIEXPORT jint JNICALL Java_sun_nio_ch_S
struct iovec iov[1];
struct msghdr msg[1];
char cbuf[CMSG_SPACE(sizeof (struct sctp_sndrcvinfo))];
+ int flags = peek == JNI_TRUE ? MSG_PEEK : 0;
/* Set up the msghdr structure for receiving */
memset(msg, 0, sizeof (*msg));
@@ -443,7 +444,7 @@ JNIEXPORT jint JNICALL Java_sun_nio_ch_S
msg->msg_flags = 0;
do {
- if ((rv = recvmsg(fd, msg, 0)) < 0) {
+ if ((rv = recvmsg(fd, msg, flags)) < 0) {
if (errno == EWOULDBLOCK) {
return IOS_UNAVAILABLE;
} else if (errno == EINTR) {
@@ -473,7 +474,7 @@ JNIEXPORT jint JNICALL Java_sun_nio_ch_S
memcpy(buf, addr, rv);
iov->iov_base = buf + rv;
iov->iov_len = NOTIFICATION_BUFFER_SIZE - rv;
- if ((rv = recvmsg(fd, msg, 0)) < 0) {
+ if ((rv = recvmsg(fd, msg, flags)) < 0) {
handleSocketError(env, errno);
return 0;
}
--- a/src/solaris/native/sun/nio/fs/UnixNativeDispatcher.c Thu Aug 06 17:16:31 2009 -0700
+++ b/src/solaris/native/sun/nio/fs/UnixNativeDispatcher.c Thu Aug 06 17:26:35 2009 -0700
@@ -85,19 +85,21 @@ static jfieldID entry_dev;
static jfieldID entry_dev;
/**
- * System calls that may not be available at build time.
+ * System calls that may not be available at run time.
*/
typedef int openat64_func(int, const char *, int, ...);
typedef int fstatat64_func(int, const char *, struct stat64 *, int);
typedef int unlinkat_func(int, const char*, int);
typedef int renameat_func(int, const char*, int, const char*);
typedef int futimesat_func(int, const char *, const struct timeval *);
+typedef DIR* fdopendir_func(int);
static openat64_func* my_openat64_func = NULL;
static fstatat64_func* my_fstatat64_func = NULL;
static unlinkat_func* my_unlinkat_func = NULL;
static renameat_func* my_renameat_func = NULL;
static futimesat_func* my_futimesat_func = NULL;
+static fdopendir_func* my_fdopendir_func = NULL;
/**
* fstatat missing from glibc on Linux. Temporary workaround
@@ -183,7 +185,7 @@ Java_sun_nio_fs_UnixNativeDispatcher_ini
entry_options = (*env)->GetFieldID(env, clazz, "opts", "[B");
entry_dev = (*env)->GetFieldID(env, clazz, "dev", "J");
- /* system calls that might not be available at build time */
+ /* system calls that might not be available at run time */
#if defined(__solaris__) && defined(_LP64)
/* Solaris 64-bit does not have openat64/fstatat64 */
@@ -196,6 +198,7 @@ Java_sun_nio_fs_UnixNativeDispatcher_ini
my_unlinkat_func = (unlinkat_func*) dlsym(RTLD_DEFAULT, "unlinkat");
my_renameat_func = (renameat_func*) dlsym(RTLD_DEFAULT, "renameat");
my_futimesat_func = (futimesat_func*) dlsym(RTLD_DEFAULT, "futimesat");
+ my_fdopendir_func = (fdopendir_func*) dlsym(RTLD_DEFAULT, "fdopendir");
#if defined(FSTATAT64_SYSCALL_AVAILABLE)
/* fstatat64 missing from glibc */
@@ -205,7 +208,7 @@ Java_sun_nio_fs_UnixNativeDispatcher_ini
if (my_openat64_func != NULL && my_fstatat64_func != NULL &&
my_unlinkat_func != NULL && my_renameat_func != NULL &&
- my_futimesat_func != NULL)
+ my_futimesat_func != NULL && my_fdopendir_func != NULL)
{
flags |= sun_nio_fs_UnixNativeDispatcher_HAS_AT_SYSCALLS;
}
@@ -565,8 +568,13 @@ Java_sun_nio_fs_UnixNativeDispatcher_fdo
Java_sun_nio_fs_UnixNativeDispatcher_fdopendir(JNIEnv* env, jclass this, int dfd) {
DIR* dir;
- /* EINTR not listed as a possible error */
- dir = fdopendir((int)dfd);
+ if (my_fdopendir_func == NULL) {
+ JNU_ThrowInternalError(env, "should not reach here");
+ return (jlong)-1;
+ }
+
+ /* EINTR not listed as a possible error */
+ dir = (*my_fdopendir_func)((int)dfd);
if (dir == NULL) {
throwUnixException(env, errno);
}
--- a/src/windows/classes/sun/awt/shell/Win32ShellFolder2.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/windows/classes/sun/awt/shell/Win32ShellFolder2.java Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 2003-2008 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 2003-2009 Sun Microsystems, Inc. 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.awt.Toolkit;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.File;
-import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.*;
import java.util.concurrent.*;
@@ -185,8 +184,8 @@ final class Win32ShellFolder2 extends Sh
boolean disposed;
public void dispose() {
if (disposed) return;
- ShellFolder.getInvoker().invoke(new Callable<Void>() {
- public Void call() throws Exception {
+ invoke(new Callable<Void>() {
+ public Void call() {
if (relativePIDL != 0) {
releasePIDL(relativePIDL);
}
@@ -224,7 +223,7 @@ final class Win32ShellFolder2 extends Sh
*/
private boolean isPersonal;
- private static String composePathForCsidl(int csidl) throws IOException {
+ private static String composePathForCsidl(int csidl) throws IOException, InterruptedException {
String path = getFileSystemPath(csidl);
return path == null
? ("ShellFolder: 0x" + Integer.toHexString(csidl))
@@ -235,12 +234,13 @@ final class Win32ShellFolder2 extends Sh
* Create a system special shell folder, such as the
* desktop or Network Neighborhood.
*/
- Win32ShellFolder2(final int csidl) throws IOException {
+ Win32ShellFolder2(final int csidl) throws IOException, InterruptedException {
// Desktop is parent of DRIVES and NETWORK, not necessarily
// other special shell folders.
super(null, composePathForCsidl(csidl));
- ShellFolder.getInvoker().invoke(new Callable<Void>() {
- public Void call() throws Exception {
+
+ invoke(new Callable<Void>() {
+ public Void call() throws InterruptedException {
if (csidl == DESKTOP) {
initDesktop();
} else {
@@ -276,7 +276,7 @@ final class Win32ShellFolder2 extends Sh
}
return null;
}
- });
+ }, InterruptedException.class);
sun.java2d.Disposer.addRecord(this, disposer);
}
@@ -296,13 +296,13 @@ final class Win32ShellFolder2 extends Sh
/**
* Creates a shell folder with a parent and relative PIDL
*/
- Win32ShellFolder2(final Win32ShellFolder2 parent, final long relativePIDL) {
+ Win32ShellFolder2(final Win32ShellFolder2 parent, final long relativePIDL) throws InterruptedException {
super(parent,
- ShellFolder.getInvoker().invoke(new Callable<String>() {
- public String call() throws Exception {
+ invoke(new Callable<String>() {
+ public String call() {
return getFileSystemPath(parent.getIShellFolder(), relativePIDL);
}
- })
+ }, RuntimeException.class)
);
this.disposer.relativePIDL = relativePIDL;
getAbsolutePath();
@@ -335,8 +335,8 @@ final class Win32ShellFolder2 extends Sh
* drive (normally "C:\").
*/
protected Object writeReplace() throws java.io.ObjectStreamException {
- return ShellFolder.getInvoker().invoke(new Callable<File>() {
- public File call() throws Exception {
+ return invoke(new Callable<File>() {
+ public File call() {
if (isFileSystem()) {
return new File(getPath());
} else {
@@ -398,11 +398,11 @@ final class Win32ShellFolder2 extends Sh
/**
* Accessor for IShellFolder
*/
- public long getIShellFolder() {
+ private long getIShellFolder() {
if (disposer.pIShellFolder == 0) {
- disposer.pIShellFolder =
- ShellFolder.getInvoker().invoke(new Callable<Long>() {
- public Long call() throws Exception {
+ try {
+ disposer.pIShellFolder = invoke(new Callable<Long>() {
+ public Long call() {
assert(isDirectory());
assert(parent != null);
long parentIShellFolder = getParentIShellFolder();
@@ -421,7 +421,10 @@ final class Win32ShellFolder2 extends Sh
}
return pIShellFolder;
}
- });
+ }, RuntimeException.class);
+ } catch (InterruptedException e) {
+ // Ignore error
+ }
}
return disposer.pIShellFolder;
}
@@ -505,18 +508,23 @@ final class Win32ShellFolder2 extends Sh
}
if (parent == rhs.parent || parent.equals(rhs.parent)) {
- return pidlsEqual(getParentIShellFolder(), disposer.relativePIDL, rhs.disposer.relativePIDL);
+ try {
+ return pidlsEqual(getParentIShellFolder(), disposer.relativePIDL, rhs.disposer.relativePIDL);
+ } catch (InterruptedException e) {
+ return false;
+ }
}
return false;
}
- private static boolean pidlsEqual(final long pIShellFolder, final long pidl1, final long pidl2) {
- return ShellFolder.getInvoker().invoke(new Callable<Boolean>() {
- public Boolean call() throws Exception {
- return (compareIDs(pIShellFolder, pidl1, pidl2) == 0);
- }
- });
+ private static boolean pidlsEqual(final long pIShellFolder, final long pidl1, final long pidl2)
+ throws InterruptedException {
+ return invoke(new Callable<Boolean>() {
+ public Boolean call() {
+ return compareIDs(pIShellFolder, pidl1, pidl2) == 0;
+ }
+ }, RuntimeException.class);
}
// NOTE: this method uses COM and must be called on the 'COM thread'. See ComInvoker for the details
@@ -539,14 +547,16 @@ final class Win32ShellFolder2 extends Sh
* Return whether the given attribute flag is set for this object
*/
public boolean hasAttribute(final int attribute) {
- return ShellFolder.getInvoker().invoke(new Callable<Boolean>() {
- public Boolean call() throws Exception {
+ Boolean result = invoke(new Callable<Boolean>() {
+ public Boolean call() {
// Caching at this point doesn't seem to be cost efficient
return (getAttributes0(getParentIShellFolder(),
getRelativePIDL(), attribute)
& attribute) != 0;
}
});
+
+ return result != null && result;
}
/**
@@ -561,32 +571,29 @@ final class Win32ShellFolder2 extends Sh
private static native int getAttributes0(long pParentIShellFolder, long pIDL, int attrsMask);
// Return the path to the underlying file system object
+ // Should be called from the COM thread
private static String getFileSystemPath(final long parentIShellFolder, final long relativePIDL) {
- return ShellFolder.getInvoker().invoke(new Callable<String>() {
- public String call() throws Exception {
- int linkedFolder = ATTRIB_LINK | ATTRIB_FOLDER;
- if (parentIShellFolder == Win32ShellFolderManager2.getNetwork().getIShellFolder() &&
- getAttributes0(parentIShellFolder, relativePIDL, linkedFolder) == linkedFolder) {
-
- String s =
- getFileSystemPath(Win32ShellFolderManager2.getDesktop().getIShellFolder(),
- getLinkLocation(parentIShellFolder, relativePIDL, false));
- if (s != null && s.startsWith("\\\\")) {
- return s;
- }
- }
- return getDisplayNameOf(parentIShellFolder, relativePIDL, SHGDN_FORPARSING);
- }
- });
+ int linkedFolder = ATTRIB_LINK | ATTRIB_FOLDER;
+ if (parentIShellFolder == Win32ShellFolderManager2.getNetwork().getIShellFolder() &&
+ getAttributes0(parentIShellFolder, relativePIDL, linkedFolder) == linkedFolder) {
+
+ String s =
+ getFileSystemPath(Win32ShellFolderManager2.getDesktop().getIShellFolder(),
+ getLinkLocation(parentIShellFolder, relativePIDL, false));
+ if (s != null && s.startsWith("\\\\")) {
+ return s;
+ }
+ }
+ return getDisplayNameOf(parentIShellFolder, relativePIDL, SHGDN_FORPARSING);
}
// Needs to be accessible to Win32ShellFolderManager2
- static String getFileSystemPath(final int csidl) throws IOException {
- return ShellFolder.getInvoker().invoke(new Callable<String>() {
- public String call() throws Exception {
+ static String getFileSystemPath(final int csidl) throws IOException, InterruptedException {
+ return invoke(new Callable<String>() {
+ public String call() throws IOException {
return getFileSystemPath0(csidl);
}
- });
+ }, IOException.class);
}
// NOTE: this method uses COM and must be called on the 'COM thread'. See ComInvoker for the details
@@ -630,13 +637,14 @@ final class Win32ShellFolder2 extends Sh
*/
// Returns an IEnumIDList interface for an IShellFolder. The value
// returned must be released using releaseEnumObjects().
- private long getEnumObjects(long pIShellFolder, final boolean includeHiddenFiles) {
- final boolean isDesktop = (disposer.pIShellFolder == getDesktopIShellFolder());
- return ShellFolder.getInvoker().invoke(new Callable<Long>() {
- public Long call() throws Exception {
+ private long getEnumObjects(final boolean includeHiddenFiles) throws InterruptedException {
+ return invoke(new Callable<Long>() {
+ public Long call() {
+ boolean isDesktop = disposer.pIShellFolder == getDesktopIShellFolder();
+
return getEnumObjects(disposer.pIShellFolder, isDesktop, includeHiddenFiles);
}
- });
+ }, RuntimeException.class);
}
// Returns an IEnumIDList interface for an IShellFolder. The value
@@ -670,58 +678,62 @@ final class Win32ShellFolder2 extends Sh
security.checkRead(getPath());
}
- return ShellFolder.getInvoker().invoke(new Callable<File[]>() {
- public File[] call() throws Exception {
- if (!isDirectory()) {
- return null;
+ try {
+ return invoke(new Callable<File[]>() {
+ public File[] call() throws InterruptedException {
+ if (!isDirectory()) {
+ return null;
+ }
+ // Links to directories are not directories and cannot be parents.
+ // This does not apply to folders in My Network Places (NetHood)
+ // because they are both links and real directories!
+ if (isLink() && !hasAttribute(ATTRIB_FOLDER)) {
+ return new File[0];
+ }
+
+ Win32ShellFolder2 desktop = Win32ShellFolderManager2.getDesktop();
+ Win32ShellFolder2 personal = Win32ShellFolderManager2.getPersonal();
+
+ // If we are a directory, we have a parent and (at least) a
+ // relative PIDL. We must first ensure we are bound to the
+ // parent so we have an IShellFolder to query.
+ long pIShellFolder = getIShellFolder();
+ // Now we can enumerate the objects in this folder.
+ ArrayList<Win32ShellFolder2> list = new ArrayList<Win32ShellFolder2>();
+ long pEnumObjects = getEnumObjects(includeHiddenFiles);
+ if (pEnumObjects != 0) {
+ long childPIDL;
+ int testedAttrs = ATTRIB_FILESYSTEM | ATTRIB_FILESYSANCESTOR;
+ do {
+ childPIDL = getNextChild(pEnumObjects);
+ boolean releasePIDL = true;
+ if (childPIDL != 0 &&
+ (getAttributes0(pIShellFolder, childPIDL, testedAttrs) & testedAttrs) != 0) {
+ Win32ShellFolder2 childFolder;
+ if (Win32ShellFolder2.this.equals(desktop)
+ && personal != null
+ && pidlsEqual(pIShellFolder, childPIDL, personal.disposer.relativePIDL)) {
+ childFolder = personal;
+ } else {
+ childFolder = new Win32ShellFolder2(Win32ShellFolder2.this, childPIDL);
+ releasePIDL = false;
+ }
+ list.add(childFolder);
+ }
+ if (releasePIDL) {
+ releasePIDL(childPIDL);
+ }
+ } while (childPIDL != 0 && !Thread.currentThread().isInterrupted());
+ releaseEnumObjects(pEnumObjects);
+ }
+ return Thread.currentThread().isInterrupted()
+ ? new File[0]
+ : list.toArray(new ShellFolder[list.size()]);
}
- // Links to directories are not directories and cannot be parents.
- // This does not apply to folders in My Network Places (NetHood)
- // because they are both links and real directories!
- if (isLink() && !hasAttribute(ATTRIB_FOLDER)) {
- return new File[0];
- }
-
- Win32ShellFolder2 desktop = Win32ShellFolderManager2.getDesktop();
- Win32ShellFolder2 personal = Win32ShellFolderManager2.getPersonal();
-
- // If we are a directory, we have a parent and (at least) a
- // relative PIDL. We must first ensure we are bound to the
- // parent so we have an IShellFolder to query.
- long pIShellFolder = getIShellFolder();
- // Now we can enumerate the objects in this folder.
- ArrayList<Win32ShellFolder2> list = new ArrayList<Win32ShellFolder2>();
- long pEnumObjects = getEnumObjects(pIShellFolder, includeHiddenFiles);
- if (pEnumObjects != 0) {
- long childPIDL;
- int testedAttrs = ATTRIB_FILESYSTEM | ATTRIB_FILESYSANCESTOR;
- do {
- childPIDL = getNextChild(pEnumObjects);
- boolean releasePIDL = true;
- if (childPIDL != 0 &&
- (getAttributes0(pIShellFolder, childPIDL, testedAttrs) & testedAttrs) != 0) {
- Win32ShellFolder2 childFolder;
- if (Win32ShellFolder2.this.equals(desktop)
- && personal != null
- && pidlsEqual(pIShellFolder, childPIDL, personal.disposer.relativePIDL)) {
- childFolder = personal;
- } else {
- childFolder = new Win32ShellFolder2(Win32ShellFolder2.this, childPIDL);
- releasePIDL = false;
- }
- list.add(childFolder);
- }
- if (releasePIDL) {
- releasePIDL(childPIDL);
- }
- } while (childPIDL != 0 && !Thread.currentThread().isInterrupted());
- releaseEnumObjects(pEnumObjects);
- }
- return Thread.currentThread().isInterrupted()
- ? new File[0]
- : list.toArray(new ShellFolder[list.size()]);
- }
- });
+ }, InterruptedException.class);
+ } catch (InterruptedException e) {
+ return new File[0];
+ }
}
@@ -730,13 +742,13 @@ final class Win32ShellFolder2 extends Sh
*
* @return The child shellfolder, or null if not found.
*/
- Win32ShellFolder2 getChildByPath(final String filePath) {
- return ShellFolder.getInvoker().invoke(new Callable<Win32ShellFolder2>() {
- public Win32ShellFolder2 call() throws Exception {
+ Win32ShellFolder2 getChildByPath(final String filePath) throws InterruptedException {
+ return invoke(new Callable<Win32ShellFolder2>() {
+ public Win32ShellFolder2 call() throws InterruptedException {
long pIShellFolder = getIShellFolder();
- long pEnumObjects = getEnumObjects(pIShellFolder, true);
+ long pEnumObjects = getEnumObjects(true);
Win32ShellFolder2 child = null;
- long childPIDL = 0;
+ long childPIDL;
while ((childPIDL = getNextChild(pEnumObjects)) != 0) {
if (getAttributes0(pIShellFolder, childPIDL, ATTRIB_FILESYSTEM) != 0) {
@@ -753,7 +765,7 @@ final class Win32ShellFolder2 extends Sh
releaseEnumObjects(pEnumObjects);
return child;
}
- });
+ }, InterruptedException.class);
}
private Boolean cachedIsLink;
@@ -791,8 +803,8 @@ final class Win32ShellFolder2 extends Sh
}
private ShellFolder getLinkLocation(final boolean resolve) {
- return ShellFolder.getInvoker().invoke(new Callable<ShellFolder>() {
- public ShellFolder call() throws Exception {
+ return invoke(new Callable<ShellFolder>() {
+ public ShellFolder call() {
if (!isLink()) {
return null;
}
@@ -805,6 +817,8 @@ final class Win32ShellFolder2 extends Sh
location =
Win32ShellFolderManager2.createShellFolderFromRelativePIDL(getDesktop(),
linkLocationPIDL);
+ } catch (InterruptedException e) {
+ // Return null
} catch (InternalError e) {
// Could be a link to a non-bindable object, such as a network connection
// TODO: getIShellFolder() should throw FileNotFoundException instead
@@ -816,19 +830,12 @@ final class Win32ShellFolder2 extends Sh
}
// Parse a display name into a PIDL relative to the current IShellFolder.
- long parseDisplayName(final String name) throws FileNotFoundException {
- try {
- return ShellFolder.getInvoker().invoke(new Callable<Long>() {
- public Long call() throws Exception {
- return parseDisplayName0(getIShellFolder(), name);
- }
- });
- } catch (RuntimeException e) {
- if (e.getCause() instanceof IOException) {
- throw new FileNotFoundException("Could not find file " + name);
- }
- throw e;
- }
+ long parseDisplayName(final String name) throws IOException, InterruptedException {
+ return invoke(new Callable<Long>() {
+ public Long call() throws IOException {
+ return parseDisplayName0(getIShellFolder(), name);
+ }
+ }, IOException.class);
}
// NOTE: this method uses COM and must be called on the 'COM thread'. See ComInvoker for the details
@@ -846,8 +853,8 @@ final class Win32ShellFolder2 extends Sh
public String getDisplayName() {
if (displayName == null) {
displayName =
- ShellFolder.getInvoker().invoke(new Callable<String>() {
- public String call() throws Exception {
+ invoke(new Callable<String>() {
+ public String call() {
return getDisplayNameOf(getParentIShellFolder(),
getRelativePIDL(), SHGDN_NORMAL);
}
@@ -867,8 +874,8 @@ final class Win32ShellFolder2 extends Sh
if (folderType == null) {
final long absolutePIDL = getAbsolutePIDL();
folderType =
- ShellFolder.getInvoker().invoke(new Callable<String>() {
- public String call() throws Exception {
+ invoke(new Callable<String>() {
+ public String call() {
return getFolderType(absolutePIDL);
}
});
@@ -926,15 +933,12 @@ final class Win32ShellFolder2 extends Sh
public static native int[] getFileChooserBitmapBits();
+ // Should be called from the COM thread
private long getIShellIcon() {
if (pIShellIcon == -1L) {
- pIShellIcon =
- ShellFolder.getInvoker().invoke(new Callable<Long>() {
- public Long call() throws Exception {
- return getIShellIcon(getIShellFolder());
- }
- });
- }
+ pIShellIcon = getIShellIcon(getIShellFolder());
+ }
+
return pIShellIcon;
}
@@ -988,8 +992,8 @@ final class Win32ShellFolder2 extends Sh
Image icon = getLargeIcon ? largeIcon : smallIcon;
if (icon == null) {
icon =
- ShellFolder.getInvoker().invoke(new Callable<Image>() {
- public Image call() throws Exception {
+ invoke(new Callable<Image>() {
+ public Image call() {
Image newIcon = null;
if (isFileSystem()) {
long parentIShellIcon = (parent != null)
@@ -1113,8 +1117,8 @@ final class Win32ShellFolder2 extends Sh
private static final int LVCFMT_CENTER = 2;
public ShellFolderColumnInfo[] getFolderColumns() {
- return ShellFolder.getInvoker().invoke(new Callable<ShellFolderColumnInfo[]>() {
- public ShellFolderColumnInfo[] call() throws Exception {
+ return invoke(new Callable<ShellFolderColumnInfo[]>() {
+ public ShellFolderColumnInfo[] call() {
ShellFolderColumnInfo[] columns = doGetColumnInfo(getIShellFolder());
if (columns != null) {
@@ -1143,8 +1147,8 @@ final class Win32ShellFolder2 extends Sh
}
public Object getFolderColumnValue(final int column) {
- return ShellFolder.getInvoker().invoke(new Callable<Object>() {
- public Object call() throws Exception {
+ return invoke(new Callable<Object>() {
+ public Object call() {
return doGetColumnValue(getParentIShellFolder(), getRelativePIDL(), column);
}
});
@@ -1163,8 +1167,8 @@ final class Win32ShellFolder2 extends Sh
public void sortChildren(final List<? extends File> files) {
// To avoid loads of synchronizations with Invoker and improve performance we
// synchronize the whole code of the sort method once
- getInvoker().invoke(new Callable<Void>() {
- public Void call() throws Exception {
+ invoke(new Callable<Void>() {
+ public Void call() {
Collections.sort(files, new ColumnComparator(getIShellFolder(), 0));
return null;
@@ -1184,19 +1188,21 @@ final class Win32ShellFolder2 extends Sh
// compares 2 objects within this folder by the specified column
public int compare(final File o, final File o1) {
- return ShellFolder.getInvoker().invoke(new Callable<Integer>() {
- public Integer call() throws Exception {
+ Integer result = invoke(new Callable<Integer>() {
+ public Integer call() {
if (o instanceof Win32ShellFolder2
- && o1 instanceof Win32ShellFolder2) {
+ && o1 instanceof Win32ShellFolder2) {
// delegates comparison to native method
return compareIDsByColumn(parentIShellFolder,
- ((Win32ShellFolder2) o).getRelativePIDL(),
- ((Win32ShellFolder2) o1).getRelativePIDL(),
- columnIdx);
+ ((Win32ShellFolder2) o).getRelativePIDL(),
+ ((Win32ShellFolder2) o1).getRelativePIDL(),
+ columnIdx);
}
return 0;
}
});
+
+ return result == null ? 0 : result;
}
}
}
--- a/src/windows/classes/sun/awt/shell/Win32ShellFolderManager2.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/windows/classes/sun/awt/shell/Win32ShellFolderManager2.java Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 2003-2008 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 2003-2009 Sun Microsystems, Inc. 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
@@ -58,10 +58,15 @@ public class Win32ShellFolderManager2 ex
}
public ShellFolder createShellFolder(File file) throws FileNotFoundException {
- return createShellFolder(getDesktop(), file);
- }
-
- static Win32ShellFolder2 createShellFolder(Win32ShellFolder2 parent, File file) throws FileNotFoundException {
+ try {
+ return createShellFolder(getDesktop(), file);
+ } catch (InterruptedException e) {
+ throw new FileNotFoundException("Execution was interrupted");
+ }
+ }
+
+ static Win32ShellFolder2 createShellFolder(Win32ShellFolder2 parent, File file)
+ throws FileNotFoundException, InterruptedException {
long pIDL;
try {
pIDL = parent.parseDisplayName(file.getCanonicalPath());
@@ -77,7 +82,8 @@ public class Win32ShellFolderManager2 ex
return folder;
}
- static Win32ShellFolder2 createShellFolderFromRelativePIDL(Win32ShellFolder2 parent, long pIDL) {
+ static Win32ShellFolder2 createShellFolderFromRelativePIDL(Win32ShellFolder2 parent, long pIDL)
+ throws InterruptedException {
// Walk down this relative pIDL, creating new nodes for each of the entries
while (pIDL != 0) {
long curPIDL = Win32ShellFolder2.copyFirstPIDLEntry(pIDL);
@@ -108,7 +114,9 @@ public class Win32ShellFolderManager2 ex
try {
desktop = new Win32ShellFolder2(DESKTOP);
} catch (IOException e) {
- desktop = null;
+ // Ignore error
+ } catch (InterruptedException e) {
+ // Ignore error
}
}
return desktop;
@@ -119,7 +127,9 @@ public class Win32ShellFolderManager2 ex
try {
drives = new Win32ShellFolder2(DRIVES);
} catch (IOException e) {
- drives = null;
+ // Ignore error
+ } catch (InterruptedException e) {
+ // Ignore error
}
}
return drives;
@@ -132,8 +142,10 @@ public class Win32ShellFolderManager2 ex
if (path != null) {
recent = createShellFolder(getDesktop(), new File(path));
}
+ } catch (InterruptedException e) {
+ // Ignore error
} catch (IOException e) {
- recent = null;
+ // Ignore error
}
}
return recent;
@@ -144,7 +156,9 @@ public class Win32ShellFolderManager2 ex
try {
network = new Win32ShellFolder2(NETWORK);
} catch (IOException e) {
- network = null;
+ // Ignore error
+ } catch (InterruptedException e) {
+ // Ignore error
}
}
return network;
@@ -164,8 +178,10 @@ public class Win32ShellFolderManager2 ex
personal.setIsPersonal();
}
}
+ } catch (InterruptedException e) {
+ // Ignore error
} catch (IOException e) {
- personal = null;
+ // Ignore error
}
}
return personal;
@@ -267,6 +283,9 @@ public class Win32ShellFolderManager2 ex
}
} catch (IOException e) {
// Skip this value
+ } catch (InterruptedException e) {
+ // Return empty result
+ return new File[0];
}
} while (value != null);
@@ -476,33 +495,39 @@ public class Win32ShellFolderManager2 ex
return comThread;
}
- public <T> T invoke(Callable<T> task) {
- try {
- if (Thread.currentThread() == comThread) {
- // if it's already called from the COM
- // thread, we don't need to delegate the task
- return task.call();
- } else {
- while (true) {
- Future<T> future = submit(task);
-
- try {
- return future.get();
- } catch (InterruptedException e) {
- // Repeat the attempt
- future.cancel(true);
- }
- }
- }
- } catch (Exception e) {
- Throwable cause = (e instanceof ExecutionException) ? e.getCause() : e;
- if (cause instanceof RuntimeException) {
- throw (RuntimeException) cause;
- }
- if (cause instanceof Error) {
- throw (Error) cause;
- }
- throw new RuntimeException(cause);
+ public <T> T invoke(Callable<T> task) throws Exception {
+ if (Thread.currentThread() == comThread) {
+ // if it's already called from the COM
+ // thread, we don't need to delegate the task
+ return task.call();
+ } else {
+ Future<T> future;
+
+ try {
+ future = submit(task);
+ } catch (RejectedExecutionException e) {
+ throw new InterruptedException(e.getMessage());
+ }
+
+ try {
+ return future.get();
+ } catch (InterruptedException e) {
+ future.cancel(true);
+
+ throw e;
+ } catch (ExecutionException e) {
+ Throwable cause = e.getCause();
+
+ if (cause instanceof Exception) {
+ throw (Exception) cause;
+ }
+
+ if (cause instanceof Error) {
+ throw (Error) cause;
+ }
+
+ throw new RuntimeException("Unexpected error", cause);
+ }
}
}
}
--- a/src/windows/classes/sun/nio/fs/WindowsPath.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/windows/classes/sun/nio/fs/WindowsPath.java Thu Aug 06 17:26:35 2009 -0700
@@ -1177,14 +1177,20 @@ class WindowsPath extends AbstractPath {
/*
* Windows treates symbolic links to directories differently than it
- * does to other file types. For that reason we check if the exists and
- * is a directory.
+ * does to other file types. For that reason we need to check if the
+ * target is a directory (or a directory junction).
*/
+ WindowsPath resolvedTarget;
+ if (target.type == WindowsPathType.RELATIVE) {
+ WindowsPath parent = getParent();
+ resolvedTarget = (parent == null) ? target : parent.resolve(target);
+ } else {
+ resolvedTarget = resolve(target);
+ }
int flags = 0;
- WindowsPath resolvedTarget =
- WindowsPath.createFromNormalizedPath(getFileSystem(), resolve(target).path);
try {
- if (WindowsFileAttributes.get(resolvedTarget, true).isDirectory())
+ WindowsFileAttributes wattrs = WindowsFileAttributes.get(resolvedTarget, false);
+ if (wattrs.isDirectory() || wattrs.isDirectoryLink())
flags |= SYMBOLIC_LINK_FLAG_DIRECTORY;
} catch (WindowsException x) {
// unable to access target so assume target is not a directory
--- a/src/windows/classes/sun/security/krb5/internal/tools/Klist.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/windows/classes/sun/security/krb5/internal/tools/Klist.java Thu Aug 06 17:26:35 2009 -0700
@@ -1,4 +1,5 @@
/*
+ * Portions Copyright 2003-2009 Sun Microsystems, Inc. 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
--- a/src/windows/classes/sun/security/krb5/internal/tools/Ktab.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/windows/classes/sun/security/krb5/internal/tools/Ktab.java Thu Aug 06 17:26:35 2009 -0700
@@ -1,4 +1,5 @@
/*
+ * Portions Copyright 2003-2009 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -30,16 +31,15 @@ package sun.security.krb5.internal.tools
package sun.security.krb5.internal.tools;
import sun.security.krb5.*;
-import sun.security.krb5.internal.*;
import sun.security.krb5.internal.ktab.*;
-import sun.security.krb5.KrbCryptoException;
-import java.lang.RuntimeException;
import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStreamReader;
-import java.io.FileOutputStream;
import java.io.File;
+import java.text.DateFormat;
import java.util.Arrays;
+import java.util.Date;
+import sun.security.krb5.internal.crypto.EType;
/**
* This class can execute as a command-line tool to help the user manage
* entires in the key table.
@@ -55,6 +55,9 @@ public class Ktab {
char action;
String name; // name and directory of key table
String principal;
+ boolean showEType;
+ boolean showTime;
+ int etype = -1;
char[] password = null;
/**
@@ -62,13 +65,14 @@ public class Ktab {
* <br>Usage: ktab <options>
* <br>available options to Ktab:
* <ul>
- * <li><b>-l</b> list the keytab name and entries
+ * <li><b>-l [-e] [-t]</b> list the keytab name and entries, -e show
+ * encryption etypes, -t show timestamps.
* <li><b>-a</b> <<i>principal name</i>>
* (<<i>password</i>>) add an entry to the keytab.
* The entry is added only to the keytab. No changes are made to the
* Kerberos database.
- * <li><b>-d</b> <<i>principal name</i>>
- * delete an entry from the keytab
+ * <li><b>-d</b> <<i>principal name</i>> [<<i>etype</i>>]
+ * delete an entry from the keytab.
* The entry is deleted only from the keytab. No changes are made to the
* Kerberos database.
* <li><b>-k</b> <<i>keytab name</i> >
@@ -182,6 +186,11 @@ public class Ktab {
i++;
if ((i < args.length) && (!args[i].startsWith("-"))) {
principal = args[i];
+ int j = i + 1;
+ if ((j < args.length) && (!args[j].startsWith("-"))) {
+ etype = Integer.parseInt(args[j]);
+ i = j;
+ }
} else {
System.out.println("Please specify the principal" +
"name of the entry you want to " +
@@ -206,6 +215,12 @@ public class Ktab {
printHelp();
System.exit(-1);
}
+ break;
+ case 'e':
+ showEType = true;
+ break;
+ case 't':
+ showTime = true;
break;
default:
printHelp();
@@ -271,25 +286,54 @@ public class Ktab {
* Lists key table name and entries in it.
*/
void listKt() {
- int version;
- String principal;
- // System.out.println("Keytab name: " + admin.getKeyTabName());
- System.out.println("Keytab name: " + table.tabName());
- // KeyTabEntry[] entries = admin.getEntries();
+ System.out.println("Keytab name: " + KeyTab.tabName());
KeyTabEntry[] entries = table.getEntries();
if ((entries != null) && (entries.length > 0)) {
- System.out.println("KVNO Principal");
+ String[][] output = new String[entries.length+1][showTime?3:2];
+ int column = 0;
+ output[0][column++] = "KVNO";
+ if (showTime) output[0][column++] = "Timestamp";
+ output[0][column++] = "Principal";
for (int i = 0; i < entries.length; i++) {
- version = entries[i].getKey().getKeyVersionNumber().intValue();
- principal = entries[i].getService().toString();
- if (i == 0) {
- StringBuffer separator = new StringBuffer();
- for (int j = 0; j < 9 + principal.length(); j++) {
- separator.append("-");
+ column = 0;
+ output[i+1][column++] = entries[i].getKey().
+ getKeyVersionNumber().toString();
+ if (showTime) output[i+1][column++] =
+ DateFormat.getDateTimeInstance(
+ DateFormat.SHORT, DateFormat.SHORT).format(
+ new Date(entries[i].getTimeStamp().getTime()));
+ String princ = entries[i].getService().toString();
+ if (showEType) {
+ int e = entries[i].getKey().getEType();
+ output[i+1][column++] = princ + " (" + e + ":" +
+ EType.toString(e) + ")";
+ } else {
+ output[i+1][column++] = princ;
+ }
+ }
+ int[] width = new int[column];
+ for (int j=0; j<column; j++) {
+ for (int i=0; i <= entries.length; i++) {
+ if (output[i][j].length() > width[j]) {
+ width[j] = output[i][j].length();
}
- System.out.println(separator.toString());
- }
- System.out.println(" " + version + " " + principal);
+ }
+ if (j != 0) width[j] = -width[j];
+ }
+ for (int j=0; j<column; j++) {
+ System.out.printf("%" + width[j] + "s ", output[0][j]);
+ }
+ System.out.println();
+ for (int j=0; j<column; j++) {
+ for (int k=0; k<Math.abs(width[j]); k++) System.out.print("-");
+ System.out.print(" ");
+ }
+ System.out.println();
+ for (int i=0; i<entries.length; i++) {
+ for (int j=0; j<column; j++) {
+ System.out.printf("%" + width[j] + "s ", output[i+1][j]);
+ }
+ System.out.println();
}
} else {
System.out.println("0 entry.");
@@ -309,9 +353,10 @@ public class Ktab {
String answer;
BufferedReader cis =
new BufferedReader(new InputStreamReader(System.in));
- System.out.print("Are you sure you want to "+
+ System.out.print("Are you sure you want to"+
" delete service key for " + pname.toString() +
- " in " + table.tabName() + "?(Y/N) :");
+ " (" + (etype==-1?"all etypes":("etype = "+etype)) +
+ ") in " + table.tabName() + "?(Y/N): ");
System.out.flush();
answer = cis.readLine();
@@ -333,19 +378,26 @@ public class Ktab {
e.printStackTrace();
System.exit(-1);
}
- // admin.deleteEntry(pname);
- table.deleteEntry(pname);
-
- try {
- table.save();
- } catch (IOException e) {
- System.err.println("Error occurs while saving the keytab." +
+
+ int count;
+ if (etype == -1) count = table.deleteEntry(pname);
+ else count = table.deleteEntry(pname, etype);
+
+ if (count == 0) {
+ System.err.println("No matched entry in the keytab. " +
"Deletion fails.");
- e.printStackTrace();
- System.exit(-1);
- }
- System.out.println("Done!");
-
+ System.exit(-1);
+ } else {
+ try {
+ table.save();
+ } catch (IOException e) {
+ System.err.println("Error occurs while saving the keytab. " +
+ "Deletion fails.");
+ e.printStackTrace();
+ System.exit(-1);
+ }
+ System.out.println("Done!");
+ }
}
/**
@@ -355,12 +407,12 @@ public class Ktab {
System.out.println("\nUsage: ktab " +
"<options>");
System.out.println("available options to Ktab:");
- System.out.println("-l\t\t\t\tlist the keytab name and entries");
+ System.out.println("-l [-e] [-t]\t\t\tlist the keytab name and entries,\n\t\t\t\t-e with etype, -t with timestamp");
System.out.println("-a <principal name> (<password>)add an entry " +
"to the keytab");
- System.out.println("-d <principal name>\t\tdelete an entry from "+
- "the keytab");
+ System.out.println("-d <principal name> [<etype>]\tdelete an "+
+ "entry from the keytab");
System.out.println("-k <keytab name>\t\tspecify keytab name and "+
- " path with prefix FILE:");
+ "path with prefix FILE:");
}
}
--- a/src/windows/classes/sun/security/mscapi/RSACipher.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/windows/classes/sun/security/mscapi/RSACipher.java Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 2005-2007 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 2005-2009 Sun Microsystems, Inc. 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
@@ -93,7 +93,6 @@ public final class RSACipher extends Cip
private sun.security.mscapi.Key privateKey;
public RSACipher() {
- SunMSCAPI.verifySelfIntegrity(getClass());
paddingType = PAD_PKCS1;
}
--- a/src/windows/classes/sun/security/mscapi/SunMSCAPI.java Thu Aug 06 17:16:31 2009 -0700
+++ b/src/windows/classes/sun/security/mscapi/SunMSCAPI.java Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 2005-2008 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 2005-2009 Sun Microsystems, Inc. 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,22 +117,4 @@ public final class SunMSCAPI extends Pro
AccessController.doPrivileged(new PutAllAction(this, map));
}
}
-
- // set to true once self verification is complete
- private static volatile boolean integrityVerified;
-
- static void verifySelfIntegrity(Class c) {
- if (integrityVerified) {
- return;
- }
- doVerifySelfIntegrity(c);
- }
-
- private static synchronized void doVerifySelfIntegrity(Class c) {
- integrityVerified = JarVerifier.verify(c);
- if (integrityVerified == false) {
- throw new ProviderException
- ("The SunMSCAPI provider may have been tampered with.");
- }
- }
}
--- a/src/windows/native/java/lang/java_props_md.c Thu Aug 06 17:16:31 2009 -0700
+++ b/src/windows/native/java/lang/java_props_md.c Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 1998-2008 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 1998-2009 Sun Microsystems, Inc. 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
--- a/src/windows/native/sun/windows/awt_Component.cpp Thu Aug 06 17:16:31 2009 -0700
+++ b/src/windows/native/sun/windows/awt_Component.cpp Thu Aug 06 17:26:35 2009 -0700
@@ -3739,11 +3739,12 @@ void AwtComponent::SetCandidateWindow(in
MsgRouting AwtComponent::WmImeSetContext(BOOL fSet, LPARAM *lplParam)
{
- // This message causes native status window shown even it is disabled. So don't
- // let DefWindowProc process this message if this IMC is disabled.
+ // If the Windows input context is disabled, do not let Windows
+ // display any UIs.
HIMC hIMC = ImmGetContext();
if (hIMC == NULL) {
- return mrConsume;
+ *lplParam = 0;
+ return mrDoDefault;
}
if (fSet) {
--- a/test/com/sun/nio/sctp/SctpMultiChannel/Branch.java Thu Aug 06 17:16:31 2009 -0700
+++ b/test/com/sun/nio/sctp/SctpMultiChannel/Branch.java Thu Aug 06 17:26:35 2009 -0700
@@ -115,7 +115,6 @@ public class Branch {
/* Receive the COMM_UP */
buffer.clear();
BranchNotificationHandler handler = new BranchNotificationHandler();
- channel.configureBlocking(false);
info = channel.receive(buffer, null, handler);
check(handler.receivedCommUp(), "COMM_UP no received");
Set<Association> associations = channel.associations();
--- a/test/com/sun/nio/sctp/SctpMultiChannel/SocketOptionTests.java Thu Aug 06 17:16:31 2009 -0700
+++ b/test/com/sun/nio/sctp/SctpMultiChannel/SocketOptionTests.java Thu Aug 06 17:26:35 2009 -0700
@@ -181,7 +181,6 @@ public class SocketOptionTests {
/* Receive the COMM_UP */
buffer.clear();
SOTNotificationHandler handler = new SOTNotificationHandler();
- smc.configureBlocking(false);
info = smc.receive(buffer, null, handler);
check(handler.receivedCommUp(), "COMM_UP no received");
Set<Association> associations = smc.associations();
@@ -220,6 +219,7 @@ public class SocketOptionTests {
}
check(found, "SCTP_PRIMARY_ADDR returned bogus address!");
+ System.out.println("Try SCTP_PRIMARY_ADDR set to: " + addrToSet);
smc.setOption(SCTP_PRIMARY_ADDR, addrToSet, assoc);
System.out.println("SCTP_PRIMARY_ADDR set to: " + addrToSet);
primaryAddr = smc.getOption(SCTP_PRIMARY_ADDR, assoc);
--- a/test/demo/jvmti/hprof/HelloWorld.java Thu Aug 06 17:16:31 2009 -0700
+++ b/test/demo/jvmti/hprof/HelloWorld.java Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 2004-2005 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 2004-2009 Sun Microsystems, Inc. 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
--- a/test/demo/jvmti/hprof/StackMapTableTest.java Thu Aug 06 17:16:31 2009 -0700
+++ b/test/demo/jvmti/hprof/StackMapTableTest.java Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 2005 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 2005-2009 Sun Microsystems, Inc. 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
--- a/test/java/awt/EventQueue/6638195/bug6638195.java Thu Aug 06 17:16:31 2009 -0700
+++ b/test/java/awt/EventQueue/6638195/bug6638195.java Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 2008-2009 Sun Microsystems, Inc. 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 6638195
+ * @bug 6638195 6844297
* @author Igor Kushnirskiy
* @summary tests if EventQueueDelegate.Delegate is invoked.
*/
@@ -47,11 +47,22 @@ public class bug6638195 {
}
private static void runTest(MyEventQueueDelegate delegate) throws Exception {
+ // We need an empty runnable here, so the next event is
+ // processed with a new EventQueueDelegate. See 6844297
+ // for details
EventQueue.invokeLater(
new Runnable() {
public void run() {
}
});
+ // The following event is expected to be processed by
+ // the EventQueueDelegate instance
+ EventQueue.invokeLater(
+ new Runnable() {
+ public void run() {
+ }
+ });
+ // Finally, proceed on the main thread
final CountDownLatch latch = new CountDownLatch(1);
EventQueue.invokeLater(
new Runnable() {
@@ -60,7 +71,7 @@ public class bug6638195 {
}
});
latch.await();
- if (! delegate.allInvoked()) {
+ if (!delegate.allInvoked()) {
throw new RuntimeException("failed");
}
}
@@ -125,6 +136,7 @@ public class bug6638195 {
return objectMap;
}
+
static class MyEventQueueDelegate implements EventQueueDelegate.Delegate {
private volatile boolean getNextEventInvoked = false;
private volatile boolean beforeDispatchInvoked = false;
--- a/test/java/awt/Frame/FrameSize/TestFrameSize.java Thu Aug 06 17:16:31 2009 -0700
+++ b/test/java/awt/Frame/FrameSize/TestFrameSize.java Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,6 @@
/*
* Copyright 2009 Red Hat, Inc. All Rights Reserved.
+ * Portions Copyright 2009 Sun Microsystems, Inc. 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
@@ -37,35 +38,62 @@
* Test fails if size of window is wrong
*/
-import java.awt.Dimension;
-import java.awt.Frame;
+import java.awt.*;
public class TestFrameSize {
- static Dimension desiredDimensions = new Dimension(200, 200);
- static int ERROR_MARGIN = 15;
- static Frame mainWindow;
+ static Dimension desiredDimensions = new Dimension(200, 200);
+ static Frame mainWindow;
- public static void drawGui() {
- mainWindow = new Frame("");
- mainWindow.setPreferredSize(desiredDimensions);
- mainWindow.pack();
+ private static Dimension getClientSize(Frame window) {
+ Dimension size = window.getSize();
+ Insets insets = window.getInsets();
- Dimension actualDimensions = mainWindow.getSize();
- System.out.println("Desired dimensions: " + desiredDimensions.toString());
- System.out.println("Actual dimensions: " + actualDimensions.toString());
- if (Math.abs(actualDimensions.height - desiredDimensions.height) > ERROR_MARGIN) {
- throw new RuntimeException("Incorrect widow size");
- }
+ System.out.println("getClientSize() for " + window);
+ System.out.println(" size: " + size);
+ System.out.println(" insets: " + insets);
+
+ return new Dimension(
+ size.width - insets.left - insets.right,
+ size.height - insets.top - insets.bottom);
+ }
+
+ public static void drawGui() {
+ mainWindow = new Frame("");
+ mainWindow.setPreferredSize(desiredDimensions);
+ mainWindow.pack();
+
+ Dimension actualDimensions = mainWindow.getSize();
+ System.out.println("Desired dimensions: " + desiredDimensions.toString());
+ System.out.println("Actual dimensions: " + actualDimensions.toString());
+ if (!actualDimensions.equals(desiredDimensions)) {
+ throw new RuntimeException("Incorrect widow size");
}
- public static void main(String[] args) {
- try {
- drawGui();
- } finally {
- if (mainWindow != null) {
- mainWindow.dispose();
- }
- }
+ // pack() guarantees to preserve the size of the client area after
+ // showing the window.
+ Dimension clientSize1 = getClientSize(mainWindow);
+ System.out.println("Client size before showing: " + clientSize1);
+
+ mainWindow.setVisible(true);
+
+ ((sun.awt.SunToolkit)Toolkit.getDefaultToolkit()).realSync();
+
+ Dimension clientSize2 = getClientSize(mainWindow);
+ System.out.println("Client size after showing: " + clientSize2);
+
+ if (!clientSize2.equals(clientSize1)) {
+ throw new RuntimeException("Incorrect client area size.");
}
+ }
+
+ public static void main(String[] args) {
+ try {
+ drawGui();
+ } finally {
+ if (mainWindow != null) {
+ mainWindow.dispose();
+ }
+ }
+ }
}
--- a/test/java/awt/Window/OwnedWindowsLeak/OwnedWindowsLeak.java Thu Aug 06 17:16:31 2009 -0700
+++ b/test/java/awt/Window/OwnedWindowsLeak/OwnedWindowsLeak.java Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 2008-2009 Sun Microsystems, Inc. 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
--- a/test/java/nio/channels/AsynchronousChannelGroup/GroupOfOne.java Thu Aug 06 17:16:31 2009 -0700
+++ b/test/java/nio/channels/AsynchronousChannelGroup/GroupOfOne.java Thu Aug 06 17:26:35 2009 -0700
@@ -44,9 +44,9 @@ public class GroupOfOne {
final AsynchronousServerSocketChannel listener =
AsynchronousServerSocketChannel.open()
.bind(new InetSocketAddress(0));
- listener.accept(null, new CompletionHandler<AsynchronousSocketChannel,Void>() {
+ listener.accept((Void)null, new CompletionHandler<AsynchronousSocketChannel,Void>() {
public void completed(AsynchronousSocketChannel ch, Void att) {
- listener.accept(null, this);
+ listener.accept((Void)null, this);
}
public void failed(Throwable exc, Void att) {
}
@@ -81,13 +81,13 @@ public class GroupOfOne {
// 2. the close/shutdown completes
final CountDownLatch latch = new CountDownLatch(2);
- ch.connect(sa, null, new CompletionHandler<Void,Void>() {
+ ch.connect(sa, (Void)null, new CompletionHandler<Void,Void>() {
public void completed(Void result, Void att) {
System.out.println("Connected");
// initiate I/O operation that does not complete (successfully)
ByteBuffer buf = ByteBuffer.allocate(100);
- ch.read(buf, null, new CompletionHandler<Integer,Void>() {
+ ch.read(buf, (Void)null, new CompletionHandler<Integer,Void>() {
public void completed(Integer bytesRead, Void att) {
throw new RuntimeException();
}
--- a/test/java/nio/channels/AsynchronousChannelGroup/Identity.java Thu Aug 06 17:16:31 2009 -0700
+++ b/test/java/nio/channels/AsynchronousChannelGroup/Identity.java Thu Aug 06 17:26:35 2009 -0700
@@ -78,15 +78,15 @@ public class Identity {
final AsynchronousServerSocketChannel listener =
AsynchronousServerSocketChannel.open()
.bind(new InetSocketAddress(0));
- listener.accept(null, new CompletionHandler<AsynchronousSocketChannel,Void>() {
+ listener.accept((Void)null, new CompletionHandler<AsynchronousSocketChannel,Void>() {
public void completed(final AsynchronousSocketChannel ch, Void att) {
- listener.accept(null, this);
+ listener.accept((Void)null, this);
final ByteBuffer buf = ByteBuffer.allocate(100);
- ch.read(buf, null, new CompletionHandler<Integer,Void>() {
+ ch.read(buf, (Void)null, new CompletionHandler<Integer,Void>() {
public void completed(Integer bytesRead, Void att) {
buf.clear();
- ch.read(buf, null, this);
+ ch.read(buf, (Void)null, this);
}
public void failed(Throwable exc, Void att) {
}
--- a/test/java/nio/channels/AsynchronousChannelGroup/Restart.java Thu Aug 06 17:16:31 2009 -0700
+++ b/test/java/nio/channels/AsynchronousChannelGroup/Restart.java Thu Aug 06 17:26:35 2009 -0700
@@ -94,7 +94,7 @@ public class Restart {
for (int i=0; i<count; i++) {
final CountDownLatch latch = new CountDownLatch(1);
- listener.accept(null, new CompletionHandler<AsynchronousSocketChannel,Void>() {
+ listener.accept((Void)null, new CompletionHandler<AsynchronousSocketChannel,Void>() {
public void completed(AsynchronousSocketChannel ch, Void att) {
try {
ch.close();
--- a/test/java/nio/channels/AsynchronousChannelGroup/Unbounded.java Thu Aug 06 17:16:31 2009 -0700
+++ b/test/java/nio/channels/AsynchronousChannelGroup/Unbounded.java Thu Aug 06 17:26:35 2009 -0700
@@ -45,10 +45,10 @@ public class Unbounded {
final AsynchronousServerSocketChannel listener =
AsynchronousServerSocketChannel.open()
.bind(new InetSocketAddress(0));
- listener.accept(null, new CompletionHandler<AsynchronousSocketChannel,Void>() {
+ listener.accept((Void)null, new CompletionHandler<AsynchronousSocketChannel,Void>() {
public void completed(AsynchronousSocketChannel ch, Void att) {
queue.add(ch);
- listener.accept(null, this);
+ listener.accept((Void)null, this);
}
public void failed(Throwable exc, Void att) {
}
--- a/test/java/nio/channels/AsynchronousDatagramChannel/Basic.java Thu Aug 06 17:16:31 2009 -0700
+++ b/test/java/nio/channels/AsynchronousDatagramChannel/Basic.java Thu Aug 06 17:26:35 2009 -0700
@@ -66,7 +66,7 @@ public class Basic {
// Test: datagram packet not received immediately
dst.clear();
final CountDownLatch latch = new CountDownLatch(1);
- ch.receive(dst, null, new CompletionHandler<SocketAddress,Void>() {
+ ch.receive(dst, (Void)null, new CompletionHandler<SocketAddress,Void>() {
public void completed(SocketAddress source, Void att) {
latch.countDown();
}
@@ -82,7 +82,7 @@ public class Basic {
// Test: timeout
dst.clear();
final AtomicReference<Throwable> exception = new AtomicReference<Throwable>();
- ch.receive(dst, 2, TimeUnit.SECONDS, null, new CompletionHandler<SocketAddress,Void>() {
+ ch.receive(dst, 2, TimeUnit.SECONDS, (Void)null, new CompletionHandler<SocketAddress,Void>() {
public void completed(SocketAddress source, Void att) {
}
public void failed (Throwable exc, Void att) {
@@ -101,7 +101,7 @@ public class Basic {
// AsynchronousCloseException
dst = ByteBuffer.allocateDirect(100);
exception.set(null);
- ch.receive(dst, null, new CompletionHandler<SocketAddress,Void>() {
+ ch.receive(dst, (Void)null, new CompletionHandler<SocketAddress,Void>() {
public void completed(SocketAddress source, Void att) {
}
public void failed (Throwable exc, Void att) {
@@ -156,7 +156,7 @@ public class Basic {
// Test: datagram packet not received immediately
dst.clear();
final CountDownLatch l1 = new CountDownLatch(1);
- ch.read(dst, null, new CompletionHandler<Integer,Void>() {
+ ch.read(dst, (Void)null, new CompletionHandler<Integer,Void>() {
public void completed(Integer bytesRead, Void att) {
l1.countDown();
}
@@ -172,7 +172,7 @@ public class Basic {
// Test: timeout
dst.clear();
final AtomicReference<Throwable> exception = new AtomicReference<Throwable>();
- ch.read(dst, 2, TimeUnit.SECONDS, null, new CompletionHandler<Integer,Void>() {
+ ch.read(dst, 2, TimeUnit.SECONDS, (Void)null, new CompletionHandler<Integer,Void>() {
public void completed(Integer bytesRead, Void att) {
}
public void failed (Throwable exc, Void att) {
@@ -191,7 +191,7 @@ public class Basic {
// AsynchronousCloseException
dst.clear();
exception.set(null);
- ch.read(dst, null, new CompletionHandler<Integer,Void>() {
+ ch.read(dst, (Void)null, new CompletionHandler<Integer,Void>() {
public void completed(Integer bytesRead, Void att) {
}
public void failed (Throwable exc, Void att) {
@@ -238,7 +238,7 @@ public class Basic {
// Test: send datagram packet to reader and check completion handler
// is invoked
final CountDownLatch l2 = new CountDownLatch(1);
- ch.send(ByteBuffer.wrap(msg), sa, null, new CompletionHandler<Integer,Void>() {
+ ch.send(ByteBuffer.wrap(msg), sa, (Void)null, new CompletionHandler<Integer,Void>() {
public void completed(Integer bytesSent, Void att) {
if (bytesSent != msg.length)
throw new RuntimeException("Unexpected number of bytes received");
@@ -261,7 +261,7 @@ public class Basic {
// Test: check that failed method is invoked
ch.close();
final CountDownLatch l3 = new CountDownLatch(1);
- ch.send(ByteBuffer.wrap(msg), sa, null, new CompletionHandler<Integer,Void>() {
+ ch.send(ByteBuffer.wrap(msg), sa, (Void)null, new CompletionHandler<Integer,Void>() {
public void completed(Integer bytesSent, Void att) {
throw new RuntimeException("completed method invoked");
}
@@ -315,7 +315,7 @@ public class Basic {
// Test: write datagram and check completion handler is invoked
final CountDownLatch l2 = new CountDownLatch(1);
- ch.write(ByteBuffer.wrap(msg), null, new CompletionHandler<Integer,Void>() {
+ ch.write(ByteBuffer.wrap(msg), (Void)null, new CompletionHandler<Integer,Void>() {
public void completed(Integer bytesSent, Void att) {
if (bytesSent != msg.length)
throw new RuntimeException("Unexpected number of bytes received");
@@ -372,7 +372,7 @@ public class Basic {
final CountDownLatch latch = new CountDownLatch(1);
long timeout = (i == 0) ? 0L : 60L;
Future<SocketAddress> remote = ch
- .receive(ByteBuffer.allocate(100), timeout, TimeUnit.SECONDS, null,
+ .receive(ByteBuffer.allocate(100), timeout, TimeUnit.SECONDS, (Void)null,
new CompletionHandler<SocketAddress,Void>() {
public void completed(SocketAddress source, Void att) {
}
@@ -395,7 +395,7 @@ public class Basic {
final CountDownLatch latch = new CountDownLatch(1);
long timeout = (i == 0) ? 0L : 60L;
Future<Integer> result = ch
- .read(ByteBuffer.allocate(100), timeout, TimeUnit.SECONDS, null,
+ .read(ByteBuffer.allocate(100), timeout, TimeUnit.SECONDS, (Void)null,
new CompletionHandler<Integer,Void>() {
public void completed(Integer bytesRead, Void att) {
}
--- a/test/java/nio/channels/AsynchronousFileChannel/Basic.java Thu Aug 06 17:16:31 2009 -0700
+++ b/test/java/nio/channels/AsynchronousFileChannel/Basic.java Thu Aug 06 17:26:35 2009 -0700
@@ -190,7 +190,7 @@ public class Basic {
if (fl == null)
throw new RuntimeException("Unable to acquire lock");
try {
- ch.lock(null, new CompletionHandler<FileLock,Void> () {
+ ch.lock((Void)null, new CompletionHandler<FileLock,Void> () {
public void completed(FileLock result, Void att) {
}
public void failed(Throwable exc, Void att) {
@@ -217,7 +217,7 @@ public class Basic {
ByteBuffer buf = ByteBuffer.allocateDirect(100);
final CountDownLatch latch = new CountDownLatch(1);
- ch.read(buf, 0L, null, new CompletionHandler<Integer,Void>() {
+ ch.read(buf, 0L, (Void)null, new CompletionHandler<Integer,Void>() {
public void completed(Integer result, Void att) {
try {
Thread.currentThread().interrupt();
@@ -311,7 +311,7 @@ public class Basic {
final AtomicReference<Thread> invoker = new AtomicReference<Thread>();
final CountDownLatch latch = new CountDownLatch(1);
- ch.write(genBuffer(), 0L, null, new CompletionHandler<Integer,Void>() {
+ ch.write(genBuffer(), 0L, (Void)null, new CompletionHandler<Integer,Void>() {
public void completed(Integer result, Void att) {
invoker.set(Thread.currentThread());
latch.countDown();
@@ -410,7 +410,7 @@ public class Basic {
// start write operation
final CountDownLatch latch = new CountDownLatch(1);
- Future<Integer> res = ch.write(genBuffer(), 0L, null,
+ Future<Integer> res = ch.write(genBuffer(), 0L, (Void)null,
new CompletionHandler<Integer,Void>() {
public void completed(Integer result, Void att) {
}
--- a/test/java/nio/channels/AsynchronousServerSocketChannel/Basic.java Thu Aug 06 17:16:31 2009 -0700
+++ b/test/java/nio/channels/AsynchronousServerSocketChannel/Basic.java Thu Aug 06 17:26:35 2009 -0700
@@ -95,7 +95,7 @@ public class Basic {
final AtomicReference<Throwable> exception = new AtomicReference<Throwable>();
// start accepting
- listener.accept(null, new CompletionHandler<AsynchronousSocketChannel,Void>() {
+ listener.accept((Void)null, new CompletionHandler<AsynchronousSocketChannel,Void>() {
public void completed(AsynchronousSocketChannel ch, Void att) {
try {
ch.close();
--- a/test/java/nio/channels/AsynchronousSocketChannel/Basic.java Thu Aug 06 17:16:31 2009 -0700
+++ b/test/java/nio/channels/AsynchronousSocketChannel/Basic.java Thu Aug 06 17:26:35 2009 -0700
@@ -181,7 +181,7 @@ public class Basic {
}
final AtomicReference<Throwable> connectException =
new AtomicReference<Throwable>();
- ch.connect(server.address(), null, new CompletionHandler<Void,Void>() {
+ ch.connect(server.address(), (Void)null, new CompletionHandler<Void,Void>() {
public void completed(Void result, Void att) {
}
public void failed(Throwable exc, Void att) {
@@ -332,7 +332,7 @@ public class Basic {
// start read operation
final CountDownLatch latch = new CountDownLatch(1);
ByteBuffer buf = ByteBuffer.allocate(1);
- Future<Integer> res = ch.read(buf, null,
+ Future<Integer> res = ch.read(buf, (Void)null,
new CompletionHandler<Integer,Void>() {
public void completed(Integer result, Void att) {
}
@@ -397,11 +397,11 @@ public class Basic {
// reads should complete immediately
final ByteBuffer dst = ByteBuffer.allocateDirect(src.capacity() + 100);
final CountDownLatch latch = new CountDownLatch(1);
- ch.read(dst, null, new CompletionHandler<Integer,Void>() {
+ ch.read(dst, (Void)null, new CompletionHandler<Integer,Void>() {
public void completed(Integer result, Void att) {
int n = result;
if (n > 0) {
- ch.read(dst, null, this);
+ ch.read(dst, (Void)null, this);
} else {
latch.countDown();
}
@@ -450,10 +450,10 @@ public class Basic {
// read until the buffer is full
final ByteBuffer dst = ByteBuffer.allocateDirect(src.capacity());
final CountDownLatch latch = new CountDownLatch(1);
- ch.read(dst, null, new CompletionHandler<Integer,Void>() {
+ ch.read(dst, (Void)null, new CompletionHandler<Integer,Void>() {
public void completed(Integer result, Void att) {
if (dst.hasRemaining()) {
- ch.read(dst, null, this);
+ ch.read(dst, (Void)null, this);
} else {
latch.countDown();
}
@@ -508,7 +508,7 @@ public class Basic {
// scattering read that completes ascynhronously
final CountDownLatch latch = new CountDownLatch(1);
- ch.read(dsts, 0, dsts.length, 0L, TimeUnit.SECONDS, null,
+ ch.read(dsts, 0, dsts.length, 0L, TimeUnit.SECONDS, (Void)null,
new CompletionHandler<Long,Void>() {
public void completed(Long result, Void att) {
long n = result;
@@ -536,7 +536,7 @@ public class Basic {
dsts[i].rewind();
}
long n = ch
- .read(dsts, 0, dsts.length, 0L, TimeUnit.SECONDS, null, null).get();
+ .read(dsts, 0, dsts.length, 0L, TimeUnit.SECONDS, (Void)null, null).get();
if (n <= 0)
throw new RuntimeException("No bytes read");
@@ -562,10 +562,10 @@ public class Basic {
// write all bytes and close connection when done
final ByteBuffer src = genBuffer();
- ch.write(src, null, new CompletionHandler<Integer,Void>() {
+ ch.write(src, (Void)null, new CompletionHandler<Integer,Void>() {
public void completed(Integer result, Void att) {
if (src.hasRemaining()) {
- ch.write(src, null, this);
+ ch.write(src, (Void)null, this);
} else {
try {
ch.close();
@@ -616,7 +616,7 @@ public class Basic {
// write buffers (should complete immediately)
ByteBuffer[] srcs = genBuffers(1);
long n = ch
- .write(srcs, 0, srcs.length, 0L, TimeUnit.SECONDS, null, null).get();
+ .write(srcs, 0, srcs.length, 0L, TimeUnit.SECONDS, (Void)null, null).get();
if (n <= 0)
throw new RuntimeException("No bytes written");
@@ -629,7 +629,7 @@ public class Basic {
// write until socket buffer is full so as to create the conditions
// for when a write does not complete immediately
srcs = genBuffers(1);
- ch.write(srcs, 0, srcs.length, 0L, TimeUnit.SECONDS, null,
+ ch.write(srcs, 0, srcs.length, 0L, TimeUnit.SECONDS, (Void)null,
new CompletionHandler<Long,Void>() {
public void completed(Long result, Void att) {
long n = result;
@@ -639,7 +639,7 @@ public class Basic {
if (continueWriting.get()) {
ByteBuffer[] srcs = genBuffers(8);
ch.write(srcs, 0, srcs.length, 0L, TimeUnit.SECONDS,
- null, this);
+ (Void)null, this);
}
}
public void failed(Throwable exc, Void att) {
@@ -717,7 +717,7 @@ public class Basic {
// this read should timeout
ByteBuffer dst = ByteBuffer.allocate(512);
try {
- ch.read(dst, 3, TimeUnit.SECONDS, null, null).get();
+ ch.read(dst, 3, TimeUnit.SECONDS, (Void)null, null).get();
throw new RuntimeException("Read did not timeout");
} catch (ExecutionException x) {
if (!(x.getCause() instanceof InterruptedByTimeoutException))
--- a/test/java/nio/channels/AsynchronousSocketChannel/StressLoopback.java Thu Aug 06 17:16:31 2009 -0700
+++ b/test/java/nio/channels/AsynchronousSocketChannel/StressLoopback.java Thu Aug 06 17:26:35 2009 -0700
@@ -99,7 +99,7 @@ public class StressLoopback {
void start() {
sentBuffer.position(0);
sentBuffer.limit(sentBuffer.capacity());
- channel.write(sentBuffer, null, new CompletionHandler<Integer,Void> () {
+ channel.write(sentBuffer, (Void)null, new CompletionHandler<Integer,Void> () {
public void completed(Integer nwrote, Void att) {
bytesSent += nwrote;
if (finished) {
@@ -107,7 +107,7 @@ public class StressLoopback {
} else {
sentBuffer.position(0);
sentBuffer.limit(sentBuffer.capacity());
- channel.write(sentBuffer, null, this);
+ channel.write(sentBuffer, (Void)null, this);
}
}
public void failed(Throwable exc, Void att) {
@@ -142,14 +142,14 @@ public class StressLoopback {
}
void start() {
- channel.read(readBuffer, null, new CompletionHandler<Integer,Void> () {
+ channel.read(readBuffer, (Void)null, new CompletionHandler<Integer,Void> () {
public void completed(Integer nread, Void att) {
if (nread < 0) {
closeUnchecked(channel);
} else {
bytesRead += nread;
readBuffer.clear();
- channel.read(readBuffer, null, this);
+ channel.read(readBuffer, (Void)null, this);
}
}
public void failed(Throwable exc, Void att) {
--- a/test/java/nio/file/Path/Links.java Thu Aug 06 17:16:31 2009 -0700
+++ b/test/java/nio/file/Path/Links.java Thu Aug 06 17:26:35 2009 -0700
@@ -22,7 +22,7 @@
*/
/* @test
- * @bug 4313887 6838333
+ * @bug 4313887 6838333 6863864
* @summary Unit test for java.nio.file.Path createSymbolicLink,
* readSymbolicLink, and createLink methods
* @library ..
@@ -31,7 +31,6 @@ import java.nio.file.*;
import java.nio.file.*;
import java.nio.file.attribute.*;
import java.io.*;
-import java.util.*;
public class Links {
@@ -47,7 +46,7 @@ public class Links {
* Exercise createSymbolicLink and readLink methods
*/
static void testSymLinks(Path dir) throws IOException {
- Path link = dir.resolve("link");
+ final Path link = dir.resolve("link");
// Check if sym links are supported
try {
@@ -75,6 +74,63 @@ public class Links {
} finally {
link.delete();
}
+ }
+
+ // Test links to directory
+ Path mydir = dir.resolve("mydir");
+ Path myfile = mydir.resolve("myfile");
+ try {
+ mydir.createDirectory();
+ myfile.createFile();
+
+ // link -> "mydir"
+ link.createSymbolicLink(mydir.getName());
+ assertTrue(link.readSymbolicLink().equals(mydir.getName()));
+
+ // Test access to directory via link
+ DirectoryStream<Path> stream = link.newDirectoryStream();
+ try {
+ boolean found = false;
+ for (Path entry: stream) {
+ if (entry.getName().equals(myfile.getName())) {
+ found = true;
+ break;
+ }
+ }
+ assertTrue(found);
+ } finally {
+ stream.close();
+ }
+
+ // Test link2 -> link -> mydir
+ final Path link2 = dir.resolve("link2");
+ Path target2 = link.getName();
+ link2.createSymbolicLink(target2);
+ try {
+ assertTrue(link2.readSymbolicLink().equals(target2));
+ link2.newDirectoryStream().close();
+ } finally {
+ link2.delete();
+ }
+
+ // Remove mydir and re-create link2 before re-creating mydir
+ // (This is a useful test on Windows to ensure that creating a
+ // sym link to a directory sym link creates the right type of link).
+ myfile.delete();
+ mydir.delete();
+ link2.createSymbolicLink(target2);
+ try {
+ assertTrue(link2.readSymbolicLink().equals(target2));
+ mydir.createDirectory();
+ link2.newDirectoryStream().close();
+ } finally {
+ link2.delete();
+ }
+
+ } finally {
+ myfile.deleteIfExists();
+ mydir.deleteIfExists();
+ link.deleteIfExists();
}
}
--- a/test/sun/security/krb5/ConfPlusProp.java Thu Aug 06 17:16:31 2009 -0700
+++ b/test/sun/security/krb5/ConfPlusProp.java Thu Aug 06 17:26:35 2009 -0700
@@ -23,31 +23,56 @@
/*
* @test
* @bug 6857795
+ * @buf 6858589
* @summary krb5.conf ignored if system properties on realm and kdc are provided
*/
import sun.security.krb5.Config;
-import sun.security.krb5.KrbException;
public class ConfPlusProp {
+ Config config;
public static void main(String[] args) throws Exception {
- System.setProperty("java.security.krb5.realm", "R2");
- System.setProperty("java.security.krb5.kdc", "k2");
+ new ConfPlusProp().run();
+ }
+
+ void refresh() throws Exception {
+ Config.refresh();
+ config = Config.getInstance();
+ }
+
+ void checkDefaultRealm(String r) throws Exception {
+ try {
+ if (!config.getDefaultRealm().equals(r)) {
+ throw new AssertionError("Default realm error");
+ }
+ } catch (Exception e) {
+ if (r != null) throw e;
+ }
+ }
+
+ void check(String r, String k) throws Exception {
+ try {
+ if (!config.getKDCList(r).equals(k)) {
+ throw new AssertionError(r + " kdc not " + k);
+ }
+ } catch (Exception e) {
+ if (k != null) throw e;
+ }
+ }
+
+ void run() throws Exception {
+
+ // No prop, only conf
// Point to a file with existing default_realm
System.setProperty("java.security.krb5.conf",
System.getProperty("test.src", ".") +"/confplusprop.conf");
- Config config = Config.getInstance();
+ refresh();
- if (!config.getDefaultRealm().equals("R2")) {
- throw new Exception("Default realm error");
- }
- if (!config.getKDCList("R1").equals("k1")) {
- throw new Exception("R1 kdc error");
- }
- if (!config.getKDCList("R2").equals("k2")) {
- throw new Exception("R2 kdc error");
- }
+ checkDefaultRealm("R1");
+ check("R1", "k1");
+ check("R2", "old");
+ check("R3", null);
if (!config.getDefault("forwardable", "libdefaults").equals("well")) {
throw new Exception("Extra config error");
}
@@ -55,38 +80,66 @@ public class ConfPlusProp {
// Point to a file with no libdefaults
System.setProperty("java.security.krb5.conf",
System.getProperty("test.src", ".") +"/confplusprop2.conf");
- Config.refresh();
+ refresh();
- config = Config.getInstance();
+ checkDefaultRealm(null);
+ check("R1", "k12");
+ check("R2", "old");
+ check("R3", null);
- if (!config.getDefaultRealm().equals("R2")) {
- throw new Exception("Default realm error again");
+ int version = System.getProperty("java.version").charAt(2) - '0';
+ System.out.println("JDK version is " + version);
+
+ // Zero-config is supported since 1.7
+ if (version >= 7) {
+ // Point to a non-existing file
+ System.setProperty("java.security.krb5.conf", "i-am-not-a file");
+ refresh();
+
+ checkDefaultRealm(null);
+ check("R1", null);
+ check("R2", null);
+ check("R3", null);
+ if (config.getDefault("forwardable", "libdefaults") != null) {
+ throw new Exception("Extra config error");
+ }
}
- if (!config.getKDCList("R1").equals("k12")) {
- throw new Exception("R1 kdc error");
+
+ // Add prop
+ System.setProperty("java.security.krb5.realm", "R2");
+ System.setProperty("java.security.krb5.kdc", "k2");
+
+ // Point to a file with existing default_realm
+ System.setProperty("java.security.krb5.conf",
+ System.getProperty("test.src", ".") +"/confplusprop.conf");
+ refresh();
+
+ checkDefaultRealm("R2");
+ check("R1", "k1");
+ check("R2", "k2");
+ check("R3", "k2");
+ if (!config.getDefault("forwardable", "libdefaults").equals("well")) {
+ throw new Exception("Extra config error");
}
- if (!config.getKDCList("R2").equals("k2")) {
- throw new Exception("R2 kdc error");
- }
+
+ // Point to a file with no libdefaults
+ System.setProperty("java.security.krb5.conf",
+ System.getProperty("test.src", ".") +"/confplusprop2.conf");
+ refresh();
+
+ checkDefaultRealm("R2");
+ check("R1", "k12");
+ check("R2", "k2");
+ check("R3", "k2");
// Point to a non-existing file
System.setProperty("java.security.krb5.conf", "i-am-not-a file");
- Config.refresh();
+ refresh();
- config = Config.getInstance();
-
- if (!config.getDefaultRealm().equals("R2")) {
- throw new Exception("Default realm error");
- }
- try {
- config.getKDCList("R1");
- throw new Exception("R1 is nowhere");
- } catch (KrbException ke) {
- // OK
- }
- if (!config.getKDCList("R2").equals("k2")) {
- throw new Exception("R2 kdc error");
- }
+ checkDefaultRealm("R2");
+ check("R1", "k2");
+ check("R2", "k2");
+ check("R3", "k2");
if (config.getDefault("forwardable", "libdefaults") != null) {
throw new Exception("Extra config error");
}
--- a/test/tools/jar/index/MetaInf.java Thu Aug 06 17:16:31 2009 -0700
+++ b/test/tools/jar/index/MetaInf.java Thu Aug 06 17:26:35 2009 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright 2003 Sun Microsystems, Inc. All Rights Reserved.
+ * Copyright 2003-2009 Sun Microsystems, Inc. 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/share/classes/java/lang/ReflectiveOperationException.java Thu Aug 06 17:26:35 2009 -0700
@@ -0,0 +1,91 @@
+/*
+ * Copyright 2009 Sun Microsystems, Inc. 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. Sun designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Sun 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+package java.lang;
+
+/**
+ * Common superclass of exceptions thrown by reflective operations in
+ * core reflection.
+ *
+ * @see LinkageError
+ * @since 1.7
+ */
+public class ReflectiveOperationException extends Exception {
+ static final long serialVersionUID = 123456789L;
+
+ /**
+ * Constructs a new exception with {@code null} as its detail
+ * message. The cause is not initialized, and may subsequently be
+ * initialized by a call to {@link #initCause}.
+ */
+ public ReflectiveOperationException() {
+ super();
+ }
+
+ /**
+ * Constructs a new exception with the specified detail message.
+ * The cause is not initialized, and may subsequently be
+ * initialized by a call to {@link #initCause}.
+ *
+ * @param message the detail message. The detail message is saved for
+ * later retrieval by the {@link #getMessage()} method.
+ */
+ public ReflectiveOperationException(String message) {
+ super(message);
+ }
+
+ /**
+ * Constructs a new exception with the specified detail message
+ * and cause.
+ *
+ * <p>Note that the detail message associated with
+ * {@code cause} is <em>not</em> automatically incorporated in
+ * this exception's detail message.
+ *
+ * @param message the detail message (which is saved for later retrieval
+ * by the {@link #getMessage()} method).
+ * @param cause the cause (which is saved for later retrieval by the
+ * {@link #getCause()} method). (A {@code null} value is
+ * permitted, and indicates that the cause is nonexistent or
+ * unknown.)
+ */
+ public ReflectiveOperationException(String message, Throwable cause) {
+ super(message, cause);
+ }
+
+ /**
+ * Constructs a new exception with the specified cause and a detail
+ * message of {@code (cause==null ? null : cause.toString())} (which
+ * typically contains the class and detail message of {@code cause}).
+ *
+ * @param cause the cause (which is saved for later retrieval by the
+ * {@link #getCause()} method). (A {@code null} value is
+ * permitted, and indicates that the cause is nonexistent or
+ * unknown.)
+ */
+ public ReflectiveOperationException(Throwable cause) {
+ super(cause);
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/com/sun/jndi/ldap/BalancedParentheses.java Thu Aug 06 17:26:35 2009 -0700
@@ -0,0 +1,259 @@
+/*
+ * Copyright 2009 Sun Microsystems, Inc. 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/**
+ * @test
+ * @bug 6449574
+ * @summary Invalid ldap filter is accepted and processed
+ */
+
+import java.io.*;
+import javax.naming.*;
+import javax.naming.directory.*;
+import java.util.Properties;
+import java.util.Hashtable;
+
+import java.net.Socket;
+import java.net.ServerSocket;
+
+public class BalancedParentheses {
+ // Should we run the client or server in a separate thread?
+ //
+ // Both sides can throw exceptions, but do you have a preference
+ // as to which side should be the main thread.
+ static boolean separateServerThread = true;
+
+ // use any free port by default
+ volatile int serverPort = 0;
+
+ // Is the server ready to serve?
+ volatile static boolean serverReady = false;
+
+ // Define the server side of the test.
+ //
+ // If the server prematurely exits, serverReady will be set to true
+ // to avoid infinite hangs.
+ void doServerSide() throws Exception {
+ ServerSocket serverSock = new ServerSocket(serverPort);
+
+ // signal client, it's ready to accecpt connection
+ serverPort = serverSock.getLocalPort();
+ serverReady = true;
+
+ // accept a connection
+ Socket socket = serverSock.accept();
+ System.out.println("Server: Connection accepted");
+
+ InputStream is = socket.getInputStream();
+ OutputStream os = socket.getOutputStream();
+
+ // read the bindRequest
+ while (is.read() != -1) {
+ // ignore
+ is.skip(is.available());
+ break;
+ }
+
+ byte[] bindResponse = {0x30, 0x0C, 0x02, 0x01, 0x01, 0x61, 0x07, 0x0A,
+ 0x01, 0x00, 0x04, 0x00, 0x04, 0x00};
+ // write bindResponse
+ os.write(bindResponse);
+ os.flush();
+
+ // ignore any more request.
+ while (is.read() != -1) {
+ // ignore
+ is.skip(is.available());
+ }
+
+ is.close();
+ os.close();
+ socket.close();
+ serverSock.close();
+ }
+
+ // Define the client side of the test.
+ //
+ // If the server prematurely exits, serverReady will be set to true
+ // to avoid infinite hangs.
+ void doClientSide() throws Exception {
+ // Wait for server to get started.
+ while (!serverReady) {
+ Thread.sleep(50);
+ }
+
+ // set up the environment for creating the initial context
+ Hashtable<Object, Object> env = new Hashtable<Object, Object>();
+ env.put(Context.INITIAL_CONTEXT_FACTORY,
+ "com.sun.jndi.ldap.LdapCtxFactory");
+ env.put(Context.PROVIDER_URL, "ldap://localhost:" + serverPort);
+ env.put("com.sun.jndi.ldap.read.timeout", "1000");
+
+ // env.put(Context.SECURITY_AUTHENTICATION, "simple");
+ // env.put(Context.SECURITY_PRINCIPAL,"cn=root");
+ // env.put(Context.SECURITY_CREDENTIALS,"root");
+
+ // create initial context
+ DirContext context = new InitialDirContext(env);
+
+ // searching
+ SearchControls scs = new SearchControls();
+ scs.setSearchScope(SearchControls.SUBTREE_SCOPE);
+
+ try {
+ NamingEnumeration answer = context.search(
+ "o=sun,c=us", "(&(cn=Bob)))", scs);
+ } catch (InvalidSearchFilterException isfe) {
+ // ignore, it is the expected filter exception.
+ System.out.println("Expected exception: " + isfe.getMessage());
+ } catch (NamingException ne) {
+ // maybe a read timeout exception, as the server does not response.
+ throw new Exception("Expect a InvalidSearchFilterException", ne);
+ }
+
+ try {
+ NamingEnumeration answer = context.search(
+ "o=sun,c=us", ")(&(cn=Bob)", scs);
+ } catch (InvalidSearchFilterException isfe) {
+ // ignore, it is the expected filter exception.
+ System.out.println("Expected exception: " + isfe.getMessage());
+ } catch (NamingException ne) {
+ // maybe a read timeout exception, as the server does not response.
+ throw new Exception("Expect a InvalidSearchFilterException", ne);
+ }
+
+ try {
+ NamingEnumeration answer = context.search(
+ "o=sun,c=us", "(&(cn=Bob))", scs);
+ } catch (InvalidSearchFilterException isfe) {
+ // ignore, it is the expected filter exception.
+ throw new Exception("Unexpected ISFE", isfe);
+ } catch (NamingException ne) {
+ // maybe a read timeout exception, as the server does not response.
+ System.out.println("Expected exception: " + ne.getMessage());
+ }
+
+ context.close();
+ }
+
+ /*
+ * ============================================================
+ * The remainder is just support stuff
+ */
+
+ // client and server thread
+ Thread clientThread = null;
+ Thread serverThread = null;
+
+ // client and server exceptions
+ volatile Exception serverException = null;
+ volatile Exception clientException = null;
+
+ void startServer(boolean newThread) throws Exception {
+ if (newThread) {
+ serverThread = new Thread() {
+ public void run() {
+ try {
+ doServerSide();
+ } catch (Exception e) {
+ /*
+ * Our server thread just died.
+ *
+ * Release the client, if not active already...
+ */
+ System.err.println("Server died...");
+ System.err.println(e);
+ serverReady = true;
+ serverException = e;
+ }
+ }
+ };
+ serverThread.start();
+ } else {
+ doServerSide();
+ }
+ }
+
+ void startClient(boolean newThread) throws Exception {
+ if (newThread) {
+ clientThread = new Thread() {
+ public void run() {
+ try {
+ doClientSide();
+ } catch (Exception e) {
+ /*
+ * Our client thread just died.
+ */
+ System.err.println("Client died...");
+ clientException = e;
+ }
+ }
+ };
+ clientThread.start();
+ } else {
+ doClientSide();
+ }
+ }
+
+ // Primary constructor, used to drive remainder of the test.
+ BalancedParentheses() throws Exception {
+ if (separateServerThread) {
+ startServer(true);
+ startClient(false);
+ } else {
+ startClient(true);
+ startServer(false);
+ }
+
+ /*
+ * Wait for other side to close down.
+ */
+ if (separateServerThread) {
+ serverThread.join();
+ } else {
+ clientThread.join();
+ }
+
+ /*
+ * When we get here, the test is pretty much over.
+ *
+ * If the main thread excepted, that propagates back
+ * immediately. If the other thread threw an exception, we
+ * should report back.
+ */
+ if (serverException != null) {
+ System.out.print("Server Exception:");
+ throw serverException;
+ }
+ if (clientException != null) {
+ System.out.print("Client Exception:");
+ throw clientException;
+ }
+ }
+
+ public static void main(String[] args) throws Exception {
+ // start the test
+ new BalancedParentheses();
+ }
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/com/sun/nio/sctp/SctpChannel/CommUp.java Thu Aug 06 17:26:35 2009 -0700
@@ -0,0 +1,364 @@
+/*
+ * Copyright 2009 Sun Microsystems, Inc. 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/* @test
+ * @bug 6863110
+ * @summary Newly connected/accepted SctpChannel should fire OP_READ if registered with a Selector
+ * @author chegar
+ */
+
+import java.net.InetSocketAddress;
+import java.net.SocketAddress;
+import java.io.IOException;
+import java.util.Iterator;
+import java.util.Set;
+import java.util.concurrent.CountDownLatch;
+import java.nio.ByteBuffer;
+import java.nio.channels.Selector;
+import java.nio.channels.SelectionKey;
+import com.sun.nio.sctp.AbstractNotificationHandler;
+import com.sun.nio.sctp.AssociationChangeNotification;
+import com.sun.nio.sctp.AssociationChangeNotification.AssocChangeEvent;
+import com.sun.nio.sctp.HandlerResult;
+import com.sun.nio.sctp.Notification;
+import com.sun.nio.sctp.SctpChannel;
+import com.sun.nio.sctp.SctpServerChannel;
+import com.sun.nio.sctp.ShutdownNotification;
+import static java.lang.System.out;
+import static java.lang.System.err;
+import static java.nio.channels.SelectionKey.OP_CONNECT;
+import static java.nio.channels.SelectionKey.OP_READ;
+
+public class CommUp {
+ static CountDownLatch acceptLatch = new CountDownLatch(1);
+ static final int TIMEOUT = 10000;
+
+ CommUpNotificationHandler clientHandler = new CommUpNotificationHandler();
+ CommUpNotificationHandler serverHandler = new CommUpNotificationHandler();
+ CommUpServer server;
+ Thread clientThread;
+
+ void test(String[] args) {
+ SocketAddress address = null;
+
+ if (!Util.isSCTPSupported()) {
+ out.println("SCTP protocol is not supported");
+ out.println("Test cannot be run");
+ return;
+ }
+
+ if (args.length == 2) {
+ /* requested to connecct to a specific address */
+ try {
+ int port = Integer.valueOf(args[1]);
+ address = new InetSocketAddress(args[0], port);
+ } catch (NumberFormatException nfe) {
+ err.println(nfe);
+ }
+ } else {
+ /* start server on local machine, default */
+ try {
+ server = new CommUpServer();
+ server.start();
+ address = server.address();
+ debug("Server started and listening on " + address);
+ } catch (IOException ioe) {
+ ioe.printStackTrace();
+ return;
+ }
+ }
+
+ /* store the main thread so that the server can interrupt it, if necessary */
+ clientThread = Thread.currentThread();
+
+ doClient(address);
+ }
+
+ void doClient(SocketAddress peerAddress) {
+ SctpChannel sc = null;
+ try {
+ debug("connecting to " + peerAddress);
+ sc = SctpChannel.open();
+ sc.configureBlocking(false);
+ check(sc.isBlocking() == false, "Should be in non-blocking mode");
+ sc.connect(peerAddress);
+
+ Selector selector = Selector.open();
+ SelectionKey selectiontKey = sc.register(selector, OP_CONNECT);
+
+ /* Expect two interest Ops */
+ boolean opConnectReceived = false;
+ boolean opReadReceived = false;
+ for (int z=0; z<2; z++) {
+ debug("select " + z);
+ int keysAdded = selector.select(TIMEOUT);
+ debug("returned " + keysAdded + " keys");
+ if (keysAdded > 0) {
+ Set<SelectionKey> keys = selector.selectedKeys();
+ Iterator<SelectionKey> i = keys.iterator();
+ while(i.hasNext()) {
+ SelectionKey sk = i.next();
+ i.remove();
+ SctpChannel readyChannel =
+ (SctpChannel)sk.channel();
+
+ /* OP_CONNECT */
+ if (sk.isConnectable()) {
+ /* some trivial checks */
+ check(opConnectReceived == false,
+ "should only received one OP_CONNECT");
+ check(opReadReceived == false,
+ "should not receive OP_READ before OP_CONNECT");
+ check(readyChannel.equals(sc),
+ "channels should be equal");
+ check(!sk.isAcceptable(),
+ "key should not be acceptable");
+ check(!sk.isReadable(),
+ "key should not be readable");
+ check(!sk.isWritable(),
+ "key should not be writable");
+
+ /* now process the OP_CONNECT */
+ opConnectReceived = true;
+ check((sk.interestOps() & OP_CONNECT) == OP_CONNECT,
+ "selection key interest ops should contain OP_CONNECT");
+ sk.interestOps(OP_READ);
+ check((sk.interestOps() & OP_CONNECT) != OP_CONNECT,
+ "selection key interest ops should not contain OP_CONNECT");
+ check(sc.finishConnect(),
+ "finishConnect should return true");
+ } /* OP_READ */
+ else if (sk.isReadable()) {
+ /* some trivial checks */
+ check(opConnectReceived == true,
+ "should receive one OP_CONNECT before OP_READ");
+ check(opReadReceived == false,
+ "should not receive OP_READ before OP_CONNECT");
+ check(readyChannel.equals(sc),
+ "channels should be equal");
+ check(!sk.isAcceptable(),
+ "key should not be acceptable");
+ check(sk.isReadable(),
+ "key should be readable");
+ check(!sk.isWritable(),
+ "key should not be writable");
+ check(!sk.isConnectable(),
+ "key should not be connectable");
+
+ /* now process the OP_READ */
+ opReadReceived = true;
+ selectiontKey.cancel();
+
+ /* try with small buffer to see if native
+ * implementation can handle this */
+ ByteBuffer buffer = ByteBuffer.allocateDirect(1);
+ readyChannel.receive(buffer, null, clientHandler);
+ check(clientHandler.receivedCommUp(),
+ "Client should have received COMM_UP");
+
+ /* dont close (or put anything on) the channel until
+ * we check that the server's accepted channel also
+ * received COMM_UP */
+ serverHandler.waitForCommUp();
+ } else {
+ fail("Unexpected selection key");
+ }
+ }
+ } else {
+ fail("Client selector returned 0 ready keys");
+ /* stop the server */
+ server.thread().interrupt();
+ }
+ } //for
+
+ } catch (IOException ioe) {
+ unexpected(ioe);
+ } catch (InterruptedException ie) {
+ unexpected(ie);
+ }
+ }
+
+ class CommUpServer implements Runnable
+ {
+ final InetSocketAddress serverAddr;
+ private SctpServerChannel ssc;
+ private Thread serverThread;
+
+ public CommUpServer() throws IOException {
+ ssc = SctpServerChannel.open().bind(null);
+ java.util.Set<SocketAddress> addrs = ssc.getAllLocalAddresses();
+ if (addrs.isEmpty())
+ debug("addrs should not be empty");
+
+ serverAddr = (InetSocketAddress) addrs.iterator().next();
+ }
+
+ void start() {
+ serverThread = new Thread(this, "CommUpServer-" +
+ serverAddr.getPort());
+ serverThread.start();
+ }
+
+ InetSocketAddress address () {
+ return serverAddr;
+ }
+
+ Thread thread() {
+ return serverThread;
+ }
+
+ @Override
+ public void run() {
+ Selector selector = null;
+ SctpChannel sc = null;
+ SelectionKey readKey = null;
+ try {
+ sc = ssc.accept();
+ debug("accepted " + sc);
+
+ selector = Selector.open();
+ sc.configureBlocking(false);
+ check(sc.isBlocking() == false, "Should be in non-blocking mode");
+ readKey = sc.register(selector, SelectionKey.OP_READ);
+
+ debug("select");
+ int keysAdded = selector.select(TIMEOUT);
+ debug("returned " + keysAdded + " keys");
+ if (keysAdded > 0) {
+ Set<SelectionKey> keys = selector.selectedKeys();
+ Iterator<SelectionKey> i = keys.iterator();
+ while(i.hasNext()) {
+ SelectionKey sk = i.next();
+ i.remove();
+ SctpChannel readyChannel =
+ (SctpChannel)sk.channel();
+ check(readyChannel.equals(sc),
+ "channels should be equal");
+ check(!sk.isAcceptable(),
+ "key should not be acceptable");
+ check(sk.isReadable(),
+ "key should be readable");
+ check(!sk.isWritable(),
+ "key should not be writable");
+ check(!sk.isConnectable(),
+ "key should not be connectable");
+
+ /* block until we check if the client has received its COMM_UP*/
+ clientHandler.waitForCommUp();
+
+ ByteBuffer buffer = ByteBuffer.allocateDirect(1);
+ sc.receive(buffer, null, serverHandler);
+ check(serverHandler.receivedCommUp(),
+ "Accepted channel should have received COMM_UP");
+ }
+ } else {
+ fail("Server selector returned 0 ready keys");
+ /* stop the client */
+ clientThread.interrupt();
+ }
+ } catch (IOException ioe) {
+ ioe.printStackTrace();
+ } catch (InterruptedException unused) {
+ } finally {
+ if (readKey != null) readKey.cancel();
+ try { if (selector != null) selector.close(); }
+ catch (IOException ioe) { unexpected(ioe); }
+ try { if (ssc != null) ssc.close(); }
+ catch (IOException ioe) { unexpected(ioe); }
+ try { if (sc != null) sc.close(); }
+ catch (IOException ioe) { unexpected(ioe); }
+ }
+ }
+ }
+
+ class CommUpNotificationHandler extends AbstractNotificationHandler<Object>
+ {
+ private boolean receivedCommUp; // false
+
+ public synchronized boolean receivedCommUp() {
+ return receivedCommUp;
+ }
+
+ public synchronized boolean waitForCommUp() throws InterruptedException {
+ while (receivedCommUp == false) {
+ wait();
+ }
+
+ return false;
+ }
+
+ @Override
+ public HandlerResult handleNotification(
+ Notification notification, Object attachment) {
+ fail("Unknown notification type");
+ return HandlerResult.CONTINUE;
+ }
+
+ @Override
+ public synchronized HandlerResult handleNotification(
+ AssociationChangeNotification notification, Object attachment) {
+ AssocChangeEvent event = notification.event();
+ debug("AssociationChangeNotification");
+ debug(" Association: " + notification.association());
+ debug(" Event: " + event);
+
+ if (event.equals(AssocChangeEvent.COMM_UP)) {
+ receivedCommUp = true;
+ notifyAll();
+ }
+
+ return HandlerResult.RETURN;
+ }
+
+ @Override
+ public HandlerResult handleNotification(
<