1.1 --- a/.hgtags Thu Apr 02 10:16:53 2009 -0700
1.2 +++ b/.hgtags Wed Apr 08 15:40:56 2009 -0700
1.3 @@ -24,3 +24,7 @@
1.4 b4ac413b1f129eeef0acab3f31081c1b7dfe3b27 jdk7-b47
1.5 5fbd9ea7def17186693b6f7099b5d0dc73903eee jdk7-b48
1.6 8311105ea7a3db7bcbcb2b696459127c7f2297a4 jdk7-b49
1.7 +58ba2cd5a25053684ec53205d95edeeaa0006f13 jdk7-b50
1.8 +fea0898259ae41c73620b1815aa48f036216155c jdk7-b51
1.9 +bcbeadb4a5d759b29e876ee2c83401e91ff22f60 jdk7-b52
1.10 +a2033addca678f9e4c0d92ffa1e389171cc9321d jdk7-b53
2.1 --- a/THIRD_PARTY_README Thu Apr 02 10:16:53 2009 -0700
2.2 +++ b/THIRD_PARTY_README Wed Apr 08 15:40:56 2009 -0700
2.3 @@ -61,6 +61,28 @@
2.4 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
2.5 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
2.6 THE POSSIBILITY OF SUCH DAMAGE.
2.7 +
2.8 +%% This notice is provided with respect to littlecms, which may be included with this software:
2.9 +
2.10 +Little cms
2.11 +Copyright (C) 1998-2004 Marti Maria
2.12 +
2.13 +Permission is hereby granted, free of charge, to any person obtaining a copy of
2.14 +this software and associated documentation files (the "Software"), to deal in
2.15 +the Software without restriction, including without limitation the rights to
2.16 +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
2.17 +the Software, and to permit persons to whom the Software is furnished to do so,
2.18 +subject to the following conditions:
2.19 +
2.20 +The above copyright notice and this permission notice shall be included in all
2.21 +copies or substantial portions of the Software.
2.22 +
2.23 +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
2.24 +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
2.25 +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
2.26 +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
2.27 +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
2.28 +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
2.29 %% This notice is provided with respect to zlib 1.1.3, which may be included with this software:
2.30
2.31 Acknowledgments:
2.32 @@ -115,16 +137,6 @@
2.33 The name and trademarks of copyright holders may NOT be used in advertising or publicity pertaining to the software without specific, written prior permission. Title to copyright in this software and any associated documentation will at all times remain with copyright holders.
2.34 ____________________________________
2.35 This formulation of W3C's notice and license became active on August 14 1998 so as to improve compatibility with GPL. This version ensures that W3C software licensing terms are no more restrictive than GPL and consequently W3C software may be distributed in GPL packages. See the older formulation for the policy prior to this date. Please see our Copyright FAQ for common questions about using materials from our site, including specific terms and conditions for packages like libwww, Amaya, and Jigsaw. Other questions about this notice can be directed to site-policy@w3.org.
2.36 -
2.37 -%% This notice is provided with respect to jscheme.jar, which may be included with this software:
2.38 -Software License Agreement
2.39 -Copyright © 1998-2002 by Peter Norvig.
2.40 -Permission is granted to anyone to use this software, in source or object code form, on any computer system, and to modify, compile, decompile, run, and redistribute it to anyone else, subject to the following restrictions:
2.41 -1.The author makes no warranty of any kind, either expressed or implied, about the suitability of this software for any purpose.
2.42 -2.The author accepts no liability of any kind for damages or other consequences of the use of this software, even if they arise from defects in the software.
2.43 -3.The origin of this software must not be misrepresented, either by explicit claim or by omission.
2.44 -4.Altered versions must be plainly marked as such, and must not be misrepresented as being the original software. Altered versions may be distributed in packages under other licenses (such as the GNU license).
2.45 -If you find this software useful, it would be nice if you let me (peter@norvig.com) know about it, and nicer still if you send me modifications that you are willing to share. However, you are not required to do so.
2.46
2.47
2.48 %% This notice is provided with respect to PC/SC Lite for Suse Linux v. 1.1.1, which may be included with this software:
3.1 --- a/make/com/sun/jmx/Makefile Thu Apr 02 10:16:53 2009 -0700
3.2 +++ b/make/com/sun/jmx/Makefile Wed Apr 08 15:40:56 2009 -0700
3.3 @@ -41,7 +41,15 @@
3.4 # Note : some targets are double colon rules and some single colon rules
3.5 # within common included gmk files : that is why the following for loop
3.6 # has been duplicated.
3.7 -SUBDIRS = snmp
3.8 +
3.9 +# When building the openjdk, build snmp only if importing binary plugs,
3.10 +ifdef OPENJDK
3.11 + ifeq ($(IMPORT_BINARY_PLUGS),true)
3.12 + SUBDIRS = snmp
3.13 + endif
3.14 +else
3.15 + SUBDIRS = snmp
3.16 +endif
3.17
3.18 all build:
3.19 $(SUBDIRS-loop)
4.1 --- a/make/common/Defs-linux.gmk Thu Apr 02 10:16:53 2009 -0700
4.2 +++ b/make/common/Defs-linux.gmk Wed Apr 08 15:40:56 2009 -0700
4.3 @@ -94,6 +94,9 @@
4.4 OPTIMIZATION_LEVEL = LOWER
4.5 endif
4.6 endif
4.7 +ifndef FASTDEBUG_OPTIMIZATION_LEVEL
4.8 + FASTDEBUG_OPTIMIZATION_LEVEL = LOWER
4.9 +endif
4.10
4.11 CC_OPT/NONE =
4.12 CC_OPT/LOWER = -O2
4.13 @@ -116,6 +119,14 @@
4.14 CFLAGS_REQUIRED = $(CFLAGS_REQUIRED_$(ARCH))
4.15 LDFLAGS_COMMON += $(LDFLAGS_COMMON_$(ARCH))
4.16
4.17 +# If this is a --hash-style=gnu system, use --hash-style=both
4.18 +# The gnu .hash section won't work on some Linux systems like SuSE 10.
4.19 +_HAS_HASH_STYLE_GNU:=$(shell $(CC) -dumpspecs | $(GREP) -- '--hash-style=gnu')
4.20 +ifneq ($(_HAS_HASH_STYLE_GNU),)
4.21 + LDFLAGS_HASH_STYLE = -Wl,--hash-style=both
4.22 +endif
4.23 +LDFLAGS_COMMON += $(LDFLAGS_HASH_STYLE)
4.24 +
4.25 #
4.26 # Selection of warning messages
4.27 #
4.28 @@ -165,8 +176,8 @@
4.29
4.30 # FASTDEBUG: Optimize the code in the -g versions, gives us a faster debug java
4.31 ifeq ($(FASTDEBUG), true)
4.32 - CFLAGS_DBG += $(CC_OPT/LOWER)
4.33 - CXXFLAGS_DBG += $(CC_OPT/LOWER)
4.34 + CFLAGS_DBG += $(CC_OPT/$(FASTDEBUG_OPTIMIZATION_LEVEL))
4.35 + CXXFLAGS_DBG += $(CC_OPT/$(FASTDEBUG_OPTIMIZATION_LEVEL))
4.36 endif
4.37
4.38 CPPFLAGS_COMMON = -D$(ARCH) -DARCH='"$(ARCH)"' -DLINUX $(VERSION_DEFINES) \
5.1 --- a/make/common/Defs-solaris.gmk Thu Apr 02 10:16:53 2009 -0700
5.2 +++ b/make/common/Defs-solaris.gmk Wed Apr 08 15:40:56 2009 -0700
5.3 @@ -93,6 +93,9 @@
5.4 OPTIMIZATION_LEVEL = LOWER
5.5 endif
5.6 endif
5.7 +ifndef FASTDEBUG_OPTIMIZATION_LEVEL
5.8 + FASTDEBUG_OPTIMIZATION_LEVEL = LOWER
5.9 +endif
5.10
5.11 #
5.12 # If -Xa is in CFLAGS_COMMON it will end up ahead of $(CC_OPT) for the
5.13 @@ -143,8 +146,8 @@
5.14 # Performance/size of files should be about the same, maybe smaller.
5.15 #
5.16 ifeq ($(FASTDEBUG), true)
5.17 - CFLAGS_DEBUG_OPTION = -g $(CC_OPT/LOWER)
5.18 - CXXFLAGS_DEBUG_OPTION = -g0 $(CXX_OPT/LOWER)
5.19 + CFLAGS_DEBUG_OPTION = -g $(CC_OPT/$(FASTDEBUG_OPTIMIZATION_LEVEL))
5.20 + CXXFLAGS_DEBUG_OPTION = -g0 $(CXX_OPT/$(FASTDEBUG_OPTIMIZATION_LEVEL))
5.21 endif
5.22
5.23 CFLAGS_COMMON = -L$(OBJDIR)
6.1 --- a/make/common/Defs-windows.gmk Thu Apr 02 10:16:53 2009 -0700
6.2 +++ b/make/common/Defs-windows.gmk Wed Apr 08 15:40:56 2009 -0700
6.3 @@ -70,7 +70,6 @@
6.4 # not to be REBASEd, see deploy/make/common/Release.gmk.
6.5 # msvcrt.dll, msvcrnn.dll [msvcr71 or msvcr80 or msvcr90] : Microsoft runtimes
6.6 MS_RUNTIME_LIBRARIES = msvcrt.dll
6.7 -MSVCRNN_DLL =
6.8 ifeq ($(ARCH_DATA_MODEL), 32)
6.9 ifeq ($(COMPILER_VERSION), VS2003)
6.10 MSVCRNN_DLL = msvcr71.dll
6.11 @@ -89,6 +88,13 @@
6.12 endif
6.13 endif
6.14
6.15 +ifeq ($(ARCH_DATA_MODEL), 64)
6.16 + ifeq ($(COMPILER_VERSION), VS2008)
6.17 + MSVCRNN_DLL = msvcr90.dll
6.18 + MSVCPNN_DLL = msvcp90.dll
6.19 + MS_RUNTIME_LIBRARIES += $(MSVCRNN_DLL)
6.20 + endif
6.21 +endif
6.22
6.23 EXTRA_LFLAGS += /LIBPATH:$(DXSDK_LIB_PATH)
6.24
6.25 @@ -105,6 +111,9 @@
6.26 OPTIMIZATION_LEVEL = LOWER
6.27 endif
6.28 endif
6.29 +ifndef FASTDEBUG_OPTIMIZATION_LEVEL
6.30 + FASTDEBUG_OPTIMIZATION_LEVEL = LOWER
6.31 +endif
6.32
6.33 ifeq ($(CC_VERSION),msvc)
6.34 # Visual Studio .NET 2003 or VS2003 compiler option definitions:
6.35 @@ -345,16 +354,11 @@
6.36 CFLAGS_COMMON += $(COMPILER_WARNINGS_TO_IGNORE:%=-wd%)
6.37
6.38 #
6.39 -# Add warnings and extra on 64bit issues
6.40 -#
6.41 -ifeq ($(ARCH_DATA_MODEL), 64)
6.42 - CFLAGS_COMMON += -Wp64
6.43 -endif
6.44 -
6.45 -#
6.46 # Treat compiler warnings as errors, if requested
6.47 #
6.48 CFLAGS_COMMON += -W$(COMPILER_WARNING_LEVEL)
6.49 +# Turn off security warnings about using the standard C library function strcpy
6.50 +CFLAGS_COMMON += -D _CRT_SECURE_NO_DEPRECATE
6.51 ifeq ($(COMPILER_WARNINGS_FATAL),true)
6.52 CFLAGS_COMMON += -WX
6.53 endif
7.1 --- a/make/common/Defs.gmk Thu Apr 02 10:16:53 2009 -0700
7.2 +++ b/make/common/Defs.gmk Wed Apr 08 15:40:56 2009 -0700
7.3 @@ -145,6 +145,11 @@
7.4 # 2. ALT_BINARY_PLUGS_PATH overrides all locations of classes and libraries
7.5 # 3. ALT_BUILD_BINARY_PLUGS_PATH is used to find a ALT_BINARY_PLUGS_PATH
7.6 # 4. ALT_CLOSED_JDK_IMPORT_PATH is used to locate classes and libraries
7.7 +# Note: If any of the ALT_ variables are modified here, it is assumed
7.8 +# that the build should be done with IMPORT_BINARY_PLUGS=true as
7.9 +# well. Otherwise the default will be IMPORT_BINARY_PLUGS=false.
7.10 +# Lastly, setting IMPORT_BINARY_PLUGS=false on the command line
7.11 +# will override this logic, and plugs will not be imported.
7.12 #
7.13
7.14 # Always needed, defines the name of the imported/exported jarfile
7.15 @@ -155,9 +160,11 @@
7.16 CLOSED_JDK_IMPORT_PATH = $(ALT_CLOSED_JDK_IMPORT_PATH)
7.17 BINARY_PLUGS_PATH = $(CLOSED_JDK_IMPORT_PATH)
7.18 BINARY_PLUGS_JARFILE = $(CLOSED_JDK_IMPORT_PATH)/jre/lib/rt.jar
7.19 + IMPORT_BINARY_PLUGS=true
7.20 endif
7.21 ifdef ALT_BUILD_BINARY_PLUGS_PATH
7.22 BUILD_BINARY_PLUGS_PATH = $(ALT_BUILD_BINARY_PLUGS_PATH)
7.23 + IMPORT_BINARY_PLUGS=true
7.24 else
7.25 BUILD_BINARY_PLUGS_PATH = $(SLASH_JAVA)/re/jdk/$(JDK_VERSION)/promoted/latest/openjdk/binaryplugs
7.26 endif
7.27 @@ -166,9 +173,11 @@
7.28 ifdef ALT_BINARY_PLUGS_PATH
7.29 BINARY_PLUGS_PATH = $(ALT_BINARY_PLUGS_PATH)
7.30 BINARY_PLUGS_JARFILE = $(BINARY_PLUGS_PATH)/jre/lib/$(BINARY_PLUGS_JARNAME)
7.31 + IMPORT_BINARY_PLUGS=true
7.32 endif
7.33 ifdef ALT_BINARY_PLUGS_JARFILE
7.34 BINARY_PLUGS_JARFILE = $(ALT_BINARY_PLUGS_JARFILE)
7.35 + IMPORT_BINARY_PLUGS=true
7.36 endif
7.37 endif # OPENJDK
7.38
8.1 --- a/make/common/shared/Compiler-gcc.gmk Thu Apr 02 10:16:53 2009 -0700
8.2 +++ b/make/common/shared/Compiler-gcc.gmk Wed Apr 08 15:40:56 2009 -0700
8.3 @@ -27,8 +27,6 @@
8.4 # GCC Compiler settings
8.5 #
8.6
8.7 -COMPILER_NAME=GCC
8.8 -
8.9 ifeq ($(PLATFORM), windows)
8.10
8.11 # Settings specific to Windows, pretty stale, hasn't been used
8.12 @@ -68,24 +66,6 @@
8.13 else
8.14 CXX = $(COMPILER_PATH)g++
8.15 endif
8.16 - ifneq ("$(findstring sparc,$(ARCH))", "")
8.17 - # sparc or sparcv9
8.18 - REQUIRED_CC_VER = 4.0
8.19 - REQUIRED_GCC_VER = 4.0.*
8.20 - else
8.21 - REQUIRED_CC_VER = 3.2
8.22 - ifeq ($(ARCH_DATA_MODEL), 32)
8.23 - REQUIRED_GCC_VER = 3.2.1*
8.24 - REQUIRED_GCC_VER_INT = 3.2.1-7a
8.25 - else
8.26 - ifeq ($(ARCH), amd64)
8.27 - REQUIRED_GCC_VER = 3.2.*
8.28 - endif
8.29 - ifeq ($(ARCH), ia64)
8.30 - REQUIRED_GCC_VER = 2.9[56789].*
8.31 - endif
8.32 - endif
8.33 - endif
8.34 # Option used to create a shared library
8.35 SHARED_LIBRARY_FLAG = -shared -mimpure-text
8.36 SUN_COMP_VER := $(shell $(CC) --verbose 2>&1 )
8.37 @@ -98,21 +78,17 @@
8.38 CC = $(COMPILER_PATH)gcc
8.39 CPP = $(COMPILER_PATH)gcc -E
8.40 CXX = $(COMPILER_PATH)g++
8.41 - REQUIRED_CC_VER = 3.2
8.42
8.43 # Option used to create a shared library
8.44 SHARED_LIBRARY_FLAG = -G
8.45 - # But gcc is still needed no matter what on 32bit
8.46 - ifeq ($(ARCH_DATA_MODEL), 32)
8.47 - REQUIRED_GCC_VER = 2.95
8.48 - GCC =$(GCC_COMPILER_PATH)gcc
8.49 - _GCC_VER :=$(shell $(GCC) -dumpversion 2>&1 )
8.50 - GCC_VER :=$(call GetVersion,"$(_GCC_VER)")
8.51 - endif
8.52 -
8.53 +
8.54 endif
8.55
8.56 # Get gcc version
8.57 _CC_VER :=$(shell $(CC) -dumpversion 2>&1 )
8.58 CC_VER :=$(call GetVersion,"$(_CC_VER)")
8.59
8.60 +# Name of compiler
8.61 +COMPILER_NAME = GCC$(call MajorVersion,$(CC_VER))
8.62 +COMPILER_VERSION = $(COMPILER_NAME)
8.63 +
9.1 --- a/make/common/shared/Compiler-msvc.gmk Thu Apr 02 10:16:53 2009 -0700
9.2 +++ b/make/common/shared/Compiler-msvc.gmk Wed Apr 08 15:40:56 2009 -0700
9.3 @@ -41,8 +41,6 @@
9.4 # Fill in unknown values
9.5 COMPILER_NAME=Unknown MSVC Compiler
9.6 COMPILER_VERSION=
9.7 - REQUIRED_CC_VER=
9.8 - REQUIRED_LINK_VER=
9.9
9.10 # unset any GNU Make settings of MFLAGS and MAKEFLAGS which may mess up nmake
9.11 NMAKE = MFLAGS= MAKEFLAGS= $(COMPILER_PATH)nmake -nologo
9.12 @@ -56,8 +54,6 @@
9.13 CC_MAJORVER :=$(call MajorVersion,$(CC_VER))
9.14 ifeq ($(CC_MAJORVER), 13)
9.15 # This should be: CC_VER=13.10.3077 LINK_VER=7.10.3077
9.16 - REQUIRED_CC_VER = 13.10.3077
9.17 - REQUIRED_LINK_VER = 7.10.3077
9.18 COMPILER_NAME=Visual Studio .NET 2003 Professional C++
9.19 COMPILER_VERSION=VS2003
9.20 REBASE = $(COMPILER_PATH)../../Common7/Tools/Bin/rebase
9.21 @@ -67,9 +63,6 @@
9.22 endif
9.23 endif
9.24 ifeq ($(CC_MAJORVER), 14)
9.25 - # This should be: CC_VER=14.00.50727.42 LINK_VER=8.00.50727.42
9.26 - REQUIRED_CC_VER = 14.00.50727.42
9.27 - REQUIRED_LINK_VER = 8.00.50727.42
9.28 COMPILER_NAME=Visual Studio 8
9.29 COMPILER_VERSION=VS2005
9.30 REBASE = $(COMPILER_PATH)../../Common8/Tools/Bin/rebase
9.31 @@ -80,9 +73,6 @@
9.32 endif
9.33 endif
9.34 ifeq ($(CC_MAJORVER), 15)
9.35 - # This should be: CC_VER=15.00.21022.08 LINK_VER=9.00.21022.08
9.36 - REQUIRED_CC_VER = 15.00.21022.08
9.37 - REQUIRED_LINK_VER = 9.00.21022.08
9.38 COMPILER_NAME=Visual Studio 9
9.39 COMPILER_VERSION=VS2008
9.40 #rebase and midl moved out of Visual Studio into the SDK:
9.41 @@ -99,14 +89,6 @@
9.42 CC_MAJORVER :=$(call MajorVersion,$(CC_VER))
9.43 CC_MINORVER :=$(call MinorVersion,$(CC_VER))
9.44 CC_MICROVER :=$(call MicroVersion,$(CC_VER))
9.45 - ifeq ($(ARCH), ia64)
9.46 - REQUIRED_CC_VER = 13.00.9337.7
9.47 - REQUIRED_LINK_VER = 7.00.9337.7
9.48 - endif
9.49 - ifeq ($(ARCH), amd64)
9.50 - REQUIRED_CC_VER = 14.00.40310.41
9.51 - REQUIRED_LINK_VER = 8.00.40310.39
9.52 - endif
9.53 ifeq ($(CC_MAJORVER), 13)
9.54 ifeq ($(ARCH), ia64)
9.55 # This should be: CC_VER=13.00.9337.7 LINK_VER=7.00.9337.7
9.56 @@ -130,6 +112,12 @@
9.57 endif
9.58 endif
9.59 endif
9.60 + ifeq ($(CC_MAJORVER), 15)
9.61 + COMPILER_NAME=Microsoft Windows SDK with Visual Studio 9 (6001.18000.367)
9.62 + COMPILER_VERSION=VS2008
9.63 + RC = $(MSSDK61)/Bin/X64/rc.exe
9.64 + MT = $(MSSDK61)/Bin/X64/mt.exe
9.65 + endif
9.66 # This will cause problems if ALT_COMPILER_PATH is defined to ""
9.67 # which is a directive to use the PATH.
9.68 REBASE = $(COMPILER_PATH)../REBASE
10.1 --- a/make/common/shared/Compiler-sun.gmk Thu Apr 02 10:16:53 2009 -0700
10.2 +++ b/make/common/shared/Compiler-sun.gmk Wed Apr 08 15:40:56 2009 -0700
10.3 @@ -27,32 +27,20 @@
10.4 # Sun Studio Compiler settings
10.5 #
10.6
10.7 -COMPILER_NAME=Sun Studio
10.8 -
10.9 # Sun Studio Compiler settings specific to Solaris
10.10 ifeq ($(PLATFORM), solaris)
10.11 - COMPILER_VERSION=SS12
10.12 - REQUIRED_CC_VER=5.9
10.13 CC = $(COMPILER_PATH)cc
10.14 CPP = $(COMPILER_PATH)cc -E
10.15 CXX = $(COMPILER_PATH)CC
10.16 LINT = $(COMPILER_PATH)lint
10.17 # Option used to create a shared library
10.18 SHARED_LIBRARY_FLAG = -G
10.19 - # But gcc is still needed no matter what on 32bit
10.20 - ifeq ($(ARCH_DATA_MODEL), 32)
10.21 - REQUIRED_GCC_VER = 2.95
10.22 - GCC =$(GCC_COMPILER_PATH)gcc
10.23 - _GCC_VER :=$(shell $(GCC) -dumpversion 2>&1 )
10.24 - GCC_VER :=$(call GetVersion,"$(_GCC_VER)")
10.25 - endif
10.26 + GCC =$(GCC_COMPILER_PATH)gcc
10.27 endif
10.28
10.29 # Sun Studio Compiler settings specific to Linux
10.30 ifeq ($(PLATFORM), linux)
10.31 # This has not been tested
10.32 - COMPILER_VERSION=SS12
10.33 - REQUIRED_CC_VER=5.9
10.34 CC = $(COMPILER_PATH)cc
10.35 CPP = $(COMPILER_PATH)cc -E
10.36 CXX = $(COMPILER_PATH)CC
10.37 @@ -74,6 +62,18 @@
10.38 _CC_VER :=$(shell $(CC) -V 2>&1 | $(HEAD) -n 1)
10.39 CC_VER :=$(call GetVersion,"$(_CC_VER)")
10.40
10.41 +# Name of compilers being used
10.42 +COMPILER_VERSION-5.7 = SS10
10.43 +COMPILER_NAME-5.7 = Sun Studio 10
10.44 +COMPILER_VERSION-5.8 = SS11
10.45 +COMPILER_NAME-5.8 = Sun Studio 11
10.46 +COMPILER_VERSION-5.9 = SS12
10.47 +COMPILER_NAME-5.9 = Sun Studio 12
10.48 +COMPILER_VERSION-5.10 = SS13
10.49 +COMPILER_NAME-5.10 = Sun Studio 13
10.50 +COMPILER_VERSION = $(COMPILER_VERSION-$(CC_VER))
10.51 +COMPILER_NAME = $(COMPILER_NAME-$(CC_VER))
10.52 +
10.53 # Arch specific settings (determines type of .o files and instruction set)
10.54 # Starting in SS12 (5.9), the arch options changed.
10.55 # The assembler /usr/ccs/bin/as wants older SS11 (5.8) style options.
11.1 --- a/make/common/shared/Compiler.gmk Thu Apr 02 10:16:53 2009 -0700
11.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
11.3 @@ -1,47 +0,0 @@
11.4 -#
11.5 -# Copyright 2005 Sun Microsystems, Inc. All Rights Reserved.
11.6 -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
11.7 -#
11.8 -# This code is free software; you can redistribute it and/or modify it
11.9 -# under the terms of the GNU General Public License version 2 only, as
11.10 -# published by the Free Software Foundation. Sun designates this
11.11 -# particular file as subject to the "Classpath" exception as provided
11.12 -# by Sun in the LICENSE file that accompanied this code.
11.13 -#
11.14 -# This code is distributed in the hope that it will be useful, but WITHOUT
11.15 -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11.16 -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
11.17 -# version 2 for more details (a copy is included in the LICENSE file that
11.18 -# accompanied this code).
11.19 -#
11.20 -# You should have received a copy of the GNU General Public License version
11.21 -# 2 along with this work; if not, write to the Free Software Foundation,
11.22 -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
11.23 -#
11.24 -# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
11.25 -# CA 95054 USA or visit www.sun.com if you need additional information or
11.26 -# have any questions.
11.27 -#
11.28 -
11.29 -#
11.30 -# Compiler settings for all platforms and the default compiler for each.
11.31 -#
11.32 -
11.33 -# Windows uses Microsoft compilers by default
11.34 -ifeq ($(PLATFORM), windows)
11.35 - override CC_VERSION = msvc
11.36 -endif
11.37 -
11.38 -# Solaris uses Sun Studio compilers by default
11.39 -ifeq ($(PLATFORM), solaris)
11.40 - override CC_VERSION = sun
11.41 -endif
11.42 -
11.43 -# Linux uses GNU compilers by default
11.44 -ifeq ($(PLATFORM), linux)
11.45 - override CC_VERSION = gcc
11.46 -endif
11.47 -
11.48 -# Get the compiler specific settings
11.49 -include $(JDK_MAKE_SHARED_DIR)/Compiler-$(CC_VERSION).gmk
11.50 -
12.1 --- a/make/common/shared/Defs-java.gmk Thu Apr 02 10:16:53 2009 -0700
12.2 +++ b/make/common/shared/Defs-java.gmk Wed Apr 08 15:40:56 2009 -0700
12.3 @@ -59,7 +59,15 @@
12.4 ADD_CLIENT_VM_OPTION = true
12.5 endif
12.6 endif
12.7 -JAVA_JVM_FLAGS =
12.8 +
12.9 +# Options for hotspot to turn off printing of options with fastdebug version
12.10 +# and creating the hotspot.log file.
12.11 +JAVA_HOTSPOT_DISABLE_PRINT_VMOPTIONS = \
12.12 + -XX:-PrintVMOptions -XX:+UnlockDiagnosticVMOptions -XX:-LogVMOutput
12.13 +
12.14 +# JVM options
12.15 +JAVA_JVM_FLAGS = $(JAVA_HOTSPOT_DISABLE_PRINT_VMOPTIONS)
12.16 +
12.17 ifeq ($(ADD_CLIENT_VM_OPTION), true)
12.18 JAVA_JVM_FLAGS += -client
12.19 endif
12.20 @@ -129,6 +137,9 @@
12.21 # Needed for javah
12.22 JAVAHFLAGS += -bootclasspath $(CLASSBINDIR)
12.23
12.24 +# Needed for JAVADOC and BOOT_JAVACFLAGS
12.25 +NO_PROPRIETARY_API_WARNINGS = -XDignore.symbol.file=true
12.26 +
12.27 # Langtools
12.28 ifdef LANGTOOLS_DIST
12.29 JAVAC_JAR = $(LANGTOOLS_DIST)/bootstrap/lib/javac.jar
12.30 @@ -192,6 +203,8 @@
12.31 BOOT_JAVACFLAGS += -encoding ascii
12.32 BOOT_JAR_JFLAGS += $(JAR_JFLAGS)
12.33
12.34 +BOOT_JAVACFLAGS += $(NO_PROPRIETARY_API_WARNINGS)
12.35 +
12.36 BOOT_JAVA_CMD = $(BOOTDIR)/bin/java $(JAVA_TOOLS_FLAGS)
12.37 BOOT_JAVAC_CMD = $(BOOTDIR)/bin/javac $(JAVAC_JVM_FLAGS) $(BOOT_JAVACFLAGS)
12.38 BOOT_JAR_CMD = $(BOOTDIR)/bin/jar
13.1 --- a/make/common/shared/Defs-solaris.gmk Thu Apr 02 10:16:53 2009 -0700
13.2 +++ b/make/common/shared/Defs-solaris.gmk Wed Apr 08 15:40:56 2009 -0700
13.3 @@ -91,14 +91,14 @@
13.4 ifneq "$(origin ALT_COMPILER_PATH)" "undefined"
13.5 COMPILER_PATH :=$(call PrefixPath,$(ALT_COMPILER_PATH))
13.6 else
13.7 - # Careful here, COMPILER_VERSION may not be defined yet (see Compiler.gmk)
13.8 + # Careful here, REQUIRED_COMPILER_VERSION may not be defined yet (see Defs-versions.gmk)
13.9 # If the place where we keep a set of Sun Studio compilers doesn't exist,
13.10 # try and use /opt/SUNWspro, the default location for the SS compilers.
13.11 # (DirExists checks for this path twice, an automount double check)
13.12 _SUNSTUDIO_SET_ROOT=$(JDK_DEVTOOLS_DIR)/$(ARCH_FAMILY)/SUNWspro
13.13 SUNSTUDIO_SET_ROOT:=$(call DirExists,$(_SUNSTUDIO_SET_ROOT),$(_SUNSTUDIO_SET_ROOT),)
13.14 ifneq ($(SUNSTUDIO_SET_ROOT),)
13.15 - COMPILER_PATH =$(SUNSTUDIO_SET_ROOT)/$(COMPILER_VERSION)/bin/
13.16 + COMPILER_PATH =$(SUNSTUDIO_SET_ROOT)/$(REQUIRED_COMPILER_VERSION)/bin/
13.17 else
13.18 COMPILER_PATH =/opt/SUNWspro/bin/
13.19 endif
14.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
14.2 +++ b/make/common/shared/Defs-versions.gmk Wed Apr 08 15:40:56 2009 -0700
14.3 @@ -0,0 +1,199 @@
14.4 +#
14.5 +# Copyright 2009 Sun Microsystems, Inc. All Rights Reserved.
14.6 +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
14.7 +#
14.8 +# This code is free software; you can redistribute it and/or modify it
14.9 +# under the terms of the GNU General Public License version 2 only, as
14.10 +# published by the Free Software Foundation. Sun designates this
14.11 +# particular file as subject to the "Classpath" exception as provided
14.12 +# by Sun in the LICENSE file that accompanied this code.
14.13 +#
14.14 +# This code is distributed in the hope that it will be useful, but WITHOUT
14.15 +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14.16 +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14.17 +# version 2 for more details (a copy is included in the LICENSE file that
14.18 +# accompanied this code).
14.19 +#
14.20 +# You should have received a copy of the GNU General Public License version
14.21 +# 2 along with this work; if not, write to the Free Software Foundation,
14.22 +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
14.23 +#
14.24 +# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
14.25 +# CA 95054 USA or visit www.sun.com if you need additional information or
14.26 +# have any questions.
14.27 +#
14.28 +
14.29 +#
14.30 +# WARNING: This file is shared with other workspaces.
14.31 +#
14.32 +
14.33 +# This file needs these set: CC_VERSION, PLATFORM, ARCH_FAMILY, and ARCH_DATA_MODEL.
14.34 +
14.35 +##########################################################################
14.36 +#
14.37 +# List of JDK official minimum, expected, or required versions:
14.38 +#
14.39 +# REQUIRED_ALSA_VERSION
14.40 +# Linux only: The ALSA sound library version expected.
14.41 +#
14.42 +# REQUIRED_ANT_VER
14.43 +# The minimum 'ant' version.
14.44 +#
14.45 +# REQUIRED_BOOT_VER
14.46 +# The minimum boot jdk version.
14.47 +#
14.48 +# REQUIRED_CC_VER
14.49 +# The primary C compiler version expected.
14.50 +#
14.51 +# REQUIRED_COMPILER_NAME
14.52 +# The long descriptive name of the compiler we should use
14.53 +#
14.54 +# REQUIRED_COMPILER_VERSION
14.55 +# The one word name that identifies the compilers being used.
14.56 +#
14.57 +# REQUIRED_CYGWIN_VER
14.58 +# Windows only: If CYGWIN is used, the minimum CYGWIN version.
14.59 +#
14.60 +# REQUIRED_DXSDK_VER
14.61 +# Windows only: The version of DirectX SDK expected.
14.62 +#
14.63 +# REQUIRED_FREE_SPACE
14.64 +# The minimum disk space needed as determined by running 'du -sk' on a fully
14.65 +# built workspace.
14.66 +#
14.67 +# REQUIRED_FREETYPE_VERSION
14.68 +# If we are using freetype, the freetype version expected.
14.69 +#
14.70 +# REQUIRED_GCC_VER
14.71 +# Solaris and Linux only. The required version of gcc/g++ for the plugin.
14.72 +#
14.73 +# REQUIRED_LINK_VER
14.74 +# Windows only: The version of link.exe expected.
14.75 +#
14.76 +# REQUIRED_MAKE_VER
14.77 +# The minimum version of GNU make.
14.78 +#
14.79 +# REQUIRED_MKS_VER
14.80 +# Windows only: If MKS used instead of CYGWIN, the minimum version of MKS.
14.81 +#
14.82 +# REQUIRED_OS_VARIANT_NAME
14.83 +# The OS variation name required.
14.84 +# Solaris: Solaris or OpenSolaris
14.85 +# Windows: Windows2000, WindowsXP, Windows2003, etc.
14.86 +# Linux: Fedora, RedHat, SuSE, Ubuntu, etc.
14.87 +#
14.88 +# REQUIRED_OS_VARIANT_VERSION
14.89 +# The version number associated with the above OS variant name.
14.90 +# Solaris: output of uname -r
14.91 +# Windows: 5.0 for Windows2000, 5.1 for WindowsXP, 5.2 for Windows2003, etc.
14.92 +# Linux: number for the variant, e.g. 9 for Fedora 9
14.93 +#
14.94 +# REQUIRED_OS_VERSION
14.95 +# The formal OS version number.
14.96 +# Solaris & Windows: same as REQUIRED_OS_VARIANT_VERSION
14.97 +# Linux: the kernel version, or output of uname -r
14.98 +#
14.99 +# REQUIRED_UNZIP_VER
14.100 +# The minimum version of unzip.
14.101 +#
14.102 +# REQUIRED_ZIP_VER
14.103 +# The minimum version of unzip.
14.104 +#
14.105 +###########
14.106 +#
14.107 +# Differences in the build platform from these versions may trigger warnings
14.108 +# messages during the sanity checking when building the JDK.
14.109 +#
14.110 +# When building the OpenJDK most of these required or expected versions are
14.111 +# ignored or allowed to vary widely to accomodate the many build situations
14.112 +# of the OpenJDK.
14.113 +#
14.114 +##########################################################################
14.115 +
14.116 +# Solaris specific
14.117 +ifeq ($(PLATFORM), solaris)
14.118 + REQUIRED_OS_VERSION = 5.10
14.119 + REQUIRED_OS_VARIANT_NAME = Solaris
14.120 + REQUIRED_OS_VARIANT_VERSION = $(REQUIRED_OS_VERSION)
14.121 + ifeq ($(ARCH_FAMILY), sparc)
14.122 + REQUIRED_FREE_SPACE = 1300000
14.123 + else
14.124 + REQUIRED_FREE_SPACE = 1040000
14.125 + endif
14.126 + REQUIRED_COMPILER_NAME = Sun Studio 12
14.127 + REQUIRED_COMPILER_VERSION = SS12
14.128 + ifeq ($(CC_VERSION),sun)
14.129 + REQUIRED_CC_VER = 5.9
14.130 + endif
14.131 + ifeq ($(CC_VERSION),gcc)
14.132 + REQUIRED_CC_VER = 3.4.3
14.133 + endif
14.134 + REQUIRED_GCC_VER = 2.95.2
14.135 +endif
14.136 +
14.137 +# Linux specific
14.138 +ifeq ($(PLATFORM), linux)
14.139 + REQUIRED_OS_VERSION = 2.6
14.140 + REQUIRED_OS_VARIANT_NAME = Fedora
14.141 + REQUIRED_OS_VARIANT_VERSION = 9
14.142 + REQUIRED_FREE_SPACE = 1460000
14.143 + REQUIRED_ALSA_VERSION = 0.9.1
14.144 + REQUIRED_COMPILER_NAME = GCC4
14.145 + REQUIRED_COMPILER_VERSION = GCC4
14.146 + REQUIRED_GCC_VER = 2.95
14.147 + ifeq ($(CC_VERSION),gcc)
14.148 + REQUIRED_CC_VER = 4.3.0
14.149 + endif
14.150 + ifeq ($(CC_VERSION),sun)
14.151 + REQUIRED_CC_VER = 5.9
14.152 + endif
14.153 +endif
14.154 +
14.155 +# Windows specific
14.156 +ifeq ($(PLATFORM), windows)
14.157 + ifeq ($(ARCH_DATA_MODEL),64)
14.158 + REQUIRED_OS_VERSION = 5.2
14.159 + REQUIRED_OS_VARIANT_NAME = Windows2003
14.160 + else
14.161 + REQUIRED_OS_VERSION = 5.1
14.162 + REQUIRED_OS_VARIANT_NAME = WindowsXP
14.163 + endif
14.164 + REQUIRED_OS_VARIANT_VERSION = $(REQUIRED_OS_VERSION)
14.165 + REQUIRED_CYGWIN_VER = 4.0
14.166 + REQUIRED_MKS_VER = 6.1
14.167 + REQUIRED_FREE_SPACE = 500000
14.168 + REQUIRED_DXSDK_VER = 0x0900
14.169 + ifeq ($(CC_VERSION),msvc)
14.170 + ifeq ($(ARCH_DATA_MODEL), 32)
14.171 + REQUIRED_COMPILER_NAME = Visual Studio 9
14.172 + REQUIRED_COMPILER_VERSION = VS2008
14.173 + REQUIRED_CC_VER = 15.00.21022.08
14.174 + REQUIRED_LINK_VER = 9.00.21022.08
14.175 + else
14.176 + ifeq ($(ARCH), ia64)
14.177 + REQUIRED_COMPILER_NAME = Microsoft Platform SDK - November 2001 Edition
14.178 + REQUIRED_COMPILER_VERSION = VS2003
14.179 + REQUIRED_CC_VER = 13.00.9337.7
14.180 + REQUIRED_LINK_VER = 7.00.9337.7
14.181 + endif
14.182 + ifeq ($(ARCH), amd64)
14.183 + REQUIRED_COMPILER_NAME = Microsoft Windows SDK with Visual Studio 9 (6001.18000.367)
14.184 + REQUIRED_COMPILER_VERSION = VS2008
14.185 + REQUIRED_CC_VER = 15.00.21022.08
14.186 + REQUIRED_LINK_VER = 9.00.21022.08
14.187 + endif
14.188 + endif
14.189 + endif
14.190 + ifeq ($(CC_VERSION),gcc)
14.191 + REQUIRED_CC_VER = 3.4.3
14.192 + endif
14.193 +endif
14.194 +
14.195 +# Generic
14.196 +REQUIRED_ANT_VER = 1.6.3
14.197 +REQUIRED_BOOT_VER = 1.5
14.198 +REQUIRED_FREETYPE_VERSION = 2.3.0
14.199 +REQUIRED_MAKE_VER = 3.78
14.200 +REQUIRED_UNZIP_VER = 5.12
14.201 +REQUIRED_ZIP_VER = 2.2
14.202 +
15.1 --- a/make/common/shared/Defs-windows.gmk Thu Apr 02 10:16:53 2009 -0700
15.2 +++ b/make/common/shared/Defs-windows.gmk Wed Apr 08 15:40:56 2009 -0700
15.3 @@ -136,10 +136,7 @@
15.4 UNIXCOMMAND_PATH:=$(call AltCheckSpaces,UNIXCOMMAND_PATH)
15.5
15.6 # Get version of MKS or CYGWIN
15.7 -ifdef USING_CYGWIN
15.8 -_CYGWIN_VER :=$(shell $(UNAME))
15.9 -CYGWIN_VER :=$(call GetVersion,$(_CYGWIN_VER))
15.10 -else # MKS
15.11 +ifndef USING_CYGWIN
15.12 _MKS_VER :=$(shell $(MKSINFO) 2>&1 | $(GREP) Release | $(TAIL) -1 | $(SED) -e 's@.*\(Release.*\)@\1@')
15.13 MKS_VER :=$(call GetVersion,$(_MKS_VER))
15.14 # At this point, we can re-define FullPath to use DOSNAME_CMD
15.15 @@ -202,6 +199,7 @@
15.16 endif
15.17 ifeq ($(ARCH_DATA_MODEL), 32)
15.18 _program_files :=$(call FullPath,$(xPROGRAMFILES))
15.19 + _program_files32 :=$(_program_files)
15.20 else
15.21 ifdef PROGRAMW6432
15.22 xPROGRAMW6432 :="$(subst \,/,$(PROGRAMW6432))"
15.23 @@ -255,39 +253,51 @@
15.24 _vs90tools :=$(call FullPath,$(xVS90COMNTOOLS))
15.25 endif
15.26 ifneq ($(_vs90tools),)
15.27 - _msvc_dir :=$(_vs90tools)/../../Vc
15.28 - _redist_sdk :=$(_msvc_dir)/../SDK/v3.5/Bin
15.29 - endif
15.30 - ifdef VS80COMNTOOLS # /Common/Tools directory, use ../../Vc
15.31 - xVS80COMNTOOLS :="$(subst \,/,$(VS80COMNTOOLS))"
15.32 - _vs80tools :=$(call FullPath,$(xVS80COMNTOOLS))
15.33 - endif
15.34 - ifneq ($(_vs80tools),)
15.35 - _msvc_dir :=$(_vs80tools)/../../Vc
15.36 - _redist_sdk :=$(_msvc_dir)/../SDK/v2.0/Bin
15.37 - endif
15.38 - ifdef VS71COMNTOOLS # /Common/Tools directory, use ../../Vc7
15.39 - xVS71COMNTOOLS :="$(subst \,/,$(VS71COMNTOOLS))"
15.40 - _vs71tools :=$(call FullPath,$(xVS71COMNTOOLS))
15.41 - endif
15.42 - ifneq ($(_vs71tools),)
15.43 - _msvc_dir :=$(_vs71tools)/../../Vc7
15.44 - _redist_sdk :=$(_vs71tools)/../..
15.45 + _msvc_dir :=$(_vs90tools)/../../Vc
15.46 + else
15.47 + ifdef VS80COMNTOOLS # /Common/Tools directory, use ../../Vc
15.48 + xVS80COMNTOOLS :="$(subst \,/,$(VS80COMNTOOLS))"
15.49 + _vs80tools :=$(call FullPath,$(xVS80COMNTOOLS))
15.50 + endif
15.51 + ifneq ($(_vs80tools),)
15.52 + _msvc_dir :=$(_vs80tools)/../../Vc
15.53 + else
15.54 + ifdef VS71COMNTOOLS # /Common/Tools directory, use ../../Vc7
15.55 + xVS71COMNTOOLS :="$(subst \,/,$(VS71COMNTOOLS))"
15.56 + _vs71tools :=$(call FullPath,$(xVS71COMNTOOLS))
15.57 + endif
15.58 + ifneq ($(_vs71tools),)
15.59 + _msvc_dir :=$(_vs71tools)/../../Vc7
15.60 + endif
15.61 + endif
15.62 endif
15.63 endif
15.64 ifneq ($(_msvc_dir),)
15.65 _compiler_bin :=$(_msvc_dir)/Bin
15.66 - _ms_sdk :=$(_msvc_dir)/PlatformSDK
15.67 + # Assume PlatformSDK is in VS71 (will be empty if VS90)
15.68 + _ms_sdk :=$(call FullPath,$(_msvc_dir)/PlatformSDK)
15.69 + # Assume VS90, then VS80, then VS71
15.70 + _redist_sdk :=$(call FullPath,$(_msvc_dir)/../SDK/v3.5/Bin)
15.71 + ifeq ($(_redist_sdk),)
15.72 + _redist_sdk :=$(call FullPath,$(_msvc_dir)/../SDK/v2.0/Bin)
15.73 + ifeq ($(_redist_sdk),)
15.74 + _redist_sdk :=$(call FullPath,$(_msvc_dir)/../SDK/v1.1/Bin)
15.75 + endif
15.76 + endif
15.77 endif
15.78 endif
15.79
15.80 # The Microsoft Platform SDK installed by itself
15.81 ifneq ($(_program_files),)
15.82 - xPSDK :="$(_program_files)/Microsoft Platform SDK"
15.83 - _psdk :=$(call FullPath,$(xPSDK))
15.84 + _PSDK :="$(_program_files)/Microsoft SDKs/Windows/v6.1/"
15.85 + _psdk :=$(call FullPath,$(xMSSDK61))
15.86 ifeq ($(_psdk),)
15.87 - xPSDK :="$(_program_files)/Microsoft SDK"
15.88 - _psdk :=$(call FullPath,$(xMSSDK))
15.89 + xPSDK :="$(_program_files)/Microsoft Platform SDK"
15.90 + _psdk :=$(call FullPath,$(xPSDK))
15.91 + ifeq ($(_psdk),)
15.92 + xPSDK :="$(_program_files)/Microsoft SDK"
15.93 + _psdk :=$(call FullPath,$(xMSSDK))
15.94 + endif
15.95 endif
15.96 endif
15.97
15.98 @@ -308,13 +318,22 @@
15.99
15.100 # Compilers for 64bit are from SDK
15.101 ifeq ($(ARCH_DATA_MODEL), 64)
15.102 - ifneq ($(_ms_sdk),)
15.103 - ifeq ($(ARCH), ia64)
15.104 - _compiler_bin :=$(_ms_sdk)/Bin/Win64
15.105 - endif
15.106 - ifeq ($(ARCH), amd64)
15.107 - _compiler_bin :=$(_ms_sdk)/Bin/Win64/x86/$(ARCH)
15.108 - _redist_sdk :=$(_ms_sdk)/redist/win64/AMD64
15.109 + xVS2008 :="$(_program_files32)/Microsoft Visual Studio 9.0/"
15.110 + VS2008 :=$(call FullPath,$(xVS2008))
15.111 + ifneq ($(VS2008),)
15.112 + _compiler_bin :=$(VS2008)/VC/Bin/$(ARCH)
15.113 + xMSSDK61 :="$(_program_files)/Microsoft SDKs/Windows/v6.1/"
15.114 + MSSDK61 :=$(call FullPath,$(xMSSDK61))
15.115 + _redist_sdk :=$(VS2008)/VC/redist/x86/Microsoft.VC90.CRT
15.116 + else
15.117 + ifneq ($(_ms_sdk),)
15.118 + ifeq ($(ARCH), ia64)
15.119 + _compiler_bin :=$(_ms_sdk)/Bin/Win64
15.120 + endif
15.121 + ifeq ($(ARCH), amd64)
15.122 + _compiler_bin :=$(_ms_sdk)/Bin/Win64/x86/$(ARCH)
15.123 + _redist_sdk :=$(_ms_sdk)/redist/win64/AMD64
15.124 + endif
15.125 endif
15.126 endif
15.127 endif
15.128 @@ -417,70 +436,39 @@
15.129 _BOOTDIR2 =$(USRJDKINSTANCES_PATH)/jdk$(PREVIOUS_JDK_VERSION)
15.130 endif
15.131
15.132 -# See if SDK area has a msvcrt.dll file, directory may exist w/o msvcr* files
15.133 -_REDIST_SDK_EXISTS := $(shell \
15.134 - if [ -f "$(_redist_sdk)/msvcrt.dll" ]; then \
15.135 - echo "true"; \
15.136 - else \
15.137 - echo "false"; \
15.138 - fi)
15.139 -_REDISTNN_SDK_EXISTS := $(shell \
15.140 - if [ -f "$(_redist_sdk)/$(MSVCRNN_DLL)" ]; then \
15.141 - echo "true"; \
15.142 - else \
15.143 - echo "false"; \
15.144 - fi)
15.145 +# 32 bit always needs 2 runtimes, 64 bit usually does too
15.146
15.147 -# 32 bit needs 2 runtimes
15.148 +# MSVCRT_DLL_PATH: location of msvcrt.dll that will be re-distributed
15.149 +ifdef ALT_MSVCRT_DLL_PATH
15.150 + xALT_MSVCRT_DLL_PATH :="$(subst \,/,$(ALT_MSVCRT_DLL_PATH))"
15.151 + MSVCRT_DLL_PATH :=$(call FullPath,$(xALT_MSVCRT_DLL_PATH))
15.152 +else
15.153 + MSVCRT_DLL_PATH :=$(call FullPath,$(_system_root)/system32/)
15.154 +endif
15.155 +MSVCRT_DLL_PATH:=$(call AltCheckSpaces,MSVCRT_DLL_PATH)
15.156 +MSVCRT_DLL_PATH:=$(call AltCheckValue,MSVCRT_DLL_PATH)
15.157 +
15.158 +# 32bit always needs the MSVCRNN runtime, 64bit does when using VS2008
15.159 ifeq ($(ARCH_DATA_MODEL), 32)
15.160 + _NEEDS_MSVCRNN = true
15.161 +else
15.162 + ifeq ($(VS2008),)
15.163 + _NEEDS_MSVCRNN = false
15.164 + else
15.165 + _NEEDS_MSVCRNN = true
15.166 + endif
15.167 +endif
15.168
15.169 - # MSVCRT_DLL_PATH: location of msvcrt.dll that will be re-distributed
15.170 - ifdef ALT_MSVCRT_DLL_PATH
15.171 - xALT_MSVCRT_DLL_PATH :="$(subst \,/,$(ALT_MSVCRT_DLL_PATH))"
15.172 - MSVCRT_DLL_PATH :=$(call FullPath,$(xALT_MSVCRT_DLL_PATH))
15.173 - else
15.174 - ifeq ($(_REDIST_SDK_EXISTS), true)
15.175 - xREDIST_DIR :=$(_redist_sdk)
15.176 - else
15.177 - xREDIST_DIR :=$(_system_root)/system32
15.178 - endif
15.179 - MSVCRT_DLL_PATH :=$(call FullPath,$(xREDIST_DIR))
15.180 - endif
15.181 - MSVCRT_DLL_PATH:=$(call AltCheckSpaces,MSVCRT_DLL_PATH)
15.182 - MSVCRT_DLL_PATH:=$(call AltCheckValue,MSVCRT_DLL_PATH)
15.183 -
15.184 +ifeq ($(_NEEDS_MSVCRNN), true)
15.185 # MSVCRNN_DLL_PATH: location of msvcrnn.dll that will be re-distributed
15.186 ifdef ALT_MSVCRNN_DLL_PATH
15.187 xALT_MSVCRNN_DLL_PATH :="$(subst \,/,$(ALT_MSVCRNN_DLL_PATH))"
15.188 MSVCRNN_DLL_PATH :=$(call FullPath,$(xALT_MSVCRNN_DLL_PATH))
15.189 else
15.190 - ifeq ($(_REDISTNN_SDK_EXISTS), true)
15.191 - xREDISTNN_DIR :=$(_redist_sdk)
15.192 - else
15.193 - xREDISTNN_DIR :=$(_system_root)/system32
15.194 - endif
15.195 - MSVCRNN_DLL_PATH :=$(call FullPath,$(xREDISTNN_DIR))
15.196 + MSVCRNN_DLL_PATH :=$(_redist_sdk)
15.197 endif
15.198 MSVCRNN_DLL_PATH :=$(call AltCheckSpaces,MSVCRNN_DLL_PATH)
15.199 MSVCRNN_DLL_PATH:=$(call AltCheckValue,MSVCRNN_DLL_PATH)
15.200 -
15.201 -else
15.202 -
15.203 - # MSVCRT_DLL_PATH: location of msvcrt.dll that will be re-distributed
15.204 - ifdef ALT_MSVCRT_DLL_PATH
15.205 - xALT_MSVCRT_DLL_PATH :="$(subst \,/,$(ALT_MSVCRT_DLL_PATH))"
15.206 - MSVCRT_DLL_PATH :=$(call FullPath,$(xALT_MSVCRT_DLL_PATH))
15.207 - else
15.208 - ifeq ($(_REDIST_SDK_EXISTS), true)
15.209 - xREDIST_DIR :=$(_redist_sdk)
15.210 - else
15.211 - xREDIST_DIR :=$(_system_root)/SysWOW64
15.212 - endif
15.213 - MSVCRT_DLL_PATH :=$(call FullPath,$(xREDIST_DIR))
15.214 - endif
15.215 - MSVCRT_DLL_PATH:=$(call AltCheckSpaces,MSVCRT_DLL_PATH)
15.216 - MSVCRT_DLL_PATH:=$(call AltCheckValue,MSVCRT_DLL_PATH)
15.217 -
15.218 endif
15.219
15.220 # DXSDK_PATH: path to Microsoft DirectX SDK Include and Lib
15.221 @@ -539,7 +527,7 @@
15.222 xALT_INSTALL_MSIVAL2 :="$(subst \,/,$(ALT_INSTALL_MSIVAL2))"
15.223 INSTALL_MSIVAL2 :=$(call FullPath,$(xALT_INSTALL_MSIVAL2))
15.224 else
15.225 - INSTALL_MSIVAL2 :=$(_program_files)/MsiVal2
15.226 + INSTALL_MSIVAL2 :=$(_program_files32)/MsiVal2
15.227 endif
15.228 INSTALL_MSIVAL2:=$(call AltCheckSpaces,INSTALL_MSIVAL2)
15.229
16.1 --- a/make/common/shared/Defs.gmk Thu Apr 02 10:16:53 2009 -0700
16.2 +++ b/make/common/shared/Defs.gmk Wed Apr 08 15:40:56 2009 -0700
16.3 @@ -116,9 +116,9 @@
16.4 fi)
16.5 endef
16.6
16.7 -# Given a line of text, get the major.minor version number from it
16.8 +# Given a line of text, get the version number from it
16.9 define GetVersion
16.10 -$(shell echo $1 | sed -e 's@[^1-9]*\([1-9][0-9]*\.[0-9][0-9]*\).*@\1@' )
16.11 +$(shell echo $1 | sed -e 's@[^0-9]*\([0-9][0-9]*\.[0-9][.0-9]*\).*@\1@' )
16.12 endef
16.13
16.14 # Given a major.minor.micro version, return the major, minor, or micro number
16.15 @@ -133,26 +133,26 @@
16.16 endef
16.17
16.18 # Macro that returns missing, same, newer, or older $1=version $2=required
16.19 -# (currently does not check the micro number)
16.20 define CheckVersions
16.21 $(shell \
16.22 if [ "$1" = "" -o "$2" = "" ]; then \
16.23 echo missing; \
16.24 + elif [ "$1" = "$2" ]; then \
16.25 + echo same; \
16.26 + elif [ $(call MajorVersion,$1) -lt $(call MajorVersion,$2) ] ; then \
16.27 + echo older; \
16.28 + elif [ $(call MajorVersion,$1) -gt $(call MajorVersion,$2) ] ; then \
16.29 + echo newer; \
16.30 + elif [ $(call MinorVersion,$1) -lt $(call MinorVersion,$2) ]; then \
16.31 + echo older; \
16.32 + elif [ $(call MinorVersion,$1) -gt $(call MinorVersion,$2) ]; then \
16.33 + echo newer; \
16.34 + elif [ $(call MicroVersion,$1) -lt $(call MicroVersion,$2) ]; then \
16.35 + echo older; \
16.36 + elif [ $(call MicroVersion,$1) -gt $(call MicroVersion,$2) ]; then \
16.37 + echo newer; \
16.38 else \
16.39 - if [ "$1" = "$2" ]; then \
16.40 - echo same; \
16.41 - else \
16.42 - if [ $(call MajorVersion,$1) -lt $(call MajorVersion,$2) ] ; then \
16.43 - echo older; \
16.44 - else \
16.45 - if [ $(call MajorVersion,$1) -eq $(call MajorVersion,$2) -a \
16.46 - $(call MinorVersion,$1) -lt $(call MinorVersion,$2) ]; then \
16.47 - echo older; \
16.48 - else \
16.49 - echo newer; \
16.50 - fi; \
16.51 - fi; \
16.52 - fi; \
16.53 + echo same; \
16.54 fi)
16.55 endef
16.56
16.57 @@ -558,6 +558,24 @@
16.58 COPYRIGHT_YEAR = $(shell $(DATE) '+%Y')
16.59 endif
16.60
16.61 -# Get shared compiler settings
16.62 -include $(JDK_MAKE_SHARED_DIR)/Compiler.gmk
16.63 +# Windows uses Microsoft compilers by default
16.64 +ifeq ($(PLATFORM), windows)
16.65 + override CC_VERSION = msvc
16.66 +endif
16.67
16.68 +# Solaris uses Sun Studio compilers by default
16.69 +ifeq ($(PLATFORM), solaris)
16.70 + override CC_VERSION = sun
16.71 +endif
16.72 +
16.73 +# Linux uses GNU compilers by default
16.74 +ifeq ($(PLATFORM), linux)
16.75 + override CC_VERSION = gcc
16.76 +endif
16.77 +
16.78 +# Get the REQUIRED versions (needs CC_VERSION set)
16.79 +include $(JDK_MAKE_SHARED_DIR)/Defs-versions.gmk
16.80 +
16.81 +# Get the compiler specific settings
16.82 +include $(JDK_MAKE_SHARED_DIR)/Compiler-$(CC_VERSION).gmk
16.83 +
17.1 --- a/make/common/shared/Platform.gmk Thu Apr 02 10:16:53 2009 -0700
17.2 +++ b/make/common/shared/Platform.gmk Wed Apr 08 15:40:56 2009 -0700
17.3 @@ -51,9 +51,6 @@
17.4 # USER login name of user (minus blanks)
17.5 # PLATFORM windows, solaris, or linux
17.6 # VARIANT OPT or DBG, OPT is the default
17.7 -# OS_NAME solaris, linux, or nt
17.8 -# OS_VERSION specific version of os, 5.10, 2.4.9-e.3, etc.
17.9 -# OS_VENDOR company name
17.10 # TEMP_DISK /tmp or C:/temp
17.11 # ARCH_DATA_MODEL 32 or 64
17.12 # ARCH sparc, sparcv9, i586, amd64, or ia64
17.13 @@ -72,29 +69,11 @@
17.14 # ISA_DIR solaris only: /sparcv9 or /amd64
17.15 # LIBARCH32 solaris only: sparc or i386
17.16 # LIBARCH64 solaris only: sparcv9 or amd64
17.17 -# REQUIRED_WINDOWS_VERSION windows only: specific version of windows
17.18 # USING_CYGWIN windows only: true or false
17.19 -# WINDOWS_NT_VERSION_STRING windows only: long version name
17.20 -# REQUIRED_OS_VERSION required OS version, e.g. 5.10, 2.4
17.21 -# REQUIRED_FREE_SPACE minimum disk space needed for outputdir
17.22 # ISHIELD_TEMP_MIN windows only: minimum disk space in temp area
17.23 -# REQUIRED_ZIP_VER required version of zip
17.24 -# REQUIRED_UNZIP_VER required version of unzip
17.25 -# REQUIRED_DXSDK_VER windows only: required version of DirectX
17.26 -# LINUX_VERSION_INFO linux only: location of linux release file
17.27 -# REQUIRED_LINUX_VER linux only: required version of linux
17.28 -# REQUIRED_LINUX_FULLVER linux only: required full version of linux
17.29 -# REQUIRED_ALSA_VERSION linux only: required version of ALSA
17.30 -# REQUIRED_FREETYPE_VERSION openjdk only: required version of freetype
17.31
17.32 SYSTEM_UNAME := $(shell uname)
17.33
17.34 -# Normal boot jdk is previous release, but a hard requirement is a 1.5 boot
17.35 -REQUIRED_BOOT_VER = 1.5
17.36 -
17.37 -# If we are using freetype, this is the required version
17.38 -REQUIRED_FREETYPE_VERSION=2.3.0
17.39 -
17.40 #
17.41 # Prune out all known SCM (Source Code Management) directories
17.42 # so they will not be included when copying directory trees
17.43 @@ -113,8 +92,6 @@
17.44 # Platform settings specific to Solaris
17.45 ifeq ($(SYSTEM_UNAME), SunOS)
17.46 PLATFORM = solaris
17.47 - OS_NAME = solaris
17.48 - OS_VERSION := $(shell uname -r)
17.49 # Solaris sparc build can be either 32-bit or 64-bit.
17.50 # Default to 32, but allow explicit setting to 32 or 64.
17.51 ifndef ARCH_DATA_MODEL
17.52 @@ -166,16 +143,6 @@
17.53 endif
17.54 # Suffix for file bundles used in previous release
17.55 BUNDLE_FILE_SUFFIX=.tar
17.56 - OS_VENDOR = Sun Microsystems
17.57 - # Required Solaris version
17.58 - REQUIRED_OS_VERSION = 5.10
17.59 - # Minimum disk space needed as determined by running 'du -sk' on
17.60 - # a fully built workspace.
17.61 - ifeq ($(ARCH_FAMILY), sparc)
17.62 - REQUIRED_FREE_SPACE=1300000
17.63 - else
17.64 - REQUIRED_FREE_SPACE=1040000
17.65 - endif
17.66 # How much RAM does this machine have:
17.67 MB_OF_MEMORY=$(shell /etc/prtconf | fgrep 'Memory size:' | expand | cut -d' ' -f3)
17.68 endif
17.69 @@ -183,8 +150,6 @@
17.70 # Platform settings specific to Linux
17.71 ifeq ($(SYSTEM_UNAME), Linux)
17.72 PLATFORM = linux
17.73 - OS_NAME = linux
17.74 - OS_VERSION := $(shell uname -r)
17.75 # Arch and OS name/version
17.76 mach := $(shell uname -m)
17.77 archExpr = case "$(mach)" in \
17.78 @@ -242,32 +207,6 @@
17.79
17.80 # Suffix for file bundles used in previous release
17.81 BUNDLE_FILE_SUFFIX=.tar.gz
17.82 - # Minimum disk space needed as determined by running 'du -sk' on
17.83 - # a fully built workspace.
17.84 - REQUIRED_FREE_SPACE=1460000
17.85 - LINUX_VERSION_INFO = /etc/redhat-release
17.86 - OS_VENDOR = Red Hat
17.87 - ifeq ($(ARCH_DATA_MODEL), 32)
17.88 - REQUIRED_LINUX_VER = Advanced Server
17.89 - REQUIRED_LINUX_FULLVER = Advanced Server release 2.1AS
17.90 - REQUIRED_OS_VERSION = 2.4.9-e.3
17.91 - else
17.92 - ifeq ($(ARCH), amd64)
17.93 - LINUX_VERSION_INFO = /etc/SuSE-release
17.94 - OS_VENDOR = SuSE Enterprise
17.95 - REQUIRED_LINUX_VER = 8.1
17.96 - REQUIRED_LINUX_FULLVER = $(REQUIRED_LINUX_VER) SLSE AMD64
17.97 - REQUIRED_OS_VERSION = 2.4.19-SMP
17.98 - else
17.99 - REQUIRED_LINUX_VER = Advanced Server
17.100 - REQUIRED_LINUX_FULLVER = Advanced Server release 2.1AS 64 bit
17.101 - REQUIRED_OS_VERSION = 2.4.19-SMP
17.102 - endif
17.103 - endif
17.104 - ifneq ($(ARCH), ia64)
17.105 - # ALSA 0.9.1 and above
17.106 - REQUIRED_ALSA_VERSION = ^((0[.]9[.][1-9])|(1[.]0[.][0-9]))[0-9]*
17.107 - endif
17.108 # How much RAM does this machine have:
17.109 MB_OF_MEMORY := $(shell free -m | fgrep Mem: | awk '{print $$2;}' )
17.110 endif
17.111 @@ -275,34 +214,34 @@
17.112 # Windows with and without CYGWIN will be slightly different
17.113 ifeq ($(SYSTEM_UNAME), Windows_NT)
17.114 PLATFORM = windows
17.115 - OS_VERSION := $(shell uname -r)
17.116 - WINDOWS_NT_VERSION_STRING=Windows_NT
17.117 - REQUIRED_MKS_VER=6.1
17.118 endif
17.119 ifneq (,$(findstring CYGWIN,$(SYSTEM_UNAME)))
17.120 PLATFORM = windows
17.121 - OS_VERSION := 5
17.122 USING_CYGWIN = true
17.123 export USING_CYGWIN
17.124 - WINDOWS_NT_VERSION_STRING=CYGWIN_NT
17.125 - REQUIRED_CYGWIN_VER=4.0
17.126 endif
17.127
17.128 # Platform settings specific to Windows
17.129 ifeq ($(PLATFORM), windows)
17.130 - OS_NAME = nt
17.131 - REQUIRED_OS_VERSION=5
17.132 # Windows builds default to the appropriate for the underlaying
17.133 # architecture.
17.134 # Temporary disk area
17.135 TEMP_DISK=C:/temp
17.136 # GNU Make or MKS overrides $(PROCESSOR_ARCHITECTURE) to always
17.137 # return "x86". Use the first word of $(PROCESSOR_IDENTIFIER) instead.
17.138 + PROC_ARCH:=$(word 1, $(PROCESSOR_IDENTIFIER))
17.139 + PROC_ARCH:=$(subst x86,X86,$(PROC_ARCH))
17.140 + PROC_ARCH:=$(subst Intel64,X64,$(PROC_ARCH))
17.141 + PROC_ARCH:=$(subst em64t,X64,$(PROC_ARCH))
17.142 + PROC_ARCH:=$(subst EM64T,X64,$(PROC_ARCH))
17.143 + PROC_ARCH:=$(subst amd64,X64,$(PROC_ARCH))
17.144 + PROC_ARCH:=$(subst AMD64,X64,$(PROC_ARCH))
17.145 + PROC_ARCH:=$(subst ia64,IA64,$(PROC_ARCH))
17.146 ifndef ARCH_DATA_MODEL
17.147 - ifeq ($(word 1, $(PROCESSOR_IDENTIFIER)),ia64)
17.148 + ifeq ($(PROC_ARCH),IA64)
17.149 ARCH_DATA_MODEL=64
17.150 else
17.151 - ifeq ($(word 1, $(PROCESSOR_IDENTIFIER)),AMD64)
17.152 + ifeq ($(PROC_ARCH),X64)
17.153 ARCH_DATA_MODEL=64
17.154 else
17.155 ARCH_DATA_MODEL=32
17.156 @@ -314,18 +253,17 @@
17.157 # If the user wants to perform a cross compile build then they must
17.158 # - set ARCH_DATA_MODEL=64 and either
17.159 # + set ARCH to ia64 or amd64, or
17.160 - REQUIRED_WINDOWS_VERSION=Server 2003 Enterprise x64 Edition
17.161 - ifeq ($(word 1, $(PROCESSOR_IDENTIFIER)), AMD64)
17.162 + ifeq ($(PROC_ARCH),X64)
17.163 ARCH=amd64
17.164 else
17.165 - ARCH=ia64
17.166 + ifeq ($(PROC_ARCH),IA64)
17.167 + ARCH=ia64
17.168 + endif
17.169 endif
17.170 LIBARCH=$(ARCH)
17.171 # Value of Java os.arch property
17.172 ARCHPROP=$(LIBARCH)
17.173 else
17.174 - REQUIRED_WINDOWS_VERSION=2000 or Unknown
17.175 - #REQUIRED_WINDOWS_VERSION=XP Professional
17.176 # LIBARCH is used to preserve the jre/lib/i386 directory name for 32-bit intel
17.177 ARCH=i586
17.178 LIBARCH=i386
17.179 @@ -364,14 +302,9 @@
17.180 ARCH_VM_SUBDIR=jre/bin
17.181 # Suffix for file bundles used in previous release
17.182 BUNDLE_FILE_SUFFIX=.tar
17.183 - # Minimum disk space needed as determined by running 'du -sk' on
17.184 - # a fully built workspace.
17.185 - REQUIRED_FREE_SPACE=500000
17.186 # ISHIELD_TEMP_MIN is the difference of an empty C:\TEMP vs. one after a
17.187 # bundles build on windows.
17.188 ISHIELD_TEMP_MIN=250000
17.189 - REQUIRED_DXSDK_VER = 0x0900
17.190 - OS_VENDOR = Microsoft
17.191 # How much RAM does this machine have:
17.192 ifeq ($(JDK_HAS_MEM_INFO),)
17.193 ifeq ($(USING_CYGWIN),true)
17.194 @@ -410,10 +343,6 @@
17.195 endif
17.196 endif
17.197
17.198 -REQUIRED_ZIP_VER = 2.2
17.199 -REQUIRED_UNZIP_VER = 5.12
17.200 -REQUIRED_MAKE_VER = 3.78
17.201 -
17.202 # Unix type settings (same for all unix platforms)
17.203 ifneq ($(PLATFORM), windows)
17.204 # Temporary disk area
18.1 --- a/make/common/shared/Sanity-Settings.gmk Thu Apr 02 10:16:53 2009 -0700
18.2 +++ b/make/common/shared/Sanity-Settings.gmk Wed Apr 08 15:40:56 2009 -0700
18.3 @@ -97,7 +97,7 @@
18.4 endif
18.5 ifeq ($(PLATFORM),windows)
18.6 ALL_SETTINGS+=$(call addAltSetting,MSVCRT_DLL_PATH)
18.7 - ifeq ($(ARCH_DATA_MODEL), 32)
18.8 + ifneq ($(MSVCRNN_DLL),)
18.9 ALL_SETTINGS+=$(call addAltSetting,MSVCRNN_DLL_PATH)
18.10 endif
18.11 ALL_SETTINGS+=$(call addAltSetting,MSDEVTOOLS_PATH)
18.12 @@ -167,8 +167,6 @@
18.13 ifeq ($(PLATFORM),windows)
18.14 ALL_SETTINGS+=$(call addRequiredSetting,PROCESSOR_ARCHITECTURE)
18.15 ALL_SETTINGS+=$(call addRequiredSetting,PROCESSOR_IDENTIFIER)
18.16 - ALL_SETTINGS+=$(call addRequiredSetting,WINDOWS_VERSION)
18.17 - ALL_SETTINGS+=$(call addRequiredSetting,WINDOWS_NT_VERSION_STRING)
18.18 ifdef USING_CYGWIN
18.19 ALL_SETTINGS+=$(call addRequiredSetting,USING_CYGWIN)
18.20 ALL_SETTINGS+=$(call addRequiredVersionSetting,CYGWIN_VER)
18.21 @@ -179,13 +177,11 @@
18.22 endif
18.23 endif
18.24 ifeq ($(PLATFORM),linux)
18.25 - ALL_SETTINGS+=$(call addRequiredSetting,LINUX_VERSION)
18.26 - ifneq ($(ARCH), ia64)
18.27 - ALL_SETTINGS+=$(call addRequiredSetting,ALSA_VERSION)
18.28 - endif
18.29 + ALL_SETTINGS+=$(call addRequiredSetting,ALSA_VERSION)
18.30 endif
18.31 ALL_SETTINGS+=$(call addRequiredVersionSetting,OS_VERSION)
18.32 -ALL_SETTINGS+=$(call addRequiredSetting,OS_NAME)
18.33 +ALL_SETTINGS+=$(call addOptionalSetting,OS_VARIANT_NAME)
18.34 +ALL_SETTINGS+=$(call addOptionalSetting,OS_VARIANT_VERSION)
18.35 ALL_SETTINGS+=$(call addRequiredSetting,TEMP_FREE_SPACE)
18.36 ALL_SETTINGS+=$(call addRequiredSetting,FREE_SPACE)
18.37 ALL_SETTINGS+=$(call addRequiredSetting,MB_OF_MEMORY)
18.38 @@ -249,6 +245,7 @@
18.39 ALL_SETTINGS+=$(call addAltSetting,FREETYPE_HEADERS_PATH)
18.40 ALL_SETTINGS+=$(call addAltSetting,FREETYPE_LIB_PATH)
18.41 ALL_SETTINGS+=$(call addHeading,OPENJDK Import Binary Plug Settings)
18.42 + ALL_SETTINGS+=$(call addOptionalSetting,IMPORT_BINARY_PLUGS)
18.43 ALL_SETTINGS+=$(call addAltSetting,BINARY_PLUGS_JARFILE)
18.44 ALL_SETTINGS+=$(call addAltSetting,BINARY_PLUGS_PATH)
18.45 ALL_SETTINGS+=$(call addAltSetting,BUILD_BINARY_PLUGS_PATH)
19.1 --- a/make/common/shared/Sanity.gmk Thu Apr 02 10:16:53 2009 -0700
19.2 +++ b/make/common/shared/Sanity.gmk Wed Apr 08 15:40:56 2009 -0700
19.3 @@ -38,60 +38,106 @@
19.4 SANITY_FILES = $(ERROR_FILE) $(WARNING_FILE) $(MESSAGE_FILE)
19.5
19.6 # How to say "The Release Engineering people use this"
19.7 -THE_OFFICIAL_USES=The official $(PLATFORM) builds use
19.8 +THE_OFFICIAL_USES=The official builds on $(PLATFORM) use
19.9
19.10 # How to say "You are using:"
19.11 YOU_ARE_USING=You appear to be using
19.12
19.13 +# Error message
19.14 +define SanityError
19.15 +$(ECHO) "ERROR: $1\n" >> $(ERROR_FILE)
19.16 +endef
19.17 +
19.18 +# Warning message
19.19 +define SanityWarning
19.20 +$(ECHO) "WARNING: $1\n" >> $(WARNING_FILE)
19.21 +endef
19.22 +
19.23 +# Official version error message: name version required_version
19.24 +define OfficialErrorMessage
19.25 +$(call SanityError,\
19.26 +$(THE_OFFICIAL_USES) $1 $3. Your $1 $(if $2,undefined,$2) will not work.)
19.27 +endef
19.28 +
19.29 +# Official version warning message: name version required_version
19.30 +define OfficialWarningMessage
19.31 +$(call SanityWarning,\
19.32 +$(THE_OFFICIAL_USES) $1 $3. $(YOU_ARE_USING) $1 $2.)
19.33 +endef
19.34 +
19.35 +
19.36 # Settings and rules to validate the JDK build environment.
19.37
19.38 ifeq ($(PLATFORM), solaris)
19.39 FREE_SPACE := $(shell $(DF) -b $(OUTPUTDIR) | $(TAIL) -1 | $(NAWK) '{print $$2;}')
19.40 TEMP_FREE_SPACE := $(shell $(DF) -b $(TEMP_DISK) | $(TAIL) -1 | $(NAWK) '{print $$2;}')
19.41 + # What kind of system we are using (Variations are Solaris and OpenSolaris)
19.42 + OS_VERSION := $(shell uname -r)
19.43 + OS_VARIANT_NAME := $(strip $(shell head -1 /etc/release | awk '{print $$1;}') )
19.44 + OS_VARIANT_VERSION := $(OS_VERSION)
19.45 REQ_PATCH_LIST = $(JDK_TOPDIR)/make/PatchList.solaris
19.46 ifeq ($(ARCH_FAMILY), sparc)
19.47 PATCH_POSITION = $$4
19.48 else
19.49 PATCH_POSITION = $$6
19.50 endif
19.51 + ifndef OPENJDK
19.52 + _GCC_VER :=$(shell $(GCC) -dumpversion 2>&1 )
19.53 + GCC_VER :=$(call GetVersion,"$(_GCC_VER)")
19.54 + endif
19.55 endif
19.56
19.57 ifeq ($(PLATFORM), linux)
19.58 FREE_SPACE := $(shell $(DF) --sync -kP $(OUTPUTDIR) | $(TAIL) -1 | $(NAWK) '{print $$4;}')
19.59 TEMP_FREE_SPACE := $(shell $(DF) --sync -kP $(TEMP_DISK) | $(TAIL) -1 | $(NAWK) '{print $$4;}')
19.60 - ifeq ($(ARCH), amd64)
19.61 - LINUX_VERSION := $(shell \
19.62 - if [ -r "$(LINUX_VERSION_INFO)" ] ; then \
19.63 - $(CAT) $(LINUX_VERSION_INFO) | $(TAIL) -1 | $(NAWK) '{ print $$3; }';\
19.64 - else \
19.65 - $(ECHO) "Unknown linux"; \
19.66 - fi )
19.67 - else
19.68 - LINUX_VERSION := $(shell \
19.69 - if [ -r "$(LINUX_VERSION_INFO)" ] ; then \
19.70 - $(NAWK) '{ print $$4" "$$5; }' $(LINUX_VERSION_INFO) ; \
19.71 - else \
19.72 - $(ECHO) "Unknown linux"; \
19.73 - fi )
19.74 - endif
19.75 - ifneq ($(ARCH), ia64)
19.76 - # dummy program that outputs ALSA's version (created in target sane-alsa-versioncheck)
19.77 - ALSA_VERSION_CHECK = $(TEMPDIR)/alsaversioncheck
19.78 - ALSA_VERSION = `if [ -f "$(ALSA_VERSION_CHECK)" ] ; then $(ALSA_VERSION_CHECK) ; fi`
19.79 - endif
19.80 + # What kind of system we are using (Variation is the Linux vendor)
19.81 + OS_VERSION := $(shell uname -r)
19.82 + OS_VARIANT_NAME := $(shell \
19.83 + if [ -f /etc/fedora-release ] ; then \
19.84 + echo "Fedora"; \
19.85 + elif [ -f /etc/redhat-release ] ; then \
19.86 + echo "RedHat"; \
19.87 + elif [ -f /etc/SuSE-release ] ; then \
19.88 + echo "SuSE"; \
19.89 + else \
19.90 + echo "Unknown"; \
19.91 + fi)
19.92 + OS_VARIANT_VERSION := $(shell \
19.93 + if [ "$(OS_VARIANT_NAME)" = "Fedora" ] ; then \
19.94 + $(CAT) /etc/fedora-release | $(HEAD) -1 | $(NAWK) '{ print $$3; }' ; \
19.95 + fi)
19.96 + ALSA_INCLUDE=/usr/include/alsa/version.h
19.97 + ALSA_LIBRARY=/usr/lib/libasound.so
19.98 + _ALSA_VERSION := $(shell $(EGREP) SND_LIB_VERSION_STR $(ALSA_INCLUDE) | \
19.99 + $(SED) -e 's@.*\"\(.*\)\".*@\1@' )
19.100 + ALSA_VERSION := $(call GetVersion,$(_ALSA_VERSION))
19.101 endif
19.102
19.103 ifeq ($(PLATFORM), windows)
19.104 FREE_SPACE := $(shell $(DF) -kP $(OUTPUTDIR) | $(TAIL) -1 | $(NAWK) '{print $$4;}')
19.105 TEMP_FREE_SPACE := $(shell $(DF) -kP $(TEMP_DISK) | $(TAIL) -1 | $(NAWK) '{print $$4;}')
19.106 - # Localized systeminfo has localized labels, but not localized values.
19.107 - _WINDOWS_VERSION := \
19.108 - $(shell systeminfo 2> $(DEV_NULL) | grep 'Microsoft' | grep 'Windows' | \
19.109 - cut -d':' -f2)
19.110 - ifeq ($(_WINDOWS_VERSION),)
19.111 - _WINDOWS_VERSION := Windows 2000 or Unknown (no systeminfo utility)
19.112 + # Windows 2000 is 5.0, Windows XP is 5.1, Windows 2003 is 5.2
19.113 + # Assume 5.0 (Windows 2000) if systeminfo does not help
19.114 + WINDOWS_MAPPING-5.0 := Windows2000
19.115 + WINDOWS_MAPPING-5.1 := WindowsXP
19.116 + WINDOWS_MAPPING-5.2 := Windows2003
19.117 + # What kind of system we are using (Variation is the common name)
19.118 + _OS_VERSION := \
19.119 + $(shell systeminfo 2> $(DEV_NULL) | \
19.120 + egrep '^OS Version:' | \
19.121 + awk '{print $$3;}' )
19.122 + ifeq ($(_OS_VERSION),)
19.123 + OS_VERSION = 5.0
19.124 + else
19.125 + OS_VERSION = $(call MajorVersion,$(_OS_VERSION)).$(call MinorVersion,$(_OS_VERSION))
19.126 endif
19.127 - WINDOWS_VERSION := $(strip $(_WINDOWS_VERSION))
19.128 + OS_VARIANT_NAME := $(WINDOWS_MAPPING-$(OS_VERSION))
19.129 + OS_VARIANT_VERSION := $(OS_VERSION)
19.130 + ifdef USING_CYGWIN
19.131 + # CYGWIN version
19.132 + _CYGWIN_VER := $(SYSTEM_UNAME)
19.133 + CYGWIN_VER :=$(call GetVersion,$(_CYGWIN_VER))
19.134 + endif
19.135 DXSDK_VER := $(shell $(EGREP) DIRECT3D_VERSION $(DXSDK_INCLUDE_PATH)/d3d9.h 2>&1 | \
19.136 $(EGREP) "\#define" | $(NAWK) '{print $$3}')
19.137 endif
19.138 @@ -106,7 +152,6 @@
19.139 UNZIP_VER :=$(call GetVersion,"$(_UNZIP_VER)")
19.140 BOOT_VER :=$(call GetVersion,"$(_BOOT_VER)")
19.141
19.142 -REQUIRED_ANT_VER := 1.6.3
19.143 _ANT_VER:=$(shell $(ANT) -version 2>&1 )
19.144 ANT_VER:=$(call GetVersion,"$(_ANT_VER)")
19.145
19.146 @@ -167,7 +212,6 @@
19.147 sane-compiler \
19.148 sane-link \
19.149 sane-cacerts \
19.150 - sane-alsa-versioncheck \
19.151 sane-alsa-headers \
19.152 sane-ant_version \
19.153 sane-zip_version \
19.154 @@ -239,35 +283,29 @@
19.155 # generate a fatal sanity error, and a warning about the official
19.156 # build platform just becomes clutter.
19.157 ######################################################
19.158 -OS_CHECK :=$(call CheckVersions,$(OS_VERSION),$(REQUIRED_OS_VERSION))
19.159 +ifndef OPENJDK
19.160 + OS_VERSION_CHECK := \
19.161 + $(call CheckVersions,$(OS_VERSION),$(REQUIRED_OS_VERSION))
19.162 + ifeq ($(OS_VARIANT_NAME),$(REQUIRED_OS_VARIANT_NAME))
19.163 + OS_VARIANT_VERSION_CHECK := \
19.164 + $(call CheckVersions,$(OS_VARIANT_VERSION),$(REQUIRED_OS_VARIANT_VERSION))
19.165 + endif
19.166 +endif
19.167 sane-os_version:: sane-arch_data_model sane-memory_check sane-locale sane-os_patch_level
19.168 ifndef OPENJDK
19.169 - @if [ "$(OS_CHECK)" = "missing" ]; then \
19.170 - $(ECHO) "ERROR: The $(PLATFORM) OS version is undefined (Try: uname -r). \n" \
19.171 - "" >> $(ERROR_FILE) ; \
19.172 - fi
19.173 - @if [ "$(OS_CHECK)" != "same" ]; then \
19.174 - $(ECHO) "WARNING: $(THE_OFFICIAL_USES) OS version $(REQUIRED_OS_VERSION). \n" \
19.175 - " $(YOU_ARE_USING) OS version $(OS_VERSION). \n" \
19.176 - "" >> $(WARNING_FILE) ; \
19.177 - fi
19.178 - ifeq ($(PLATFORM), windows)
19.179 - @if [ "$(findstring $(REQUIRED_WINDOWS_VERSION),$(WINDOWS_VERSION))" = "" ]; then \
19.180 - $(ECHO) "WARNING: $(YOU_ARE_USING) an unknown version of Windows. \n" \
19.181 - " The required version is $(REQUIRED_WINDOWS_VERSION). \n" \
19.182 - " $(YOU_ARE_USING) $(WINDOWS_VERSION) \n" \
19.183 - "" >> $(WARNING_FILE) ; \
19.184 - fi
19.185 - endif # windows
19.186 - ifeq ($(PLATFORM), linux)
19.187 - @if [ `$(ECHO) "$(LINUX_VERSION)" | $(EGREP) -c '$(REQUIRED_LINUX_VER)'` -ne 1 ]; then \
19.188 - $(ECHO) "WARNING: The build is being done on Linux $(LINUX_VERSION). \n" \
19.189 - " $(THE_OFFICIAL_USES) Linux $(REQUIRED_LINUX_VER), \n" \
19.190 - " specifically Linux $(REQUIRED_LINUX_FULLVER). \n" \
19.191 - " The version found was '$(OS_VERSION)'. \n" \
19.192 - "" >> $(WARNING_FILE) ; \
19.193 - fi
19.194 - endif # linux
19.195 + ifneq ($(OS_VARIANT_NAME),$(REQUIRED_OS_VARIANT_NAME))
19.196 + ifeq ($(OS_VERSION_CHECK),missing)
19.197 + @$(call OfficialErrorMessage,OS version,$(OS_VERSION),$(REQUIRED_OS_VERSION))
19.198 + endif
19.199 + ifneq ($(OS_VERSION_CHECK),same)
19.200 + @$(call OfficialWarningMessage,OS version,$(OS_VERSION),$(REQUIRED_OS_VERSION))
19.201 + endif
19.202 + @$(call OfficialWarningMessage,OS variant,$(OS_VARIANT_NAME),$(REQUIRED_OS_VARIANT_NAME))
19.203 + else
19.204 + ifneq ($(OS_VARIANT_VERSION_CHECK),same)
19.205 + @$(call OfficialWarningMessage,$(OS_VARIANT_NAME) version,$(OS_VARIANT_VERSION),$(REQUIRED_OS_VARIANT_VERSION))
19.206 + endif
19.207 + endif
19.208 endif # OPENJDK
19.209
19.210 ifeq ($(PLATFORM), windows)
19.211 @@ -308,16 +346,12 @@
19.212 CYGWIN_CHECK :=$(call CheckVersions,$(CYGWIN_VER),$(REQUIRED_CYGWIN_VER))
19.213 sane-cygwin:
19.214 ifdef USING_CYGWIN
19.215 - @if [ "$(CYGWIN_CHECK)" = "missing" ]; then \
19.216 - $(ECHO) "ERROR: The CYGWIN version is undefined. \n" \
19.217 - " $(THE_OFFICIAL_USES) CYGWIN $(REQUIRED_CYGWIN_VER). \n" \
19.218 - "" >> $(ERROR_FILE) ; \
19.219 - fi
19.220 - @if [ "$(CYGWIN_CHECK)" = "older" ]; then \
19.221 - $(ECHO) "ERROR: The build cannot be done on CYGWIN $(CYGWIN_VER). \n" \
19.222 - " Use CYGWIN $(REQUIRED_CYGWIN_VER) or higher. \n" \
19.223 - "" >> $(ERROR_FILE) ; \
19.224 - fi
19.225 + ifeq ($(CYGWIN_CHECK),missing)
19.226 + @$(call OfficialErrorMessage,CYGWIN version,$(CYGWIN_VER),$(REQUIRED_CYGWIN_VER))
19.227 + endif
19.228 + ifeq ($(CYGWIN_CHECK),older)
19.229 + @$(call OfficialWarningMessage,CYGWIN version,$(CYGWIN_VER),$(REQUIRED_CYGWIN_VER))
19.230 + endif
19.231 endif
19.232 endif
19.233
19.234 @@ -345,16 +379,12 @@
19.235 MKS_CHECK :=$(call CheckVersions,$(MKS_VER),$(REQUIRED_MKS_VER))
19.236 sane-mks:
19.237 ifndef USING_CYGWIN
19.238 - @if [ "$(MKS_CHECK)" = "missing" ]; then \
19.239 - $(ECHO) "ERROR: The MKS version is undefined. \n" \
19.240 - " $(THE_OFFICIAL_USES) MKS $(REQUIRED_MKS_VER). \n" \
19.241 - "" >> $(ERROR_FILE) ; \
19.242 - fi
19.243 - @if [ "$(MKS_CHECK)" = "older" ]; then \
19.244 - $(ECHO) "ERROR: The build cannot be done on MKS $(MKS_VER). \n" \
19.245 - " Use MKS $(REQUIRED_MKS_VER) or higher. \n" \
19.246 - "" >> $(ERROR_FILE) ; \
19.247 - fi
19.248 + ifeq ($(MKS_CHECK),missing)
19.249 + @$(call OfficialErrorMessage,MKS version,$(MKS_VER),$(REQUIRED_MKS_VER))
19.250 + endif
19.251 + ifeq ($(MKS_CHECK),older)
19.252 + @$(call OfficialErrorMessage,MKS version,$(MKS_VER),$(REQUIRED_MKS_VER))
19.253 + endif
19.254 endif
19.255 endif
19.256
19.257 @@ -472,13 +502,15 @@
19.258 ######################################################
19.259 ifdef OPENJDK
19.260 sane-binary-plugs:
19.261 + ifeq ($(IMPORT_BINARY_PLUGS),true)
19.262 @if [ ! -d "$(BINARY_PLUGS_PATH)" ]; then \
19.263 - $(ECHO) "ERROR: Can't locate pre-built libraries. \n" \
19.264 + $(ECHO) "WARNING: Can't locate pre-built libraries. \n" \
19.265 " Please check your access to \n" \
19.266 " $(BINARY_PLUGS_PATH) \n" \
19.267 " and/or check your value of ALT_BINARY_PLUGS_PATH. \n" \
19.268 - "" >> $(ERROR_FILE); \
19.269 + "" >> $(WARNING_FILE); \
19.270 fi
19.271 + endif
19.272 endif
19.273
19.274 ######################################################
19.275 @@ -834,7 +866,7 @@
19.276 " and/or check your value of ALT_MSVCRT_DLL_PATH. \n" \
19.277 "" >> $(ERROR_FILE) ; \
19.278 fi
19.279 - ifeq ($(ARCH_DATA_MODEL), 32)
19.280 + ifneq ($(MSVCRNN_DLL),)
19.281 @if [ ! -r "$(MSVCRNN_DLL_PATH)/$(MSVCRNN_DLL)" ]; then \
19.282 $(ECHO) "ERROR: You do not have access to $(MSVCRNN_DLL). \n" \
19.283 " Please check your access to \n" \
19.284 @@ -1284,8 +1316,8 @@
19.285 fi
19.286 @if [ "$(LINK_CHECK)" != "same" ]; then \
19.287 $(ECHO) "WARNING: To build Java 2 SDK $(JDK_VERSION) you need : \n" \
19.288 - " $(COMPILER_VERSION) - link.exe version \"$(REQUIRED_LINK_VER)\" \n" \
19.289 - " Specifically the $(COMPILER_NAME) link.exe. \n " \
19.290 + " $(REQUIRED_COMPILER_VERSION) - link.exe version \"$(REQUIRED_LINK_VER)\" \n" \
19.291 + " Specifically the $(REQUIRED_COMPILER_NAME) link.exe. \n " \
19.292 " $(YOU_ARE_USING) Linker version \"$(LINK_VER)\" \n" \
19.293 "" >> $(WARNING_FILE) ; \
19.294 fi
19.295 @@ -1295,11 +1327,6 @@
19.296 # Check the compiler version(s)
19.297 ######################################################
19.298 CC_CHECK :=$(call CheckVersions,$(CC_VER),$(REQUIRED_CC_VER))
19.299 -ifeq ($(PLATFORM), solaris)
19.300 - ifeq ($(ARCH_DATA_MODEL), 32)
19.301 - GCC_CHECK :=$(call CheckVersions,$(GCC_VER),$(REQUIRED_GCC_VER))
19.302 - endif
19.303 -endif
19.304 sane-compiler: sane-link
19.305 @if [ "$(CC_CHECK)" = "missing" ]; then \
19.306 $(ECHO) "ERROR: The Compiler version is undefined. \n" \
19.307 @@ -1307,69 +1334,36 @@
19.308 fi
19.309 ifndef OPENJDK
19.310 @if [ "$(CC_CHECK)" != "same" ]; then \
19.311 - $(ECHO) "WARNING: The $(PLATFORM) compiler is not version $(COMPILER_VERSION) $(REQUIRED_CC_VER) \n" \
19.312 - " Specifically the $(COMPILER_NAME) compiler. \n " \
19.313 - " $(YOU_ARE_USING) compiler version: $(CC_VER) \n" \
19.314 + $(ECHO) "WARNING: The $(PLATFORM) compiler is not version $(REQUIRED_COMPILER_VERSION) $(REQUIRED_CC_VER) \n" \
19.315 + " Specifically the $(REQUIRED_COMPILER_NAME) compiler. \n " \
19.316 + " $(YOU_ARE_USING) $(COMPILER_VERSION): $(CC_VER) \n" \
19.317 " The compiler was obtained from the following location: \n" \
19.318 " $(COMPILER_PATH) \n" \
19.319 "" >> $(WARNING_FILE) ; \
19.320 fi
19.321 - ifdef GCC_CHECK
19.322 - @if [ "$(GCC_CHECK)" != "same" ]; then \
19.323 - $(ECHO) "WARNING: The $(PLATFORM) GCC compiler must be version $(REQUIRED_GCC_VER) \n" \
19.324 - " $(YOU_ARE_USING) compiler version: $(GCC_VER) \n" \
19.325 - " The compiler was obtained from the following location: \n" \
19.326 - " $(GCC_COMPILER_PATH) \n" \
19.327 - " Please change your compiler. \n" \
19.328 - "" >> $(WARNING_FILE) ; \
19.329 - fi
19.330 - endif
19.331 - ifeq ($(PLATFORM), windows)
19.332 - ifeq ($(ARCH_DATA_MODEL), 64)
19.333 - ifneq ($(COMPILER_VERSION), VS2005)
19.334 - @$(ECHO) "WARNING: Should be using VS2005 compiler on 64bit platform. \n" \
19.335 - "" >> $(WARNING_FILE)
19.336 - endif
19.337 - endif
19.338 - endif
19.339 endif
19.340
19.341 ######################################################
19.342 # Check that ALSA headers and libs are installed and
19.343 # that the header has the right version. We only
19.344 -# need /usr/include/alsa/*.h and /usr/lib/libasound.so
19.345 +# need /usr/include/alsa/version.h and /usr/lib/libasound.so
19.346 ######################################################
19.347
19.348 -ifdef ALSA_VERSION_CHECK
19.349 -$(ALSA_VERSION_CHECK): $(ALSA_VERSION_CHECK).c
19.350 - @$(prep-target)
19.351 - @$(CC) -lasound -o $@ $<
19.352 -
19.353 -$(ALSA_VERSION_CHECK).c:
19.354 - @$(prep-target)
19.355 - @$(ECHO) "#include <alsa/asoundlib.h>\n" \
19.356 - "#include <stdio.h>\n" \
19.357 - "int main(int argc, char** argv) {\n" \
19.358 - " printf(\"%s\", SND_LIB_VERSION_STR);\n" \
19.359 - " return 0;\n" \
19.360 - "}\n" \
19.361 - > $@
19.362 +ifdef REQUIRED_ALSA_VERSION
19.363 + ALSA_CHECK := $(call CheckVersions,$(ALSA_VERSION),$(REQUIRED_ALSA_VERSION))
19.364 endif
19.365 -
19.366 -sane-alsa-versioncheck: $(ALSA_VERSION_CHECK)
19.367 -sane-alsa-headers: sane-alsa-versioncheck
19.368 -ifdef ALSA_VERSION_CHECK
19.369 - @if [ -f "$(ALSA_VERSION_CHECK)" ]; then \
19.370 - if [ `$(ALSA_VERSION_CHECK) | $(EGREP) -c '$(REQUIRED_ALSA_VERSION)'` -ne 1 ] ; then \
19.371 - $(ECHO) "ERROR: The ALSA version must be 0.9.1 or higher. \n" \
19.372 - " You have the following ALSA version installed: $(ALSA_VERSION) \n" \
19.373 +sane-alsa-headers:
19.374 +ifdef REQUIRED_ALSA_VERSION
19.375 + if [ "$(ALSA_CHECK)" != "same" -a "$(ALSA_CHECK)" != "newer" ] ; then \
19.376 + $(ECHO) "ERROR: The ALSA version must be $(REQUIRED_ALSA_VERSION) or higher. \n" \
19.377 + " You have the following ALSA version installed: $${alsa_version) \n" \
19.378 " Please reinstall ALSA (drivers and lib). You can download \n" \
19.379 " the source distribution from http://www.alsa-project.org \n" \
19.380 " or go to http://www.freshrpms.net/docs/alsa/ for precompiled RPM packages. \n" \
19.381 "" >> $(ERROR_FILE) ; \
19.382 fi \
19.383 else \
19.384 - $(ECHO) "ERROR: You seem to not have installed ALSA 0.9.1 or higher. \n" \
19.385 + $(ECHO) "ERROR: You seem to not have installed ALSA $(REQUIRED_ALSA_VERSION) or higher. \n" \
19.386 " Please install ALSA (drivers and lib). You can download the \n" \
19.387 " source distribution from http://www.alsa-project.org or go to \n" \
19.388 " http://www.freshrpms.net/docs/alsa/ for precompiled RPM packages. \n" \
19.389 @@ -1384,7 +1378,7 @@
19.390 ######################################################
19.391 # dump out the variable settings...
19.392 ######################################################
19.393 -sane-settings:: sane-alsa-versioncheck
19.394 +sane-settings::
19.395 @$(ECHO) >> $(MESSAGE_FILE)
19.396 @$(ECHO) $(ALL_SETTINGS) >> $(MESSAGE_FILE)
19.397 @$(ECHO) >> $(MESSAGE_FILE)
19.398 @@ -1453,8 +1447,8 @@
19.399 ifeq ($(PLATFORM), solaris)
19.400 ifndef OPENJDK
19.401 @if [ -r $(GCC_COMPILER_PATH) ]; then \
19.402 - if [ ! "$(GCC_VER)" = 2.95.2 ]; then \
19.403 - $(ECHO) "ERROR: The Solaris GCC compiler version must be 2.95.2. \n" \
19.404 + if [ ! "$(GCC_VER)" = $(REQUIRED_GCC_VERSION) ]; then \
19.405 + $(ECHO) "ERROR: The Solaris GCC compiler version must be $(REQUIRED_GCC_VERSION). \n" \
19.406 " You are using the following compiler version: $(GCC_VER) \n" \
19.407 " The compiler was obtained from the following location: \n" \
19.408 " $(GCC_COMPILER_PATH) \n" \
20.1 --- a/make/docs/Makefile Thu Apr 02 10:16:53 2009 -0700
20.2 +++ b/make/docs/Makefile Wed Apr 08 15:40:56 2009 -0700
20.3 @@ -1,5 +1,5 @@
20.4 #
20.5 -# Copyright 1997-2008 Sun Microsystems, Inc. All Rights Reserved.
20.6 +# Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved.
20.7 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
20.8 #
20.9 # This code is free software; you can redistribute it and/or modify it
20.10 @@ -45,6 +45,7 @@
20.11 DOCSTMPDIR = $(TEMPDIR)/doctmp
20.12
20.13 COMMON_JAVADOCFLAGS = \
20.14 + $(NO_PROPRIETARY_API_WARNINGS) \
20.15 -source 1.5 \
20.16 -quiet \
20.17 -use \
20.18 @@ -203,6 +204,9 @@
20.19 JDI_HEADER = "Java Debug Interface"
20.20 # JDI_PKGS is located in NON_CORE_PKGS.gmk
20.21
20.22 +# Variables used by security components
20.23 +SECURITYAPI_JAVADOCBOTTOM = '<font size="-1"><a href="http://bugs.sun.com/services/bugreport/index.jsp">Report a bug or request a feature.</a><br>Copyright $(THIS_YEAR) Sun Microsystems, Inc. All Rights Reserved. Use is subject to license terms.</font>'
20.24 +
20.25 #
20.26 # Variables used by JAAS target
20.27 #
20.28 @@ -220,6 +224,7 @@
20.29 -windowtitle $(JAAS_WINDOWTITLE) \
20.30 -doctitle $(JAAS_DOCTITLE) \
20.31 -header $(JAAS_JAVADOCHEADER) \
20.32 + -bottom $(SECURITYAPI_JAVADOCBOTTOM) \
20.33 -linkoffline ../../../../../api $(DOCSDIR)/api/ \
20.34 -overview $(TOPDIR)/src/share/classes/com/sun/security/auth/jaas-overview.html
20.35 JAAS_WINDOWTITLE = "Java Authentication and Authorization Service "
20.36 @@ -242,6 +247,7 @@
20.37 -windowtitle $(JGSS_WINDOWTITLE) \
20.38 -doctitle $(JGSS_DOCTITLE) \
20.39 -header $(JGSS_JAVADOCHEADER) \
20.40 + -bottom $(SECURITYAPI_JAVADOCBOTTOM) \
20.41 -linkoffline ../../../../../api $(DOCSDIR)/api/ \
20.42 -overview $(JGSS_SOURCEPATH)/com/sun/security/jgss/jgss-overview.html
20.43
20.44 @@ -265,6 +271,7 @@
20.45 -windowtitle $(SMARTCARDIO_WINDOWTITLE) \
20.46 -doctitle $(SMARTCARDIO_DOCTITLE) \
20.47 -header $(SMARTCARDIO_JAVADOCHEADER) \
20.48 + -bottom $(SECURITYAPI_JAVADOCBOTTOM) \
20.49 -linkoffline ../../../../../api $(DOCSDIR)/api/
20.50
20.51 SMARTCARDIO_WINDOWTITLE = "Java Smart Card I/O"
21.1 --- a/make/java/fdlibm/Makefile Thu Apr 02 10:16:53 2009 -0700
21.2 +++ b/make/java/fdlibm/Makefile Wed Apr 08 15:40:56 2009 -0700
21.3 @@ -45,6 +45,7 @@
21.4 ifeq ($(PLATFORM),windows)
21.5 # Turn all optimizations off
21.6 OPTIMIZATION_LEVEL = NONE
21.7 + FASTDEBUG_OPTIMIZATION_LEVEL = NONE
21.8 OTHER_CFLAGS =
21.9 CPPFLAGS_DBG += -DLOGGING
21.10 endif
21.11 @@ -56,6 +57,7 @@
21.12 ifeq ($(PLATFORM),linux)
21.13 # Turn all optimizations off
21.14 OPTIMIZATION_LEVEL = NONE
21.15 + FASTDEBUG_OPTIMIZATION_LEVEL = NONE
21.16 endif
21.17
21.18 #
22.1 --- a/make/java/java/FILES_java.gmk Thu Apr 02 10:16:53 2009 -0700
22.2 +++ b/make/java/java/FILES_java.gmk Wed Apr 08 15:40:56 2009 -0700
22.3 @@ -449,7 +449,6 @@
22.4 sun/misc/Service.java \
22.5 sun/misc/JavaLangAccess.java \
22.6 sun/misc/JavaIOAccess.java \
22.7 - sun/misc/JavaIODeleteOnExitAccess.java \
22.8 sun/misc/JavaIOFileDescriptorAccess.java \
22.9 sun/misc/JavaNioAccess.java
22.10
23.1 --- a/make/java/management/Makefile Thu Apr 02 10:16:53 2009 -0700
23.2 +++ b/make/java/management/Makefile Wed Apr 08 15:40:56 2009 -0700
23.3 @@ -46,6 +46,8 @@
23.4 #
23.5 include FILES_c.gmk
23.6
23.7 +# We don't need snmp here.
23.8 +AUTO_JAVA_PRUNE = snmp
23.9 AUTO_FILES_JAVA_DIRS = java/lang/management com/sun/management sun/management
23.10
23.11 include Exportedfiles.gmk
24.1 --- a/make/java/nio/FILES_java.gmk Thu Apr 02 10:16:53 2009 -0700
24.2 +++ b/make/java/nio/FILES_java.gmk Wed Apr 08 15:40:56 2009 -0700
24.3 @@ -220,6 +220,8 @@
24.4 sun/nio/ch/Util.java \
24.5 \
24.6 sun/nio/cs/AbstractCharsetProvider.java \
24.7 + sun/nio/cs/ArrayDecoder.java \
24.8 + sun/nio/cs/ArrayEncoder.java \
24.9 sun/nio/cs/FastCharsetProvider.java \
24.10 sun/nio/cs/HistoricallyNamedCharset.java \
24.11 sun/nio/cs/ISO_8859_1.java \
25.1 --- a/make/java/redist/Makefile Thu Apr 02 10:16:53 2009 -0700
25.2 +++ b/make/java/redist/Makefile Wed Apr 08 15:40:56 2009 -0700
25.3 @@ -251,9 +251,11 @@
25.4 #
25.5 ifdef OPENJDK
25.6
25.7 -include $(BUILDDIR)/common/internal/BinaryPlugs.gmk
25.8 + ifeq ($(IMPORT_BINARY_PLUGS),true)
25.9 + include $(BUILDDIR)/common/internal/BinaryPlugs.gmk
25.10
25.11 -build: import-binary-plugs
25.12 + build: import-binary-plugs
25.13 + endif
25.14
25.15 else # !OPENJDK
25.16
26.1 --- a/make/javax/management/Makefile Thu Apr 02 10:16:53 2009 -0700
26.2 +++ b/make/javax/management/Makefile Wed Apr 08 15:40:56 2009 -0700
26.3 @@ -35,6 +35,7 @@
26.4 #
26.5 # Files to compile
26.6 #
26.7 +AUTO_JAVA_PRUNE = snmp
26.8 AUTO_FILES_JAVA_DIRS = javax/management com/sun/jmx com/sun/management/jmx
26.9
26.10 #
27.1 --- a/make/javax/swing/beaninfo/SwingBeans.gmk Thu Apr 02 10:16:53 2009 -0700
27.2 +++ b/make/javax/swing/beaninfo/SwingBeans.gmk Wed Apr 08 15:40:56 2009 -0700
27.3 @@ -47,7 +47,7 @@
27.4 LOCAL_JAVADOC = $(JAVADOC_CMD) $(JAVADOCFLAGS)
27.5 # get the absolute path to the jar command.
27.6 PREFIX = 1.2
27.7 -JAVADOCFLAGS = $(LANGUAGE_VERSION)
27.8 +JAVADOCFLAGS = $(NO_PROPRIETARY_API_WARNINGS) $(LANGUAGE_VERSION)
27.9 SWINGPKG = javax/swing
27.10 LOCAL_JAVAC_FLAGS = $(OTHER_JAVACFLAGS)
27.11
28.1 --- a/make/jdk_generic_profile.sh Thu Apr 02 10:16:53 2009 -0700
28.2 +++ b/make/jdk_generic_profile.sh Wed Apr 08 15:40:56 2009 -0700
28.3 @@ -174,7 +174,8 @@
28.4
28.5 # Check CYGWIN (should have already been done)
28.6 # Assumption here is that you are in a shell window via cygwin.
28.7 - if [ "$(echo ${PROCESSOR_IDENTIFIER} | fgrep AMD64)" != "" ] ; then
28.8 + proc_arch=`echo "$(PROCESSOR_IDENTIFIER)" | expand | cut -d' ' -f1 | sed -e 's@x86@X86@g' -e 's@Intel64@X64@g' -e 's@em64t@X64@g' -e 's@EM64T@X64@g' -e 's@amd64@X64@g' -e 's@AMD64@X64@g' -e 's@ia64@IA64@g'`
28.9 + if [ "${proc_arch}" = "X64" ] ; then
28.10 windows_arch=amd64
28.11 else
28.12 windows_arch=i586
29.1 --- a/make/jprt.config Thu Apr 02 10:16:53 2009 -0700
29.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
29.3 @@ -1,363 +0,0 @@
29.4 -#!echo "This is not a shell script"
29.5 -#############################################################################
29.6 -#
29.7 -# Copyright 2006-2008 Sun Microsystems, Inc. All Rights Reserved.
29.8 -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
29.9 -#
29.10 -# This code is free software; you can redistribute it and/or modify it
29.11 -# under the terms of the GNU General Public License version 2 only, as
29.12 -# published by the Free Software Foundation. Sun designates this
29.13 -# particular file as subject to the "Classpath" exception as provided
29.14 -# by Sun in the LICENSE file that accompanied this code.
29.15 -#
29.16 -# This code is distributed in the hope that it will be useful, but WITHOUT
29.17 -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
29.18 -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
29.19 -# version 2 for more details (a copy is included in the LICENSE file that
29.20 -# accompanied this code).
29.21 -#
29.22 -# You should have received a copy of the GNU General Public License version
29.23 -# 2 along with this work; if not, write to the Free Software Foundation,
29.24 -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
29.25 -#
29.26 -# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
29.27 -# CA 95054 USA or visit www.sun.com if you need additional information or
29.28 -# have any questions.
29.29 -#
29.30 -#############################################################################
29.31 -#
29.32 -# JPRT shell configuration for building.
29.33 -#
29.34 -# Input environment variables:
29.35 -# ALT_BOOTDIR
29.36 -# ALT_SLASH_JAVA
29.37 -# ALT_JDK_IMPORT_PATH
29.38 -# OPENJDK
29.39 -# Windows Only:
29.40 -# PATH
29.41 -# VS71COMNTOOLS
29.42 -# PROCESSOR_IDENTIFIER
29.43 -# ROOTDIR
29.44 -#
29.45 -# Output variable settings:
29.46 -# make Full path to GNU make
29.47 -# compiler_path Path to compiler bin directory
29.48 -# compiler_name Unique name of this compiler
29.49 -#
29.50 -# Output environment variables:
29.51 -# PATH
29.52 -# ALT_COMPILER_PATH
29.53 -# OPENJDK only:
29.54 -# ALT_CLOSED_JDK_IMPORT_PATH
29.55 -# ALT_JDK_DEVTOOLS_DIR
29.56 -# Windows Only:
29.57 -# ALT_MSDEVTOOLS_PATH
29.58 -# ALT_DEVTOOLS_PATH (To avoid the C:/UTILS default)
29.59 -# LIB
29.60 -# INCLUDE
29.61 -#
29.62 -# After JDK6, most settings will be found via ALT_SLASH_JAVA or
29.63 -# by way of other system environment variables. If this was JDK5
29.64 -# or an older JDK, you might need to export more ALT_* variables.
29.65 -#
29.66 -# On Windows AMD64, if MSSDK is not set, assumes Platform SDK is installed at:
29.67 -# C:/Program Files/Microsoft Platform SDK
29.68 -#
29.69 -#############################################################################
29.70 -
29.71 -#############################################################################
29.72 -# Error
29.73 -error() # message
29.74 -{
29.75 - echo "ERROR: $1"
29.76 - exit 6
29.77 -}
29.78 -# Directory must exist
29.79 -dirMustExist() # dir name
29.80 -{
29.81 - if [ ! -d "$1" ] ; then
29.82 - error "Directory for $2 does not exist: $1"
29.83 - fi
29.84 -}
29.85 -# File must exist
29.86 -fileMustExist() # dir name
29.87 -{
29.88 - if [ ! -f "$1" ] ; then
29.89 - error "File for $2 does not exist: $1"
29.90 - fi
29.91 -}
29.92 -#############################################################################
29.93 -
29.94 -# Should be set by JPRT as the 3 basic inputs
29.95 -bootdir="${ALT_BOOTDIR}"
29.96 -slashjava="${ALT_SLASH_JAVA}"
29.97 -jdk_import="${ALT_JDK_IMPORT_PATH}"
29.98 -
29.99 -# The /java/devtools items
29.100 -jdk_devtools="${slashjava}/devtools"
29.101 -share="${jdk_devtools}/share"
29.102 -
29.103 -# Needed for langtools, maybe other parts of the build
29.104 -ANT_HOME="${share}/ant/latest"
29.105 -export ANT_HOME
29.106 -
29.107 -# The 3 bin directories in common to all platforms
29.108 -sharebin="${share}/bin"
29.109 -antbin="${ANT_HOME}/bin"
29.110 -
29.111 -# Check input
29.112 -dirMustExist "${bootdir}" ALT_BOOTDIR
29.113 -dirMustExist "${slashjava}" ALT_SLASH_JAVA
29.114 -dirMustExist "${jdk_import}" ALT_JDK_IMPORT_PATH
29.115 -dirMustExist "${ANT_HOME}" ANT_HOME
29.116 -
29.117 -# Use the JDK import for now (FIXME: use the binary plugs?)
29.118 -if [ "${OPENJDK}" = true ] ; then
29.119 - ALT_CLOSED_JDK_IMPORT_PATH="${jdk_import}"
29.120 - export ALT_CLOSED_JDK_IMPORT_PATH
29.121 -fi
29.122 -
29.123 -# Uses 'uname -s', but only expect SunOS or Linux, assume Windows otherwise.
29.124 -osname=`uname -s`
29.125 -if [ "${osname}" = SunOS ] ; then
29.126 -
29.127 - # SOLARIS: Sparc or X86
29.128 - osarch=`uname -p`
29.129 - if [ "${osarch}" = sparc ] ; then
29.130 - solaris_arch=sparc
29.131 - else
29.132 - solaris_arch=i386
29.133 - fi
29.134 -
29.135 - # Get the compilers into path (make sure it matches ALT setting)
29.136 - if [ "${JPRT_SOLARIS_COMPILER_NAME}" != "" ] ; then
29.137 - compiler_name=${JPRT_SOLARIS_COMPILER_NAME}
29.138 - else
29.139 - compiler_name=SS12
29.140 - fi
29.141 - compiler_path=${jdk_devtools}/${solaris_arch}/SUNWspro/${compiler_name}/bin
29.142 - ALT_COMPILER_PATH="${compiler_path}"
29.143 - export ALT_COMPILER_PATH
29.144 - dirMustExist "${compiler_path}" ALT_COMPILER_PATH
29.145 - path4sdk=${compiler_path}:${sharebin}:${antbin}
29.146 -
29.147 - # Add basic solaris system paths
29.148 - path4sdk=${path4sdk}:/usr/ccs/bin:/usr/ccs/lib:/usr/bin:/bin:/usr/sfw/bin
29.149 -
29.150 - # Get the previous JDK to be used to bootstrap the build
29.151 - path4sdk=${bootdir}/bin:${path4sdk}
29.152 -
29.153 - # Find GNU make
29.154 - make=/usr/sfw/bin/gmake
29.155 - if [ ! -f ${make} ] ; then
29.156 - make=/opt/sfw/bin/gmake
29.157 - if [ ! -f ${make} ] ; then
29.158 - make=${jdk_devtools}/${solaris_arch}/bin/gnumake
29.159 - fi
29.160 - fi
29.161 - fileMustExist "${make}" make
29.162 -
29.163 - # File creation mask
29.164 - umask 002
29.165 -
29.166 -elif [ "${osname}" = Linux ] ; then
29.167 -
29.168 - # LINUX: X86, AMD64
29.169 - osarch=`uname -m`
29.170 - if [ "${osarch}" = i686 ] ; then
29.171 - linux_arch=i586
29.172 - elif [ "${osarch}" = x86_64 ] ; then
29.173 - linux_arch=amd64
29.174 - fi
29.175 -
29.176 - # Get the compilers into path (make sure it matches ALT setting)
29.177 - compiler_path=/usr/bin
29.178 - compiler_name=usr_bin
29.179 - ALT_COMPILER_PATH="${compiler_path}"
29.180 - export ALT_COMPILER_PATH
29.181 - dirMustExist "${compiler_path}" ALT_COMPILER_PATH
29.182 - path4sdk=${compiler_path}:${sharebin}:${antbin}
29.183 -
29.184 - # Add basic paths
29.185 - path4sdk=${path4sdk}:/usr/bin:/bin:/usr/sbin:/sbin
29.186 -
29.187 - # Get the previous JDK to be used to bootstrap the build
29.188 - path4sdk=${bootdir}/bin:${path4sdk}
29.189 -
29.190 - # Find GNU make
29.191 - make=/usr/bin/make
29.192 - fileMustExist "${make}" make
29.193 -
29.194 - umask 002
29.195 -
29.196 - # Linux platform may be old, use motif files from the devtools area
29.197 - if [ "${OPENJDK}" = true ] ; then
29.198 - ALT_JDK_DEVTOOLS_DIR="${jdk_devtools}"
29.199 - export ALT_JDK_DEVTOOLS_DIR
29.200 - fi
29.201 -
29.202 -
29.203 -else
29.204 -
29.205 - # Windows: Differs on CYGWIN vs. MKS, and the compiler available.
29.206 - # Also, blanks in pathnames gives GNU make headaches, so anything placed
29.207 - # in any ALT_* variable should be the short windows dosname.
29.208 -
29.209 - # WINDOWS: Install and use MKS or CYGWIN (should have already been done)
29.210 - # Assumption here is that you are in a shell window via MKS or cygwin.
29.211 - # MKS install should have defined the environment variable ROOTDIR.
29.212 - # We also need to figure out which one we have: X86, AMD64
29.213 - if [ "`echo ${PROCESSOR_IDENTIFIER} | fgrep AMD64`" != "" ] ; then
29.214 - windows_arch=amd64
29.215 - else
29.216 - windows_arch=i586
29.217 - fi
29.218 -
29.219 - # We need to determine if we are running a CYGWIN shell or an MKS shell
29.220 - # (if uname isn't available, then it will be unix_toolset=unknown)
29.221 - unix_toolset=unknown
29.222 - if [ "`uname -a | fgrep Cygwin`" = "" -a -d "${ROOTDIR}" ] ; then
29.223 - # We kind of assume ROOTDIR is where MKS is and it's ok
29.224 - unix_toolset=MKS
29.225 - mkshome=`dosname -s "${ROOTDIR}"`
29.226 - # Utility to convert to short pathnames without spaces
29.227 - dosname="${mkshome}/mksnt/dosname -s"
29.228 - # Most unix utilities are in the mksnt directory of ROOTDIR
29.229 - unixcommand_path="${mkshome}/mksnt"
29.230 - path4sdk="${sharebin};${antbin};${unixcommand_path}"
29.231 - dirMustExist "${unixcommand_path}" ALT_UNIXCOMMAND_PATH
29.232 - devtools_path="${jdk_devtools}/win32/bin"
29.233 - path4sdk="${devtools_path};${path4sdk}"
29.234 - # Normally this need not be set, but on Windows it's default is C:/UTILS
29.235 - ALT_DEVTOOLS_PATH="${devtools_path}"
29.236 - export ALT_DEVTOOLS_PATH
29.237 - dirMustExist "${devtools_path}" ALT_DEVTOOLS_PATH
29.238 - # Find GNU make
29.239 - make="${devtools_path}/gnumake.exe"
29.240 - fileMustExist "${make}" make
29.241 - elif [ "`uname -a | fgrep Cygwin`" != "" -a -f /bin/cygpath ] ; then
29.242 - # For CYGWIN, uname will have "Cygwin" in it, and /bin/cygpath should exist
29.243 - unix_toolset=CYGWIN
29.244 - # Utility to convert to short pathnames without spaces
29.245 - dosname="/usr/bin/cygpath -a -m -s"
29.246 - # Most unix utilities are in the /usr/bin
29.247 - unixcommand_path="/usr/bin"
29.248 - path4sdk="${sharebin};${antbin};${unixcommand_path}"
29.249 - dirMustExist "${unixcommand_path}" ALT_UNIXCOMMAND_PATH
29.250 - # Find GNU make
29.251 - make="${unixcommand_path}/make.exe"
29.252 - fileMustExist "${make}" make
29.253 - else
29.254 - echo "WARNING: Cannot figure out if this is MKS or CYGWIN"
29.255 - fi
29.256 -
29.257 - # WINDOWS: Compiler setup (nasty part)
29.258 - # NOTE: You can use vcvars32.bat to set PATH, LIB, and INCLUDE.
29.259 - # NOTE: CYGWIN has a link.exe too, make sure the compilers are first
29.260 - if [ "${windows_arch}" = i586 ] ; then
29.261 - # 32bit Windows compiler settings
29.262 - # VisualStudio .NET 2003 VC++ 7.1 (VS71COMNTOOLS should be defined)
29.263 - vs_root=`${dosname} "${VS71COMNTOOLS}/../.."`
29.264 - # Fill in PATH, LIB, and INCLUDE (unset all others to make sure)
29.265 - msdev_root="${vs_root}/Common7/Tools"
29.266 - msdevtools_path="${msdev_root}/bin"
29.267 - vc7_root="${vs_root}/Vc7"
29.268 - compiler_path="${vc7_root}/bin"
29.269 - compiler_name=VS2003
29.270 - platform_sdk="${vc7_root}/PlatformSDK"
29.271 - # LIB and INCLUDE must use ; as a separator
29.272 - include4sdk="${vc7_root}/atlmfc/include"
29.273 - include4sdk="${include4sdk};${vc7_root}/include"
29.274 - include4sdk="${include4sdk};${platform_sdk}/include/prerelease"
29.275 - include4sdk="${include4sdk};${platform_sdk}/include"
29.276 - include4sdk="${include4sdk};${vs_root}/SDK/v1.1/include"
29.277 - lib4sdk="${vc7_root}/atlmfc/lib"
29.278 - lib4sdk="${lib4sdk};${vc7_root}/lib"
29.279 - lib4sdk="${lib4sdk};${platform_sdk}/lib/prerelease"
29.280 - lib4sdk="${lib4sdk};${platform_sdk}/lib"
29.281 - lib4sdk="${lib4sdk};${vs_root}/SDK/v1.1/lib"
29.282 - # Search path and DLL locating path
29.283 - # WARNING: CYGWIN has a link.exe too, make sure compilers are first
29.284 - path4sdk="${vs_root}/Common7/Tools/bin;${path4sdk}"
29.285 - path4sdk="${vs_root}/SDK/v1.1/bin;${path4sdk}"
29.286 - path4sdk="${vs_root}/Common7/Tools;${path4sdk}"
29.287 - path4sdk="${vs_root}/Common7/Tools/bin/prerelease;${path4sdk}"
29.288 - path4sdk="${vs_root}/Common7/IDE;${path4sdk}"
29.289 - path4sdk="${compiler_path};${path4sdk}"
29.290 - elif [ "${windows_arch}" = amd64 ] ; then
29.291 - # AMD64 64bit Windows compiler settings
29.292 - if [ "${MSSDK}" != "" ] ; then
29.293 - platform_sdk="${MSSDK}"
29.294 - else
29.295 - platform_sdk=`${dosname} "C:/Program Files/Microsoft Platform SDK/"`
29.296 - fi
29.297 - compiler_path="${platform_sdk}/Bin/win64/x86/AMD64"
29.298 - compiler_name=VS2005_PSDK
29.299 - msdevtools_path="${platform_sdk}/Bin"
29.300 - # LIB and INCLUDE must use ; as a separator
29.301 - include4sdk="${platform_sdk}/Include"
29.302 - include4sdk="${include4sdk};${platform_sdk}/Include/crt/sys"
29.303 - include4sdk="${include4sdk};${platform_sdk}/Include/mfc"
29.304 - include4sdk="${include4sdk};${platform_sdk}/Include/atl"
29.305 - include4sdk="${include4sdk};${platform_sdk}/Include/crt"
29.306 - lib4sdk="${platform_sdk}/Lib/AMD64"
29.307 - lib4sdk="${lib4sdk};${platform_sdk}/Lib/AMD64/atlmfc"
29.308 - # Search path and DLL locating path
29.309 - # WARNING: CYGWIN has a link.exe too, make sure compilers are first
29.310 - path4sdk="${platform_sdk}/bin;${path4sdk}"
29.311 - path4sdk="${compiler_path};${path4sdk}"
29.312 - fi
29.313 - # Export LIB and INCLUDE
29.314 - unset lib
29.315 - unset Lib
29.316 - LIB="${lib4sdk}"
29.317 - export LIB
29.318 - unset include
29.319 - unset Include
29.320 - INCLUDE="${include4sdk}"
29.321 - export INCLUDE
29.322 - # Set the ALT variable
29.323 - ALT_COMPILER_PATH=`${dosname} "${compiler_path}"`
29.324 - export ALT_COMPILER_PATH
29.325 - dirMustExist "${compiler_path}" ALT_COMPILER_PATH
29.326 - ALT_MSDEVTOOLS_PATH=`${dosname} "${msdevtools_path}"`
29.327 - export ALT_MSDEVTOOLS_PATH
29.328 - dirMustExist "${msdevtools_path}" ALT_MSDEVTOOLS_PATH
29.329 -
29.330 - # WINDOWS: Get the previous JDK to be used to bootstrap the build
29.331 - path4sdk="${bootdir}/bin;${path4sdk}"
29.332 -
29.333 - # Turn all \\ into /, remove duplicates and trailing /
29.334 - slash_path="`echo ${path4sdk} | sed -e 's@\\\\@/@g' -e 's@//@/@g' -e 's@/$@@' -e 's@/;@;@g'`"
29.335 -
29.336 - # For windows, it's hard to know where the system is, so we just add this
29.337 - # to PATH.
29.338 - path4sdk="${slash_path};${PATH}"
29.339 -
29.340 - # Convert path4sdk to cygwin style
29.341 - if [ "${unix_toolset}" = CYGWIN ] ; then
29.342 - path4sdk="`/usr/bin/cygpath -p ${path4sdk}`"
29.343 - fi
29.344 -
29.345 - # Set special windows ALT variables
29.346 - ALT_ISHIELDDIR="C:/ishield802"
29.347 - export ALT_ISHIELDDIR
29.348 -
29.349 - # Sponsors binaries
29.350 - ALT_SPONSOR1DIR=C:/sponsor_binaries
29.351 - export ALT_SPONSOR1DIR
29.352 - ALT_SPONSOR2DIR=C:/sponsor_binaries
29.353 - export ALT_SPONSOR2DIR
29.354 -
29.355 -fi
29.356 -
29.357 -# Export PATH setting
29.358 -PATH="${path4sdk}"
29.359 -export PATH
29.360 -
29.361 -# Things we need to unset
29.362 -unset LD_LIBRARY_PATH
29.363 -unset LD_LIBRARY_PATH_32
29.364 -unset LD_LIBRARY_PATH_64
29.365 -unset JAVA_HOME
29.366 -
30.1 --- a/make/jprt.properties Thu Apr 02 10:16:53 2009 -0700
30.2 +++ b/make/jprt.properties Wed Apr 08 15:40:56 2009 -0700
30.3 @@ -53,6 +53,19 @@
30.4
30.5 # Standard list of jprt test targets for this workspace
30.6 jprt.test.targets=*-*-*-jvm98
30.7 +jprt.regression.test.targets= \
30.8 + *-*-*-java/lang, \
30.9 + *-*-*-java/security, \
30.10 + *-*-*-java/text, \
30.11 + *-*-*-java/util
30.12 +
30.13 +#jprt.regression.test.targets= \
30.14 +# *-*-*-java/awt, \
30.15 +# *-*-*-java/beans, \
30.16 +# *-*-*-java/io, \
30.17 +# *-*-*-java/net, \
30.18 +# *-*-*-java/nio, \
30.19 +# *-*-*-java/rmi, \
30.20
30.21 # Directories needed to build
30.22 jprt.bundle.exclude.src.dirs=build
31.1 --- a/make/sun/management/Makefile Thu Apr 02 10:16:53 2009 -0700
31.2 +++ b/make/sun/management/Makefile Wed Apr 08 15:40:56 2009 -0700
31.3 @@ -35,7 +35,16 @@
31.4
31.5 all build:: properties aclfile jmxremotefiles
31.6
31.7 -SUBDIRS = snmp jmxremote
31.8 +# When building the openjdk, build snmp only if importing binary plugs,
31.9 +ifdef OPENJDK
31.10 + ifeq ($(IMPORT_BINARY_PLUGS),true)
31.11 + SUBDIRS = snmp
31.12 + endif
31.13 +else
31.14 + SUBDIRS = snmp
31.15 +endif
31.16 +SUBDIRS += jmxremote
31.17 +
31.18 all build clean clobber::
31.19 $(SUBDIRS-loop)
31.20
32.1 --- a/src/share/classes/com/sun/servicetag/resources/register.html Thu Apr 02 10:16:53 2009 -0700
32.2 +++ b/src/share/classes/com/sun/servicetag/resources/register.html Wed Apr 08 15:40:56 2009 -0700
32.3 @@ -68,7 +68,7 @@
32.4 <table width="708" border="0" cellspacing="0" cellpadding="3">
32.5 <tr valign="top">
32.6 <td width="126" height="35">
32.7 - <form name="form1" method="post" action="@@REGISTRATION_URL@@" enctype="text/xml">
32.8 + <form name="form1" method="post" action="@@REGISTRATION_URL@@">
32.9 <input type="hidden" name="servicetag_payload" value="@@REGISTRATION_PAYLOAD@@">
32.10 <input type="submit" name="Submit"border="0" class="buttonblue" onmouseover="this.style.color='#fbe249';" onmouseout="this.style.color='#FFF';" value="Register My JDK">
32.11 </form></td>
33.1 --- a/src/share/classes/com/sun/servicetag/resources/register_ja.html Thu Apr 02 10:16:53 2009 -0700
33.2 +++ b/src/share/classes/com/sun/servicetag/resources/register_ja.html Wed Apr 08 15:40:56 2009 -0700
33.3 @@ -62,7 +62,7 @@
33.4 <p class="style1">å¿…è¦ã«ãªã‚‹ã®ã¯ã€Sun 開発者å‘ã‘ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã¾ãŸã¯ãã®ä»–ã® Sun オンラインアカウントã ã‘ã§ã™ã€‚ ã¾ã アカウントãŒãªã„å ´åˆã¯ã€ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã®ä½œæˆãŒæ±‚ã‚られã¾ã™ã€‚ </p>
33.5 <table width="708" border="0" cellspacing="0" cellpadding="3">
33.6 <tr valign="top">
33.7 - <td width="126" height="35"><form name="form1" method="post" action="@@REGISTRATION_URL@@" enctype="text/xml">
33.8 + <td width="126" height="35"><form name="form1" method="post" action="@@REGISTRATION_URL@@">
33.9 <input type="hidden" name="servicetag_payload" value="@@REGISTRATION_PAYLOAD@@">
33.10 <input type="submit" name="Submit"border="0" class="buttonblue" onmouseover="this.style.color='#fbe249';" onmouseout="this.style.color='#FFF';" value="JDK 製å“登録">
33.11 </form></td>
34.1 --- a/src/share/classes/com/sun/servicetag/resources/register_zh_CN.html Thu Apr 02 10:16:53 2009 -0700
34.2 +++ b/src/share/classes/com/sun/servicetag/resources/register_zh_CN.html Wed Apr 08 15:40:56 2009 -0700
34.3 @@ -63,7 +63,7 @@
34.4 <p class="style1">您需è¦å…·æœ‰ Sun å¼€å‘者网络或其他 Sun è”机å¸æˆ·ã€‚如果您没有,系统将æ示您创建一个。 </p>
34.5 <table width="708" border="0" cellspacing="0" cellpadding="3">
34.6 <tr valign="top">
34.7 - <td width="126" height="35"><form name="form1" method="post" action="@@REGISTRATION_URL@@" enctype="text/xml">
34.8 + <td width="126" height="35"><form name="form1" method="post" action="@@REGISTRATION_URL@@">
34.9 <input type="hidden" name="servicetag_payload" value="@@REGISTRATION_PAYLOAD@@">
34.10 <input type="submit" name="Submit"border="0" class="buttonblue" onmouseover="this.style.color='#fbe249';" onmouseout="this.style.color='#FFF';" value="注册我的 JDK">
34.11 </form></td>
35.1 --- a/src/share/classes/java/io/Console.java Thu Apr 02 10:16:53 2009 -0700
35.2 +++ b/src/share/classes/java/io/Console.java Wed Apr 08 15:40:56 2009 -0700
35.3 @@ -503,6 +503,21 @@
35.4
35.5 // Set up JavaIOAccess in SharedSecrets
35.6 static {
35.7 +
35.8 + // Add a shutdown hook to restore console's echo state should
35.9 + // it be necessary.
35.10 + sun.misc.SharedSecrets.getJavaLangAccess()
35.11 + .registerShutdownHook(0 /* shutdown hook invocation order */,
35.12 + new Runnable() {
35.13 + public void run() {
35.14 + try {
35.15 + if (echoOff) {
35.16 + echo(true);
35.17 + }
35.18 + } catch (IOException x) { }
35.19 + }
35.20 + });
35.21 +
35.22 sun.misc.SharedSecrets.setJavaIOAccess(new sun.misc.JavaIOAccess() {
35.23 public Console console() {
35.24 if (istty()) {
35.25 @@ -513,20 +528,6 @@
35.26 return null;
35.27 }
35.28
35.29 - // Add a shutdown hook to restore console's echo state should
35.30 - // it be necessary.
35.31 - public Runnable consoleRestoreHook() {
35.32 - return new Runnable() {
35.33 - public void run() {
35.34 - try {
35.35 - if (echoOff) {
35.36 - echo(true);
35.37 - }
35.38 - } catch (IOException x) {}
35.39 - }
35.40 - };
35.41 - }
35.42 -
35.43 public Charset charset() {
35.44 // This method is called in sun.security.util.Password,
35.45 // cons already exists when this method is called
36.1 --- a/src/share/classes/java/io/DeleteOnExitHook.java Thu Apr 02 10:16:53 2009 -0700
36.2 +++ b/src/share/classes/java/io/DeleteOnExitHook.java Wed Apr 08 15:40:56 2009 -0700
36.3 @@ -34,17 +34,18 @@
36.4 */
36.5
36.6 class DeleteOnExitHook {
36.7 - private static DeleteOnExitHook instance = null;
36.8 + static {
36.9 + sun.misc.SharedSecrets.getJavaLangAccess()
36.10 + .registerShutdownHook(2 /* Shutdown hook invocation order */,
36.11 + new Runnable() {
36.12 + public void run() {
36.13 + runHooks();
36.14 + }
36.15 + });
36.16 + }
36.17
36.18 private static LinkedHashSet<String> files = new LinkedHashSet<String>();
36.19
36.20 - static DeleteOnExitHook hook() {
36.21 - if (instance == null)
36.22 - instance = new DeleteOnExitHook();
36.23 -
36.24 - return instance;
36.25 - }
36.26 -
36.27 private DeleteOnExitHook() {}
36.28
36.29 static synchronized void add(String file) {
36.30 @@ -54,7 +55,7 @@
36.31 files.add(file);
36.32 }
36.33
36.34 - void run() {
36.35 + static void runHooks() {
36.36 LinkedHashSet<String> theFiles;
36.37
36.38 synchronized (DeleteOnExitHook.class) {
37.1 --- a/src/share/classes/java/io/File.java Thu Apr 02 10:16:53 2009 -0700
37.2 +++ b/src/share/classes/java/io/File.java Wed Apr 08 15:40:56 2009 -0700
37.3 @@ -2147,18 +2147,6 @@
37.4 /** use serialVersionUID from JDK 1.0.2 for interoperability */
37.5 private static final long serialVersionUID = 301077366599181567L;
37.6
37.7 - // Set up JavaIODeleteOnExitAccess in SharedSecrets
37.8 - // Added here as DeleteOnExitHook is package-private and SharedSecrets cannot easily access it.
37.9 - static {
37.10 - sun.misc.SharedSecrets.setJavaIODeleteOnExitAccess(
37.11 - new sun.misc.JavaIODeleteOnExitAccess() {
37.12 - public void run() {
37.13 - DeleteOnExitHook.hook().run();
37.14 - }
37.15 - }
37.16 - );
37.17 - }
37.18 -
37.19 // -- Integration with java.nio.file --
37.20
37.21 private volatile transient Path filePath;
38.1 --- a/src/share/classes/java/lang/ApplicationShutdownHooks.java Thu Apr 02 10:16:53 2009 -0700
38.2 +++ b/src/share/classes/java/lang/ApplicationShutdownHooks.java Wed Apr 08 15:40:56 2009 -0700
38.3 @@ -34,19 +34,19 @@
38.4 * @see java.lang.Runtime#removeShutdownHook
38.5 */
38.6
38.7 -class ApplicationShutdownHooks implements Runnable {
38.8 - private static ApplicationShutdownHooks instance = null;
38.9 +class ApplicationShutdownHooks {
38.10 + static {
38.11 + Shutdown.add(1 /* shutdown hook invocation order */,
38.12 + new Runnable() {
38.13 + public void run() {
38.14 + runHooks();
38.15 + }
38.16 + });
38.17 + }
38.18
38.19 /* The set of registered hooks */
38.20 private static IdentityHashMap<Thread, Thread> hooks = new IdentityHashMap<Thread, Thread>();
38.21
38.22 - static synchronized ApplicationShutdownHooks hook() {
38.23 - if (instance == null)
38.24 - instance = new ApplicationShutdownHooks();
38.25 -
38.26 - return instance;
38.27 - }
38.28 -
38.29 private ApplicationShutdownHooks() {}
38.30
38.31 /* Add a new shutdown hook. Checks the shutdown state and the hook itself,
38.32 @@ -82,7 +82,7 @@
38.33 * to run in. Hooks are run concurrently and this method waits for
38.34 * them to finish.
38.35 */
38.36 - public void run() {
38.37 + static void runHooks() {
38.38 Collection<Thread> threads;
38.39 synchronized(ApplicationShutdownHooks.class) {
38.40 threads = hooks.keySet();
39.1 --- a/src/share/classes/java/lang/Class.java Thu Apr 02 10:16:53 2009 -0700
39.2 +++ b/src/share/classes/java/lang/Class.java Wed Apr 08 15:40:56 2009 -0700
39.3 @@ -3059,14 +3059,12 @@
39.4 }
39.5
39.6
39.7 - private static Annotation[] EMPTY_ANNOTATIONS_ARRAY = new Annotation[0];
39.8 -
39.9 /**
39.10 * @since 1.5
39.11 */
39.12 public Annotation[] getAnnotations() {
39.13 initAnnotationsIfNecessary();
39.14 - return annotations.values().toArray(EMPTY_ANNOTATIONS_ARRAY);
39.15 + return AnnotationParser.toArray(annotations);
39.16 }
39.17
39.18 /**
39.19 @@ -3074,7 +3072,7 @@
39.20 */
39.21 public Annotation[] getDeclaredAnnotations() {
39.22 initAnnotationsIfNecessary();
39.23 - return declaredAnnotations.values().toArray(EMPTY_ANNOTATIONS_ARRAY);
39.24 + return AnnotationParser.toArray(declaredAnnotations);
39.25 }
39.26
39.27 // Annotations cache
40.1 --- a/src/share/classes/java/lang/Shutdown.java Thu Apr 02 10:16:53 2009 -0700
40.2 +++ b/src/share/classes/java/lang/Shutdown.java Wed Apr 08 15:40:56 2009 -0700
40.3 @@ -25,8 +25,6 @@
40.4
40.5 package java.lang;
40.6
40.7 -import java.util.ArrayList;
40.8 -
40.9
40.10 /**
40.11 * Package-private utility class containing data structures and logic
40.12 @@ -47,8 +45,13 @@
40.13 /* Should we run all finalizers upon exit? */
40.14 private static boolean runFinalizersOnExit = false;
40.15
40.16 - /* The set of registered, wrapped hooks, or null if there aren't any */
40.17 - private static ArrayList<Runnable> hooks = new ArrayList<Runnable>();
40.18 + // The system shutdown hooks are registered with a predefined slot.
40.19 + // The list of shutdown hooks is as follows:
40.20 + // (0) Console restore hook
40.21 + // (1) Application hooks
40.22 + // (2) DeleteOnExit hook
40.23 + private static final int MAX_SYSTEM_HOOKS = 10;
40.24 + private static final Runnable[] hooks = new Runnable[MAX_SYSTEM_HOOKS];
40.25
40.26 /* The preceding static fields are protected by this lock */
40.27 private static class Lock { };
40.28 @@ -68,33 +71,18 @@
40.29 /* Add a new shutdown hook. Checks the shutdown state and the hook itself,
40.30 * but does not do any security checks.
40.31 */
40.32 - static void add(Runnable hook) {
40.33 + static void add(int slot, Runnable hook) {
40.34 synchronized (lock) {
40.35 if (state > RUNNING)
40.36 throw new IllegalStateException("Shutdown in progress");
40.37
40.38 - hooks.add(hook);
40.39 + if (hooks[slot] != null)
40.40 + throw new InternalError("Shutdown hook at slot " + slot + " already registered");
40.41 +
40.42 + hooks[slot] = hook;
40.43 }
40.44 }
40.45
40.46 -
40.47 - /* Remove a previously-registered hook. Like the add method, this method
40.48 - * does not do any security checks.
40.49 - */
40.50 - static boolean remove(Runnable hook) {
40.51 - synchronized (lock) {
40.52 - if (state > RUNNING)
40.53 - throw new IllegalStateException("Shutdown in progress");
40.54 - if (hook == null) throw new NullPointerException();
40.55 - if (hooks == null) {
40.56 - return false;
40.57 - } else {
40.58 - return hooks.remove(hook);
40.59 - }
40.60 - }
40.61 - }
40.62 -
40.63 -
40.64 /* Run all registered shutdown hooks
40.65 */
40.66 private static void runHooks() {
40.67 @@ -103,7 +91,7 @@
40.68 */
40.69 for (Runnable hook : hooks) {
40.70 try {
40.71 - hook.run();
40.72 + if (hook != null) hook.run();
40.73 } catch(Throwable t) {
40.74 if (t instanceof ThreadDeath) {
40.75 ThreadDeath td = (ThreadDeath)t;
41.1 --- a/src/share/classes/java/lang/StringCoding.java Thu Apr 02 10:16:53 2009 -0700
41.2 +++ b/src/share/classes/java/lang/StringCoding.java Wed Apr 08 15:40:56 2009 -0700
41.3 @@ -1,5 +1,5 @@
41.4 /*
41.5 - * Copyright 2000-2008 Sun Microsystems, Inc. All Rights Reserved.
41.6 + * Copyright 2000-2009 Sun Microsystems, Inc. All Rights Reserved.
41.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
41.8 *
41.9 * This code is free software; you can redistribute it and/or modify it
41.10 @@ -25,13 +25,10 @@
41.11
41.12 package java.lang;
41.13
41.14 -import java.io.CharConversionException;
41.15 import java.io.UnsupportedEncodingException;
41.16 import java.lang.ref.SoftReference;
41.17 import java.nio.ByteBuffer;
41.18 import java.nio.CharBuffer;
41.19 -import java.nio.BufferOverflowException;
41.20 -import java.nio.BufferUnderflowException;
41.21 import java.nio.charset.Charset;
41.22 import java.nio.charset.CharsetDecoder;
41.23 import java.nio.charset.CharsetEncoder;
41.24 @@ -39,11 +36,12 @@
41.25 import java.nio.charset.CoderResult;
41.26 import java.nio.charset.CodingErrorAction;
41.27 import java.nio.charset.IllegalCharsetNameException;
41.28 -import java.nio.charset.MalformedInputException;
41.29 import java.nio.charset.UnsupportedCharsetException;
41.30 import java.util.Arrays;
41.31 import sun.misc.MessageUtils;
41.32 import sun.nio.cs.HistoricallyNamedCharset;
41.33 +import sun.nio.cs.ArrayDecoder;
41.34 +import sun.nio.cs.ArrayEncoder;
41.35
41.36 /**
41.37 * Utility class for string encoding and decoding.
41.38 @@ -74,10 +72,8 @@
41.39
41.40 // Trim the given byte array to the given length
41.41 //
41.42 - private static byte[] safeTrim(byte[] ba, int len, Charset cs) {
41.43 - if (len == ba.length
41.44 - && (System.getSecurityManager() == null
41.45 - || cs.getClass().getClassLoader0() == null))
41.46 + private static byte[] safeTrim(byte[] ba, int len, Charset cs, boolean isTrusted) {
41.47 + if (len == ba.length && (isTrusted || System.getSecurityManager() == null))
41.48 return ba;
41.49 else
41.50 return Arrays.copyOf(ba, len);
41.51 @@ -85,10 +81,9 @@
41.52
41.53 // Trim the given char array to the given length
41.54 //
41.55 - private static char[] safeTrim(char[] ca, int len, Charset cs) {
41.56 - if (len == ca.length
41.57 - && (System.getSecurityManager() == null
41.58 - || cs.getClass().getClassLoader0() == null))
41.59 + private static char[] safeTrim(char[] ca, int len,
41.60 + Charset cs, boolean isTrusted) {
41.61 + if (len == ca.length && (isTrusted || System.getSecurityManager() == null))
41.62 return ca;
41.63 else
41.64 return Arrays.copyOf(ca, len);
41.65 @@ -128,6 +123,7 @@
41.66 private final String requestedCharsetName;
41.67 private final Charset cs;
41.68 private final CharsetDecoder cd;
41.69 + private final boolean isTrusted;
41.70
41.71 private StringDecoder(Charset cs, String rcn) {
41.72 this.requestedCharsetName = rcn;
41.73 @@ -135,6 +131,7 @@
41.74 this.cd = cs.newDecoder()
41.75 .onMalformedInput(CodingErrorAction.REPLACE)
41.76 .onUnmappableCharacter(CodingErrorAction.REPLACE);
41.77 + this.isTrusted = (cs.getClass().getClassLoader0() == null);
41.78 }
41.79
41.80 String charsetName() {
41.81 @@ -152,24 +149,28 @@
41.82 char[] ca = new char[en];
41.83 if (len == 0)
41.84 return ca;
41.85 - cd.reset();
41.86 - ByteBuffer bb = ByteBuffer.wrap(ba, off, len);
41.87 - CharBuffer cb = CharBuffer.wrap(ca);
41.88 - try {
41.89 - CoderResult cr = cd.decode(bb, cb, true);
41.90 - if (!cr.isUnderflow())
41.91 - cr.throwException();
41.92 - cr = cd.flush(cb);
41.93 - if (!cr.isUnderflow())
41.94 - cr.throwException();
41.95 - } catch (CharacterCodingException x) {
41.96 - // Substitution is always enabled,
41.97 - // so this shouldn't happen
41.98 - throw new Error(x);
41.99 + if (cd instanceof ArrayDecoder) {
41.100 + int clen = ((ArrayDecoder)cd).decode(ba, off, len, ca);
41.101 + return safeTrim(ca, clen, cs, isTrusted);
41.102 + } else {
41.103 + cd.reset();
41.104 + ByteBuffer bb = ByteBuffer.wrap(ba, off, len);
41.105 + CharBuffer cb = CharBuffer.wrap(ca);
41.106 + try {
41.107 + CoderResult cr = cd.decode(bb, cb, true);
41.108 + if (!cr.isUnderflow())
41.109 + cr.throwException();
41.110 + cr = cd.flush(cb);
41.111 + if (!cr.isUnderflow())
41.112 + cr.throwException();
41.113 + } catch (CharacterCodingException x) {
41.114 + // Substitution is always enabled,
41.115 + // so this shouldn't happen
41.116 + throw new Error(x);
41.117 + }
41.118 + return safeTrim(ca, cb.position(), cs, isTrusted);
41.119 }
41.120 - return safeTrim(ca, cb.position(), cs);
41.121 }
41.122 -
41.123 }
41.124
41.125 static char[] decode(String charsetName, byte[] ba, int off, int len)
41.126 @@ -193,8 +194,57 @@
41.127 }
41.128
41.129 static char[] decode(Charset cs, byte[] ba, int off, int len) {
41.130 - StringDecoder sd = new StringDecoder(cs, cs.name());
41.131 - return sd.decode(Arrays.copyOfRange(ba, off, off + len), 0, len);
41.132 + // (1)We never cache the "external" cs, the only benefit of creating
41.133 + // an additional StringDe/Encoder object to wrap it is to share the
41.134 + // de/encode() method. These SD/E objects are short-lifed, the young-gen
41.135 + // gc should be able to take care of them well. But the best approash
41.136 + // is still not to generate them if not really necessary.
41.137 + // (2)The defensive copy of the input byte/char[] has a big performance
41.138 + // impact, as well as the outgoing result byte/char[]. Need to do the
41.139 + // optimization check of (sm==null && classLoader0==null) for both.
41.140 + // (3)getClass().getClassLoader0() is expensive
41.141 + // (4)There might be a timing gap in isTrusted setting. getClassLoader0()
41.142 + // is only chcked (and then isTrusted gets set) when (SM==null). It is
41.143 + // possible that the SM==null for now but then SM is NOT null later
41.144 + // when safeTrim() is invoked...the "safe" way to do is to redundant
41.145 + // check (... && (isTrusted || SM == null || getClassLoader0())) in trim
41.146 + // but it then can be argued that the SM is null when the opertaion
41.147 + // is started...
41.148 + CharsetDecoder cd = cs.newDecoder();
41.149 + int en = scale(len, cd.maxCharsPerByte());
41.150 + char[] ca = new char[en];
41.151 + if (len == 0)
41.152 + return ca;
41.153 + boolean isTrusted = false;
41.154 + if (System.getSecurityManager() != null) {
41.155 + if (!(isTrusted = (cs.getClass().getClassLoader0() == null))) {
41.156 + ba = Arrays.copyOfRange(ba, off, off + len);
41.157 + off = 0;
41.158 + }
41.159 + }
41.160 + if (cd instanceof ArrayDecoder) {
41.161 + int clen = ((ArrayDecoder)cd).decode(ba, off, len, ca);
41.162 + return safeTrim(ca, clen, cs, isTrusted);
41.163 + } else {
41.164 + cd.onMalformedInput(CodingErrorAction.REPLACE)
41.165 + .onUnmappableCharacter(CodingErrorAction.REPLACE)
41.166 + .reset();
41.167 + ByteBuffer bb = ByteBuffer.wrap(ba, off, len);
41.168 + CharBuffer cb = CharBuffer.wrap(ca);
41.169 + try {
41.170 + CoderResult cr = cd.decode(bb, cb, true);
41.171 + if (!cr.isUnderflow())
41.172 + cr.throwException();
41.173 + cr = cd.flush(cb);
41.174 + if (!cr.isUnderflow())
41.175 + cr.throwException();
41.176 + } catch (CharacterCodingException x) {
41.177 + // Substitution is always enabled,
41.178 + // so this shouldn't happen
41.179 + throw new Error(x);
41.180 + }
41.181 + return safeTrim(ca, cb.position(), cs, isTrusted);
41.182 + }
41.183 }
41.184
41.185 static char[] decode(byte[] ba, int off, int len) {
41.186 @@ -218,14 +268,12 @@
41.187 }
41.188 }
41.189
41.190 -
41.191 -
41.192 -
41.193 // -- Encoding --
41.194 private static class StringEncoder {
41.195 private Charset cs;
41.196 private CharsetEncoder ce;
41.197 private final String requestedCharsetName;
41.198 + private final boolean isTrusted;
41.199
41.200 private StringEncoder(Charset cs, String rcn) {
41.201 this.requestedCharsetName = rcn;
41.202 @@ -233,6 +281,7 @@
41.203 this.ce = cs.newEncoder()
41.204 .onMalformedInput(CodingErrorAction.REPLACE)
41.205 .onUnmappableCharacter(CodingErrorAction.REPLACE);
41.206 + this.isTrusted = (cs.getClass().getClassLoader0() == null);
41.207 }
41.208
41.209 String charsetName() {
41.210 @@ -250,23 +299,27 @@
41.211 byte[] ba = new byte[en];
41.212 if (len == 0)
41.213 return ba;
41.214 -
41.215 - ce.reset();
41.216 - ByteBuffer bb = ByteBuffer.wrap(ba);
41.217 - CharBuffer cb = CharBuffer.wrap(ca, off, len);
41.218 - try {
41.219 - CoderResult cr = ce.encode(cb, bb, true);
41.220 - if (!cr.isUnderflow())
41.221 - cr.throwException();
41.222 - cr = ce.flush(bb);
41.223 - if (!cr.isUnderflow())
41.224 - cr.throwException();
41.225 - } catch (CharacterCodingException x) {
41.226 - // Substitution is always enabled,
41.227 - // so this shouldn't happen
41.228 - throw new Error(x);
41.229 + if (ce instanceof ArrayEncoder) {
41.230 + int blen = ((ArrayEncoder)ce).encode(ca, off, len, ba);
41.231 + return safeTrim(ba, blen, cs, isTrusted);
41.232 + } else {
41.233 + ce.reset();
41.234 + ByteBuffer bb = ByteBuffer.wrap(ba);
41.235 + CharBuffer cb = CharBuffer.wrap(ca, off, len);
41.236 + try {
41.237 + CoderResult cr = ce.encode(cb, bb, true);
41.238 + if (!cr.isUnderflow())
41.239 + cr.throwException();
41.240 + cr = ce.flush(bb);
41.241 + if (!cr.isUnderflow())
41.242 + cr.throwException();
41.243 + } catch (CharacterCodingException x) {
41.244 + // Substitution is always enabled,
41.245 + // so this shouldn't happen
41.246 + throw new Error(x);
41.247 + }
41.248 + return safeTrim(ba, bb.position(), cs, isTrusted);
41.249 }
41.250 - return safeTrim(ba, bb.position(), cs);
41.251 }
41.252 }
41.253
41.254 @@ -291,8 +344,39 @@
41.255 }
41.256
41.257 static byte[] encode(Charset cs, char[] ca, int off, int len) {
41.258 - StringEncoder se = new StringEncoder(cs, cs.name());
41.259 - return se.encode(Arrays.copyOfRange(ca, off, off + len), 0, len);
41.260 + CharsetEncoder ce = cs.newEncoder();
41.261 + int en = scale(len, ce.maxBytesPerChar());
41.262 + byte[] ba = new byte[en];
41.263 + if (len == 0)
41.264 + return ba;
41.265 + boolean isTrusted = false;
41.266 + if (System.getSecurityManager() != null) {
41.267 + if (!(isTrusted = (cs.getClass().getClassLoader0() == null))) {
41.268 + ca = Arrays.copyOfRange(ca, off, off + len);
41.269 + off = 0;
41.270 + }
41.271 + }
41.272 + if (ce instanceof ArrayEncoder) {
41.273 + int blen = ((ArrayEncoder)ce).encode(ca, off, len, ba);
41.274 + return safeTrim(ba, blen, cs, isTrusted);
41.275 + } else {
41.276 + ce.onMalformedInput(CodingErrorAction.REPLACE)
41.277 + .onUnmappableCharacter(CodingErrorAction.REPLACE)
41.278 + .reset();
41.279 + ByteBuffer bb = ByteBuffer.wrap(ba);
41.280 + CharBuffer cb = CharBuffer.wrap(ca, off, len);
41.281 + try {
41.282 + CoderResult cr = ce.encode(cb, bb, true);
41.283 + if (!cr.isUnderflow())
41.284 + cr.throwException();
41.285 + cr = ce.flush(bb);
41.286 + if (!cr.isUnderflow())
41.287 + cr.throwException();
41.288 + } catch (CharacterCodingException x) {
41.289 + throw new Error(x);
41.290 + }
41.291 + return safeTrim(ba, bb.position(), cs, isTrusted);
41.292 + }
41.293 }
41.294
41.295 static byte[] encode(char[] ca, int off, int len) {
42.1 --- a/src/share/classes/java/lang/System.java Thu Apr 02 10:16:53 2009 -0700
42.2 +++ b/src/share/classes/java/lang/System.java Wed Apr 08 15:40:56 2009 -0700
42.3 @@ -34,7 +34,6 @@
42.4 import java.nio.channels.Channel;
42.5 import java.nio.channels.spi.SelectorProvider;
42.6 import sun.nio.ch.Interruptible;
42.7 -import sun.net.InetAddressCachePolicy;
42.8 import sun.reflect.Reflection;
42.9 import sun.security.util.SecurityConstants;
42.10 import sun.reflect.annotation.AnnotationType;
42.11 @@ -310,7 +309,6 @@
42.12 }
42.13
42.14 security = s;
42.15 - InetAddressCachePolicy.setIfNotSet(InetAddressCachePolicy.FOREVER);
42.16 }
42.17
42.18 /**
42.19 @@ -1121,14 +1119,6 @@
42.20 // Setup Java signal handlers for HUP, TERM, and INT (where available).
42.21 Terminator.setup();
42.22
42.23 - // The order in with the hooks are added here is important as it
42.24 - // determines the order in which they are run.
42.25 - // (1)Console restore hook needs to be called first.
42.26 - // (2)Application hooks must be run before calling deleteOnExitHook.
42.27 - Shutdown.add(sun.misc.SharedSecrets.getJavaIOAccess().consoleRestoreHook());
42.28 - Shutdown.add(ApplicationShutdownHooks.hook());
42.29 - Shutdown.add(sun.misc.SharedSecrets.getJavaIODeleteOnExitAccess());
42.30 -
42.31 // Initialize any miscellenous operating system settings that need to be
42.32 // set for the class libraries. Currently this is no-op everywhere except
42.33 // for Windows where the process-wide error mode is set before the java.io
42.34 @@ -1174,6 +1164,9 @@
42.35 public void blockedOn(Thread t, Interruptible b) {
42.36 t.blockedOn(b);
42.37 }
42.38 + public void registerShutdownHook(int slot, Runnable r) {
42.39 + Shutdown.add(slot, r);
42.40 + }
42.41 });
42.42 }
42.43
43.1 --- a/src/share/classes/java/lang/Thread.java Thu Apr 02 10:16:53 2009 -0700
43.2 +++ b/src/share/classes/java/lang/Thread.java Wed Apr 08 15:40:56 2009 -0700
43.3 @@ -1,5 +1,5 @@
43.4 /*
43.5 - * Copyright 1994-2008 Sun Microsystems, Inc. All Rights Reserved.
43.6 + * Copyright 1994-2009 Sun Microsystems, Inc. All Rights Reserved.
43.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
43.8 *
43.9 * This code is free software; you can redistribute it and/or modify it
44.1 --- a/src/share/classes/java/lang/reflect/Constructor.java Thu Apr 02 10:16:53 2009 -0700
44.2 +++ b/src/share/classes/java/lang/reflect/Constructor.java Wed Apr 08 15:40:56 2009 -0700
44.3 @@ -626,13 +626,11 @@
44.4 return (T) declaredAnnotations().get(annotationClass);
44.5 }
44.6
44.7 - private static final Annotation[] EMPTY_ANNOTATION_ARRAY=new Annotation[0];
44.8 -
44.9 /**
44.10 * @since 1.5
44.11 */
44.12 public Annotation[] getDeclaredAnnotations() {
44.13 - return declaredAnnotations().values().toArray(EMPTY_ANNOTATION_ARRAY);
44.14 + return AnnotationParser.toArray(declaredAnnotations());
44.15 }
44.16
44.17 private transient Map<Class, Annotation> declaredAnnotations;
45.1 --- a/src/share/classes/java/lang/reflect/Field.java Thu Apr 02 10:16:53 2009 -0700
45.2 +++ b/src/share/classes/java/lang/reflect/Field.java Wed Apr 08 15:40:56 2009 -0700
45.3 @@ -1018,13 +1018,11 @@
45.4 return (T) declaredAnnotations().get(annotationClass);
45.5 }
45.6
45.7 - private static final Annotation[] EMPTY_ANNOTATION_ARRAY=new Annotation[0];
45.8 -
45.9 /**
45.10 * @since 1.5
45.11 */
45.12 public Annotation[] getDeclaredAnnotations() {
45.13 - return declaredAnnotations().values().toArray(EMPTY_ANNOTATION_ARRAY);
45.14 + return AnnotationParser.toArray(declaredAnnotations());
45.15 }
45.16
45.17 private transient Map<Class, Annotation> declaredAnnotations;
46.1 --- a/src/share/classes/java/lang/reflect/Method.java Thu Apr 02 10:16:53 2009 -0700
46.2 +++ b/src/share/classes/java/lang/reflect/Method.java Wed Apr 08 15:40:56 2009 -0700
46.3 @@ -705,13 +705,11 @@
46.4 return (T) declaredAnnotations().get(annotationClass);
46.5 }
46.6
46.7 - private static final Annotation[] EMPTY_ANNOTATION_ARRAY=new Annotation[0];
46.8 -
46.9 /**
46.10 * @since 1.5
46.11 */
46.12 public Annotation[] getDeclaredAnnotations() {
46.13 - return declaredAnnotations().values().toArray(EMPTY_ANNOTATION_ARRAY);
46.14 + return AnnotationParser.toArray(declaredAnnotations());
46.15 }
46.16
46.17 private transient Map<Class, Annotation> declaredAnnotations;
47.1 --- a/src/share/classes/java/net/SocketPermission.java Thu Apr 02 10:16:53 2009 -0700
47.2 +++ b/src/share/classes/java/net/SocketPermission.java Wed Apr 08 15:40:56 2009 -0700
47.3 @@ -113,7 +113,6 @@
47.4 * <p>Similarly, if the following permission:
47.5 *
47.6 * <pre>
47.7 - * p1 = new SocketPermission("puffin.eng.sun.com:7777", "connect,accept");
47.8 * p2 = new SocketPermission("localhost:1024-", "accept,connect,listen");
47.9 * </pre>
47.10 *
48.1 --- a/src/share/classes/java/nio/file/SecureDirectoryStream.java Thu Apr 02 10:16:53 2009 -0700
48.2 +++ b/src/share/classes/java/nio/file/SecureDirectoryStream.java Wed Apr 08 15:40:56 2009 -0700
48.3 @@ -5,7 +5,7 @@
48.4 * This code is free software; you can redistribute it and/or modify it
48.5 * under the terms of the GNU General Public License version 2 only, as
48.6 * published by the Free Software Foundation. Sun designates this
48.7 - * particular file as subject to the "Classname" exception as provided
48.8 + * particular file as subject to the "Classpath" exception as provided
48.9 * by Sun in the LICENSE file that accompanied this code.
48.10 *
48.11 * This code is distributed in the hope that it will be useful, but WITHOUT
49.1 --- a/src/share/classes/java/security/Permission.java Thu Apr 02 10:16:53 2009 -0700
49.2 +++ b/src/share/classes/java/security/Permission.java Wed Apr 08 15:40:56 2009 -0700
49.3 @@ -1,5 +1,5 @@
49.4 /*
49.5 - * Copyright 1997-2003 Sun Microsystems, Inc. All Rights Reserved.
49.6 + * Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved.
49.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
49.8 *
49.9 * This code is free software; you can redistribute it and/or modify it
49.10 @@ -214,18 +214,18 @@
49.11 /**
49.12 * Returns a string describing this Permission. The convention is to
49.13 * specify the class name, the permission name, and the actions in
49.14 - * the following format: '("ClassName" "name" "actions")'.
49.15 + * the following format: '("ClassName" "name" "actions")', or
49.16 + * '("ClassName" "name")' if actions list is null or empty.
49.17 *
49.18 * @return information about this Permission.
49.19 */
49.20 -
49.21 public String toString() {
49.22 String actions = getActions();
49.23 if ((actions == null) || (actions.length() == 0)) { // OPTIONAL
49.24 - return "(" + getClass().getName() + " " + name + ")";
49.25 + return "(\"" + getClass().getName() + "\" \"" + name + "\")";
49.26 } else {
49.27 - return "(" + getClass().getName() + " " + name + " " +
49.28 - actions + ")";
49.29 + return "(\"" + getClass().getName() + "\" \"" + name +
49.30 + "\" \"" + actions + "\")";
49.31 }
49.32 }
49.33 }
50.1 --- a/src/share/classes/java/util/ArrayList.java Thu Apr 02 10:16:53 2009 -0700
50.2 +++ b/src/share/classes/java/util/ArrayList.java Wed Apr 08 15:40:56 2009 -0700
50.3 @@ -179,7 +179,6 @@
50.4 modCount++;
50.5 int oldCapacity = elementData.length;
50.6 if (minCapacity > oldCapacity) {
50.7 - Object oldData[] = elementData;
50.8 int newCapacity = (oldCapacity * 3)/2 + 1;
50.9 if (newCapacity < minCapacity)
50.10 newCapacity = minCapacity;
51.1 --- a/src/share/classes/java/util/concurrent/locks/AbstractQueuedLongSynchronizer.java Thu Apr 02 10:16:53 2009 -0700
51.2 +++ b/src/share/classes/java/util/concurrent/locks/AbstractQueuedLongSynchronizer.java Wed Apr 08 15:40:56 2009 -0700
51.3 @@ -1222,8 +1222,10 @@
51.4 // The correctness of this depends on head being initialized
51.5 // before tail and on head.next being accurate if the current
51.6 // thread is first in queue.
51.7 - Node h, s;
51.8 - return (h = head) != tail &&
51.9 + Node t = tail; // Read fields in reverse initialization order
51.10 + Node h = head;
51.11 + Node s;
51.12 + return h != t &&
51.13 ((s = h.next) == null || s.thread != Thread.currentThread());
51.14 }
51.15
52.1 --- a/src/share/classes/java/util/concurrent/locks/AbstractQueuedSynchronizer.java Thu Apr 02 10:16:53 2009 -0700
52.2 +++ b/src/share/classes/java/util/concurrent/locks/AbstractQueuedSynchronizer.java Wed Apr 08 15:40:56 2009 -0700
52.3 @@ -1445,8 +1445,10 @@
52.4 // The correctness of this depends on head being initialized
52.5 // before tail and on head.next being accurate if the current
52.6 // thread is first in queue.
52.7 - Node h, s;
52.8 - return (h = head) != tail &&
52.9 + Node t = tail; // Read fields in reverse initialization order
52.10 + Node h = head;
52.11 + Node s;
52.12 + return h != t &&
52.13 ((s = h.next) == null || s.thread != Thread.currentThread());
52.14 }
52.15
53.1 --- a/src/share/classes/java/util/regex/Matcher.java Thu Apr 02 10:16:53 2009 -0700
53.2 +++ b/src/share/classes/java/util/regex/Matcher.java Wed Apr 08 15:40:56 2009 -0700
53.3 @@ -1,5 +1,5 @@
53.4 /*
53.5 - * Copyright 1999-2008 Sun Microsystems, Inc. All Rights Reserved.
53.6 + * Copyright 1999-2009 Sun Microsystems, Inc. All Rights Reserved.
53.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
53.8 *
53.9 * This code is free software; you can redistribute it and/or modify it
54.1 --- a/src/share/classes/java/util/regex/Pattern.java Thu Apr 02 10:16:53 2009 -0700
54.2 +++ b/src/share/classes/java/util/regex/Pattern.java Wed Apr 08 15:40:56 2009 -0700
54.3 @@ -1,5 +1,5 @@
54.4 /*
54.5 - * Copyright 1999-2008 Sun Microsystems, Inc. All Rights Reserved.
54.6 + * Copyright 1999-2009 Sun Microsystems, Inc. All Rights Reserved.
54.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
54.8 *
54.9 * This code is free software; you can redistribute it and/or modify it
54.10 @@ -2567,7 +2567,8 @@
54.11 break;
54.12 case '<': // (?<xxx) look behind
54.13 ch = read();
54.14 - if (Character.isLetter(ch)) { // named captured group
54.15 + if (ASCII.isLower(ch) || ASCII.isUpper(ch) || ASCII.isDigit(ch)) {
54.16 + // named captured group
54.17 String name = groupname(ch);
54.18 if (namedGroups().containsKey(name))
54.19 throw error("Named capturing group <" + name
55.1 --- a/src/share/classes/sun/launcher/LauncherHelper.java Thu Apr 02 10:16:53 2009 -0700
55.2 +++ b/src/share/classes/sun/launcher/LauncherHelper.java Wed Apr 08 15:40:56 2009 -0700
55.3 @@ -1,6 +1,5 @@
55.4 -
55.5 /*
55.6 - * Copyright 2007-2008 Sun Microsystems, Inc. All Rights Reserved.
55.7 + * Copyright 2007-2009 Sun Microsystems, Inc. All Rights Reserved.
55.8 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
55.9 *
55.10 * This code is free software; you can redistribute it and/or modify it
55.11 @@ -55,18 +54,24 @@
55.12 INSTANCE;
55.13 private static final String defaultBundleName =
55.14 "sun.launcher.resources.launcher";
55.15 - private static ResourceBundle javarb =
55.16 - ResourceBundle.getBundle(defaultBundleName);
55.17 private static final String MAIN_CLASS = "Main-Class";
55.18
55.19 private static StringBuilder outBuf = new StringBuilder();
55.20
55.21 + private static ResourceBundle javarb = null;
55.22 + private static synchronized ResourceBundle getLauncherResourceBundle() {
55.23 + if (javarb == null) {
55.24 + javarb = ResourceBundle.getBundle(defaultBundleName);
55.25 + }
55.26 + return javarb;
55.27 + }
55.28 +
55.29 /**
55.30 * A private helper method to get a localized message and also
55.31 * apply any arguments that we might pass.
55.32 */
55.33 private static String getLocalizedMessage(String key, Object... args) {
55.34 - String msg = javarb.getString(key);
55.35 + String msg = getLauncherResourceBundle().getString(key);
55.36 return (args != null) ? MessageFormat.format(msg, args) : msg;
55.37 }
55.38
56.1 --- a/src/share/classes/sun/management/Agent.java Thu Apr 02 10:16:53 2009 -0700
56.2 +++ b/src/share/classes/sun/management/Agent.java Wed Apr 08 15:40:56 2009 -0700
56.3 @@ -31,9 +31,9 @@
56.4 import java.io.BufferedInputStream;
56.5 import java.io.FileNotFoundException;
56.6 import java.io.IOException;
56.7 +import java.lang.reflect.InvocationTargetException;
56.8 import java.text.MessageFormat;
56.9 import java.util.Properties;
56.10 -import java.util.Enumeration;
56.11 import java.util.ResourceBundle;
56.12 import java.util.MissingResourceException;
56.13 import java.lang.management.ManagementFactory;
56.14 @@ -41,7 +41,6 @@
56.15
56.16 import javax.management.remote.JMXConnectorServer;
56.17
56.18 -import sun.management.snmp.AdaptorBootstrap;
56.19 import sun.management.jmxremote.ConnectorBootstrap;
56.20 import static sun.management.AgentConfigurationError.*;
56.21 import sun.misc.VMSupport;
56.22 @@ -69,6 +68,9 @@
56.23 private static final String LOCAL_CONNECTOR_ADDRESS_PROP =
56.24 "com.sun.management.jmxremote.localConnectorAddress";
56.25
56.26 + private static final String SNMP_ADAPTOR_BOOTSTRAP_CLASS_NAME =
56.27 + "sun.management.snmp.AdaptorBootstrap";
56.28 +
56.29 // invoked by -javaagent or -Dcom.sun.management.agent.class
56.30 public static void premain(String args) throws Exception {
56.31 agentmain(args);
56.32 @@ -128,7 +130,7 @@
56.33
56.34 try {
56.35 if (snmpPort != null) {
56.36 - AdaptorBootstrap.initialize(snmpPort, props);
56.37 + loadSnmpAgent(snmpPort, props);
56.38 }
56.39
56.40 /*
56.41 @@ -204,6 +206,36 @@
56.42 return mgmtProps;
56.43 }
56.44
56.45 + private static void loadSnmpAgent(String snmpPort, Properties props) {
56.46 + try {
56.47 + // invoke the following through reflection:
56.48 + // AdaptorBootstrap.initialize(snmpPort, props);
56.49 + final Class<?> adaptorClass =
56.50 + Class.forName(SNMP_ADAPTOR_BOOTSTRAP_CLASS_NAME,true,null);
56.51 + final Method initializeMethod =
56.52 + adaptorClass.getMethod("initialize",
56.53 + String.class, Properties.class);
56.54 + initializeMethod.invoke(null,snmpPort,props);
56.55 + } catch (ClassNotFoundException x) {
56.56 + // The SNMP packages are not present: throws an exception.
56.57 + throw new UnsupportedOperationException("Unsupported management property: " + SNMP_PORT,x);
56.58 + } catch (NoSuchMethodException x) {
56.59 + // should not happen...
56.60 + throw new UnsupportedOperationException("Unsupported management property: " + SNMP_PORT,x);
56.61 + } catch (InvocationTargetException x) {
56.62 + final Throwable cause = x.getCause();
56.63 + if (cause instanceof RuntimeException)
56.64 + throw (RuntimeException) cause;
56.65 + else if (cause instanceof Error)
56.66 + throw (Error) cause;
56.67 + // should not happen...
56.68 + throw new UnsupportedOperationException("Unsupported management property: " + SNMP_PORT,cause);
56.69 + } catch (IllegalAccessException x) {
56.70 + // should not happen...
56.71 + throw new UnsupportedOperationException("Unsupported management property: " + SNMP_PORT,x);
56.72 + }
56.73 + }
56.74 +
56.75 // read config file and initialize the properties
56.76 private static void readConfiguration(String fname, Properties p) {
56.77 if (fname == null) {
57.1 --- a/src/share/classes/sun/misc/ClassLoaderUtil.java Thu Apr 02 10:16:53 2009 -0700
57.2 +++ b/src/share/classes/sun/misc/ClassLoaderUtil.java Wed Apr 08 15:40:56 2009 -0700
57.3 @@ -77,8 +77,6 @@
57.4 jarsClosed.clear();
57.5 }
57.6
57.7 - System.out.println ("classLoader = " + classLoader);
57.8 - System.out.println ("SharedSecrets.getJavaNetAccess()="+SharedSecrets.getJavaNetAccess());
57.9 URLClassPath ucp = SharedSecrets.getJavaNetAccess()
57.10 .getURLClassPath(classLoader);
57.11 ArrayList loaders = ucp.loaders;
58.1 --- a/src/share/classes/sun/misc/FloatingDecimal.java Thu Apr 02 10:16:53 2009 -0700
58.2 +++ b/src/share/classes/sun/misc/FloatingDecimal.java Wed Apr 08 15:40:56 2009 -0700
58.3 @@ -1867,10 +1867,16 @@
58.4 * Grammar is compatible with hexadecimal floating-point constants
58.5 * described in section 6.4.4.2 of the C99 specification.
58.6 */
58.7 - private static Pattern hexFloatPattern = Pattern.compile(
58.8 + private static Pattern hexFloatPattern = null;
58.9 + private static synchronized Pattern getHexFloatPattern() {
58.10 + if (hexFloatPattern == null) {
58.11 + hexFloatPattern = Pattern.compile(
58.12 //1 234 56 7 8 9
58.13 "([-+])?0[xX](((\\p{XDigit}+)\\.?)|((\\p{XDigit}*)\\.(\\p{XDigit}+)))[pP]([-+])?(\\p{Digit}+)[fFdD]?"
58.14 );
58.15 + }
58.16 + return hexFloatPattern;
58.17 + }
58.18
58.19 /*
58.20 * Convert string s to a suitable floating decimal; uses the
58.21 @@ -1880,7 +1886,7 @@
58.22 static FloatingDecimal parseHexString(String s) {
58.23 // Verify string is a member of the hexadecimal floating-point
58.24 // string language.
58.25 - Matcher m = hexFloatPattern.matcher(s);
58.26 + Matcher m = getHexFloatPattern().matcher(s);
58.27 boolean validInput = m.matches();
58.28
58.29 if (!validInput) {
59.1 --- a/src/share/classes/sun/misc/FormattedFloatingDecimal.java Thu Apr 02 10:16:53 2009 -0700
59.2 +++ b/src/share/classes/sun/misc/FormattedFloatingDecimal.java Wed Apr 08 15:40:56 2009 -0700
59.3 @@ -978,15 +978,6 @@
59.4 return new String(result);
59.5 }
59.6
59.7 - // This method should only ever be called if this object is constructed
59.8 - // without Form.DECIMAL_FLOAT because the perThreadBuffer is not large
59.9 - // enough to handle floating-point numbers of large precision.
59.10 - public String toJavaFormatString() {
59.11 - char result[] = (char[])(perThreadBuffer.get());
59.12 - int i = getChars(result);
59.13 - return new String(result, 0, i);
59.14 - }
59.15 -
59.16 // returns the exponent before rounding
59.17 public int getExponent() {
59.18 return decExponent - 1;
59.19 @@ -1157,265 +1148,6 @@
59.20 }
59.21 };
59.22
59.23 - // This method should only ever be called if this object is constructed
59.24 - // without Form.DECIMAL_FLOAT because the perThreadBuffer is not large
59.25 - // enough to handle floating-point numbers of large precision.
59.26 - public void appendTo(Appendable buf) {
59.27 - char result[] = (char[])(perThreadBuffer.get());
59.28 - int i = getChars(result);
59.29 - if (buf instanceof StringBuilder)
59.30 - ((StringBuilder) buf).append(result, 0, i);
59.31 - else if (buf instanceof StringBuffer)
59.32 - ((StringBuffer) buf).append(result, 0, i);
59.33 - else
59.34 - assert false;
59.35 - }
59.36 -
59.37 - public static FormattedFloatingDecimal
59.38 - readJavaFormatString( String in ) throws NumberFormatException {
59.39 - boolean isNegative = false;
59.40 - boolean signSeen = false;
59.41 - int decExp;
59.42 - char c;
59.43 -
59.44 - parseNumber:
59.45 - try{
59.46 - in = in.trim(); // don't fool around with white space.
59.47 - // throws NullPointerException if null
59.48 - int l = in.length();
59.49 - if ( l == 0 ) throw new NumberFormatException("empty String");
59.50 - int i = 0;
59.51 - switch ( c = in.charAt( i ) ){
59.52 - case '-':
59.53 - isNegative = true;
59.54 - //FALLTHROUGH
59.55 - case '+':
59.56 - i++;
59.57 - signSeen = true;
59.58 - }
59.59 -
59.60 - // Check for NaN and Infinity strings
59.61 - c = in.charAt(i);
59.62 - if(c == 'N' || c == 'I') { // possible NaN or infinity
59.63 - boolean potentialNaN = false;
59.64 - char targetChars[] = null; // char arrary of "NaN" or "Infinity"
59.65 -
59.66 - if(c == 'N') {
59.67 - targetChars = notANumber;
59.68 - potentialNaN = true;
59.69 - } else {
59.70 - targetChars = infinity;
59.71 - }
59.72 -
59.73 - // compare Input string to "NaN" or "Infinity"
59.74 - int j = 0;
59.75 - while(i < l && j < targetChars.length) {
59.76 - if(in.charAt(i) == targetChars[j]) {
59.77 - i++; j++;
59.78 - }
59.79 - else // something is amiss, throw exception
59.80 - break parseNumber;
59.81 - }
59.82 -
59.83 - // For the candidate string to be a NaN or infinity,
59.84 - // all characters in input string and target char[]
59.85 - // must be matched ==> j must equal targetChars.length
59.86 - // and i must equal l
59.87 - if( (j == targetChars.length) && (i == l) ) { // return NaN or infinity
59.88 - return (potentialNaN ? new FormattedFloatingDecimal(Double.NaN) // NaN has no sign
59.89 - : new FormattedFloatingDecimal(isNegative?
59.90 - Double.NEGATIVE_INFINITY:
59.91 - Double.POSITIVE_INFINITY)) ;
59.92 - }
59.93 - else { // something went wrong, throw exception
59.94 - break parseNumber;
59.95 - }
59.96 -
59.97 - } else if (c == '0') { // check for hexadecimal floating-point number
59.98 - if (l > i+1 ) {
59.99 - char ch = in.charAt(i+1);
59.100 - if (ch == 'x' || ch == 'X' ) // possible hex string
59.101 - return parseHexString(in);
59.102 - }
59.103 - } // look for and process decimal floating-point string
59.104 -
59.105 - char[] digits = new char[ l ];
59.106 - int nDigits= 0;
59.107 - boolean decSeen = false;
59.108 - int decPt = 0;
59.109 - int nLeadZero = 0;
59.110 - int nTrailZero= 0;
59.111 - digitLoop:
59.112 - while ( i < l ){
59.113 - switch ( c = in.charAt( i ) ){
59.114 - case '0':
59.115 - if ( nDigits > 0 ){
59.116 - nTrailZero += 1;
59.117 - } else {
59.118 - nLeadZero += 1;
59.119 - }
59.120 - break; // out of switch.
59.121 - case '1':
59.122 - case '2':
59.123 - case '3':
59.124 - case '4':
59.125 - case '5':
59.126 - case '6':
59.127 - case '7':
59.128 - case '8':
59.129 - case '9':
59.130 - while ( nTrailZero > 0 ){
59.131 - digits[nDigits++] = '0';
59.132 - nTrailZero -= 1;
59.133 - }
59.134 - digits[nDigits++] = c;
59.135 - break; // out of switch.
59.136 - case '.':
59.137 - if ( decSeen ){
59.138 - // already saw one ., this is the 2nd.
59.139 - throw new NumberFormatException("multiple points");
59.140 - }
59.141 - decPt = i;
59.142 - if ( signSeen ){
59.143 - decPt -= 1;
59.144 - }
59.145 - decSeen = true;
59.146 - break; // out of switch.
59.147 - default:
59.148 - break digitLoop;
59.149 - }
59.150 - i++;
59.151 - }
59.152 - /*
59.153 - * At this point, we've scanned all the digits and decimal
59.154 - * point we're going to see. Trim off leading and trailing
59.155 - * zeros, which will just confuse us later, and adjust
59.156 - * our initial decimal exponent accordingly.
59.157 - * To review:
59.158 - * we have seen i total characters.
59.159 - * nLeadZero of them were zeros before any other digits.
59.160 - * nTrailZero of them were zeros after any other digits.
59.161 - * if ( decSeen ), then a . was seen after decPt characters
59.162 - * ( including leading zeros which have been discarded )
59.163 - * nDigits characters were neither lead nor trailing
59.164 - * zeros, nor point
59.165 - */
59.166 - /*
59.167 - * special hack: if we saw no non-zero digits, then the
59.168 - * answer is zero!
59.169 - * Unfortunately, we feel honor-bound to keep parsing!
59.170 - */
59.171 - if ( nDigits == 0 ){
59.172 - digits = zero;
59.173 - nDigits = 1;
59.174 - if ( nLeadZero == 0 ){
59.175 - // we saw NO DIGITS AT ALL,
59.176 - // not even a crummy 0!
59.177 - // this is not allowed.
59.178 - break parseNumber; // go throw exception
59.179 - }
59.180 -
59.181 - }
59.182 -
59.183 - /* Our initial exponent is decPt, adjusted by the number of
59.184 - * discarded zeros. Or, if there was no decPt,
59.185 - * then its just nDigits adjusted by discarded trailing zeros.
59.186 - */
59.187 - if ( decSeen ){
59.188 - decExp = decPt - nLeadZero;
59.189 - } else {
59.190 - decExp = nDigits+nTrailZero;
59.191 - }
59.192 -
59.193 - /*
59.194 - * Look for 'e' or 'E' and an optionally signed integer.
59.195 - */
59.196 - if ( (i < l) && (((c = in.charAt(i) )=='e') || (c == 'E') ) ){
59.197 - int expSign = 1;
59.198 - int expVal = 0;
59.199 - int reallyBig = Integer.MAX_VALUE / 10;
59.200 - boolean expOverflow = false;
59.201 - switch( in.charAt(++i) ){
59.202 - case '-':
59.203 - expSign = -1;
59.204 - //FALLTHROUGH
59.205 - case '+':
59.206 - i++;
59.207 - }
59.208 - int expAt = i;
59.209 - expLoop:
59.210 - while ( i < l ){
59.211 - if ( expVal >= reallyBig ){
59.212 - // the next character will cause integer
59.213 - // overflow.
59.214 - expOverflow = true;
59.215 - }
59.216 - switch ( c = in.charAt(i++) ){
59.217 - case '0':
59.218 - case '1':
59.219 - case '2':
59.220 - case '3':
59.221 - case '4':
59.222 - case '5':
59.223 - case '6':
59.224 - case '7':
59.225 - case '8':
59.226 - case '9':
59.227 - expVal = expVal*10 + ( (int)c - (int)'0' );
59.228 - continue;
59.229 - default:
59.230 - i--; // back up.
59.231 - break expLoop; // stop parsing exponent.
59.232 - }
59.233 - }
59.234 - int expLimit = bigDecimalExponent+nDigits+nTrailZero;
59.235 - if ( expOverflow || ( expVal > expLimit ) ){
59.236 - //
59.237 - // The intent here is to end up with
59.238 - // infinity or zero, as appropriate.
59.239 - // The reason for yielding such a small decExponent,
59.240 - // rather than something intuitive such as
59.241 - // expSign*Integer.MAX_VALUE, is that this value
59.242 - // is subject to further manipulation in
59.243 - // doubleValue() and floatValue(), and I don't want
59.244 - // it to be able to cause overflow there!
59.245 - // (The only way we can get into trouble here is for
59.246 - // really outrageous nDigits+nTrailZero, such as 2 billion. )
59.247 - //
59.248 - decExp = expSign*expLimit;
59.249 - } else {
59.250 - // this should not overflow, since we tested
59.251 - // for expVal > (MAX+N), where N >= abs(decExp)
59.252 - decExp = decExp + expSign*expVal;
59.253 - }
59.254 -
59.255 - // if we saw something not a digit ( or end of string )
59.256 - // after the [Ee][+-], without seeing any digits at all
59.257 - // this is certainly an error. If we saw some digits,
59.258 - // but then some trailing garbage, that might be ok.
59.259 - // so we just fall through in that case.
59.260 - // HUMBUG
59.261 - if ( i == expAt )
59.262 - break parseNumber; // certainly bad
59.263 - }
59.264 - /*
59.265 - * We parsed everything we could.
59.266 - * If there are leftovers, then this is not good input!
59.267 - */
59.268 - if ( i < l &&
59.269 - ((i != l - 1) ||
59.270 - (in.charAt(i) != 'f' &&
59.271 - in.charAt(i) != 'F' &&
59.272 - in.charAt(i) != 'd' &&
59.273 - in.charAt(i) != 'D'))) {
59.274 - break parseNumber; // go throw exception
59.275 - }
59.276 -
59.277 - return new FormattedFloatingDecimal( isNegative, decExp, digits, nDigits, false, Integer.MAX_VALUE, Form.COMPATIBLE );
59.278 - } catch ( StringIndexOutOfBoundsException e ){ }
59.279 - throw new NumberFormatException("For input string: \"" + in + "\"");
59.280 - }
59.281 -
59.282 /*
59.283 * Take a FormattedFloatingDecimal, which we presumably just scanned in,
59.284 * and find out what its value is, as a double.
59.285 @@ -2035,548 +1767,4 @@
59.286 private static final char infinity[] = { 'I', 'n', 'f', 'i', 'n', 'i', 't', 'y' };
59.287 private static final char notANumber[] = { 'N', 'a', 'N' };
59.288 private static final char zero[] = { '0', '0', '0', '0', '0', '0', '0', '0' };
59.289 -
59.290 -
59.291 - /*
59.292 - * Grammar is compatible with hexadecimal floating-point constants
59.293 - * described in section 6.4.4.2 of the C99 specification.
59.294 - */
59.295 - private static Pattern hexFloatPattern = Pattern.compile(
59.296 - //1 234 56 7 8 9
59.297 - "([-+])?0[xX](((\\p{XDigit}+)\\.?)|((\\p{XDigit}*)\\.(\\p{XDigit}+)))[pP]([-+])?(\\p{Digit}+)[fFdD]?"
59.298 - );
59.299 -
59.300 - /*
59.301 - * Convert string s to a suitable floating decimal; uses the
59.302 - * double constructor and set the roundDir variable appropriately
59.303 - * in case the value is later converted to a float.
59.304 - */
59.305 - static FormattedFloatingDecimal parseHexString(String s) {
59.306 - // Verify string is a member of the hexadecimal floating-point
59.307 - // string language.
59.308 - Matcher m = hexFloatPattern.matcher(s);
59.309 - boolean validInput = m.matches();
59.310 -
59.311 - if (!validInput) {
59.312 - // Input does not match pattern
59.313 - throw new NumberFormatException("For input string: \"" + s + "\"");
59.314 - } else { // validInput
59.315 - /*
59.316 - * We must isolate the sign, significand, and exponent
59.317 - * fields. The sign value is straightforward. Since
59.318 - * floating-point numbers are stored with a normalized
59.319 - * representation, the significand and exponent are
59.320 - * interrelated.
59.321 - *
59.322 - * After extracting the sign, we normalized the
59.323 - * significand as a hexadecimal value, calculating an
59.324 - * exponent adjust for any shifts made during
59.325 - * normalization. If the significand is zero, the
59.326 - * exponent doesn't need to be examined since the output
59.327 - * will be zero.
59.328 - *
59.329 - * Next the exponent in the input string is extracted.
59.330 - * Afterwards, the significand is normalized as a *binary*
59.331 - * value and the input value's normalized exponent can be
59.332 - * computed. The significand bits are copied into a
59.333 - * double significand; if the string has more logical bits
59.334 - * than can fit in a double, the extra bits affect the
59.335 - * round and sticky bits which are used to round the final
59.336 - * value.
59.337 - */
59.338 -
59.339 - // Extract significand sign
59.340 - String group1 = m.group(1);
59.341 - double sign = (( group1 == null ) || group1.equals("+"))? 1.0 : -1.0;
59.342 -
59.343 -
59.344 - // Extract Significand magnitude
59.345 - /*
59.346 - * Based on the form of the significand, calculate how the
59.347 - * binary exponent needs to be adjusted to create a
59.348 - * normalized *hexadecimal* floating-point number; that
59.349 - * is, a number where there is one nonzero hex digit to
59.350 - * the left of the (hexa)decimal point. Since we are
59.351 - * adjusting a binary, not hexadecimal exponent, the
59.352 - * exponent is adjusted by a multiple of 4.
59.353 - *
59.354 - * There are a number of significand scenarios to consider;
59.355 - * letters are used in indicate nonzero digits:
59.356 - *
59.357 - * 1. 000xxxx => x.xxx normalized
59.358 - * increase exponent by (number of x's - 1)*4
59.359 - *
59.360 - * 2. 000xxx.yyyy => x.xxyyyy normalized
59.361 - * increase exponent by (number of x's - 1)*4
59.362 - *
59.363 - * 3. .000yyy => y.yy normalized
59.364 - * decrease exponent by (number of zeros + 1)*4
59.365 - *
59.366 - * 4. 000.00000yyy => y.yy normalized
59.367 - * decrease exponent by (number of zeros to right of point + 1)*4
59.368 - *
59.369 - * If the significand is exactly zero, return a properly
59.370 - * signed zero.
59.371 - */
59.372 -
59.373 - String significandString =null;
59.374 - int signifLength = 0;
59.375 - int exponentAdjust = 0;
59.376 - {
59.377 - int leftDigits = 0; // number of meaningful digits to
59.378 - // left of "decimal" point
59.379 - // (leading zeros stripped)
59.380 - int rightDigits = 0; // number of digits to right of
59.381 - // "decimal" point; leading zeros
59.382 - // must always be accounted for
59.383 - /*
59.384 - * The significand is made up of either
59.385 - *
59.386 - * 1. group 4 entirely (integer portion only)
59.387 - *
59.388 - * OR
59.389 - *
59.390 - * 2. the fractional portion from group 7 plus any
59.391 - * (optional) integer portions from group 6.
59.392 - */
59.393 - String group4;
59.394 - if( (group4 = m.group(4)) != null) { // Integer-only significand
59.395 - // Leading zeros never matter on the integer portion
59.396 - significandString = stripLeadingZeros(group4);
59.397 - leftDigits = significandString.length();
59.398 - }
59.399 - else {
59.400 - // Group 6 is the optional integer; leading zeros
59.401 - // never matter on the integer portion
59.402 - String group6 = stripLeadingZeros(m.group(6));
59.403 - leftDigits = group6.length();
59.404 -
59.405 - // fraction
59.406 - String group7 = m.group(7);
59.407 - rightDigits = group7.length();
59.408 -
59.409 - // Turn "integer.fraction" into "integer"+"fraction"
59.410 - significandString =
59.411 - ((group6 == null)?"":group6) + // is the null
59.412 - // check necessary?
59.413 - group7;
59.414 - }
59.415 -
59.416 - significandString = stripLeadingZeros(significandString);
59.417 - signifLength = significandString.length();
59.418 -
59.419 - /*
59.420 - * Adjust exponent as described above
59.421 - */
59.422 - if (leftDigits >= 1) { // Cases 1 and 2
59.423 - exponentAdjust = 4*(leftDigits - 1);
59.424 - } else { // Cases 3 and 4
59.425 - exponentAdjust = -4*( rightDigits - signifLength + 1);
59.426 - }
59.427 -
59.428 - // If the significand is zero, the exponent doesn't
59.429 - // matter; return a properly signed zero.
59.430 -
59.431 - if (signifLength == 0) { // Only zeros in input
59.432 - return new FormattedFloatingDecimal(sign * 0.0);
59.433 - }
59.434 - }
59.435 -
59.436 - // Extract Exponent
59.437 - /*
59.438 - * Use an int to read in the exponent value; this should
59.439 - * provide more than sufficient range for non-contrived
59.440 - * inputs. If reading the exponent in as an int does
59.441 - * overflow, examine the sign of the exponent and
59.442 - * significand to determine what to do.
59.443 - */
59.444 - String group8 = m.group(8);
59.445 - boolean positiveExponent = ( group8 == null ) || group8.equals("+");
59.446 - long unsignedRawExponent;
59.447 - try {
59.448 - unsignedRawExponent = Integer.parseInt(m.group(9));
59.449 - }
59.450 - catch (NumberFormatException e) {
59.451 - // At this point, we know the exponent is
59.452 - // syntactically well-formed as a sequence of
59.453 - // digits. Therefore, if an NumberFormatException
59.454 - // is thrown, it must be due to overflowing int's
59.455 - // range. Also, at this point, we have already
59.456 - // checked for a zero significand. Thus the signs
59.457 - // of the exponent and significand determine the
59.458 - // final result:
59.459 - //
59.460 - // significand
59.461 - // + -
59.462 - // exponent + +infinity -infinity
59.463 - // - +0.0 -0.0
59.464 - return new FormattedFloatingDecimal(sign * (positiveExponent ?
59.465 - Double.POSITIVE_INFINITY : 0.0));
59.466 - }
59.467 -
59.468 - long rawExponent =
59.469 - (positiveExponent ? 1L : -1L) * // exponent sign
59.470 - unsignedRawExponent; // exponent magnitude
59.471 -
59.472 - // Calculate partially adjusted exponent
59.473 - long exponent = rawExponent + exponentAdjust ;
59.474 -
59.475 - // Starting copying non-zero bits into proper position in
59.476 - // a long; copy explicit bit too; this will be masked
59.477 - // later for normal values.
59.478 -
59.479 - boolean round = false;
59.480 - boolean sticky = false;
59.481 - int bitsCopied=0;
59.482 - int nextShift=0;
59.483 - long significand=0L;
59.484 - // First iteration is different, since we only copy
59.485 - // from the leading significand bit; one more exponent
59.486 - // adjust will be needed...
59.487 -
59.488 - // IMPORTANT: make leadingDigit a long to avoid
59.489 - // surprising shift semantics!
59.490 - long leadingDigit = getHexDigit(significandString, 0);
59.491 -
59.492 - /*
59.493 - * Left shift the leading digit (53 - (bit position of
59.494 - * leading 1 in digit)); this sets the top bit of the
59.495 - * significand to 1. The nextShift value is adjusted
59.496 - * to take into account the number of bit positions of
59.497 - * the leadingDigit actually used. Finally, the
59.498 - * exponent is adjusted to normalize the significand
59.499 - * as a binary value, not just a hex value.
59.500 - */
59.501 - if (leadingDigit == 1) {
59.502 - significand |= leadingDigit << 52;
59.503 - nextShift = 52 - 4;
59.504 - /* exponent += 0 */ }
59.505 - else if (leadingDigit <= 3) { // [2, 3]
59.506 - significand |= leadingDigit << 51;
59.507 - nextShift = 52 - 5;
59.508 - exponent += 1;
59.509 - }
59.510 - else if (leadingDigit <= 7) { // [4, 7]
59.511 - significand |= leadingDigit << 50;
59.512 - nextShift = 52 - 6;
59.513 - exponent += 2;
59.514 - }
59.515 - else if (leadingDigit <= 15) { // [8, f]
59.516 - significand |= leadingDigit << 49;
59.517 - nextShift = 52 - 7;
59.518 - exponent += 3;
59.519 - } else {
59.520 - throw new AssertionError("Result from digit converstion too large!");
59.521 - }
59.522 - // The preceding if-else could be replaced by a single
59.523 - // code block based on the high-order bit set in
59.524 - // leadingDigit. Given leadingOnePosition,
59.525 -
59.526 - // significand |= leadingDigit << (SIGNIFICAND_WIDTH - leadingOnePosition);
59.527 - // nextShift = 52 - (3 + leadingOnePosition);
59.528 - // exponent += (leadingOnePosition-1);
59.529 -
59.530 -
59.531 - /*
59.532 - * Now the exponent variable is equal to the normalized
59.533 - * binary exponent. Code below will make representation
59.534 - * adjustments if the exponent is incremented after
59.535 - * rounding (includes overflows to infinity) or if the
59.536 - * result is subnormal.
59.537 - */
59.538 -
59.539 - // Copy digit into significand until the significand can't
59.540 - // hold another full hex digit or there are no more input
59.541 - // hex digits.
59.542 - int i = 0;
59.543 - for(i = 1;
59.544 - i < signifLength && nextShift >= 0;
59.545 - i++) {
59.546 - long currentDigit = getHexDigit(significandString, i);
59.547 - significand |= (currentDigit << nextShift);
59.548 - nextShift-=4;
59.549 - }
59.550 -
59.551 - // After the above loop, the bulk of the string is copied.
59.552 - // Now, we must copy any partial hex digits into the
59.553 - // significand AND compute the round bit and start computing
59.554 - // sticky bit.
59.555 -
59.556 - if ( i < signifLength ) { // at least one hex input digit exists
59.557 - long currentDigit = getHexDigit(significandString, i);
59.558 -
59.559 - // from nextShift, figure out how many bits need
59.560 - // to be copied, if any
59.561 - switch(nextShift) { // must be negative
59.562 - case -1:
59.563 - // three bits need to be copied in; can
59.564 - // set round bit
59.565 - significand |= ((currentDigit & 0xEL) >> 1);
59.566 - round = (currentDigit & 0x1L) != 0L;
59.567 - break;
59.568 -
59.569 - case -2:
59.570 - // two bits need to be copied in; can
59.571 - // set round and start sticky
59.572 - significand |= ((currentDigit & 0xCL) >> 2);
59.573 - round = (currentDigit &0x2L) != 0L;
59.574 - sticky = (currentDigit & 0x1L) != 0;
59.575 - break;
59.576 -
59.577 - case -3:
59.578 - // one bit needs to be copied in
59.579 - significand |= ((currentDigit & 0x8L)>>3);
59.580 - // Now set round and start sticky, if possible
59.581 - round = (currentDigit &0x4L) != 0L;
59.582 - sticky = (currentDigit & 0x3L) != 0;
59.583 - break;
59.584 -
59.585 - case -4:
59.586 - // all bits copied into significand; set
59.587 - // round and start sticky
59.588 - round = ((currentDigit & 0x8L) != 0); // is top bit set?
59.589 - // nonzeros in three low order bits?
59.590 - sticky = (currentDigit & 0x7L) != 0;
59.591 - break;
59.592 -
59.593 - default:
59.594 - throw new AssertionError("Unexpected shift distance remainder.");
59.595 - // break;
59.596 - }
59.597 -
59.598 - // Round is set; sticky might be set.
59.599 -
59.600 - // For the sticky bit, it suffices to check the
59.601 - // current digit and test for any nonzero digits in
59.602 - // the remaining unprocessed input.
59.603 - i++;
59.604 - while(i < signifLength && !sticky) {
59.605 - currentDigit = getHexDigit(significandString,i);
59.606 - sticky = sticky || (currentDigit != 0);
59.607 - i++;
59.608 - }
59.609 -
59.610 - }
59.611 - // else all of string was seen, round and sticky are
59.612 - // correct as false.
59.613 -
59.614 -
59.615 - // Check for overflow and update exponent accordingly.
59.616 -
59.617 - if (exponent > DoubleConsts.MAX_EXPONENT) { // Infinite result
59.618 - // overflow to properly signed infinity
59.619 - return new FormattedFloatingDecimal(sign * Double.POSITIVE_INFINITY);
59.620 - } else { // Finite return value
59.621 - if (exponent <= DoubleConsts.MAX_EXPONENT && // (Usually) normal result
59.622 - exponent >= DoubleConsts.MIN_EXPONENT) {
59.623 -
59.624 - // The result returned in this block cannot be a
59.625 - // zero or subnormal; however after the
59.626 - // significand is adjusted from rounding, we could
59.627 - // still overflow in infinity.
59.628 -
59.629 - // AND exponent bits into significand; if the
59.630 - // significand is incremented and overflows from
59.631 - // rounding, this combination will update the
59.632 - // exponent correctly, even in the case of
59.633 - // Double.MAX_VALUE overflowing to infinity.
59.634 -
59.635 - significand = (( ((long)exponent +
59.636 - (long)DoubleConsts.EXP_BIAS) <<
59.637 - (DoubleConsts.SIGNIFICAND_WIDTH-1))
59.638 - & DoubleConsts.EXP_BIT_MASK) |
59.639 - (DoubleConsts.SIGNIF_BIT_MASK & significand);
59.640 -
59.641 - } else { // Subnormal or zero
59.642 - // (exponent < DoubleConsts.MIN_EXPONENT)
59.643 -
59.644 - if (exponent < (DoubleConsts.MIN_SUB_EXPONENT -1 )) {
59.645 - // No way to round back to nonzero value
59.646 - // regardless of significand if the exponent is
59.647 - // less than -1075.
59.648 - return new FormattedFloatingDecimal(sign * 0.0);
59.649 - } else { // -1075 <= exponent <= MIN_EXPONENT -1 = -1023
59.650 - /*
59.651 - * Find bit position to round to; recompute
59.652 - * round and sticky bits, and shift
59.653 - * significand right appropriately.
59.654 - */
59.655 -
59.656 - sticky = sticky || round;
59.657 - round = false;
59.658 -
59.659 - // Number of bits of significand to preserve is
59.660 - // exponent - abs_min_exp +1
59.661 - // check:
59.662 - // -1075 +1074 + 1 = 0
59.663 - // -1023 +1074 + 1 = 52
59.664 -
59.665 - int bitsDiscarded = 53 -
59.666 - ((int)exponent - DoubleConsts.MIN_SUB_EXPONENT + 1);
59.667 - assert bitsDiscarded >= 1 && bitsDiscarded <= 53;
59.668 -
59.669 - // What to do here:
59.670 - // First, isolate the new round bit
59.671 - round = (significand & (1L << (bitsDiscarded -1))) != 0L;
59.672 - if (bitsDiscarded > 1) {
59.673 - // create mask to update sticky bits; low
59.674 - // order bitsDiscarded bits should be 1
59.675 - long mask = ~((~0L) << (bitsDiscarded -1));
59.676 - sticky = sticky || ((significand & mask) != 0L ) ;
59.677 - }
59.678 -
59.679 - // Now, discard the bits
59.680 - significand = significand >> bitsDiscarded;
59.681 -
59.682 - significand = (( ((long)(DoubleConsts.MIN_EXPONENT -1) + // subnorm exp.
59.683 - (long)DoubleConsts.EXP_BIAS) <<
59.684 - (DoubleConsts.SIGNIFICAND_WIDTH-1))
59.685 - & DoubleConsts.EXP_BIT_MASK) |
59.686 - (DoubleConsts.SIGNIF_BIT_MASK & significand);
59.687 - }
59.688 - }
59.689 -
59.690 - // The significand variable now contains the currently
59.691 - // appropriate exponent bits too.
59.692 -
59.693 - /*
59.694 - * Determine if significand should be incremented;
59.695 - * making this determination depends on the least
59.696 - * significant bit and the round and sticky bits.
59.697 - *
59.698 - * Round to nearest even rounding table, adapted from
59.699 - * table 4.7 in "Computer Arithmetic" by IsraelKoren.
59.700 - * The digit to the left of the "decimal" point is the
59.701 - * least significant bit, the digits to the right of
59.702 - * the point are the round and sticky bits
59.703 - *
59.704 - * Number Round(x)
59.705 - * x0.00 x0.
59.706 - * x0.01 x0.
59.707 - * x0.10 x0.
59.708 - * x0.11 x1. = x0. +1
59.709 - * x1.00 x1.
59.710 - * x1.01 x1.
59.711 - * x1.10 x1. + 1
59.712 - * x1.11 x1. + 1
59.713 - */
59.714 - boolean incremented = false;
59.715 - boolean leastZero = ((significand & 1L) == 0L);
59.716 - if( ( leastZero && round && sticky ) ||
59.717 - ((!leastZero) && round )) {
59.718 - incremented = true;
59.719 - significand++;
59.720 - }
59.721 -
59.722 - FormattedFloatingDecimal fd = new FormattedFloatingDecimal(FpUtils.rawCopySign(
59.723 - Double.longBitsToDouble(significand),
59.724 - sign));
59.725 -
59.726 - /*
59.727 - * Set roundingDir variable field of fd properly so
59.728 - * that the input string can be properly rounded to a
59.729 - * float value. There are two cases to consider:
59.730 - *
59.731 - * 1. rounding to double discards sticky bit
59.732 - * information that would change the result of a float
59.733 - * rounding (near halfway case between two floats)
59.734 - *
59.735 - * 2. rounding to double rounds up when rounding up
59.736 - * would not occur when rounding to float.
59.737 - *
59.738 - * For former case only needs to be considered when
59.739 - * the bits rounded away when casting to float are all
59.740 - * zero; otherwise, float round bit is properly set
59.741 - * and sticky will already be true.
59.742 - *
59.743 - * The lower exponent bound for the code below is the
59.744 - * minimum (normalized) subnormal exponent - 1 since a
59.745 - * value with that exponent can round up to the
59.746 - * minimum subnormal value and the sticky bit
59.747 - * information must be preserved (i.e. case 1).
59.748 - */
59.749 - if ((exponent >= FloatConsts.MIN_SUB_EXPONENT-1) &&
59.750 - (exponent <= FloatConsts.MAX_EXPONENT ) ){
59.751 - // Outside above exponent range, the float value
59.752 - // will be zero or infinity.
59.753 -
59.754 - /*
59.755 - * If the low-order 28 bits of a rounded double
59.756 - * significand are 0, the double could be a
59.757 - * half-way case for a rounding to float. If the
59.758 - * double value is a half-way case, the double
59.759 - * significand may have to be modified to round
59.760 - * the the right float value (see the stickyRound
59.761 - * method). If the rounding to double has lost
59.762 - * what would be float sticky bit information, the
59.763 - * double significand must be incremented. If the
59.764 - * double value's significand was itself
59.765 - * incremented, the float value may end up too
59.766 - * large so the increment should be undone.
59.767 - */
59.768 - if ((significand & 0xfffffffL) == 0x0L) {
59.769 - // For negative values, the sign of the
59.770 - // roundDir is the same as for positive values
59.771 - // since adding 1 increasing the significand's
59.772 - // magnitude and subtracting 1 decreases the
59.773 - // significand's magnitude. If neither round
59.774 - // nor sticky is true, the double value is
59.775 - // exact and no adjustment is required for a
59.776 - // proper float rounding.
59.777 - if( round || sticky) {
59.778 - if (leastZero) { // prerounding lsb is 0
59.779 - // If round and sticky were both true,
59.780 - // and the least significant
59.781 - // significand bit were 0, the rounded
59.782 - // significand would not have its
59.783 - // low-order bits be zero. Therefore,
59.784 - // we only need to adjust the
59.785 - // significand if round XOR sticky is
59.786 - // true.
59.787 - if (round ^ sticky) {
59.788 - fd.roundDir = 1;
59.789 - }
59.790 - }
59.791 - else { // prerounding lsb is 1
59.792 - // If the prerounding lsb is 1 and the
59.793 - // resulting significand has its
59.794 - // low-order bits zero, the significand
59.795 - // was incremented. Here, we undo the
59.796 - // increment, which will ensure the
59.797 - // right guard and sticky bits for the
59.798 - // float rounding.
59.799 - if (round)
59.800 - fd.roundDir = -1;
59.801 - }
59.802 - }
59.803 - }
59.804 - }
59.805 -
59.806 - fd.fromHex = true;
59.807 - return fd;
59.808 - }
59.809 - }
59.810 - }
59.811 -
59.812 - /**
59.813 - * Return <code>s</code> with any leading zeros removed.
59.814 - */
59.815 - static String stripLeadingZeros(String s) {
59.816 - return s.replaceFirst("^0+", "");
59.817 - }
59.818 -
59.819 - /**
59.820 - * Extract a hexadecimal digit from position <code>position</code>
59.821 - * of string <code>s</code>.
59.822 - */
59.823 - static int getHexDigit(String s, int position) {
59.824 - int value = Character.digit(s.charAt(position), 16);
59.825 - if (value <= -1 || value >= 16) {
59.826 - throw new AssertionError("Unxpected failure of digit converstion of " +
59.827 - s.charAt(position));
59.828 - }
59.829 - return value;
59.830 - }
59.831 -
59.832 -
59.833 }
60.1 --- a/src/share/classes/sun/misc/JavaIOAccess.java Thu Apr 02 10:16:53 2009 -0700
60.2 +++ b/src/share/classes/sun/misc/JavaIOAccess.java Wed Apr 08 15:40:56 2009 -0700
60.3 @@ -29,6 +29,5 @@
60.4
60.5 public interface JavaIOAccess {
60.6 public Console console();
60.7 - public Runnable consoleRestoreHook();
60.8 public Charset charset();
60.9 }
61.1 --- a/src/share/classes/sun/misc/JavaIODeleteOnExitAccess.java Thu Apr 02 10:16:53 2009 -0700
61.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
61.3 @@ -1,30 +0,0 @@
61.4 -/*
61.5 - * Copyright 2005 Sun Microsystems, Inc. All Rights Reserved.
61.6 - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
61.7 - *
61.8 - * This code is free software; you can redistribute it and/or modify it
61.9 - * under the terms of the GNU General Public License version 2 only, as
61.10 - * published by the Free Software Foundation. Sun designates this
61.11 - * particular file as subject to the "Classpath" exception as provided
61.12 - * by Sun in the LICENSE file that accompanied this code.
61.13 - *
61.14 - * This code is distributed in the hope that it will be useful, but WITHOUT
61.15 - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
61.16 - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
61.17 - * version 2 for more details (a copy is included in the LICENSE file that
61.18 - * accompanied this code).
61.19 - *
61.20 - * You should have received a copy of the GNU General Public License version
61.21 - * 2 along with this work; if not, write to the Free Software Foundation,
61.22 - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
61.23 - *
61.24 - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
61.25 - * CA 95054 USA or visit www.sun.com if you need additional information or
61.26 - * have any questions.
61.27 - */
61.28 -
61.29 -package sun.misc;
61.30 -
61.31 -public interface JavaIODeleteOnExitAccess extends Runnable {
61.32 - public void run();
61.33 -}
62.1 --- a/src/share/classes/sun/misc/JavaLangAccess.java Thu Apr 02 10:16:53 2009 -0700
62.2 +++ b/src/share/classes/sun/misc/JavaLangAccess.java Wed Apr 08 15:40:56 2009 -0700
62.3 @@ -54,4 +54,7 @@
62.4
62.5 /** Set thread's blocker field. */
62.6 void blockedOn(Thread t, Interruptible b);
62.7 +
62.8 + /** register shutdown hook */
62.9 + void registerShutdownHook(int slot, Runnable r);
62.10 }
63.1 --- a/src/share/classes/sun/misc/SharedSecrets.java Thu Apr 02 10:16:53 2009 -0700
63.2 +++ b/src/share/classes/sun/misc/SharedSecrets.java Wed Apr 08 15:40:56 2009 -0700
63.3 @@ -44,7 +44,6 @@
63.4 private static JavaUtilJarAccess javaUtilJarAccess;
63.5 private static JavaLangAccess javaLangAccess;
63.6 private static JavaIOAccess javaIOAccess;
63.7 - private static JavaIODeleteOnExitAccess javaIODeleteOnExitAccess;
63.8 private static JavaNetAccess javaNetAccess;
63.9 private static JavaNioAccess javaNioAccess;
63.10 private static JavaIOFileDescriptorAccess javaIOFileDescriptorAccess;
63.11 @@ -103,17 +102,6 @@
63.12 return javaIOAccess;
63.13 }
63.14
63.15 - public static void setJavaIODeleteOnExitAccess(JavaIODeleteOnExitAccess jida) {
63.16 - javaIODeleteOnExitAccess = jida;
63.17 - }
63.18 -
63.19 - public static JavaIODeleteOnExitAccess getJavaIODeleteOnExitAccess() {
63.20 - if (javaIODeleteOnExitAccess == null) {
63.21 - unsafe.ensureClassInitialized(File.class);
63.22 - }
63.23 - return javaIODeleteOnExitAccess;
63.24 - }
63.25 -
63.26 public static void setJavaIOFileDescriptorAccess(JavaIOFileDescriptorAccess jiofda) {
63.27 javaIOFileDescriptorAccess = jiofda;
63.28 }
64.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
64.2 +++ b/src/share/classes/sun/nio/cs/ArrayDecoder.java Wed Apr 08 15:40:56 2009 -0700
64.3 @@ -0,0 +1,35 @@
64.4 +/*
64.5 + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved.
64.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
64.7 + *
64.8 + * This code is free software; you can redistribute it and/or modify it
64.9 + * under the terms of the GNU General Public License version 2 only, as
64.10 + * published by the Free Software Foundation. Sun designates this
64.11 + * particular file as subject to the "Classpath" exception as provided
64.12 + * by Sun in the LICENSE file that accompanied this code.
64.13 + *
64.14 + * This code is distributed in the hope that it will be useful, but WITHOUT
64.15 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
64.16 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
64.17 + * version 2 for more details (a copy is included in the LICENSE file that
64.18 + * accompanied this code).
64.19 + *
64.20 + * You should have received a copy of the GNU General Public License version
64.21 + * 2 along with this work; if not, write to the Free Software Foundation,
64.22 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
64.23 + *
64.24 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
64.25 + * CA 95054 USA or visit www.sun.com if you need additional information or
64.26 + * have any questions.
64.27 + */
64.28 +
64.29 +package sun.nio.cs;
64.30 +
64.31 +/*
64.32 + * FastPath byte[]->char[] decoder, REPLACE on malformed or
64.33 + * unmappable input.
64.34 + */
64.35 +
64.36 +public interface ArrayDecoder {
64.37 + int decode(byte[] src, int off, int len, char[] dst);
64.38 +}
65.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
65.2 +++ b/src/share/classes/sun/nio/cs/ArrayEncoder.java Wed Apr 08 15:40:56 2009 -0700
65.3 @@ -0,0 +1,35 @@
65.4 +/*
65.5 + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved.
65.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
65.7 + *
65.8 + * This code is free software; you can redistribute it and/or modify it
65.9 + * under the terms of the GNU General Public License version 2 only, as
65.10 + * published by the Free Software Foundation. Sun designates this
65.11 + * particular file as subject to the "Classpath" exception as provided
65.12 + * by Sun in the LICENSE file that accompanied this code.
65.13 + *
65.14 + * This code is distributed in the hope that it will be useful, but WITHOUT
65.15 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
65.16 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
65.17 + * version 2 for more details (a copy is included in the LICENSE file that
65.18 + * accompanied this code).
65.19 + *
65.20 + * You should have received a copy of the GNU General Public License version
65.21 + * 2 along with this work; if not, write to the Free Software Foundation,
65.22 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
65.23 + *
65.24 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
65.25 + * CA 95054 USA or visit www.sun.com if you need additional information or
65.26 + * have any questions.
65.27 + */
65.28 +
65.29 +package sun.nio.cs;
65.30 +
65.31 +/*
65.32 + * FastPath char[]->byte[] encoder, REPLACE on malformed input or
65.33 + * unmappable input.
65.34 + */
65.35 +
65.36 +public interface ArrayEncoder {
65.37 + int encode(char[] src, int off, int len, byte[] dst);
65.38 +}
66.1 --- a/src/share/classes/sun/nio/cs/ISO_8859_1.java Thu Apr 02 10:16:53 2009 -0700
66.2 +++ b/src/share/classes/sun/nio/cs/ISO_8859_1.java Wed Apr 08 15:40:56 2009 -0700
66.3 @@ -23,9 +23,6 @@
66.4 * have any questions.
66.5 */
66.6
66.7 -/*
66.8 - */
66.9 -
66.10 package sun.nio.cs;
66.11
66.12 import java.nio.ByteBuffer;
66.13 @@ -34,10 +31,7 @@
66.14 import java.nio.charset.CharsetDecoder;
66.15 import java.nio.charset.CharsetEncoder;
66.16 import java.nio.charset.CoderResult;
66.17 -import java.nio.charset.CharacterCodingException;
66.18 -import java.nio.charset.MalformedInputException;
66.19 -import java.nio.charset.UnmappableCharacterException;
66.20 -
66.21 +import java.util.Arrays;
66.22
66.23 class ISO_8859_1
66.24 extends Charset
66.25 @@ -65,8 +59,8 @@
66.26 return new Encoder(this);
66.27 }
66.28
66.29 - private static class Decoder extends CharsetDecoder {
66.30 -
66.31 + private static class Decoder extends CharsetDecoder
66.32 + implements ArrayDecoder {
66.33 private Decoder(Charset cs) {
66.34 super(cs, 1.0f, 1.0f);
66.35 }
66.36 @@ -127,10 +121,18 @@
66.37 return decodeBufferLoop(src, dst);
66.38 }
66.39
66.40 + public int decode(byte[] src, int sp, int len, char[] dst) {
66.41 + if (len > dst.length)
66.42 + len = dst.length;
66.43 + int dp = 0;
66.44 + while (dp < len)
66.45 + dst[dp++] = (char)(src[sp++] & 0xff);
66.46 + return dp;
66.47 + }
66.48 }
66.49
66.50 - private static class Encoder extends CharsetEncoder {
66.51 -
66.52 + private static class Encoder extends CharsetEncoder
66.53 + implements ArrayEncoder {
66.54 private Encoder(Charset cs) {
66.55 super(cs, 1.0f, 1.0f);
66.56 }
66.57 @@ -139,6 +141,10 @@
66.58 return c <= '\u00FF';
66.59 }
66.60
66.61 + public boolean isLegalReplacement(byte[] repl) {
66.62 + return (repl.length == 1); // we accept any byte value
66.63 + }
66.64 +
66.65 private final Surrogate.Parser sgp = new Surrogate.Parser();
66.66
66.67 private CoderResult encodeArrayLoop(CharBuffer src,
66.68 @@ -208,5 +214,31 @@
66.69 return encodeBufferLoop(src, dst);
66.70 }
66.71
66.72 + private byte repl = (byte)'?';
66.73 + protected void implReplaceWith(byte[] newReplacement) {
66.74 + repl = newReplacement[0];
66.75 + }
66.76 +
66.77 + public int encode(char[] src, int sp, int len, byte[] dst) {
66.78 + int dp = 0;
66.79 + int sl = sp + Math.min(len, dst.length);
66.80 + while (sp < sl) {
66.81 + char c = src[sp++];
66.82 + if (c <= '\u00FF') {
66.83 + dst[dp++] = (byte)c;
66.84 + continue;
66.85 + }
66.86 + if (Surrogate.isHigh(c) && sp < sl &&
66.87 + Surrogate.isLow(src[sp])) {
66.88 + if (len > dst.length) {
66.89 + sl++;
66.90 + len--;
66.91 + }
66.92 + sp++;
66.93 + }
66.94 + dst[dp++] = repl;
66.95 + }
66.96 + return dp;
66.97 + }
66.98 }
66.99 }
67.1 --- a/src/share/classes/sun/nio/cs/SingleByte.java Thu Apr 02 10:16:53 2009 -0700
67.2 +++ b/src/share/classes/sun/nio/cs/SingleByte.java Wed Apr 08 15:40:56 2009 -0700
67.3 @@ -32,6 +32,7 @@
67.4 import java.nio.charset.CharsetDecoder;
67.5 import java.nio.charset.CharsetEncoder;
67.6 import java.nio.charset.CoderResult;
67.7 +import java.util.Arrays;
67.8 import static sun.nio.cs.CharsetMapping.*;
67.9
67.10 public class SingleByte
67.11 @@ -45,7 +46,8 @@
67.12 return cr;
67.13 }
67.14
67.15 - public static class Decoder extends CharsetDecoder {
67.16 + final public static class Decoder extends CharsetDecoder
67.17 + implements ArrayDecoder {
67.18 private final char[] b2c;
67.19
67.20 public Decoder(Charset cs, char[] b2c) {
67.21 @@ -108,9 +110,29 @@
67.22 private final char decode(int b) {
67.23 return b2c[b + 128];
67.24 }
67.25 +
67.26 + private char repl = '\uFFFD';
67.27 + protected void implReplaceWith(String newReplacement) {
67.28 + repl = newReplacement.charAt(0);
67.29 + }
67.30 +
67.31 + public int decode(byte[] src, int sp, int len, char[] dst) {
67.32 + if (len > dst.length)
67.33 + len = dst.length;
67.34 + int dp = 0;
67.35 + while (dp < len) {
67.36 + dst[dp] = decode(src[sp++]);
67.37 + if (dst[dp] == UNMAPPABLE_DECODING) {
67.38 + dst[dp] = repl;
67.39 + }
67.40 + dp++;
67.41 + }
67.42 + return dp;
67.43 + }
67.44 }
67.45
67.46 - public static class Encoder extends CharsetEncoder {
67.47 + final public static class Encoder extends CharsetEncoder
67.48 + implements ArrayEncoder {
67.49 private Surrogate.Parser sgp;
67.50 private final char[] c2b;
67.51 private final char[] c2bIndex;
67.52 @@ -125,6 +147,11 @@
67.53 return encode(c) != UNMAPPABLE_ENCODING;
67.54 }
67.55
67.56 + public boolean isLegalReplacement(byte[] repl) {
67.57 + return ((repl.length == 1 && repl[0] == (byte)'?') ||
67.58 + super.isLegalReplacement(repl));
67.59 + }
67.60 +
67.61 private CoderResult encodeArrayLoop(CharBuffer src, ByteBuffer dst) {
67.62 char[] sa = src.array();
67.63 int sp = src.arrayOffset() + src.position();
67.64 @@ -200,6 +227,34 @@
67.65 return UNMAPPABLE_ENCODING;
67.66 return c2b[index + (ch & 0xff)];
67.67 }
67.68 +
67.69 + private byte repl = (byte)'?';
67.70 + protected void implReplaceWith(byte[] newReplacement) {
67.71 + repl = newReplacement[0];
67.72 + }
67.73 +
67.74 + public int encode(char[] src, int sp, int len, byte[] dst) {
67.75 + int dp = 0;
67.76 + int sl = sp + Math.min(len, dst.length);
67.77 + while (sp < sl) {
67.78 + char c = src[sp++];
67.79 + int b = encode(c);
67.80 + if (b != UNMAPPABLE_ENCODING) {
67.81 + dst[dp++] = (byte)b;
67.82 + continue;
67.83 + }
67.84 + if (Surrogate.isHigh(c) && sp < sl &&
67.85 + Surrogate.isLow(src[sp])) {
67.86 + if (len > dst.length) {
67.87 + sl++;
67.88 + len--;
67.89 + }
67.90 + sp++;
67.91 + }
67.92 + dst[dp++] = repl;
67.93 + }
67.94 + return dp;
67.95 + }
67.96 }
67.97
67.98 // init the c2b and c2bIndex tables from b2c.
68.1 --- a/src/share/classes/sun/nio/cs/US_ASCII.java Thu Apr 02 10:16:53 2009 -0700
68.2 +++ b/src/share/classes/sun/nio/cs/US_ASCII.java Wed Apr 08 15:40:56 2009 -0700
68.3 @@ -31,10 +31,7 @@
68.4 import java.nio.charset.CharsetDecoder;
68.5 import java.nio.charset.CharsetEncoder;
68.6 import java.nio.charset.CoderResult;
68.7 -import java.nio.charset.CharacterCodingException;
68.8 -import java.nio.charset.MalformedInputException;
68.9 -import java.nio.charset.UnmappableCharacterException;
68.10 -
68.11 +import java.util.Arrays;
68.12
68.13 public class US_ASCII
68.14 extends Charset
68.15 @@ -61,7 +58,8 @@
68.16 return new Encoder(this);
68.17 }
68.18
68.19 - private static class Decoder extends CharsetDecoder {
68.20 + private static class Decoder extends CharsetDecoder
68.21 + implements ArrayDecoder {
68.22
68.23 private Decoder(Charset cs) {
68.24 super(cs, 1.0f, 1.0f);
68.25 @@ -131,9 +129,27 @@
68.26 return decodeBufferLoop(src, dst);
68.27 }
68.28
68.29 + private char repl = '\uFFFD';
68.30 + protected void implReplaceWith(String newReplacement) {
68.31 + repl = newReplacement.charAt(0);
68.32 + }
68.33 +
68.34 + public int decode(byte[] src, int sp, int len, char[] dst) {
68.35 + int dp = 0;
68.36 + len = Math.min(len, dst.length);
68.37 + while (dp < len) {
68.38 + byte b = src[sp++];
68.39 + if (b >= 0)
68.40 + dst[dp++] = (char)b;
68.41 + else
68.42 + dst[dp++] = repl;
68.43 + }
68.44 + return dp;
68.45 + }
68.46 }
68.47
68.48 - private static class Encoder extends CharsetEncoder {
68.49 + private static class Encoder extends CharsetEncoder
68.50 + implements ArrayEncoder {
68.51
68.52 private Encoder(Charset cs) {
68.53 super(cs, 1.0f, 1.0f);
68.54 @@ -143,8 +159,11 @@
68.55 return c < 0x80;
68.56 }
68.57
68.58 + public boolean isLegalReplacement(byte[] repl) {
68.59 + return (repl.length == 1 && repl[0] >= 0);
68.60 + }
68.61 +
68.62 private final Surrogate.Parser sgp = new Surrogate.Parser();
68.63 -
68.64 private CoderResult encodeArrayLoop(CharBuffer src,
68.65 ByteBuffer dst)
68.66 {
68.67 @@ -213,6 +232,32 @@
68.68 return encodeBufferLoop(src, dst);
68.69 }
68.70
68.71 + private byte repl = (byte)'?';
68.72 + protected void implReplaceWith(byte[] newReplacement) {
68.73 + repl = newReplacement[0];
68.74 + }
68.75 +
68.76 + public int encode(char[] src, int sp, int len, byte[] dst) {
68.77 + int dp = 0;
68.78 + int sl = sp + Math.min(len, dst.length);
68.79 + while (sp < sl) {
68.80 + char c = src[sp++];
68.81 + if (c < 0x80) {
68.82 + dst[dp++] = (byte)c;
68.83 + continue;
68.84 + }
68.85 + if (Surrogate.isHigh(c) && sp < sl &&
68.86 + Surrogate.isLow(src[sp])) {
68.87 + if (len > dst.length) {
68.88 + sl++;
68.89 + len--;
68.90 + }
68.91 + sp++;
68.92 + }
68.93 + dst[dp++] = repl;
68.94 + }
68.95 + return dp;
68.96 + }
68.97 }
68.98
68.99 }
69.1 --- a/src/share/classes/sun/reflect/annotation/AnnotationParser.java Thu Apr 02 10:16:53 2009 -0700
69.2 +++ b/src/share/classes/sun/reflect/annotation/AnnotationParser.java Wed Apr 08 15:40:56 2009 -0700
69.3 @@ -788,4 +788,16 @@
69.4 for (int i = 0; i < length; i++)
69.5 skipMemberValue(buf);
69.6 }
69.7 +
69.8 + /*
69.9 + * This method converts the annotation map returned by the parseAnnotations()
69.10 + * method to an array. It is called by Field.getDeclaredAnnotations(),
69.11 + * Method.getDeclaredAnnotations(), and Constructor.getDeclaredAnnotations().
69.12 + * This avoids the reflection classes to load the Annotation class until
69.13 + * it is needed.
69.14 + */
69.15 + private static final Annotation[] EMPTY_ANNOTATION_ARRAY = new Annotation[0];
69.16 + public static Annotation[] toArray(Map<Class, Annotation> annotations) {
69.17 + return annotations.values().toArray(EMPTY_ANNOTATION_ARRAY);
69.18 + }
69.19 }
70.1 --- a/src/share/classes/sun/security/jgss/spnego/NegTokenInit.java Thu Apr 02 10:16:53 2009 -0700
70.2 +++ b/src/share/classes/sun/security/jgss/spnego/NegTokenInit.java Wed Apr 08 15:40:56 2009 -0700
70.3 @@ -1,5 +1,5 @@
70.4 /*
70.5 - * Copyright 2005-2006 Sun Microsystems, Inc. All Rights Reserved.
70.6 + * Copyright 2005-2009 Sun Microsystems, Inc. All Rights Reserved.
70.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
70.8 *
70.9 * This code is free software; you can redistribute it and/or modify it
70.10 @@ -66,11 +66,11 @@
70.11 private byte[] mechTypes = null;
70.12 private Oid[] mechTypeList = null;
70.13
70.14 - private byte[] reqFlags = null;
70.15 + private BitArray reqFlags = null;
70.16 private byte[] mechToken = null;
70.17 private byte[] mechListMIC = null;
70.18
70.19 - NegTokenInit(byte[] mechTypes, byte[] flags,
70.20 + NegTokenInit(byte[] mechTypes, BitArray flags,
70.21 byte[] token, byte[] mechListMIC)
70.22 {
70.23 super(NEG_TOKEN_INIT_ID);
70.24 @@ -101,7 +101,7 @@
70.25 // write context flags with CONTEXT 01
70.26 if (reqFlags != null) {
70.27 DerOutputStream flags = new DerOutputStream();
70.28 - flags.putBitString(reqFlags);
70.29 + flags.putUnalignedBitString(reqFlags);
70.30 initToken.write(DerValue.createTag(DerValue.TAG_CONTEXT,
70.31 true, (byte) 0x01), flags);
70.32 }
70.33 @@ -237,7 +237,7 @@
70.34 return mechTypeList;
70.35 }
70.36
70.37 - byte[] getReqFlags() {
70.38 + BitArray getReqFlags() {
70.39 return reqFlags;
70.40 }
70.41
71.1 --- a/src/share/classes/sun/security/jgss/spnego/SpNegoContext.java Thu Apr 02 10:16:53 2009 -0700
71.2 +++ b/src/share/classes/sun/security/jgss/spnego/SpNegoContext.java Wed Apr 08 15:40:56 2009 -0700
71.3 @@ -1,5 +1,5 @@
71.4 /*
71.5 - * Copyright 2005-2008 Sun Microsystems, Inc. All Rights Reserved.
71.6 + * Copyright 2005-2009 Sun Microsystems, Inc. All Rights Reserved.
71.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
71.8 *
71.9 * This code is free software; you can redistribute it and/or modify it
71.10 @@ -53,13 +53,6 @@
71.11
71.12 private int state = STATE_NEW;
71.13
71.14 - private static final int CHECKSUM_DELEG_FLAG = 1;
71.15 - private static final int CHECKSUM_MUTUAL_FLAG = 2;
71.16 - private static final int CHECKSUM_REPLAY_FLAG = 4;
71.17 - private static final int CHECKSUM_SEQUENCE_FLAG = 8;
71.18 - private static final int CHECKSUM_CONF_FLAG = 16;
71.19 - private static final int CHECKSUM_INTEG_FLAG = 32;
71.20 -
71.21 /*
71.22 * Optional features that the application can set and their default
71.23 * values.
71.24 @@ -697,25 +690,17 @@
71.25 /**
71.26 * get the context flags
71.27 */
71.28 - private byte[] getContextFlags() {
71.29 - int flags = 0;
71.30 + private BitArray getContextFlags() {
71.31 + BitArray out = new BitArray(7);
71.32
71.33 - if (getCredDelegState())
71.34 - flags |= CHECKSUM_DELEG_FLAG;
71.35 - if (getMutualAuthState())
71.36 - flags |= CHECKSUM_MUTUAL_FLAG;
71.37 - if (getReplayDetState())
71.38 - flags |= CHECKSUM_REPLAY_FLAG;
71.39 - if (getSequenceDetState())
71.40 - flags |= CHECKSUM_SEQUENCE_FLAG;
71.41 - if (getIntegState())
71.42 - flags |= CHECKSUM_INTEG_FLAG;
71.43 - if (getConfState())
71.44 - flags |= CHECKSUM_CONF_FLAG;
71.45 + if (getCredDelegState()) out.set(0, true);
71.46 + if (getMutualAuthState()) out.set(1, true);
71.47 + if (getReplayDetState()) out.set(2, true);
71.48 + if (getSequenceDetState()) out.set(3, true);
71.49 + if (getConfState()) out.set(5, true);
71.50 + if (getIntegState()) out.set(6, true);
71.51
71.52 - byte[] temp = new byte[1];
71.53 - temp[0] = (byte)(flags & 0xff);
71.54 - return temp;
71.55 + return out;
71.56 }
71.57
71.58 private void setContextFlags() {
72.1 --- a/src/share/classes/sun/security/krb5/Realm.java Thu Apr 02 10:16:53 2009 -0700
72.2 +++ b/src/share/classes/sun/security/krb5/Realm.java Wed Apr 08 15:40:56 2009 -0700
72.3 @@ -1,5 +1,5 @@
72.4 /*
72.5 - * Portions Copyright 2000-2006 Sun Microsystems, Inc. All Rights Reserved.
72.6 + * Portions Copyright 2000-2009 Sun Microsystems, Inc. All Rights Reserved.
72.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
72.8 *
72.9 * This code is free software; you can redistribute it and/or modify it
73.1 --- a/src/share/classes/sun/security/pkcs11/P11Key.java Thu Apr 02 10:16:53 2009 -0700
73.2 +++ b/src/share/classes/sun/security/pkcs11/P11Key.java Wed Apr 08 15:40:56 2009 -0700
73.3 @@ -1,5 +1,5 @@
73.4 /*
73.5 - * Copyright 2003-2006 Sun Microsystems, Inc. All Rights Reserved.
73.6 + * Copyright 2003-2009 Sun Microsystems, Inc. All Rights Reserved.
73.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
73.8 *
73.9 * This code is free software; you can redistribute it and/or modify it
73.10 @@ -26,6 +26,7 @@
73.11 package sun.security.pkcs11;
73.12
73.13 import java.io.*;
73.14 +import java.lang.ref.*;
73.15 import java.math.BigInteger;
73.16 import java.util.*;
73.17
73.18 @@ -67,9 +68,6 @@
73.19 // type of key, one of (PUBLIC, PRIVATE, SECRET)
73.20 final String type;
73.21
73.22 - // session in which the key was created, relevant for session objects
73.23 - final Session session;
73.24 -
73.25 // token instance
73.26 final Token token;
73.27
73.28 @@ -85,10 +83,12 @@
73.29 // flags indicating whether the key is a token object, sensitive, extractable
73.30 final boolean tokenObject, sensitive, extractable;
73.31
73.32 + // weak reference notification clean up for session keys
73.33 + private final SessionKeyRef sessionKeyRef;
73.34 +
73.35 P11Key(String type, Session session, long keyID, String algorithm,
73.36 int keyLength, CK_ATTRIBUTE[] attributes) {
73.37 this.type = type;
73.38 - this.session = session;
73.39 this.token = session.token;
73.40 this.keyID = keyID;
73.41 this.algorithm = algorithm;
73.42 @@ -111,7 +111,9 @@
73.43 this.sensitive = sensitive;
73.44 this.extractable = extractable;
73.45 if (tokenObject == false) {
73.46 - session.addObject();
73.47 + sessionKeyRef = new SessionKeyRef(this, keyID, session);
73.48 + } else {
73.49 + sessionKeyRef = null;
73.50 }
73.51 }
73.52
73.53 @@ -236,24 +238,6 @@
73.54 }
73.55 }
73.56
73.57 - protected void finalize() throws Throwable {
73.58 - if (tokenObject || (token.isValid() == false)) {
73.59 - super.finalize();
73.60 - return;
73.61 - }
73.62 - Session newSession = null;
73.63 - try {
73.64 - newSession = token.getOpSession();
73.65 - token.p11.C_DestroyObject(newSession.id(), keyID);
73.66 - } catch (PKCS11Exception e) {
73.67 - // ignore
73.68 - } finally {
73.69 - token.releaseSession(newSession);
73.70 - session.removeObject();
73.71 - super.finalize();
73.72 - }
73.73 - }
73.74 -
73.75 private final static CK_ATTRIBUTE[] A0 = new CK_ATTRIBUTE[0];
73.76
73.77 private static CK_ATTRIBUTE[] getAttributes(Session session, long keyID,
73.78 @@ -1055,5 +1039,65 @@
73.79 + "\n parameters: " + params;
73.80 }
73.81 }
73.82 +}
73.83
73.84 +final class SessionKeyRef extends WeakReference<P11Key>
73.85 + implements Comparable<SessionKeyRef> {
73.86 + private static ReferenceQueue<P11Key> refQueue =
73.87 + new ReferenceQueue<P11Key>();
73.88 + private static Set<SessionKeyRef> refList =
73.89 + Collections.synchronizedSortedSet(new TreeSet<SessionKeyRef>());
73.90 +
73.91 + static ReferenceQueue<P11Key> referenceQueue() {
73.92 + return refQueue;
73.93 + }
73.94 +
73.95 + static final private int MAX_ITERATIONS = 2;
73.96 +
73.97 + private static void drainRefQueueBounded() {
73.98 + int iterations = 0;
73.99 + while (iterations < MAX_ITERATIONS) {
73.100 + SessionKeyRef next = (SessionKeyRef) refQueue.poll();
73.101 + if (next != null) next.dispose();
73.102 + ++iterations;
73.103 + }
73.104 + }
73.105 +
73.106 + // handle to the native key
73.107 + private long keyID;
73.108 + private Session session;
73.109 +
73.110 + SessionKeyRef(P11Key key , long keyID, Session session) {
73.111 + super(key, refQueue);
73.112 + this.keyID = keyID;
73.113 + this.session = session;
73.114 + this.session.addObject();
73.115 + refList.add(this);
73.116 + // TBD: run at some interval and not every time?
73.117 + drainRefQueueBounded();
73.118 + }
73.119 +
73.120 + void dispose() {
73.121 + refList.remove(this);
73.122 + if (session.token.isValid()) {
73.123 + Session newSession = null;
73.124 + try {
73.125 + newSession = session.token.getOpSession();
73.126 + session.token.p11.C_DestroyObject(newSession.id(), keyID);
73.127 + } catch (PKCS11Exception e) {
73.128 + // ignore
73.129 + } finally {
73.130 + session.token.releaseSession(newSession);
73.131 + session.removeObject();
73.132 + }
73.133 + }
73.134 + }
73.135 +
73.136 + public int compareTo(SessionKeyRef other) {
73.137 + if (this.keyID == other.keyID) {
73.138 + return 0;
73.139 + } else {
73.140 + return (this.keyID < other.keyID) ? -1 : 1;
73.141 + }
73.142 + }
73.143 }
74.1 --- a/src/share/classes/sun/security/pkcs11/P11RSACipher.java Thu Apr 02 10:16:53 2009 -0700
74.2 +++ b/src/share/classes/sun/security/pkcs11/P11RSACipher.java Wed Apr 08 15:40:56 2009 -0700
74.3 @@ -1,5 +1,5 @@
74.4 /*
74.5 - * Copyright 2003-2008 Sun Microsystems, Inc. All Rights Reserved.
74.6 + * Copyright 2003-2009 Sun Microsystems, Inc. All Rights Reserved.
74.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
74.8 *
74.9 * This code is free software; you can redistribute it and/or modify it
74.10 @@ -191,7 +191,9 @@
74.11 throw new InvalidKeyException
74.12 ("Unwrap has to be used with private keys");
74.13 }
74.14 - encrypt = false;
74.15 + // No further setup needed for C_Unwrap(). We'll initialize later
74.16 + // if we can't use C_Unwrap().
74.17 + return;
74.18 } else {
74.19 throw new InvalidKeyException("Unsupported mode: " + opmode);
74.20 }
74.21 @@ -452,7 +454,7 @@
74.22 long keyID = token.p11.C_UnwrapKey(s.id(),
74.23 new CK_MECHANISM(mechanism), p11Key.keyID, wrappedKey,
74.24 attributes);
74.25 - return P11Key.secretKey(session, keyID, algorithm, 48 << 3,
74.26 + return P11Key.secretKey(s, keyID, algorithm, 48 << 3,
74.27 attributes);
74.28 } catch (PKCS11Exception e) {
74.29 throw new InvalidKeyException("unwrap() failed", e);
74.30 @@ -461,6 +463,7 @@
74.31 }
74.32 }
74.33 // XXX implement unwrap using C_Unwrap() for all keys
74.34 + implInit(Cipher.DECRYPT_MODE, p11Key);
74.35 if (wrappedKey.length > maxInputSize) {
74.36 throw new InvalidKeyException("Key is too long for unwrapping");
74.37 }
75.1 --- a/src/share/classes/sun/security/pkcs11/P11SecretKeyFactory.java Thu Apr 02 10:16:53 2009 -0700
75.2 +++ b/src/share/classes/sun/security/pkcs11/P11SecretKeyFactory.java Wed Apr 08 15:40:56 2009 -0700
75.3 @@ -151,7 +151,7 @@
75.4 session = token.getObjSession();
75.5 long newKeyID = token.p11.C_CopyObject(session.id(),
75.6 p11Key.keyID, extraAttrs);
75.7 - p11Key = (P11Key) (P11Key.secretKey(p11Key.session,
75.8 + p11Key = (P11Key) (P11Key.secretKey(session,
75.9 newKeyID, p11Key.algorithm, p11Key.keyLength,
75.10 extraAttrs));
75.11 } catch (PKCS11Exception p11e) {
76.1 --- a/src/share/classes/sun/security/provider/SeedGenerator.java Thu Apr 02 10:16:53 2009 -0700
76.2 +++ b/src/share/classes/sun/security/provider/SeedGenerator.java Wed Apr 08 15:40:56 2009 -0700
76.3 @@ -1,5 +1,5 @@
76.4 /*
76.5 - * Copyright 1996-2006 Sun Microsystems, Inc. All Rights Reserved.
76.6 + * Copyright 1996-2009 Sun Microsystems, Inc. All Rights Reserved.
76.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
76.8 *
76.9 * This code is free software; you can redistribute it and/or modify it
76.10 @@ -68,6 +68,9 @@
76.11 import java.util.Properties;
76.12 import java.util.Enumeration;
76.13 import java.net.*;
76.14 +import java.nio.file.DirectoryStream;
76.15 +import java.nio.file.Path;
76.16 +import java.util.Random;
76.17 import sun.security.util.Debug;
76.18
76.19 abstract class SeedGenerator {
76.20 @@ -180,10 +183,27 @@
76.21
76.22 // The temporary dir
76.23 File f = new File(p.getProperty("java.io.tmpdir"));
76.24 - String[] sa = f.list();
76.25 - for(int i = 0; i < sa.length; i++)
76.26 - md.update(sa[i].getBytes());
76.27 -
76.28 + int count = 0;
76.29 + DirectoryStream<Path> ds
76.30 + = f.toPath().newDirectoryStream();
76.31 + try {
76.32 + // We use a Random object to choose what file names
76.33 + // should be used. Otherwise on a machine with too
76.34 + // many files, the same first 1024 files always get
76.35 + // used. Any, We make sure the first 512 files are
76.36 + // always used.
76.37 + Random r = new Random();
76.38 + for (Path path: ds) {
76.39 + if (count < 512 || r.nextBoolean()) {
76.40 + md.update(path.getName().toString().getBytes());
76.41 + }
76.42 + if (count++ > 1024) {
76.43 + break;
76.44 + }
76.45 + }
76.46 + } finally {
76.47 + ds.close();
76.48 + }
76.49 } catch (Exception ex) {
76.50 md.update((byte)ex.hashCode());
76.51 }
77.1 --- a/src/share/classes/sun/security/provider/certpath/OCSPResponse.java Thu Apr 02 10:16:53 2009 -0700
77.2 +++ b/src/share/classes/sun/security/provider/certpath/OCSPResponse.java Wed Apr 08 15:40:56 2009 -0700
77.3 @@ -1,5 +1,5 @@
77.4 /*
77.5 - * Copyright 2003-2008 Sun Microsystems, Inc. All Rights Reserved.
77.6 + * Copyright 2003-2009 Sun Microsystems, Inc. All Rights Reserved.
77.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
77.8 *
77.9 * This code is free software; you can redistribute it and/or modify it
77.10 @@ -28,8 +28,6 @@
77.11 import java.io.*;
77.12 import java.math.BigInteger;
77.13 import java.security.*;
77.14 -import java.security.cert.Certificate;
77.15 -import java.security.cert.CertificateFactory;
77.16 import java.security.cert.CertPathValidatorException;
77.17 import java.security.cert.CRLReason;
77.18 import java.security.cert.X509Certificate;
77.19 @@ -335,7 +333,7 @@
77.20
77.21 // Check whether the cert returned by the responder is trusted
77.22 if (x509Certs != null && x509Certs[0] != null) {
77.23 - X509Certificate cert = x509Certs[0];
77.24 + X509CertImpl cert = x509Certs[0];
77.25
77.26 // First check if the cert matches the responder cert which
77.27 // was set locally.
77.28 @@ -344,8 +342,8 @@
77.29
77.30 // Next check if the cert was issued by the responder cert
77.31 // which was set locally.
77.32 - } else if (cert.getIssuerDN().equals(
77.33 - responderCert.getSubjectDN())) {
77.34 + } else if (cert.getIssuerX500Principal().equals(
77.35 + responderCert.getSubjectX500Principal())) {
77.36
77.37 // Check for the OCSPSigning key purpose
77.38 List<String> keyPurposes = cert.getExtendedKeyUsage();
77.39 @@ -360,6 +358,43 @@
77.40 "OCSP responses");
77.41 }
77.42
77.43 + // check the validity
77.44 + try {
77.45 + Date dateCheckedAgainst = params.getDate();
77.46 + if (dateCheckedAgainst == null) {
77.47 + cert.checkValidity();
77.48 + } else {
77.49 + cert.checkValidity(dateCheckedAgainst);
77.50 + }
77.51 + } catch (GeneralSecurityException e) {
77.52 + if (DEBUG != null) {
77.53 + DEBUG.println("Responder's certificate is not " +
77.54 + "within the validity period.");
77.55 + }
77.56 + throw new CertPathValidatorException(
77.57 + "Responder's certificate not within the " +
77.58 + "validity period");
77.59 + }
77.60 +
77.61 + // check for revocation
77.62 + //
77.63 + // A CA may specify that an OCSP client can trust a
77.64 + // responder for the lifetime of the responder's
77.65 + // certificate. The CA does so by including the
77.66 + // extension id-pkix-ocsp-nocheck.
77.67 + //
77.68 + Extension noCheck =
77.69 + cert.getExtension(PKIXExtensions.OCSPNoCheck_Id);
77.70 + if (noCheck != null) {
77.71 + if (DEBUG != null) {
77.72 + DEBUG.println("Responder's certificate includes " +
77.73 + "the extension id-pkix-ocsp-nocheck.");
77.74 + }
77.75 + } else {
77.76 + // we should do the revocating checking of the
77.77 + // authorized responder in a future update.
77.78 + }
77.79 +
77.80 // verify the signature
77.81 try {
77.82 cert.verify(responderCert.getPublicKey());
77.83 @@ -369,6 +404,14 @@
77.84 } catch (GeneralSecurityException e) {
77.85 responderCert = null;
77.86 }
77.87 + } else {
77.88 + if (DEBUG != null) {
77.89 + DEBUG.println("Responder's certificate is not " +
77.90 + "authorized to sign OCSP responses.");
77.91 + }
77.92 + throw new CertPathValidatorException(
77.93 + "Responder's certificate not authorized to sign " +
77.94 + "OCSP responses");
77.95 }
77.96 }
77.97
78.1 --- a/src/share/classes/sun/security/provider/certpath/PKIXMasterCertPathValidator.java Thu Apr 02 10:16:53 2009 -0700
78.2 +++ b/src/share/classes/sun/security/provider/certpath/PKIXMasterCertPathValidator.java Wed Apr 08 15:40:56 2009 -0700
78.3 @@ -1,5 +1,5 @@
78.4 /*
78.5 - * Copyright 2000-2008 Sun Microsystems, Inc. All Rights Reserved.
78.6 + * Copyright 2000-2009 Sun Microsystems, Inc. All Rights Reserved.
78.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
78.8 *
78.9 * This code is free software; you can redistribute it and/or modify it
78.10 @@ -143,11 +143,15 @@
78.11 }
78.12
78.13 } catch (CertPathValidatorException cpve) {
78.14 - // Throw the saved OCSP exception
78.15 - // (when the CRL check has also failed)
78.16 + // Throw the saved OCSP exception unless the CRL
78.17 + // checker has determined that the cert is revoked
78.18 if (ocspCause != null &&
78.19 - currChecker instanceof CrlRevocationChecker) {
78.20 - throw ocspCause;
78.21 + currChecker instanceof CrlRevocationChecker) {
78.22 + if (cpve.getReason() == BasicReason.REVOKED) {
78.23 + throw cpve;
78.24 + } else {
78.25 + throw ocspCause;
78.26 + }
78.27 }
78.28 /*
78.29 * Handle failover from OCSP to CRLs
79.1 --- a/src/share/classes/sun/security/tools/KeyTool.java Thu Apr 02 10:16:53 2009 -0700
79.2 +++ b/src/share/classes/sun/security/tools/KeyTool.java Wed Apr 08 15:40:56 2009 -0700
79.3 @@ -875,6 +875,18 @@
79.4 if (filename != null) {
79.5 inStream = new FileInputStream(filename);
79.6 }
79.7 + // Read the full stream before feeding to X509Factory,
79.8 + // otherwise, keytool -gencert | keytool -importcert
79.9 + // might not work properly, since -gencert is slow
79.10 + // and there's no data in the pipe at the beginning.
79.11 + ByteArrayOutputStream bout = new ByteArrayOutputStream();
79.12 + byte[] b = new byte[4096];
79.13 + while (true) {
79.14 + int len = inStream.read(b);
79.15 + if (len < 0) break;
79.16 + bout.write(b, 0, len);
79.17 + }
79.18 + inStream = new ByteArrayInputStream(bout.toByteArray());
79.19 try {
79.20 String importAlias = (alias!=null)?alias:keyAlias;
79.21 if (keyStore.entryInstanceOf(importAlias, KeyStore.PrivateKeyEntry.class)) {
79.22 @@ -1060,8 +1072,8 @@
79.23
79.24 X509CertInfo info = new X509CertInfo();
79.25 info.set(X509CertInfo.VALIDITY, interval);
79.26 - info.set(X509CertInfo.SERIAL_NUMBER, new CertificateSerialNumber
79.27 - ((int)(firstDate.getTime()/1000)));
79.28 + info.set(X509CertInfo.SERIAL_NUMBER, new CertificateSerialNumber(
79.29 + new java.util.Random().nextInt() & 0x7fffffff));
79.30 info.set(X509CertInfo.VERSION,
79.31 new CertificateVersion(CertificateVersion.V3));
79.32 info.set(X509CertInfo.ALGORITHM_ID,
79.33 @@ -1910,7 +1922,9 @@
79.34 ObjectIdentifier oid = attr.getAttributeId();
79.35 if (oid.equals(PKCS9Attribute.EXTENSION_REQUEST_OID)) {
79.36 CertificateExtensions exts = (CertificateExtensions)attr.getAttributeValue();
79.37 - printExtensions(rb.getString("Extension Request:"), exts, out);
79.38 + if (exts != null) {
79.39 + printExtensions(rb.getString("Extension Request:"), exts, out);
79.40 + }
79.41 } else {
79.42 out.println(attr.getAttributeId());
79.43 out.println(attr.getAttributeValue());
79.44 @@ -2107,8 +2121,8 @@
79.45 certInfo.set(X509CertInfo.VALIDITY, interval);
79.46
79.47 // Make new serial number
79.48 - certInfo.set(X509CertInfo.SERIAL_NUMBER, new CertificateSerialNumber
79.49 - ((int)(firstDate.getTime()/1000)));
79.50 + certInfo.set(X509CertInfo.SERIAL_NUMBER, new CertificateSerialNumber(
79.51 + new java.util.Random().nextInt() & 0x7fffffff));
79.52
79.53 // Set owner and issuer fields
79.54 X500Name owner;
79.55 @@ -2495,7 +2509,9 @@
79.56 X509CertImpl.INFO);
79.57 CertificateExtensions exts = (CertificateExtensions)
79.58 certInfo.get(X509CertInfo.EXTENSIONS);
79.59 - printExtensions(rb.getString("Extensions: "), exts, out);
79.60 + if (exts != null) {
79.61 + printExtensions(rb.getString("Extensions: "), exts, out);
79.62 + }
79.63 }
79.64 }
79.65
80.1 --- a/src/share/classes/sun/security/x509/AuthorityInfoAccessExtension.java Thu Apr 02 10:16:53 2009 -0700
80.2 +++ b/src/share/classes/sun/security/x509/AuthorityInfoAccessExtension.java Wed Apr 08 15:40:56 2009 -0700
80.3 @@ -1,5 +1,5 @@
80.4 /*
80.5 - * Copyright 2004-2006 Sun Microsystems, Inc. All Rights Reserved.
80.6 + * Copyright 2004-2009 Sun Microsystems, Inc. All Rights Reserved.
80.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
80.8 *
80.9 * This code is free software; you can redistribute it and/or modify it
81.1 --- a/src/share/classes/sun/security/x509/CertAndKeyGen.java Thu Apr 02 10:16:53 2009 -0700
81.2 +++ b/src/share/classes/sun/security/x509/CertAndKeyGen.java Wed Apr 08 15:40:56 2009 -0700
81.3 @@ -265,8 +265,8 @@
81.4 // Add all mandatory attributes
81.5 info.set(X509CertInfo.VERSION,
81.6 new CertificateVersion(CertificateVersion.V3));
81.7 - info.set(X509CertInfo.SERIAL_NUMBER,
81.8 - new CertificateSerialNumber((int)(firstDate.getTime()/1000)));
81.9 + info.set(X509CertInfo.SERIAL_NUMBER, new CertificateSerialNumber(
81.10 + new java.util.Random().nextInt() & 0x7fffffff));
81.11 AlgorithmId algID = issuer.getAlgorithmId();
81.12 info.set(X509CertInfo.ALGORITHM_ID,
81.13 new CertificateAlgorithmId(algID));
82.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
82.2 +++ b/src/share/classes/sun/security/x509/OCSPNoCheckExtension.java Wed Apr 08 15:40:56 2009 -0700
82.3 @@ -0,0 +1,132 @@
82.4 +/*
82.5 + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved.
82.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
82.7 + *
82.8 + * This code is free software; you can redistribute it and/or modify it
82.9 + * under the terms of the GNU General Public License version 2 only, as
82.10 + * published by the Free Software Foundation. Sun designates this
82.11 + * particular file as subject to the "Classpath" exception as provided
82.12 + * by Sun in the LICENSE file that accompanied this code.
82.13 + *
82.14 + * This code is distributed in the hope that it will be useful, but WITHOUT
82.15 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
82.16 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
82.17 + * version 2 for more details (a copy is included in the LICENSE file that
82.18 + * accompanied this code).
82.19 + *
82.20 + * You should have received a copy of the GNU General Public License version
82.21 + * 2 along with this work; if not, write to the Free Software Foundation,
82.22 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
82.23 + *
82.24 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
82.25 + * CA 95054 USA or visit www.sun.com if you need additional information or
82.26 + * have any questions.
82.27 + */
82.28 +
82.29 +package sun.security.x509;
82.30 +
82.31 +import java.io.IOException;
82.32 +import java.io.OutputStream;
82.33 +import java.util.Enumeration;
82.34 +
82.35 +import sun.security.util.*;
82.36 +
82.37 +/**
82.38 + * Represent the OCSP NoCheck Extension from RFC2560.
82.39 + * <p>
82.40 + * A CA may specify that an OCSP client can trust a responder for the
82.41 + * lifetime of the responder's certificate. The CA does so by including
82.42 + * the extension id-pkix-ocsp-nocheck. This SHOULD be a non-critical
82.43 + * extension. The value of the extension should be NULL. CAs issuing
82.44 + * such a certificate should realized that a compromise of the
82.45 + * responder's key, is as serious as the compromise of a CA key used to
82.46 + * sign CRLs, at least for the validity period of this certificate. CA's
82.47 + * may choose to issue this type of certificate with a very short
82.48 + * lifetime and renew it frequently.
82.49 + * <pre>
82.50 + * id-pkix-ocsp-nocheck OBJECT IDENTIFIER ::= { id-pkix-ocsp 5 }
82.51 + * </pre>
82.52 + *
82.53 + * @author Xuelei Fan
82.54 + * @see Extension
82.55 + * @see CertAttrSet
82.56 + */
82.57 +public class OCSPNoCheckExtension extends Extension
82.58 + implements CertAttrSet<String> {
82.59 +
82.60 + /**
82.61 + * Identifier for this attribute, to be used with the
82.62 + * get, set, delete methods of Certificate, x509 type.
82.63 + */
82.64 + public static final String IDENT =
82.65 + "x509.info.extensions.OCSPNoCheck";
82.66 + /**
82.67 + * Attribute names.
82.68 + */
82.69 + public static final String NAME = "OCSPNoCheck";
82.70 +
82.71 + /**
82.72 + * Create a OCSPNoCheckExtension
82.73 + */
82.74 + public OCSPNoCheckExtension() throws IOException {
82.75 + this.extensionId = PKIXExtensions.OCSPNoCheck_Id;
82.76 + this.critical = false;
82.77 + this.extensionValue = new byte[0];
82.78 + }
82.79 +
82.80 + /**
82.81 + * Create the extension from the passed DER encoded value.
82.82 + *
82.83 + * @param critical true if the extension is to be treated as critical.
82.84 + * @param value an array of DER encoded bytes of the actual value.
82.85 + * @exception IOException on error.
82.86 + */
82.87 + public OCSPNoCheckExtension(Boolean critical, Object value)
82.88 + throws IOException {
82.89 +
82.90 + this.extensionId = PKIXExtensions.OCSPNoCheck_Id;
82.91 + this.critical = critical.booleanValue();
82.92 +
82.93 + // the value should be null, just ignore it here.
82.94 + this.extensionValue = new byte[0];
82.95 + }
82.96 +
82.97 + /**
82.98 + * Set the attribute value.
82.99 + */
82.100 + public void set(String name, Object obj) throws IOException {
82.101 + throw new IOException("No attribute is allowed by " +
82.102 + "CertAttrSet:OCSPNoCheckExtension.");
82.103 + }
82.104 +
82.105 + /**
82.106 + * Get the attribute value.
82.107 + */
82.108 + public Object get(String name) throws IOException {
82.109 + throw new IOException("No attribute is allowed by " +
82.110 + "CertAttrSet:OCSPNoCheckExtension.");
82.111 + }
82.112 +
82.113 + /**
82.114 + * Delete the attribute value.
82.115 + */
82.116 + public void delete(String name) throws IOException {
82.117 + throw new IOException("No attribute is allowed by " +
82.118 + "CertAttrSet:OCSPNoCheckExtension.");
82.119 + }
82.120 +
82.121 + /**
82.122 + * Return an enumeration of names of attributes existing within this
82.123 + * attribute.
82.124 + */
82.125 + public Enumeration<String> getElements() {
82.126 + return (new AttributeNameEnumeration()).elements();
82.127 + }
82.128 +
82.129 + /**
82.130 + * Return the name of this attribute.
82.131 + */
82.132 + public String getName() {
82.133 + return NAME;
82.134 + }
82.135 +}
83.1 --- a/src/share/classes/sun/security/x509/OIDMap.java Thu Apr 02 10:16:53 2009 -0700
83.2 +++ b/src/share/classes/sun/security/x509/OIDMap.java Wed Apr 08 15:40:56 2009 -0700
83.3 @@ -100,6 +100,8 @@
83.4 DeltaCRLIndicatorExtension.NAME;
83.5 private static final String FRESHEST_CRL = ROOT + "." +
83.6 FreshestCRLExtension.NAME;
83.7 + private static final String OCSPNOCHECK = ROOT + "." +
83.8 + OCSPNoCheckExtension.NAME;
83.9
83.10 private static final int NetscapeCertType_data[] =
83.11 { 2, 16, 840, 1, 113730, 1, 1 };
83.12 @@ -161,6 +163,8 @@
83.13 "sun.security.x509.DeltaCRLIndicatorExtension");
83.14 addInternal(FRESHEST_CRL, PKIXExtensions.FreshestCRL_Id,
83.15 "sun.security.x509.FreshestCRLExtension");
83.16 + addInternal(OCSPNOCHECK, PKIXExtensions.OCSPNoCheck_Id,
83.17 + "sun.security.x509.OCSPNoCheckExtension");
83.18 }
83.19
83.20 /**
84.1 --- a/src/share/classes/sun/security/x509/PKIXExtensions.java Thu Apr 02 10:16:53 2009 -0700
84.2 +++ b/src/share/classes/sun/security/x509/PKIXExtensions.java Wed Apr 08 15:40:56 2009 -0700
84.3 @@ -1,5 +1,5 @@
84.4 /*
84.5 - * Copyright 1997-2005 Sun Microsystems, Inc. All Rights Reserved.
84.6 + * Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved.
84.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
84.8 *
84.9 * This code is free software; you can redistribute it and/or modify it
84.10 @@ -74,6 +74,8 @@
84.11 private static final int AuthInfoAccess_data [] = { 1, 3, 6, 1, 5, 5, 7, 1, 1};
84.12 private static final int SubjectInfoAccess_data [] = { 1, 3, 6, 1, 5, 5, 7, 1, 11};
84.13 private static final int FreshestCRL_data [] = { 2, 5, 29, 46 };
84.14 + private static final int OCSPNoCheck_data [] = { 1, 3, 6, 1, 5, 5, 7,
84.15 + 48, 1, 5};
84.16
84.17 /**
84.18 * Identifies the particular public key used to sign the certificate.
84.19 @@ -216,6 +218,12 @@
84.20 */
84.21 public static final ObjectIdentifier FreshestCRL_Id;
84.22
84.23 + /**
84.24 + * Identifies the OCSP client can trust the responder for the
84.25 + * lifetime of the responder's certificate.
84.26 + */
84.27 + public static final ObjectIdentifier OCSPNoCheck_Id;
84.28 +
84.29 static {
84.30 AuthorityKey_Id = ObjectIdentifier.newInternal(AuthorityKey_data);
84.31 SubjectKey_Id = ObjectIdentifier.newInternal(SubjectKey_data);
84.32 @@ -257,5 +265,6 @@
84.33 SubjectInfoAccess_Id =
84.34 ObjectIdentifier.newInternal(SubjectInfoAccess_data);
84.35 FreshestCRL_Id = ObjectIdentifier.newInternal(FreshestCRL_data);
84.36 + OCSPNoCheck_Id = ObjectIdentifier.newInternal(OCSPNoCheck_data);
84.37 }
84.38 }
85.1 --- a/src/share/lib/security/java.policy Thu Apr 02 10:16:53 2009 -0700
85.2 +++ b/src/share/lib/security/java.policy Wed Apr 08 15:40:56 2009 -0700
85.3 @@ -15,7 +15,8 @@
85.4 // It is strongly recommended that you either remove this permission
85.5 // from this policy file or further restrict it to code sources
85.6 // that you specify, because Thread.stop() is potentially unsafe.
85.7 - // See "http://java.sun.com/notes" for more information.
85.8 + // See the API specification of java.lang.Thread.stop() for more
85.9 + // information.
85.10 permission java.lang.RuntimePermission "stopThread";
85.11
85.12 // allows anyone to listen on un-privileged ports
86.1 --- a/src/share/native/java/util/zip/zip_util.c Thu Apr 02 10:16:53 2009 -0700
86.2 +++ b/src/share/native/java/util/zip/zip_util.c Wed Apr 08 15:40:56 2009 -0700
86.3 @@ -1,5 +1,5 @@
86.4 /*
86.5 - * Copyright 1995-2008 Sun Microsystems, Inc. All Rights Reserved.
86.6 + * Copyright 1995-2009 Sun Microsystems, Inc. All Rights Reserved.
86.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
86.8 *
86.9 * This code is free software; you can redistribute it and/or modify it
87.1 --- a/src/share/native/java/util/zip/zip_util.h Thu Apr 02 10:16:53 2009 -0700
87.2 +++ b/src/share/native/java/util/zip/zip_util.h Wed Apr 08 15:40:56 2009 -0700
87.3 @@ -1,5 +1,5 @@
87.4 /*
87.5 - * Copyright 1995-2006 Sun Microsystems, Inc. All Rights Reserved.
87.6 + * Copyright 1995-2009 Sun Microsystems, Inc. All Rights Reserved.
87.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
87.8 *
87.9 * This code is free software; you can redistribute it and/or modify it
88.1 --- a/src/share/native/sun/security/pkcs11/wrapper/p11_convert.c Thu Apr 02 10:16:53 2009 -0700
88.2 +++ b/src/share/native/sun/security/pkcs11/wrapper/p11_convert.c Wed Apr 08 15:40:56 2009 -0700
88.3 @@ -1,5 +1,5 @@
88.4 /*
88.5 - * Portions Copyright 2003-2005 Sun Microsystems, Inc. All Rights Reserved.
88.6 + * Portions Copyright 2003-2009 Sun Microsystems, Inc. All Rights Reserved.
88.7 */
88.8
88.9 /* Copyright (c) 2002 Graz University of Technology. All rights reserved.
88.10 @@ -89,21 +89,24 @@
88.11
88.12 /* load CK_DATE class */
88.13 jDateClass = (*env)->FindClass(env, CLASS_DATE);
88.14 - assert(jDateClass != 0);
88.15 + if (jDateClass == NULL) { return NULL; }
88.16
88.17 /* load CK_DATE constructor */
88.18 jCtrId = (*env)->GetMethodID(env, jDateClass, "<init>", "([C[C[C)V");
88.19 - assert(jCtrId != 0);
88.20 + if (jCtrId == NULL) { return NULL; }
88.21
88.22 /* prep all fields */
88.23 jYear = ckCharArrayToJCharArray(env, (CK_CHAR_PTR)(ckpDate->year), 4);
88.24 + if (jYear == NULL) { return NULL; }
88.25 jMonth = ckCharArrayToJCharArray(env, (CK_CHAR_PTR)(ckpDate->month), 2);
88.26 + if (jMonth == NULL) { return NULL; }
88.27 jDay = ckCharArrayToJCharArray(env, (CK_CHAR_PTR)(ckpDate->day), 2);
88.28 + if (jDay == NULL) { return NULL; }
88.29
88.30 /* create new CK_DATE object */
88.31 jDateObject =
88.32 (*env)->NewObject(env, jDateClass, jCtrId, jYear, jMonth, jDay);
88.33 - assert(jDateObject != 0);
88.34 + if (jDateObject == NULL) { return NULL; }
88.35
88.36 /* free local references */
88.37 (*env)->DeleteLocalRef(env, jDateClass);
88.38 @@ -131,11 +134,11 @@
88.39
88.40 /* load CK_VERSION class */
88.41 jVersionClass = (*env)->FindClass(env, CLASS_VERSION);
88.42 - assert(jVersionClass != 0);
88.43 + if (jVersionClass == NULL) { return NULL; }
88.44
88.45 /* load CK_VERSION constructor */
88.46 jCtrId = (*env)->GetMethodID(env, jVersionClass, "<init>", "(II)V");
88.47 - assert(jCtrId != 0);
88.48 + if (jCtrId == NULL) { return NULL; }
88.49
88.50 /* prep both fields */
88.51 jMajor = ckpVersion->major;
88.52 @@ -144,7 +147,7 @@
88.53 /* create new CK_VERSION object */
88.54 jVersionObject =
88.55 (*env)->NewObject(env, jVersionClass, jCtrId, jMajor, jMinor);
88.56 - assert(jVersionObject != 0);
88.57 + if (jVersionObject == NULL) { return NULL; }
88.58
88.59 /* free local references */
88.60 (*env)->DeleteLocalRef(env, jVersionClass);
88.61 @@ -171,11 +174,11 @@
88.62
88.63 /* load CK_SESSION_INFO class */
88.64 jSessionInfoClass = (*env)->FindClass(env, CLASS_SESSION_INFO);
88.65 - assert(jSessionInfoClass != 0);
88.66 + if (jSessionInfoClass == NULL) { return NULL; }
88.67
88.68 /* load CK_SESSION_INFO constructor */
88.69 jCtrId = (*env)->GetMethodID(env, jSessionInfoClass, "<init>", "(JJJJ)V");
88.70 - assert(jCtrId != 0);
88.71 + if (jCtrId == NULL) { return NULL; }
88.72
88.73 /* prep all fields */
88.74 jSlotID = ckULongToJLong(ckpSessionInfo->slotID);
88.75 @@ -187,7 +190,7 @@
88.76 jSessionInfoObject =
88.77 (*env)->NewObject(env, jSessionInfoClass, jCtrId, jSlotID, jState,
88.78 jFlags, jDeviceError);
88.79 - assert(jSessionInfoObject != 0);
88.80 + if (jSessionInfoObject == NULL) { return NULL; }
88.81
88.82 /* free local references */
88.83 (*env)->DeleteLocalRef(env, jSessionInfoClass);
88.84 @@ -211,20 +214,21 @@
88.85 jobject jPValue = NULL;
88.86
88.87 jAttributeClass = (*env)->FindClass(env, CLASS_ATTRIBUTE);
88.88 - assert(jAttributeClass != 0);
88.89 + if (jAttributeClass == NULL) { return NULL; }
88.90
88.91 /* load CK_INFO constructor */
88.92 jCtrId = (*env)->GetMethodID(env, jAttributeClass, "<init>", "(JLjava/lang/Object;)V");
88.93 - assert(jCtrId != 0);
88.94 + if (jCtrId == NULL) { return NULL; }
88.95
88.96 /* prep both fields */
88.97 jType = ckULongToJLong(ckpAttribute->type);
88.98 jPValue = ckAttributeValueToJObject(env, ckpAttribute);
88.99 + if ((*env)->ExceptionCheck(env)) { return NULL; }
88.100
88.101 /* create new CK_ATTRIBUTE object */
88.102 jAttributeObject =
88.103 (*env)->NewObject(env, jAttributeClass, jCtrId, jType, jPValue);
88.104 - assert(jAttributeObject != 0);
88.105 + if (jAttributeObject == NULL) { return NULL; }
88.106
88.107 /* free local references */
88.108 (*env)->DeleteLocalRef(env, jAttributeClass);
88.109 @@ -252,23 +256,27 @@
88.110 return NULL;
88.111 }
88.112
88.113 - /* allocate memory for CK_VERSION pointer */
88.114 - ckpVersion = (CK_VERSION_PTR) malloc(sizeof(CK_VERSION));
88.115 -
88.116 /* get CK_VERSION class */
88.117 jVersionClass = (*env)->GetObjectClass(env, jVersion);
88.118 - assert(jVersionClass != 0);
88.119 + if (jVersionClass == NULL) { return NULL; }
88.120
88.121 /* get Major */
88.122 jFieldID = (*env)->GetFieldID(env, jVersionClass, "major", "B");
88.123 - assert(jFieldID != 0);
88.124 + if (jFieldID == NULL) { return NULL; }
88.125 jMajor = (*env)->GetByteField(env, jVersion, jFieldID);
88.126 - ckpVersion->major = jByteToCKByte(jMajor);
88.127
88.128 /* get Minor */
88.129 jFieldID = (*env)->GetFieldID(env, jVersionClass, "minor", "B");
88.130 - assert(jFieldID != 0);
88.131 + if (jFieldID == NULL) { return NULL; }
88.132 jMinor = (*env)->GetByteField(env, jVersion, jFieldID);
88.133 +
88.134 + /* allocate memory for CK_VERSION pointer */
88.135 + ckpVersion = (CK_VERSION_PTR) malloc(sizeof(CK_VERSION));
88.136 + if (ckpVersion == NULL) {
88.137 + JNU_ThrowOutOfMemoryError(env, 0);
88.138 + return NULL;
88.139 + }
88.140 + ckpVersion->major = jByteToCKByte(jMajor);
88.141 ckpVersion->minor = jByteToCKByte(jMinor);
88.142
88.143 return ckpVersion ;
88.144 @@ -292,18 +300,36 @@
88.145 jchar *jTempChars;
88.146 CK_ULONG i;
88.147
88.148 - /* allocate memory for CK_DATE pointer */
88.149 - ckpDate = (CK_DATE *) malloc(sizeof(CK_DATE));
88.150 + if (jDate == NULL) {
88.151 + return NULL;
88.152 + }
88.153
88.154 /* get CK_DATE class */
88.155 jDateClass = (*env)->FindClass(env, CLASS_DATE);
88.156 - assert(jDateClass != 0);
88.157 + if (jDateClass == NULL) { return NULL; }
88.158
88.159 /* get Year */
88.160 jFieldID = (*env)->GetFieldID(env, jDateClass, "year", "[C");
88.161 - assert(jFieldID != 0);
88.162 + if (jFieldID == NULL) { return NULL; }
88.163 jYear = (*env)->GetObjectField(env, jDate, jFieldID);
88.164
88.165 + /* get Month */
88.166 + jFieldID = (*env)->GetFieldID(env, jDateClass, "month", "[C");
88.167 + if (jFieldID == NULL) { return NULL; }
88.168 + jMonth = (*env)->GetObjectField(env, jDate, jFieldID);
88.169 +
88.170 + /* get Day */
88.171 + jFieldID = (*env)->GetFieldID(env, jDateClass, "day", "[C");
88.172 + if (jFieldID == NULL) { return NULL; }
88.173 + jDay = (*env)->GetObjectField(env, jDate, jFieldID);
88.174 +
88.175 + /* allocate memory for CK_DATE pointer */
88.176 + ckpDate = (CK_DATE *) malloc(sizeof(CK_DATE));
88.177 + if (ckpDate == NULL) {
88.178 + JNU_ThrowOutOfMemoryError(env, 0);
88.179 + return NULL;
88.180 + }
88.181 +
88.182 if (jYear == NULL) {
88.183 ckpDate->year[0] = 0;
88.184 ckpDate->year[1] = 0;
88.185 @@ -312,43 +338,66 @@
88.186 } else {
88.187 ckLength = (*env)->GetArrayLength(env, jYear);
88.188 jTempChars = (jchar*) malloc((ckLength) * sizeof(jchar));
88.189 + if (jTempChars == NULL) {
88.190 + free(ckpDate);
88.191 + JNU_ThrowOutOfMemoryError(env, 0);
88.192 + return NULL;
88.193 + }
88.194 (*env)->GetCharArrayRegion(env, jYear, 0, ckLength, jTempChars);
88.195 + if ((*env)->ExceptionCheck(env)) {
88.196 + free(ckpDate);
88.197 + free(jTempChars);
88.198 + return NULL;
88.199 + }
88.200 +
88.201 for (i = 0; (i < ckLength) && (i < 4) ; i++) {
88.202 ckpDate->year[i] = jCharToCKChar(jTempChars[i]);
88.203 }
88.204 free(jTempChars);
88.205 }
88.206
88.207 - /* get Month */
88.208 - jFieldID = (*env)->GetFieldID(env, jDateClass, "month", "[C");
88.209 - assert(jFieldID != 0);
88.210 - jMonth = (*env)->GetObjectField(env, jDate, jFieldID);
88.211 -
88.212 if (jMonth == NULL) {
88.213 ckpDate->month[0] = 0;
88.214 ckpDate->month[1] = 0;
88.215 } else {
88.216 ckLength = (*env)->GetArrayLength(env, jMonth);
88.217 jTempChars = (jchar*) malloc((ckLength) * sizeof(jchar));
88.218 + if (jTempChars == NULL) {
88.219 + free(ckpDate);
88.220 + JNU_ThrowOutOfMemoryError(env, 0);
88.221 + return NULL;
88.222 + }
88.223 (*env)->GetCharArrayRegion(env, jMonth, 0, ckLength, jTempChars);
88.224 + if ((*env)->ExceptionCheck(env)) {
88.225 + free(ckpDate);
88.226 + free(jTempChars);
88.227 + return NULL;
88.228 + }
88.229 +
88.230 for (i = 0; (i < ckLength) && (i < 4) ; i++) {
88.231 ckpDate->month[i] = jCharToCKChar(jTempChars[i]);
88.232 }
88.233 free(jTempChars);
88.234 }
88.235
88.236 - /* get Day */
88.237 - jFieldID = (*env)->GetFieldID(env, jDateClass, "day", "[C");
88.238 - assert(jFieldID != 0);
88.239 - jDay = (*env)->GetObjectField(env, jDate, jFieldID);
88.240 -
88.241 if (jDay == NULL) {
88.242 ckpDate->day[0] = 0;
88.243 ckpDate->day[1] = 0;
88.244 } else {
88.245 ckLength = (*env)->GetArrayLength(env, jDay);
88.246 jTempChars = (jchar*) malloc((ckLength) * sizeof(jchar));
88.247 + if (jTempChars == NULL) {
88.248 + free(ckpDate);
88.249 + JNU_ThrowOutOfMemoryError(env, 0);
88.250 + return NULL;
88.251 + }
88.252 (*env)->GetCharArrayRegion(env, jDay, 0, ckLength, jTempChars);
88.253 + if ((*env)->ExceptionCheck(env)) {
88.254 + free(ckpDate);
88.255 + free(jTempChars);
88.256 + return NULL;
88.257 + }
88.258 +
88.259 for (i = 0; (i < ckLength) && (i < 4) ; i++) {
88.260 ckpDate->day[i] = jCharToCKChar(jTempChars[i]);
88.261 }
88.262 @@ -374,23 +423,25 @@
88.263 jlong jType;
88.264 jobject jPValue;
88.265
88.266 + // TBD: what if jAttribute == NULL?!
88.267 +
88.268 TRACE0("\nDEBUG: jAttributeToCKAttribute");
88.269 /* get CK_ATTRIBUTE class */
88.270 TRACE0(", getting attribute object class");
88.271 jAttributeClass = (*env)->GetObjectClass(env, jAttribute);
88.272 - assert(jAttributeClass != 0);
88.273 + if (jAttributeClass == NULL) { return ckAttribute; }
88.274
88.275 /* get type */
88.276 TRACE0(", getting type field");
88.277 jFieldID = (*env)->GetFieldID(env, jAttributeClass, "type", "J");
88.278 - assert(jFieldID != 0);
88.279 + if (jFieldID == NULL) { return ckAttribute; }
88.280 jType = (*env)->GetLongField(env, jAttribute, jFieldID);
88.281 TRACE1(", type=0x%X", jType);
88.282
88.283 /* get pValue */
88.284 TRACE0(", getting pValue field");
88.285 jFieldID = (*env)->GetFieldID(env, jAttributeClass, "pValue", "Ljava/lang/Object;");
88.286 - assert(jFieldID != 0);
88.287 + if (jFieldID == NULL) { return ckAttribute; }
88.288 jPValue = (*env)->GetObjectField(env, jAttribute, jFieldID);
88.289 TRACE1(", pValue=%p", jPValue);
88.290
88.291 @@ -417,36 +468,50 @@
88.292 {
88.293 // XXX don't return structs
88.294 // XXX prefetch class and field ids
88.295 - jclass jSsl3MasterKeyDeriveParamsClass = (*env)->FindClass(env, CLASS_SSL3_MASTER_KEY_DERIVE_PARAMS);
88.296 + jclass jSsl3MasterKeyDeriveParamsClass;
88.297 CK_SSL3_MASTER_KEY_DERIVE_PARAMS ckParam;
88.298 jfieldID fieldID;
88.299 - jobject jObject;
88.300 jclass jSsl3RandomDataClass;
88.301 - jobject jRandomInfo;
88.302 + jobject jRandomInfo, jRIClientRandom, jRIServerRandom, jVersion;
88.303
88.304 /* get RandomInfo */
88.305 - jSsl3RandomDataClass = (*env)->FindClass(env, CLASS_SSL3_RANDOM_DATA);
88.306 + jSsl3MasterKeyDeriveParamsClass = (*env)->FindClass(env, CLASS_SSL3_MASTER_KEY_DERIVE_PARAMS);
88.307 + if (jSsl3MasterKeyDeriveParamsClass == NULL) { return ckParam; }
88.308 fieldID = (*env)->GetFieldID(env, jSsl3MasterKeyDeriveParamsClass, "RandomInfo", "Lsun/security/pkcs11/wrapper/CK_SSL3_RANDOM_DATA;");
88.309 - assert(fieldID != 0);
88.310 + if (fieldID == NULL) { return ckParam; }
88.311 jRandomInfo = (*env)->GetObjectField(env, jParam, fieldID);
88.312
88.313 /* get pClientRandom and ulClientRandomLength out of RandomInfo */
88.314 + jSsl3RandomDataClass = (*env)->FindClass(env, CLASS_SSL3_RANDOM_DATA);
88.315 + if (jSsl3RandomDataClass == NULL) { return ckParam; }
88.316 fieldID = (*env)->GetFieldID(env, jSsl3RandomDataClass, "pClientRandom", "[B");
88.317 - assert(fieldID != 0);
88.318 - jObject = (*env)->GetObjectField(env, jRandomInfo, fieldID);
88.319 - jByteArrayToCKByteArray(env, jObject, &(ckParam.RandomInfo.pClientRandom), &(ckParam.RandomInfo.ulClientRandomLen));
88.320 + if (fieldID == NULL) { return ckParam; }
88.321 + jRIClientRandom = (*env)->GetObjectField(env, jRandomInfo, fieldID);
88.322
88.323 /* get pServerRandom and ulServerRandomLength out of RandomInfo */
88.324 fieldID = (*env)->GetFieldID(env, jSsl3RandomDataClass, "pServerRandom", "[B");
88.325 - assert(fieldID != 0);
88.326 - jObject = (*env)->GetObjectField(env, jRandomInfo, fieldID);
88.327 - jByteArrayToCKByteArray(env, jObject, &(ckParam.RandomInfo.pServerRandom), &(ckParam.RandomInfo.ulServerRandomLen));
88.328 + if (fieldID == NULL) { return ckParam; }
88.329 + jRIServerRandom = (*env)->GetObjectField(env, jRandomInfo, fieldID);
88.330
88.331 /* get pVersion */
88.332 fieldID = (*env)->GetFieldID(env, jSsl3MasterKeyDeriveParamsClass, "pVersion", "Lsun/security/pkcs11/wrapper/CK_VERSION;");
88.333 - assert(fieldID != 0);
88.334 - jObject = (*env)->GetObjectField(env, jParam, fieldID);
88.335 - ckParam.pVersion = jVersionToCKVersionPtr(env, jObject);
88.336 + if (fieldID == NULL) { return ckParam; }
88.337 + jVersion = (*env)->GetObjectField(env, jParam, fieldID);
88.338 +
88.339 + /* populate java values */
88.340 + ckParam.pVersion = jVersionToCKVersionPtr(env, jVersion);
88.341 + if ((*env)->ExceptionCheck(env)) { return ckParam; }
88.342 + jByteArrayToCKByteArray(env, jRIClientRandom, &(ckParam.RandomInfo.pClientRandom), &(ckParam.RandomInfo.ulClientRandomLen));
88.343 + if ((*env)->ExceptionCheck(env)) {
88.344 + free(ckParam.pVersion);
88.345 + return ckParam;
88.346 + }
88.347 + jByteArrayToCKByteArray(env, jRIServerRandom, &(ckParam.RandomInfo.pServerRandom), &(ckParam.RandomInfo.ulServerRandomLen));
88.348 + if ((*env)->ExceptionCheck(env)) {
88.349 + free(ckParam.pVersion);
88.350 + free(ckParam.RandomInfo.pClientRandom);
88.351 + return ckParam;
88.352 + }
88.353
88.354 return ckParam ;
88.355 }
88.356 @@ -457,27 +522,52 @@
88.357 */
88.358 CK_TLS_PRF_PARAMS jTlsPrfParamsToCKTlsPrfParam(JNIEnv *env, jobject jParam)
88.359 {
88.360 - jclass jTlsPrfParamsClass = (*env)->FindClass(env, CLASS_TLS_PRF_PARAMS);
88.361 + jclass jTlsPrfParamsClass;
88.362 CK_TLS_PRF_PARAMS ckParam;
88.363 jfieldID fieldID;
88.364 - jobject jObject;
88.365 + jobject jSeed, jLabel, jOutput;
88.366
88.367 + // TBD: what if jParam == NULL?!
88.368 +
88.369 + /* get pSeed */
88.370 + jTlsPrfParamsClass = (*env)->FindClass(env, CLASS_TLS_PRF_PARAMS);
88.371 + if (jTlsPrfParamsClass == NULL) { return ckParam; }
88.372 fieldID = (*env)->GetFieldID(env, jTlsPrfParamsClass, "pSeed", "[B");
88.373 - assert(fieldID != 0);
88.374 - jObject = (*env)->GetObjectField(env, jParam, fieldID);
88.375 - jByteArrayToCKByteArray(env, jObject, &(ckParam.pSeed), &(ckParam.ulSeedLen));
88.376 + if (fieldID == NULL) { return ckParam; }
88.377 + jSeed = (*env)->GetObjectField(env, jParam, fieldID);
88.378
88.379 + /* get pLabel */
88.380 fieldID = (*env)->GetFieldID(env, jTlsPrfParamsClass, "pLabel", "[B");
88.381 - assert(fieldID != 0);
88.382 - jObject = (*env)->GetObjectField(env, jParam, fieldID);
88.383 - jByteArrayToCKByteArray(env, jObject, &(ckParam.pLabel), &(ckParam.ulLabelLen));
88.384 + if (fieldID == NULL) { return ckParam; }
88.385 + jLabel = (*env)->GetObjectField(env, jParam, fieldID);
88.386
88.387 + /* get pOutput */
88.388 + fieldID = (*env)->GetFieldID(env, jTlsPrfParamsClass, "pOutput", "[B");
88.389 + if (fieldID == NULL) { return ckParam; }
88.390 + jOutput = (*env)->GetObjectField(env, jParam, fieldID);
88.391 +
88.392 + /* populate java values */
88.393 + jByteArrayToCKByteArray(env, jSeed, &(ckParam.pSeed), &(ckParam.ulSeedLen));
88.394 + if ((*env)->ExceptionCheck(env)) { return ckParam; }
88.395 + jByteArrayToCKByteArray(env, jLabel, &(ckParam.pLabel), &(ckParam.ulLabelLen));
88.396 + if ((*env)->ExceptionCheck(env)) {
88.397 + free(ckParam.pSeed);
88.398 + return ckParam;
88.399 + }
88.400 ckParam.pulOutputLen = malloc(sizeof(CK_ULONG));
88.401 -
88.402 - fieldID = (*env)->GetFieldID(env, jTlsPrfParamsClass, "pOutput", "[B");
88.403 - assert(fieldID != 0);
88.404 - jObject = (*env)->GetObjectField(env, jParam, fieldID);
88.405 - jByteArrayToCKByteArray(env, jObject, &(ckParam.pOutput), ckParam.pulOutputLen);
88.406 + if (ckParam.pulOutputLen == NULL) {
88.407 + free(ckParam.pSeed);
88.408 + free(ckParam.pLabel);
88.409 + JNU_ThrowOutOfMemoryError(env, 0);
88.410 + return ckParam;
88.411 + }
88.412 + jByteArrayToCKByteArray(env, jOutput, &(ckParam.pOutput), ckParam.pulOutputLen);
88.413 + if ((*env)->ExceptionCheck(env)) {
88.414 + free(ckParam.pSeed);
88.415 + free(ckParam.pLabel);
88.416 + free(ckParam.pulOutputLen);
88.417 + return ckParam;
88.418 + }
88.419
88.420 return ckParam ;
88.421 }
88.422 @@ -493,68 +583,91 @@
88.423 {
88.424 // XXX don't return structs
88.425 // XXX prefetch class and field ids
88.426 - jclass jSsl3KeyMatParamsClass = (*env)->FindClass(env, CLASS_SSL3_KEY_MAT_PARAMS);
88.427 + jclass jSsl3KeyMatParamsClass, jSsl3RandomDataClass, jSsl3KeyMatOutClass;
88.428 CK_SSL3_KEY_MAT_PARAMS ckParam;
88.429 jfieldID fieldID;
88.430 - jlong jLong;
88.431 - jboolean jBoolean;
88.432 - jobject jObject;
88.433 - jobject jRandomInfo;
88.434 - jobject jReturnedKeyMaterial;
88.435 - jclass jSsl3RandomDataClass;
88.436 - jclass jSsl3KeyMatOutClass;
88.437 + jlong jMacSizeInBits, jKeySizeInBits, jIVSizeInBits;
88.438 + jboolean jIsExport;
88.439 + jobject jRandomInfo, jRIClientRandom, jRIServerRandom;
88.440 + jobject jReturnedKeyMaterial, jRMIvClient, jRMIvServer;
88.441 CK_ULONG ckTemp;
88.442
88.443 /* get ulMacSizeInBits */
88.444 + jSsl3KeyMatParamsClass = (*env)->FindClass(env, CLASS_SSL3_KEY_MAT_PARAMS);
88.445 + if (jSsl3KeyMatParamsClass == NULL) { return ckParam; }
88.446 fieldID = (*env)->GetFieldID(env, jSsl3KeyMatParamsClass, "ulMacSizeInBits", "J");
88.447 - assert(fieldID != 0);
88.448 - jLong = (*env)->GetLongField(env, jParam, fieldID);
88.449 - ckParam.ulMacSizeInBits = jLongToCKULong(jLong);
88.450 + if (fieldID == NULL) { return ckParam; }
88.451 + jMacSizeInBits = (*env)->GetLongField(env, jParam, fieldID);
88.452
88.453 /* get ulKeySizeInBits */
88.454 fieldID = (*env)->GetFieldID(env, jSsl3KeyMatParamsClass, "ulKeySizeInBits", "J");
88.455 - assert(fieldID != 0);
88.456 - jLong = (*env)->GetLongField(env, jParam, fieldID);
88.457 - ckParam.ulKeySizeInBits = jLongToCKULong(jLong);
88.458 + if (fieldID == NULL) { return ckParam; }
88.459 + jKeySizeInBits = (*env)->GetLongField(env, jParam, fieldID);
88.460
88.461 /* get ulIVSizeInBits */
88.462 fieldID = (*env)->GetFieldID(env, jSsl3KeyMatParamsClass, "ulIVSizeInBits", "J");
88.463 - assert(fieldID != 0);
88.464 - jLong = (*env)->GetLongField(env, jParam, fieldID);
88.465 - ckParam.ulIVSizeInBits = jLongToCKULong(jLong);
88.466 + if (fieldID == NULL) { return ckParam; }
88.467 + jIVSizeInBits = (*env)->GetLongField(env, jParam, fieldID);
88.468
88.469 /* get bIsExport */
88.470 fieldID = (*env)->GetFieldID(env, jSsl3KeyMatParamsClass, "bIsExport", "Z");
88.471 - assert(fieldID != 0);
88.472 - jBoolean = (*env)->GetBooleanField(env, jParam, fieldID);
88.473 - ckParam.bIsExport = jBooleanToCKBBool(jBoolean);
88.474 + if (fieldID == NULL) { return ckParam; }
88.475 + jIsExport = (*env)->GetBooleanField(env, jParam, fieldID);
88.476
88.477 /* get RandomInfo */
88.478 jSsl3RandomDataClass = (*env)->FindClass(env, CLASS_SSL3_RANDOM_DATA);
88.479 + if (jSsl3RandomDataClass == NULL) { return ckParam; }
88.480 fieldID = (*env)->GetFieldID(env, jSsl3KeyMatParamsClass, "RandomInfo", "Lsun/security/pkcs11/wrapper/CK_SSL3_RANDOM_DATA;");
88.481 - assert(fieldID != 0);
88.482 + if (fieldID == NULL) { return ckParam; }
88.483 jRandomInfo = (*env)->GetObjectField(env, jParam, fieldID);
88.484
88.485 /* get pClientRandom and ulClientRandomLength out of RandomInfo */
88.486 fieldID = (*env)->GetFieldID(env, jSsl3RandomDataClass, "pClientRandom", "[B");
88.487 - assert(fieldID != 0);
88.488 - jObject = (*env)->GetObjectField(env, jRandomInfo, fieldID);
88.489 - jByteArrayToCKByteArray(env, jObject, &(ckParam.RandomInfo.pClientRandom), &(ckParam.RandomInfo.ulClientRandomLen));
88.490 + if (fieldID == NULL) { return ckParam; }
88.491 + jRIClientRandom = (*env)->GetObjectField(env, jRandomInfo, fieldID);
88.492
88.493 /* get pServerRandom and ulServerRandomLength out of RandomInfo */
88.494 fieldID = (*env)->GetFieldID(env, jSsl3RandomDataClass, "pServerRandom", "[B");
88.495 - assert(fieldID != 0);
88.496 - jObject = (*env)->GetObjectField(env, jRandomInfo, fieldID);
88.497 - jByteArrayToCKByteArray(env, jObject, &(ckParam.RandomInfo.pServerRandom), &(ckParam.RandomInfo.ulServerRandomLen));
88.498 + if (fieldID == NULL) { return ckParam; }
88.499 + jRIServerRandom = (*env)->GetObjectField(env, jRandomInfo, fieldID);
88.500
88.501 /* get pReturnedKeyMaterial */
88.502 jSsl3KeyMatOutClass = (*env)->FindClass(env, CLASS_SSL3_KEY_MAT_OUT);
88.503 + if (jSsl3KeyMatOutClass == NULL) { return ckParam; }
88.504 fieldID = (*env)->GetFieldID(env, jSsl3KeyMatParamsClass, "pReturnedKeyMaterial", "Lsun/security/pkcs11/wrapper/CK_SSL3_KEY_MAT_OUT;");
88.505 - assert(fieldID != 0);
88.506 + if (fieldID == NULL) { return ckParam; }
88.507 jReturnedKeyMaterial = (*env)->GetObjectField(env, jParam, fieldID);
88.508
88.509 + /* get pIVClient out of pReturnedKeyMaterial */
88.510 + fieldID = (*env)->GetFieldID(env, jSsl3KeyMatOutClass, "pIVClient", "[B");
88.511 + if (fieldID == NULL) { return ckParam; }
88.512 + jRMIvClient = (*env)->GetObjectField(env, jReturnedKeyMaterial, fieldID);
88.513 +
88.514 + /* get pIVServer out of pReturnedKeyMaterial */
88.515 + fieldID = (*env)->GetFieldID(env, jSsl3KeyMatOutClass, "pIVServer", "[B");
88.516 + if (fieldID == NULL) { return ckParam; }
88.517 + jRMIvServer = (*env)->GetObjectField(env, jReturnedKeyMaterial, fieldID);
88.518 +
88.519 + /* populate java values */
88.520 + ckParam.ulMacSizeInBits = jLongToCKULong(jMacSizeInBits);
88.521 + ckParam.ulKeySizeInBits = jLongToCKULong(jKeySizeInBits);
88.522 + ckParam.ulIVSizeInBits = jLongToCKULong(jIVSizeInBits);
88.523 + ckParam.bIsExport = jBooleanToCKBBool(jIsExport);
88.524 + jByteArrayToCKByteArray(env, jRIClientRandom, &(ckParam.RandomInfo.pClientRandom), &(ckParam.RandomInfo.ulClientRandomLen));
88.525 + if ((*env)->ExceptionCheck(env)) { return ckParam; }
88.526 + jByteArrayToCKByteArray(env, jRIServerRandom, &(ckParam.RandomInfo.pServerRandom), &(ckParam.RandomInfo.ulServerRandomLen));
88.527 + if ((*env)->ExceptionCheck(env)) {
88.528 + free(ckParam.RandomInfo.pClientRandom);
88.529 + return ckParam;
88.530 + }
88.531 /* allocate memory for pRetrunedKeyMaterial */
88.532 ckParam.pReturnedKeyMaterial = (CK_SSL3_KEY_MAT_OUT_PTR) malloc(sizeof(CK_SSL3_KEY_MAT_OUT));
88.533 + if (ckParam.pReturnedKeyMaterial == NULL) {
88.534 + free(ckParam.RandomInfo.pClientRandom);
88.535 + free(ckParam.RandomInfo.pServerRandom);
88.536 + JNU_ThrowOutOfMemoryError(env, 0);
88.537 + return ckParam;
88.538 + }
88.539
88.540 // the handles are output params only, no need to fetch them from Java
88.541 ckParam.pReturnedKeyMaterial->hClientMacSecret = 0;
88.542 @@ -562,17 +675,21 @@
88.543 ckParam.pReturnedKeyMaterial->hClientKey = 0;
88.544 ckParam.pReturnedKeyMaterial->hServerKey = 0;
88.545
88.546 - /* get pIVClient out of pReturnedKeyMaterial */
88.547 - fieldID = (*env)->GetFieldID(env, jSsl3KeyMatOutClass, "pIVClient", "[B");
88.548 - assert(fieldID != 0);
88.549 - jObject = (*env)->GetObjectField(env, jReturnedKeyMaterial, fieldID);
88.550 - jByteArrayToCKByteArray(env, jObject, &(ckParam.pReturnedKeyMaterial->pIVClient), &ckTemp);
88.551 -
88.552 - /* get pIVServer out of pReturnedKeyMaterial */
88.553 - fieldID = (*env)->GetFieldID(env, jSsl3KeyMatOutClass, "pIVServer", "[B");
88.554 - assert(fieldID != 0);
88.555 - jObject = (*env)->GetObjectField(env, jReturnedKeyMaterial, fieldID);
88.556 - jByteArrayToCKByteArray(env, jObject, &(ckParam.pReturnedKeyMaterial->pIVServer), &ckTemp);
88.557 + jByteArrayToCKByteArray(env, jRMIvClient, &(ckParam.pReturnedKeyMaterial->pIVClient), &ckTemp);
88.558 + if ((*env)->ExceptionCheck(env)) {
88.559 + free(ckParam.RandomInfo.pClientRandom);
88.560 + free(ckParam.RandomInfo.pServerRandom);
88.561 + free(ckParam.pReturnedKeyMaterial);
88.562 + return ckParam;
88.563 + }
88.564 + jByteArrayToCKByteArray(env, jRMIvServer, &(ckParam.pReturnedKeyMaterial->pIVServer), &ckTemp);
88.565 + if ((*env)->ExceptionCheck(env)) {
88.566 + free(ckParam.RandomInfo.pClientRandom);
88.567 + free(ckParam.RandomInfo.pServerRandom);
88.568 + free(ckParam.pReturnedKeyMaterial);
88.569 + free(ckParam.pReturnedKeyMaterial->pIVClient);
88.570 + return ckParam;
88.571 + }
88.572
88.573 return ckParam ;
88.574 }
88.575 @@ -811,7 +928,7 @@
88.576 *ckpParamPtr = jLongObjectToCKULongPtr(env, jParam);
88.577 *ckpLength = sizeof(CK_ULONG);
88.578 } else {
88.579 - /* printf("slow path jMechanismParameterToCKMechanismParameter\n"); */
88.580 + TRACE0("\nSLOW PATH jMechanismParameterToCKMechanismParameter\n");
88.581 jMechanismParameterToCKMechanismParameterSlow(env, jParam, ckpParamPtr, ckpLength);
88.582 }
88.583 }
88.584 @@ -819,40 +936,24 @@
88.585 void jMechanismParameterToCKMechanismParameterSlow(JNIEnv *env, jobject jParam, CK_VOID_PTR *ckpParamPtr, CK_ULONG *ckpLength)
88.586 {
88.587 /* get all Java mechanism parameter classes */
88.588 - jclass jVersionClass = (*env)->FindClass(env, CLASS_VERSION);
88.589 - jclass jRsaPkcsOaepParamsClass = (*env)->FindClass(env, CLASS_RSA_PKCS_OAEP_PARAMS);
88.590 - jclass jPbeParamsClass = (*env)->FindClass(env, CLASS_PBE_PARAMS);
88.591 - jclass jPkcs5Pbkd2ParamsClass = (*env)->FindClass(env, CLASS_PKCS5_PBKD2_PARAMS);
88.592 + jclass jVersionClass, jSsl3MasterKeyDeriveParamsClass, jSsl3KeyMatParamsClass;
88.593 + jclass jTlsPrfParamsClass, jRsaPkcsOaepParamsClass, jPbeParamsClass;
88.594 + jclass jPkcs5Pbkd2ParamsClass, jRsaPkcsPssParamsClass;
88.595 + jclass jEcdh1DeriveParamsClass, jEcdh2DeriveParamsClass;
88.596 + jclass jX942Dh1DeriveParamsClass, jX942Dh2DeriveParamsClass;
88.597
88.598 - jclass jRsaPkcsPssParamsClass = (*env)->FindClass(env, CLASS_RSA_PKCS_PSS_PARAMS);
88.599 - jclass jEcdh1DeriveParamsClass = (*env)->FindClass(env, CLASS_ECDH1_DERIVE_PARAMS);
88.600 - jclass jEcdh2DeriveParamsClass = (*env)->FindClass(env, CLASS_ECDH2_DERIVE_PARAMS);
88.601 - jclass jX942Dh1DeriveParamsClass = (*env)->FindClass(env, CLASS_X9_42_DH1_DERIVE_PARAMS);
88.602 - jclass jX942Dh2DeriveParamsClass = (*env)->FindClass(env, CLASS_X9_42_DH2_DERIVE_PARAMS);
88.603 -
88.604 - jclass jSsl3MasterKeyDeriveParamsClass = (*env)->FindClass(env, CLASS_SSL3_MASTER_KEY_DERIVE_PARAMS);
88.605 - jclass jSsl3KeyMatParamsClass = (*env)->FindClass(env, CLASS_SSL3_KEY_MAT_PARAMS);
88.606 - jclass jTlsPrfParamsClass = (*env)->FindClass(env, CLASS_TLS_PRF_PARAMS);
88.607 -
88.608 + /* get all Java mechanism parameter classes */
88.609 TRACE0("\nDEBUG: jMechanismParameterToCKMechanismParameter");
88.610
88.611 - /* first check the most common cases */
88.612 -/*
88.613 - if (jParam == NULL) {
88.614 - *ckpParamPtr = NULL;
88.615 - *ckpLength = 0;
88.616 - } else if ((*env)->IsInstanceOf(env, jParam, jByteArrayClass)) {
88.617 - jByteArrayToCKByteArray(env, jParam, (CK_BYTE_PTR *)ckpParamPtr, ckpLength);
88.618 - } else if ((*env)->IsInstanceOf(env, jParam, jLongClass)) {
88.619 - *ckpParamPtr = jLongObjectToCKULongPtr(env, jParam);
88.620 - *ckpLength = sizeof(CK_ULONG);
88.621 - } else if ((*env)->IsInstanceOf(env, jParam, jVersionClass)) {
88.622 -*/
88.623 + /* most common cases, i.e. NULL/byte[]/long, are already handled by
88.624 + * jMechanismParameterToCKMechanismParameter before calling this method.
88.625 + */
88.626 + jVersionClass = (*env)->FindClass(env, CLASS_VERSION);
88.627 + if (jVersionClass == NULL) { return; }
88.628 if ((*env)->IsInstanceOf(env, jParam, jVersionClass)) {
88.629 /*
88.630 * CK_VERSION used by CKM_SSL3_PRE_MASTER_KEY_GEN
88.631 */
88.632 -
88.633 CK_VERSION_PTR ckpParam;
88.634
88.635 /* convert jParameter to CKParameter */
88.636 @@ -861,190 +962,311 @@
88.637 /* get length and pointer of parameter */
88.638 *ckpLength = sizeof(CK_VERSION);
88.639 *ckpParamPtr = ckpParam;
88.640 + return;
88.641 + }
88.642
88.643 - } else if ((*env)->IsInstanceOf(env, jParam, jSsl3MasterKeyDeriveParamsClass)) {
88.644 + jSsl3MasterKeyDeriveParamsClass = (*env)->FindClass(env, CLASS_SSL3_MASTER_KEY_DERIVE_PARAMS);
88.645 + if (jSsl3MasterKeyDeriveParamsClass == NULL) { return; }
88.646 + if ((*env)->IsInstanceOf(env, jParam, jSsl3MasterKeyDeriveParamsClass)) {
88.647 /*
88.648 * CK_SSL3_MASTER_KEY_DERIVE_PARAMS
88.649 */
88.650 -
88.651 CK_SSL3_MASTER_KEY_DERIVE_PARAMS_PTR ckpParam;
88.652
88.653 ckpParam = (CK_SSL3_MASTER_KEY_DERIVE_PARAMS_PTR) malloc(sizeof(CK_SSL3_MASTER_KEY_DERIVE_PARAMS));
88.654 + if (ckpParam == NULL) {
88.655 + JNU_ThrowOutOfMemoryError(env, 0);
88.656 + return;
88.657 + }
88.658
88.659 /* convert jParameter to CKParameter */
88.660 *ckpParam = jSsl3MasterKeyDeriveParamToCKSsl3MasterKeyDeriveParam(env, jParam);
88.661 + if ((*env)->ExceptionCheck(env)) {
88.662 + free(ckpParam);
88.663 + return;
88.664 + }
88.665
88.666 /* get length and pointer of parameter */
88.667 *ckpLength = sizeof(CK_SSL3_MASTER_KEY_DERIVE_PARAMS);
88.668 *ckpParamPtr = ckpParam;
88.669 + return;
88.670 + }
88.671
88.672 - } else if ((*env)->IsInstanceOf(env, jParam, jSsl3KeyMatParamsClass)) {
88.673 + jSsl3KeyMatParamsClass = (*env)->FindClass(env, CLASS_SSL3_KEY_MAT_PARAMS);
88.674 + if (jSsl3KeyMatParamsClass == NULL) { return; }
88.675 + if ((*env)->IsInstanceOf(env, jParam, jSsl3KeyMatParamsClass)) {
88.676 /*
88.677 * CK_SSL3_KEY_MAT_PARAMS
88.678 */
88.679 -
88.680 CK_SSL3_KEY_MAT_PARAMS_PTR ckpParam;
88.681
88.682 ckpParam = (CK_SSL3_KEY_MAT_PARAMS_PTR) malloc(sizeof(CK_SSL3_KEY_MAT_PARAMS));
88.683 + if (ckpParam == NULL) {
88.684 + JNU_ThrowOutOfMemoryError(env, 0);
88.685 + return;
88.686 + }
88.687
88.688 /* convert jParameter to CKParameter */
88.689 *ckpParam = jSsl3KeyMatParamToCKSsl3KeyMatParam(env, jParam);
88.690 + if ((*env)->ExceptionCheck(env)) {
88.691 + free(ckpParam);
88.692 + return;
88.693 + }
88.694
88.695 /* get length and pointer of parameter */
88.696 *ckpLength = sizeof(CK_SSL3_KEY_MAT_PARAMS);
88.697 *ckpParamPtr = ckpParam;
88.698 + return;
88.699 + }
88.700
88.701 - } else if ((*env)->IsInstanceOf(env, jParam, jTlsPrfParamsClass)) {
88.702 - //
88.703 - // CK_TLS_PRF_PARAMS
88.704 - //
88.705 -
88.706 + jTlsPrfParamsClass = (*env)->FindClass(env, CLASS_TLS_PRF_PARAMS);
88.707 + if (jTlsPrfParamsClass == NULL) { return; }
88.708 + if ((*env)->IsInstanceOf(env, jParam, jTlsPrfParamsClass)) {
88.709 + /*
88.710 + * CK_TLS_PRF_PARAMS
88.711 + */
88.712 CK_TLS_PRF_PARAMS_PTR ckpParam;
88.713
88.714 ckpParam = (CK_TLS_PRF_PARAMS_PTR) malloc(sizeof(CK_TLS_PRF_PARAMS));
88.715 + if (ckpParam == NULL) {
88.716 + JNU_ThrowOutOfMemoryError(env, 0);
88.717 + return;
88.718 + }
88.719
88.720 - // convert jParameter to CKParameter
88.721 + /* convert jParameter to CKParameter */
88.722 *ckpParam = jTlsPrfParamsToCKTlsPrfParam(env, jParam);
88.723 + if ((*env)->ExceptionCheck(env)) {
88.724 + free(ckpParam);
88.725 + return;
88.726 + }
88.727
88.728 - // get length and pointer of parameter
88.729 + /* get length and pointer of parameter */
88.730 *ckpLength = sizeof(CK_TLS_PRF_PARAMS);
88.731 *ckpParamPtr = ckpParam;
88.732 + return;
88.733 + }
88.734
88.735 - } else if ((*env)->IsInstanceOf(env, jParam, jRsaPkcsOaepParamsClass)) {
88.736 + jRsaPkcsOaepParamsClass = (*env)->FindClass(env, CLASS_RSA_PKCS_OAEP_PARAMS);
88.737 + if (jRsaPkcsOaepParamsClass == NULL) { return; }
88.738 + if ((*env)->IsInstanceOf(env, jParam, jRsaPkcsOaepParamsClass)) {
88.739 /*
88.740 * CK_RSA_PKCS_OAEP_PARAMS
88.741 */
88.742 -
88.743 CK_RSA_PKCS_OAEP_PARAMS_PTR ckpParam;
88.744
88.745 ckpParam = (CK_RSA_PKCS_OAEP_PARAMS_PTR) malloc(sizeof(CK_RSA_PKCS_OAEP_PARAMS));
88.746 + if (ckpParam == NULL) {
88.747 + JNU_ThrowOutOfMemoryError(env, 0);
88.748 + return;
88.749 + }
88.750
88.751 /* convert jParameter to CKParameter */
88.752 *ckpParam = jRsaPkcsOaepParamToCKRsaPkcsOaepParam(env, jParam);
88.753 + if ((*env)->ExceptionCheck(env)) {
88.754 + free(ckpParam);
88.755 + return;
88.756 + }
88.757
88.758 /* get length and pointer of parameter */
88.759 *ckpLength = sizeof(CK_RSA_PKCS_OAEP_PARAMS);
88.760 *ckpParamPtr = ckpParam;
88.761 + return;
88.762 + }
88.763
88.764 - } else if ((*env)->IsInstanceOf(env, jParam, jPbeParamsClass)) {
88.765 + jPbeParamsClass = (*env)->FindClass(env, CLASS_PBE_PARAMS);
88.766 + if (jPbeParamsClass == NULL) { return; }
88.767 + if ((*env)->IsInstanceOf(env, jParam, jPbeParamsClass)) {
88.768 /*
88.769 * CK_PBE_PARAMS
88.770 */
88.771 -
88.772 CK_PBE_PARAMS_PTR ckpParam;
88.773
88.774 ckpParam = (CK_PBE_PARAMS_PTR) malloc(sizeof(CK_PBE_PARAMS));
88.775 + if (ckpParam == NULL) {
88.776 + JNU_ThrowOutOfMemoryError(env, 0);
88.777 + return;
88.778 + }
88.779
88.780 /* convert jParameter to CKParameter */
88.781 *ckpParam = jPbeParamToCKPbeParam(env, jParam);
88.782 + if ((*env)->ExceptionCheck(env)) {
88.783 + free(ckpParam);
88.784 + return;
88.785 + }
88.786
88.787 /* get length and pointer of parameter */
88.788 *ckpLength = sizeof(CK_PBE_PARAMS);
88.789 *ckpParamPtr = ckpParam;
88.790 + return;
88.791 + }
88.792
88.793 - } else if ((*env)->IsInstanceOf(env, jParam, jPkcs5Pbkd2ParamsClass)) {
88.794 + jPkcs5Pbkd2ParamsClass = (*env)->FindClass(env, CLASS_PKCS5_PBKD2_PARAMS);
88.795 + if (jPkcs5Pbkd2ParamsClass == NULL) { return; }
88.796 + if ((*env)->IsInstanceOf(env, jParam, jPkcs5Pbkd2ParamsClass)) {
88.797 /*
88.798 * CK_PKCS5_PBKD2_PARAMS
88.799 */
88.800 -
88.801 CK_PKCS5_PBKD2_PARAMS_PTR ckpParam;
88.802
88.803 ckpParam = (CK_PKCS5_PBKD2_PARAMS_PTR) malloc(sizeof(CK_PKCS5_PBKD2_PARAMS));
88.804 + if (ckpParam == NULL) {
88.805 + JNU_ThrowOutOfMemoryError(env, 0);
88.806 + return;
88.807 + }
88.808
88.809 /* convert jParameter to CKParameter */
88.810 *ckpParam = jPkcs5Pbkd2ParamToCKPkcs5Pbkd2Param(env, jParam);
88.811 + if ((*env)->ExceptionCheck(env)) {
88.812 + free(ckpParam);
88.813 + return;
88.814 + }
88.815
88.816 /* get length and pointer of parameter */
88.817 *ckpLength = sizeof(CK_PKCS5_PBKD2_PARAMS);
88.818 *ckpParamPtr = ckpParam;
88.819 + return;
88.820 + }
88.821
88.822 - } else if ((*env)->IsInstanceOf(env, jParam, jRsaPkcsPssParamsClass)) {
88.823 + jRsaPkcsPssParamsClass = (*env)->FindClass(env, CLASS_RSA_PKCS_PSS_PARAMS);
88.824 + if (jRsaPkcsPssParamsClass == NULL) { return; }
88.825 + if ((*env)->IsInstanceOf(env, jParam, jRsaPkcsPssParamsClass)) {
88.826 /*
88.827 * CK_RSA_PKCS_PSS_PARAMS
88.828 */
88.829 -
88.830 CK_RSA_PKCS_PSS_PARAMS_PTR ckpParam;
88.831
88.832 ckpParam = (CK_RSA_PKCS_PSS_PARAMS_PTR) malloc(sizeof(CK_RSA_PKCS_PSS_PARAMS));
88.833 + if (ckpParam == NULL) {
88.834 + JNU_ThrowOutOfMemoryError(env, 0);
88.835 + return;
88.836 + }
88.837
88.838 /* convert jParameter to CKParameter */
88.839 *ckpParam = jRsaPkcsPssParamToCKRsaPkcsPssParam(env, jParam);
88.840 + if ((*env)->ExceptionCheck(env)) {
88.841 + free(ckpParam);
88.842 + return;
88.843 + }
88.844
88.845 /* get length and pointer of parameter */
88.846 *ckpLength = sizeof(CK_RSA_PKCS_PSS_PARAMS);
88.847 *ckpParamPtr = ckpParam;
88.848 + return;
88.849 + }
88.850
88.851 - } else if ((*env)->IsInstanceOf(env, jParam, jEcdh1DeriveParamsClass)) {
88.852 + jEcdh1DeriveParamsClass = (*env)->FindClass(env, CLASS_ECDH1_DERIVE_PARAMS);
88.853 + if (jEcdh1DeriveParamsClass == NULL) { return; }
88.854 + if ((*env)->IsInstanceOf(env, jParam, jEcdh1DeriveParamsClass)) {
88.855 /*
88.856 * CK_ECDH1_DERIVE_PARAMS
88.857 */
88.858 -
88.859 CK_ECDH1_DERIVE_PARAMS_PTR ckpParam;
88.860
88.861 ckpParam = (CK_ECDH1_DERIVE_PARAMS_PTR) malloc(sizeof(CK_ECDH1_DERIVE_PARAMS));
88.862 + if (ckpParam == NULL) {
88.863 + JNU_ThrowOutOfMemoryError(env, 0);
88.864 + return;
88.865 + }
88.866
88.867 /* convert jParameter to CKParameter */
88.868 *ckpParam = jEcdh1DeriveParamToCKEcdh1DeriveParam(env, jParam);
88.869 + if ((*env)->ExceptionCheck(env)) {
88.870 + free(ckpParam);
88.871 + return;
88.872 + }
88.873
88.874 /* get length and pointer of parameter */
88.875 *ckpLength = sizeof(CK_ECDH1_DERIVE_PARAMS);
88.876 *ckpParamPtr = ckpParam;
88.877 + return;
88.878 + }
88.879
88.880 - } else if ((*env)->IsInstanceOf(env, jParam, jEcdh2DeriveParamsClass)) {
88.881 + jEcdh2DeriveParamsClass = (*env)->FindClass(env, CLASS_ECDH2_DERIVE_PARAMS);
88.882 + if (jEcdh2DeriveParamsClass == NULL) { return; }
88.883 + if ((*env)->IsInstanceOf(env, jParam, jEcdh2DeriveParamsClass)) {
88.884 /*
88.885 * CK_ECDH2_DERIVE_PARAMS
88.886 */
88.887 -
88.888 CK_ECDH2_DERIVE_PARAMS_PTR ckpParam;
88.889
88.890 ckpParam = (CK_ECDH2_DERIVE_PARAMS_PTR) malloc(sizeof(CK_ECDH2_DERIVE_PARAMS));
88.891 + if (ckpParam == NULL) {
88.892 + JNU_ThrowOutOfMemoryError(env, 0);
88.893 + return;
88.894 + }
88.895
88.896 /* convert jParameter to CKParameter */
88.897 *ckpParam = jEcdh2DeriveParamToCKEcdh2DeriveParam(env, jParam);
88.898 + if ((*env)->ExceptionCheck(env)) {
88.899 + free(ckpParam);
88.900 + return;
88.901 + }
88.902
88.903 /* get length and pointer of parameter */
88.904 *ckpLength = sizeof(CK_ECDH2_DERIVE_PARAMS);
88.905 *ckpParamPtr = ckpParam;
88.906 + return;
88.907 + }
88.908
88.909 - } else if ((*env)->IsInstanceOf(env, jParam, jX942Dh1DeriveParamsClass)) {
88.910 + jX942Dh1DeriveParamsClass = (*env)->FindClass(env, CLASS_X9_42_DH1_DERIVE_PARAMS);
88.911 + if (jX942Dh1DeriveParamsClass == NULL) { return; }
88.912 + if ((*env)->IsInstanceOf(env, jParam, jX942Dh1DeriveParamsClass)) {
88.913 /*
88.914 * CK_X9_42_DH1_DERIVE_PARAMS
88.915 */
88.916 -
88.917 CK_X9_42_DH1_DERIVE_PARAMS_PTR ckpParam;
88.918
88.919 ckpParam = (CK_X9_42_DH1_DERIVE_PARAMS_PTR) malloc(sizeof(CK_X9_42_DH1_DERIVE_PARAMS));
88.920 + if (ckpParam == NULL) {
88.921 + JNU_ThrowOutOfMemoryError(env, 0);
88.922 + return;
88.923 + }
88.924
88.925 /* convert jParameter to CKParameter */
88.926 *ckpParam = jX942Dh1DeriveParamToCKX942Dh1DeriveParam(env, jParam);
88.927 + if ((*env)->ExceptionCheck(env)) {
88.928 + free(ckpParam);
88.929 + return;
88.930 + }
88.931
88.932 /* get length and pointer of parameter */
88.933 *ckpLength = sizeof(CK_X9_42_DH1_DERIVE_PARAMS);
88.934 *ckpParamPtr = ckpParam;
88.935 + return;
88.936 + }
88.937
88.938 - } else if ((*env)->IsInstanceOf(env, jParam, jX942Dh2DeriveParamsClass)) {
88.939 + jX942Dh2DeriveParamsClass = (*env)->FindClass(env, CLASS_X9_42_DH2_DERIVE_PARAMS);
88.940 + if (jX942Dh2DeriveParamsClass == NULL) { return; }
88.941 + if ((*env)->IsInstanceOf(env, jParam, jX942Dh2DeriveParamsClass)) {
88.942 /*
88.943 * CK_X9_42_DH2_DERIVE_PARAMS
88.944 */
88.945 -
88.946 CK_X9_42_DH2_DERIVE_PARAMS_PTR ckpParam;
88.947
88.948 ckpParam = (CK_X9_42_DH2_DERIVE_PARAMS_PTR) malloc(sizeof(CK_X9_42_DH2_DERIVE_PARAMS));
88.949 + if (ckpParam == NULL) {
88.950 + JNU_ThrowOutOfMemoryError(env, 0);
88.951 + return;
88.952 + }
88.953
88.954 /* convert jParameter to CKParameter */
88.955 *ckpParam = jX942Dh2DeriveParamToCKX942Dh2DeriveParam(env, jParam);
88.956 + if ((*env)->ExceptionCheck(env)) {
88.957 + free(ckpParam);
88.958 + return;
88.959 + }
88.960
88.961 /* get length and pointer of parameter */
88.962 *ckpLength = sizeof(CK_X9_42_DH2_DERIVE_PARAMS);
88.963 *ckpParamPtr = ckpParam;
88.964 + return;
88.965 + }
88.966
88.967 - } else {
88.968 - /* if everything faild up to here */
88.969 - /* try if the parameter is a primitive Java type */
88.970 - jObjectToPrimitiveCKObjectPtrPtr(env, jParam, ckpParamPtr, ckpLength);
88.971 - /* *ckpParamPtr = jObjectToCKVoidPtr(jParam); */
88.972 - /* *ckpLength = 1; */
88.973 - }
88.974 + /* if everything faild up to here */
88.975 + /* try if the parameter is a primitive Java type */
88.976 + jObjectToPrimitiveCKObjectPtrPtr(env, jParam, ckpParamPtr, ckpLength);
88.977 + /* *ckpParamPtr = jObjectToCKVoidPtr(jParam); */
88.978 + /* *ckpLength = 1; */
88.979
88.980 TRACE0("FINISHED\n");
88.981 }
88.982 @@ -1061,36 +1283,41 @@
88.983 */
88.984 CK_RSA_PKCS_OAEP_PARAMS jRsaPkcsOaepParamToCKRsaPkcsOaepParam(JNIEnv *env, jobject jParam)
88.985 {
88.986 - jclass jRsaPkcsOaepParamsClass = (*env)->FindClass(env, CLASS_RSA_PKCS_OAEP_PARAMS);
88.987 + jclass jRsaPkcsOaepParamsClass;
88.988 CK_RSA_PKCS_OAEP_PARAMS ckParam;
88.989 jfieldID fieldID;
88.990 - jlong jLong;
88.991 - jobject jObject;
88.992 + jlong jHashAlg, jMgf, jSource;
88.993 + jobject jSourceData;
88.994 CK_BYTE_PTR ckpByte;
88.995
88.996 /* get hashAlg */
88.997 + jRsaPkcsOaepParamsClass = (*env)->FindClass(env, CLASS_RSA_PKCS_OAEP_PARAMS);
88.998 + if (jRsaPkcsOaepParamsClass == NULL) { return ckParam; }
88.999 fieldID = (*env)->GetFieldID(env, jRsaPkcsOaepParamsClass, "hashAlg", "J");
88.1000 - assert(fieldID != 0);
88.1001 - jLong = (*env)->GetLongField(env, jParam, fieldID);
88.1002 - ckParam.hashAlg = jLongToCKULong(jLong);
88.1003 + if (fieldID == NULL) { return ckParam; }
88.1004 + jHashAlg = (*env)->GetLongField(env, jParam, fieldID);
88.1005
88.1006 /* get mgf */
88.1007 fieldID = (*env)->GetFieldID(env, jRsaPkcsOaepParamsClass, "mgf", "J");
88.1008 - assert(fieldID != 0);
88.1009 - jLong = (*env)->GetLongField(env, jParam, fieldID);
88.1010 - ckParam.mgf = jLongToCKULong(jLong);
88.1011 + if (fieldID == NULL) { return ckParam; }
88.1012 + jMgf = (*env)->GetLongField(env, jParam, fieldID);
88.1013
88.1014 /* get source */
88.1015 fieldID = (*env)->GetFieldID(env, jRsaPkcsOaepParamsClass, "source", "J");
88.1016 - assert(fieldID != 0);
88.1017 - jLong = (*env)->GetLongField(env, jParam, fieldID);
88.1018 - ckParam.source = jLongToCKULong(jLong);
88.1019 + if (fieldID == NULL) { return ckParam; }
88.1020 + jSource = (*env)->GetLongField(env, jParam, fieldID);
88.1021
88.1022 /* get sourceData and sourceDataLength */
88.1023 fieldID = (*env)->GetFieldID(env, jRsaPkcsOaepParamsClass, "pSourceData", "[B");
88.1024 - assert(fieldID != 0);
88.1025 - jObject = (*env)->GetObjectField(env, jParam, fieldID);
88.1026 - jByteArrayToCKByteArray(env, jObject, &ckpByte, &(ckParam.ulSourceDataLen));
88.1027 + if (fieldID == NULL) { return ckParam; }
88.1028 + jSourceData = (*env)->GetObjectField(env, jParam, fieldID);
88.1029 +
88.1030 + /* populate java values */
88.1031 + ckParam.hashAlg = jLongToCKULong(jHashAlg);
88.1032 + ckParam.mgf = jLongToCKULong(jMgf);
88.1033 + ckParam.source = jLongToCKULong(jSource);
88.1034 + jByteArrayToCKByteArray(env, jSourceData, & ckpByte, &(ckParam.ulSourceDataLen));
88.1035 + if ((*env)->ExceptionCheck(env)) { return ckParam; }
88.1036 ckParam.pSourceData = (CK_VOID_PTR) ckpByte;
88.1037
88.1038 return ckParam ;
88.1039 @@ -1105,36 +1332,50 @@
88.1040 */
88.1041 CK_PBE_PARAMS jPbeParamToCKPbeParam(JNIEnv *env, jobject jParam)
88.1042 {
88.1043 - jclass jPbeParamsClass = (*env)->FindClass(env, CLASS_PBE_PARAMS);
88.1044 + jclass jPbeParamsClass;
88.1045 CK_PBE_PARAMS ckParam;
88.1046 jfieldID fieldID;
88.1047 - jlong jLong;
88.1048 - jobject jObject;
88.1049 + jlong jIteration;
88.1050 + jobject jInitVector, jPassword, jSalt;
88.1051 CK_ULONG ckTemp;
88.1052
88.1053 /* get pInitVector */
88.1054 + jPbeParamsClass = (*env)->FindClass(env, CLASS_PBE_PARAMS);
88.1055 + if (jPbeParamsClass == NULL) { return ckParam; }
88.1056 fieldID = (*env)->GetFieldID(env, jPbeParamsClass, "pInitVector", "[C");
88.1057 - assert(fieldID != 0);
88.1058 - jObject = (*env)->GetObjectField(env, jParam, fieldID);
88.1059 - jCharArrayToCKCharArray(env, jObject, &(ckParam.pInitVector), &ckTemp);
88.1060 + if (fieldID == NULL) { return ckParam; }
88.1061 + jInitVector = (*env)->GetObjectField(env, jParam, fieldID);
88.1062
88.1063 /* get pPassword and ulPasswordLength */
88.1064 fieldID = (*env)->GetFieldID(env, jPbeParamsClass, "pPassword", "[C");
88.1065 - assert(fieldID != 0);
88.1066 - jObject = (*env)->GetObjectField(env, jParam, fieldID);
88.1067 - jCharArrayToCKCharArray(env, jObject, &(ckParam.pPassword), &(ckParam.ulPasswordLen));
88.1068 + if (fieldID == NULL) { return ckParam; }
88.1069 + jPassword = (*env)->GetObjectField(env, jParam, fieldID);
88.1070
88.1071 /* get pSalt and ulSaltLength */
88.1072 fieldID = (*env)->GetFieldID(env, jPbeParamsClass, "pSalt", "[C");
88.1073 - assert(fieldID != 0);
88.1074 - jObject = (*env)->GetObjectField(env, jParam, fieldID);
88.1075 - jCharArrayToCKCharArray(env, jObject, &(ckParam.pSalt), &(ckParam.ulSaltLen));
88.1076 + if (fieldID == NULL) { return ckParam; }
88.1077 + jSalt = (*env)->GetObjectField(env, jParam, fieldID);
88.1078
88.1079 /* get ulIteration */
88.1080 fieldID = (*env)->GetFieldID(env, jPbeParamsClass, "ulIteration", "J");
88.1081 - assert(fieldID != 0);
88.1082 - jLong = (*env)->GetLongField(env, jParam, fieldID);
88.1083 - ckParam.ulIteration = jLongToCKULong(jLong);
88.1084 + if (fieldID == NULL) { return ckParam; }
88.1085 + jIteration = (*env)->GetLongField(env, jParam, fieldID);
88.1086 +
88.1087 + /* populate java values */
88.1088 + ckParam.ulIteration = jLongToCKULong(jIteration);
88.1089 + jCharArrayToCKCharArray(env, jInitVector, &(ckParam.pInitVector), &ckTemp);
88.1090 + if ((*env)->ExceptionCheck(env)) { return ckParam; }
88.1091 + jCharArrayToCKCharArray(env, jPassword, &(ckParam.pPassword), &(ckParam.ulPasswordLen));
88.1092 + if ((*env)->ExceptionCheck(env)) {
88.1093 + free(ckParam.pInitVector);
88.1094 + return ckParam;
88.1095 + }
88.1096 + jCharArrayToCKCharArray(env, jSalt, &(ckParam.pSalt), &(ckParam.ulSaltLen));
88.1097 + if ((*env)->ExceptionCheck(env)) {
88.1098 + free(ckParam.pInitVector);
88.1099 + free(ckParam.pPassword);
88.1100 + return ckParam;
88.1101 + }
88.1102
88.1103 return ckParam ;
88.1104 }
88.1105 @@ -1147,8 +1388,7 @@
88.1106 */
88.1107 void copyBackPBEInitializationVector(JNIEnv *env, CK_MECHANISM *ckMechanism, jobject jMechanism)
88.1108 {
88.1109 - jclass jMechanismClass= (*env)->FindClass(env, CLASS_MECHANISM);
88.1110 - jclass jPbeParamsClass = (*env)->FindClass(env, CLASS_PBE_PARAMS);
88.1111 + jclass jMechanismClass, jPbeParamsClass;
88.1112 CK_PBE_PARAMS *ckParam;
88.1113 jfieldID fieldID;
88.1114 CK_MECHANISM_TYPE ckMechanismType;
88.1115 @@ -1161,8 +1401,10 @@
88.1116 jchar* jInitVectorChars;
88.1117
88.1118 /* get mechanism */
88.1119 + jMechanismClass = (*env)->FindClass(env, CLASS_MECHANISM);
88.1120 + if (jMechanismClass == NULL) { return; }
88.1121 fieldID = (*env)->GetFieldID(env, jMechanismClass, "mechanism", "J");
88.1122 - assert(fieldID != 0);
88.1123 + if (fieldID == NULL) { return; }
88.1124 jMechanismType = (*env)->GetLongField(env, jMechanism, fieldID);
88.1125 ckMechanismType = jLongToCKULong(jMechanismType);
88.1126 if (ckMechanismType != ckMechanism->mechanism) {
88.1127 @@ -1170,21 +1412,25 @@
88.1128 return;
88.1129 }
88.1130
88.1131 + jPbeParamsClass = (*env)->FindClass(env, CLASS_PBE_PARAMS);
88.1132 + if (jPbeParamsClass == NULL) { return; }
88.1133 ckParam = (CK_PBE_PARAMS *) ckMechanism->pParameter;
88.1134 if (ckParam != NULL_PTR) {
88.1135 initVector = ckParam->pInitVector;
88.1136 if (initVector != NULL_PTR) {
88.1137 /* get pParameter */
88.1138 fieldID = (*env)->GetFieldID(env, jMechanismClass, "pParameter", "Ljava/lang/Object;");
88.1139 - assert(fieldID != 0);
88.1140 + if (fieldID == NULL) { return; }
88.1141 jParameter = (*env)->GetObjectField(env, jMechanism, fieldID);
88.1142 fieldID = (*env)->GetFieldID(env, jPbeParamsClass, "pInitVektor", "[C");
88.1143 - assert(fieldID != 0);
88.1144 + if (fieldID == NULL) { return; }
88.1145 jInitVector = (*env)->GetObjectField(env, jParameter, fieldID);
88.1146
88.1147 if (jInitVector != NULL) {
88.1148 jInitVectorLength = (*env)->GetArrayLength(env, jInitVector);
88.1149 jInitVectorChars = (*env)->GetCharArrayElements(env, jInitVector, NULL);
88.1150 + if (jInitVectorChars == NULL) { return; }
88.1151 +
88.1152 /* copy the chars to the Java buffer */
88.1153 for (i=0; i < jInitVectorLength; i++) {
88.1154 jInitVectorChars[i] = ckCharToJChar(initVector[i]);
88.1155 @@ -1205,41 +1451,50 @@
88.1156 */
88.1157 CK_PKCS5_PBKD2_PARAMS jPkcs5Pbkd2ParamToCKPkcs5Pbkd2Param(JNIEnv *env, jobject jParam)
88.1158 {
88.1159 - jclass jPkcs5Pbkd2ParamsClass = (*env)->FindClass(env, CLASS_PKCS5_PBKD2_PARAMS);
88.1160 + jclass jPkcs5Pbkd2ParamsClass;
88.1161 CK_PKCS5_PBKD2_PARAMS ckParam;
88.1162 jfieldID fieldID;
88.1163 - jlong jLong;
88.1164 - jobject jObject;
88.1165 + jlong jSaltSource, jIteration, jPrf;
88.1166 + jobject jSaltSourceData, jPrfData;
88.1167
88.1168 /* get saltSource */
88.1169 + jPkcs5Pbkd2ParamsClass = (*env)->FindClass(env, CLASS_PKCS5_PBKD2_PARAMS);
88.1170 + if (jPkcs5Pbkd2ParamsClass == NULL) { return ckParam; }
88.1171 fieldID = (*env)->GetFieldID(env, jPkcs5Pbkd2ParamsClass, "saltSource", "J");
88.1172 - assert(fieldID != 0);
88.1173 - jLong = (*env)->GetLongField(env, jParam, fieldID);
88.1174 - ckParam.saltSource = jLongToCKULong(jLong);
88.1175 + if (fieldID == NULL) { return ckParam; }
88.1176 + jSaltSource = (*env)->GetLongField(env, jParam, fieldID);
88.1177
88.1178 /* get pSaltSourceData */
88.1179 fieldID = (*env)->GetFieldID(env, jPkcs5Pbkd2ParamsClass, "pSaltSourceData", "[B");
88.1180 - assert(fieldID != 0);
88.1181 - jObject = (*env)->GetObjectField(env, jParam, fieldID);
88.1182 - jByteArrayToCKByteArray(env, jObject, (CK_BYTE_PTR *) &(ckParam.pSaltSourceData), &(ckParam.ulSaltSourceDataLen));
88.1183 + if (fieldID == NULL) { return ckParam; }
88.1184 + jSaltSourceData = (*env)->GetObjectField(env, jParam, fieldID);
88.1185
88.1186 /* get iterations */
88.1187 fieldID = (*env)->GetFieldID(env, jPkcs5Pbkd2ParamsClass, "iterations", "J");
88.1188 - assert(fieldID != 0);
88.1189 - jLong = (*env)->GetLongField(env, jParam, fieldID);
88.1190 - ckParam.iterations = jLongToCKULong(jLong);
88.1191 + if (fieldID == NULL) { return ckParam; }
88.1192 + jIteration = (*env)->GetLongField(env, jParam, fieldID);
88.1193
88.1194 /* get prf */
88.1195 fieldID = (*env)->GetFieldID(env, jPkcs5Pbkd2ParamsClass, "prf", "J");
88.1196 - assert(fieldID != 0);
88.1197 - jLong = (*env)->GetLongField(env, jParam, fieldID);
88.1198 - ckParam.prf = jLongToCKULong(jLong);
88.1199 + if (fieldID == NULL) { return ckParam; }
88.1200 + jPrf = (*env)->GetLongField(env, jParam, fieldID);
88.1201
88.1202 /* get pPrfData and ulPrfDataLength in byte */
88.1203 fieldID = (*env)->GetFieldID(env, jPkcs5Pbkd2ParamsClass, "pPrfData", "[B");
88.1204 - assert(fieldID != 0);
88.1205 - jObject = (*env)->GetObjectField(env, jParam, fieldID);
88.1206 - jByteArrayToCKByteArray(env, jObject, (CK_BYTE_PTR *) &(ckParam.pPrfData), &(ckParam.ulPrfDataLen));
88.1207 + if (fieldID == NULL) { return ckParam; }
88.1208 + jPrfData = (*env)->GetObjectField(env, jParam, fieldID);
88.1209 +
88.1210 + /* populate java values */
88.1211 + ckParam.saltSource = jLongToCKULong(jSaltSource);
88.1212 + jByteArrayToCKByteArray(env, jSaltSourceData, (CK_BYTE_PTR *) &(ckParam.pSaltSourceData), &(ckParam.ulSaltSourceDataLen));
88.1213 + if ((*env)->ExceptionCheck(env)) { return ckParam; }
88.1214 + ckParam.iterations = jLongToCKULong(jIteration);
88.1215 + ckParam.prf = jLongToCKULong(jPrf);
88.1216 + jByteArrayToCKByteArray(env, jPrfData, (CK_BYTE_PTR *) &(ckParam.pPrfData), &(ckParam.ulPrfDataLen));
88.1217 + if ((*env)->ExceptionCheck(env)) {
88.1218 + free(ckParam.pSaltSourceData);
88.1219 + return ckParam;
88.1220 + }
88.1221
88.1222 return ckParam ;
88.1223 }
88.1224 @@ -1253,28 +1508,32 @@
88.1225 */
88.1226 CK_RSA_PKCS_PSS_PARAMS jRsaPkcsPssParamToCKRsaPkcsPssParam(JNIEnv *env, jobject jParam)
88.1227 {
88.1228 - jclass jRsaPkcsPssParamsClass = (*env)->FindClass(env, CLASS_RSA_PKCS_PSS_PARAMS);
88.1229 + jclass jRsaPkcsPssParamsClass;
88.1230 CK_RSA_PKCS_PSS_PARAMS ckParam;
88.1231 jfieldID fieldID;
88.1232 - jlong jLong;
88.1233 + jlong jHashAlg, jMgf, jSLen;
88.1234
88.1235 /* get hashAlg */
88.1236 + jRsaPkcsPssParamsClass = (*env)->FindClass(env, CLASS_RSA_PKCS_PSS_PARAMS);
88.1237 + if (jRsaPkcsPssParamsClass == NULL) { return ckParam; }
88.1238 fieldID = (*env)->GetFieldID(env, jRsaPkcsPssParamsClass, "hashAlg", "J");
88.1239 - assert(fieldID != 0);
88.1240 - jLong = (*env)->GetLongField(env, jParam, fieldID);
88.1241 - ckParam.hashAlg = jLongToCKULong(jLong);
88.1242 + if (fieldID == NULL) { return ckParam; }
88.1243 + jHashAlg = (*env)->GetLongField(env, jParam, fieldID);
88.1244
88.1245 /* get mgf */
88.1246 fieldID = (*env)->GetFieldID(env, jRsaPkcsPssParamsClass, "mgf", "J");
88.1247 - assert(fieldID != 0);
88.1248 - jLong = (*env)->GetLongField(env, jParam, fieldID);
88.1249 - ckParam.mgf = jLongToCKULong(jLong);
88.1250 + if (fieldID == NULL) { return ckParam; }
88.1251 + jMgf = (*env)->GetLongField(env, jParam, fieldID);
88.1252
88.1253 /* get sLen */
88.1254 fieldID = (*env)->GetFieldID(env, jRsaPkcsPssParamsClass, "sLen", "J");
88.1255 - assert(fieldID != 0);
88.1256 - jLong = (*env)->GetLongField(env, jParam, fieldID);
88.1257 - ckParam.sLen = jLongToCKULong(jLong);
88.1258 + if (fieldID == NULL) { return ckParam; }
88.1259 + jSLen = (*env)->GetLongField(env, jParam, fieldID);
88.1260 +
88.1261 + /* populate java values */
88.1262 + ckParam.hashAlg = jLongToCKULong(jHashAlg);
88.1263 + ckParam.mgf = jLongToCKULong(jMgf);
88.1264 + ckParam.sLen = jLongToCKULong(jSLen);
88.1265
88.1266 return ckParam ;
88.1267 }
88.1268 @@ -1288,29 +1547,39 @@
88.1269 */
88.1270 CK_ECDH1_DERIVE_PARAMS jEcdh1DeriveParamToCKEcdh1DeriveParam(JNIEnv *env, jobject jParam)
88.1271 {
88.1272 - jclass jEcdh1DeriveParamsClass = (*env)->FindClass(env, CLASS_ECDH1_DERIVE_PARAMS);
88.1273 + jclass jEcdh1DeriveParamsClass;
88.1274 CK_ECDH1_DERIVE_PARAMS ckParam;
88.1275 jfieldID fieldID;
88.1276 jlong jLong;
88.1277 - jobject jObject;
88.1278 + jobject jSharedData, jPublicData;
88.1279
88.1280 /* get kdf */
88.1281 + jEcdh1DeriveParamsClass = (*env)->FindClass(env, CLASS_ECDH1_DERIVE_PARAMS);
88.1282 + if (jEcdh1DeriveParamsClass == NULL) { return ckParam; }
88.1283 fieldID = (*env)->GetFieldID(env, jEcdh1DeriveParamsClass, "kdf", "J");
88.1284 - assert(fieldID != 0);
88.1285 + if (fieldID == NULL) { return ckParam; }
88.1286 jLong = (*env)->GetLongField(env, jParam, fieldID);
88.1287 ckParam.kdf = jLongToCKULong(jLong);
88.1288
88.1289 /* get pSharedData and ulSharedDataLen */
88.1290 fieldID = (*env)->GetFieldID(env, jEcdh1DeriveParamsClass, "pSharedData", "[B");
88.1291 - assert(fieldID != 0);
88.1292 - jObject = (*env)->GetObjectField(env, jParam, fieldID);
88.1293 - jByteArrayToCKByteArray(env, jObject, &(ckParam.pSharedData), &(ckParam.ulSharedDataLen));
88.1294 + if (fieldID == NULL) { return ckParam; }
88.1295 + jSharedData = (*env)->GetObjectField(env, jParam, fieldID);
88.1296
88.1297 /* get pPublicData and ulPublicDataLen */
88.1298 fieldID = (*env)->GetFieldID(env, jEcdh1DeriveParamsClass, "pPublicData", "[B");
88.1299 - assert(fieldID != 0);
88.1300 - jObject = (*env)->GetObjectField(env, jParam, fieldID);
88.1301 - jByteArrayToCKByteArray(env, jObject, &(ckParam.pPublicData), &(ckParam.ulPublicDataLen));
88.1302 + if (fieldID == NULL) { return ckParam; }
88.1303 + jPublicData = (*env)->GetObjectField(env, jParam, fieldID);
88.1304 +
88.1305 + /* populate java values */
88.1306 + ckParam.kdf = jLongToCKULong(jLong);
88.1307 + jByteArrayToCKByteArray(env, jSharedData, &(ckParam.pSharedData), &(ckParam.ulSharedDataLen));
88.1308 + if ((*env)->ExceptionCheck(env)) { return ckParam; }
88.1309 + jByteArrayToCKByteArray(env, jPublicData, &(ckParam.pPublicData), &(ckParam.ulPublicDataLen));
88.1310 + if ((*env)->ExceptionCheck(env)) {
88.1311 + free(ckParam.pSharedData);
88.1312 + return ckParam;
88.1313 + }
88.1314
88.1315 return ckParam ;
88.1316 }
88.1317 @@ -1324,48 +1593,61 @@
88.1318 */
88.1319 CK_ECDH2_DERIVE_PARAMS jEcdh2DeriveParamToCKEcdh2DeriveParam(JNIEnv *env, jobject jParam)
88.1320 {
88.1321 - jclass jEcdh2DeriveParamsClass = (*env)->FindClass(env, CLASS_ECDH2_DERIVE_PARAMS);
88.1322 + jclass jEcdh2DeriveParamsClass;
88.1323 CK_ECDH2_DERIVE_PARAMS ckParam;
88.1324 jfieldID fieldID;
88.1325 - jlong jLong;
88.1326 - jobject jObject;
88.1327 + jlong jKdf, jPrivateDataLen, jPrivateData;
88.1328 + jobject jSharedData, jPublicData, jPublicData2;
88.1329
88.1330 /* get kdf */
88.1331 + jEcdh2DeriveParamsClass = (*env)->FindClass(env, CLASS_ECDH2_DERIVE_PARAMS);
88.1332 + if (jEcdh2DeriveParamsClass == NULL) { return ckParam; }
88.1333 fieldID = (*env)->GetFieldID(env, jEcdh2DeriveParamsClass, "kdf", "J");
88.1334 - assert(fieldID != 0);
88.1335 - jLong = (*env)->GetLongField(env, jParam, fieldID);
88.1336 - ckParam.kdf = jLongToCKULong(jLong);
88.1337 + if (fieldID == NULL) { return ckParam; }
88.1338 + jKdf = (*env)->GetLongField(env, jParam, fieldID);
88.1339
88.1340 /* get pSharedData and ulSharedDataLen */
88.1341 fieldID = (*env)->GetFieldID(env, jEcdh2DeriveParamsClass, "pSharedData", "[B");
88.1342 - assert(fieldID != 0);
88.1343 - jObject = (*env)->GetObjectField(env, jParam, fieldID);
88.1344 - jByteArrayToCKByteArray(env, jObject, &(ckParam.pSharedData), &(ckParam.ulSharedDataLen));
88.1345 + if (fieldID == NULL) { return ckParam; }
88.1346 + jSharedData = (*env)->GetObjectField(env, jParam, fieldID);
88.1347
88.1348 /* get pPublicData and ulPublicDataLen */
88.1349 fieldID = (*env)->GetFieldID(env, jEcdh2DeriveParamsClass, "pPublicData", "[B");
88.1350 - assert(fieldID != 0);
88.1351 - jObject = (*env)->GetObjectField(env, jParam, fieldID);
88.1352 - jByteArrayToCKByteArray(env, jObject, &(ckParam.pPublicData), &(ckParam.ulPublicDataLen));
88.1353 + if (fieldID == NULL) { return ckParam; }
88.1354 + jPublicData = (*env)->GetObjectField(env, jParam, fieldID);
88.1355
88.1356 /* get ulPrivateDataLen */
88.1357 fieldID = (*env)->GetFieldID(env, jEcdh2DeriveParamsClass, "ulPrivateDataLen", "J");
88.1358 - assert(fieldID != 0);
88.1359 - jLong = (*env)->GetLongField(env, jParam, fieldID);
88.1360 - ckParam.ulPrivateDataLen = jLongToCKULong(jLong);
88.1361 + if (fieldID == NULL) { return ckParam; }
88.1362 + jPrivateDataLen = (*env)->GetLongField(env, jParam, fieldID);
88.1363
88.1364 /* get hPrivateData */
88.1365 fieldID = (*env)->GetFieldID(env, jEcdh2DeriveParamsClass, "hPrivateData", "J");
88.1366 - assert(fieldID != 0);
88.1367 - jLong = (*env)->GetLongField(env, jParam, fieldID);
88.1368 - ckParam.hPrivateData = jLongToCKULong(jLong);
88.1369 + if (fieldID == NULL) { return ckParam; }
88.1370 + jPrivateData = (*env)->GetLongField(env, jParam, fieldID);
88.1371
88.1372 /* get pPublicData2 and ulPublicDataLen2 */
88.1373 fieldID = (*env)->GetFieldID(env, jEcdh2DeriveParamsClass, "pPublicData2", "[B");
88.1374 - assert(fieldID != 0);
88.1375 - jObject = (*env)->GetObjectField(env, jParam, fieldID);
88.1376 - jByteArrayToCKByteArray(env, jObject, &(ckParam.pPublicData2), &(ckParam.ulPublicDataLen2));
88.1377 + if (fieldID == NULL) { return ckParam; }
88.1378 + jPublicData2 = (*env)->GetObjectField(env, jParam, fieldID);
88.1379
88.1380 + /* populate java values */
88.1381 + ckParam.kdf = jLongToCKULong(jKdf);
88.1382 + jByteArrayToCKByteArray(env, jSharedData, &(ckParam.pSharedData), &(ckParam.ulSharedDataLen));
88.1383 + if ((*env)->ExceptionCheck(env)) { return ckParam; }
88.1384 + jByteArrayToCKByteArray(env, jPublicData, &(ckParam.pPublicData), &(ckParam.ulPublicDataLen));
88.1385 + if ((*env)->ExceptionCheck(env)) {
88.1386 + free(ckParam.pSharedData);
88.1387 + return ckParam;
88.1388 + }
88.1389 + ckParam.ulPrivateDataLen = jLongToCKULong(jPrivateDataLen);
88.1390 + ckParam.hPrivateData = jLongToCKULong(jPrivateData);
88.1391 + jByteArrayToCKByteArray(env, jPublicData2, &(ckParam.pPublicData2), &(ckParam.ulPublicDataLen2));
88.1392 + if ((*env)->ExceptionCheck(env)) {
88.1393 + free(ckParam.pSharedData);
88.1394 + free(ckParam.pPublicData);
88.1395 + return ckParam;
88.1396 + }
88.1397 return ckParam ;
88.1398 }
88.1399
88.1400 @@ -1378,29 +1660,38 @@
88.1401 */
88.1402 CK_X9_42_DH1_DERIVE_PARAMS jX942Dh1DeriveParamToCKX942Dh1DeriveParam(JNIEnv *env, jobject jParam)
88.1403 {
88.1404 - jclass jX942Dh1DeriveParamsClass = (*env)->FindClass(env, CLASS_X9_42_DH1_DERIVE_PARAMS);
88.1405 + jclass jX942Dh1DeriveParamsClass;
88.1406 CK_X9_42_DH1_DERIVE_PARAMS ckParam;
88.1407 jfieldID fieldID;
88.1408 - jlong jLong;
88.1409 - jobject jObject;
88.1410 + jlong jKdf;
88.1411 + jobject jOtherInfo, jPublicData;
88.1412
88.1413 /* get kdf */
88.1414 + jX942Dh1DeriveParamsClass = (*env)->FindClass(env, CLASS_X9_42_DH1_DERIVE_PARAMS);
88.1415 + if (jX942Dh1DeriveParamsClass == NULL) { return ckParam; }
88.1416 fieldID = (*env)->GetFieldID(env, jX942Dh1DeriveParamsClass, "kdf", "J");
88.1417 - assert(fieldID != 0);
88.1418 - jLong = (*env)->GetLongField(env, jParam, fieldID);
88.1419 - ckParam.kdf = jLongToCKULong(jLong);
88.1420 + if (fieldID == NULL) { return ckParam; }
88.1421 + jKdf = (*env)->GetLongField(env, jParam, fieldID);
88.1422
88.1423 /* get pOtherInfo and ulOtherInfoLen */
88.1424 fieldID = (*env)->GetFieldID(env, jX942Dh1DeriveParamsClass, "pOtherInfo", "[B");
88.1425 - assert(fieldID != 0);
88.1426 - jObject = (*env)->GetObjectField(env, jParam, fieldID);
88.1427 - jByteArrayToCKByteArray(env, jObject, &(ckParam.pOtherInfo), &(ckParam.ulOtherInfoLen));
88.1428 + if (fieldID == NULL) { return ckParam; }
88.1429 + jOtherInfo = (*env)->GetObjectField(env, jParam, fieldID);
88.1430
88.1431 /* get pPublicData and ulPublicDataLen */
88.1432 fieldID = (*env)->GetFieldID(env, jX942Dh1DeriveParamsClass, "pPublicData", "[B");
88.1433 - assert(fieldID != 0);
88.1434 - jObject = (*env)->GetObjectField(env, jParam, fieldID);
88.1435 - jByteArrayToCKByteArray(env, jObject, &(ckParam.pPublicData), &(ckParam.ulPublicDataLen));
88.1436 + if (fieldID == NULL) { return ckParam; }
88.1437 + jPublicData = (*env)->GetObjectField(env, jParam, fieldID);
88.1438 +
88.1439 + /* populate java values */
88.1440 + ckParam.kdf = jLongToCKULong(jKdf);
88.1441 + jByteArrayToCKByteArray(env, jOtherInfo, &(ckParam.pOtherInfo), &(ckParam.ulOtherInfoLen));
88.1442 + if ((*env)->ExceptionCheck(env)) { return ckParam; }
88.1443 + jByteArrayToCKByteArray(env, jPublicData, &(ckParam.pPublicData), &(ckParam.ulPublicDataLen));
88.1444 + if ((*env)->ExceptionCheck(env)) {
88.1445 + free(ckParam.pOtherInfo);
88.1446 + return ckParam;
88.1447 + }
88.1448
88.1449 return ckParam ;
88.1450 }
88.1451 @@ -1414,47 +1705,61 @@
88.1452 */
88.1453 CK_X9_42_DH2_DERIVE_PARAMS jX942Dh2DeriveParamToCKX942Dh2DeriveParam(JNIEnv *env, jobject jParam)
88.1454 {
88.1455 - jclass jX942Dh2DeriveParamsClass = (*env)->FindClass(env, CLASS_X9_42_DH2_DERIVE_PARAMS);
88.1456 + jclass jX942Dh2DeriveParamsClass;
88.1457 CK_X9_42_DH2_DERIVE_PARAMS ckParam;
88.1458 jfieldID fieldID;
88.1459 - jlong jLong;
88.1460 - jobject jObject;
88.1461 + jlong jKdf, jPrivateDataLen, jPrivateData;
88.1462 + jobject jOtherInfo, jPublicData, jPublicData2;
88.1463
88.1464 /* get kdf */
88.1465 + jX942Dh2DeriveParamsClass = (*env)->FindClass(env, CLASS_X9_42_DH2_DERIVE_PARAMS);
88.1466 + if (jX942Dh2DeriveParamsClass == NULL) { return ckParam; }
88.1467 fieldID = (*env)->GetFieldID(env, jX942Dh2DeriveParamsClass, "kdf", "J");
88.1468 - assert(fieldID != 0);
88.1469 - jLong = (*env)->GetLongField(env, jParam, fieldID);
88.1470 - ckParam.kdf = jLongToCKULong(jLong);
88.1471 + if (fieldID == NULL) { return ckParam; }
88.1472 + jKdf = (*env)->GetLongField(env, jParam, fieldID);
88.1473
88.1474 /* get pOtherInfo and ulOtherInfoLen */
88.1475 fieldID = (*env)->GetFieldID(env, jX942Dh2DeriveParamsClass, "pOtherInfo", "[B");
88.1476 - assert(fieldID != 0);
88.1477 - jObject = (*env)->GetObjectField(env, jParam, fieldID);
88.1478 - jByteArrayToCKByteArray(env, jObject, &(ckParam.pOtherInfo), &(ckParam.ulOtherInfoLen));
88.1479 + if (fieldID == NULL) { return ckParam; }
88.1480 + jOtherInfo = (*env)->GetObjectField(env, jParam, fieldID);
88.1481
88.1482 /* get pPublicData and ulPublicDataLen */
88.1483 fieldID = (*env)->GetFieldID(env, jX942Dh2DeriveParamsClass, "pPublicData", "[B");
88.1484 - assert(fieldID != 0);
88.1485 - jObject = (*env)->GetObjectField(env, jParam, fieldID);
88.1486 - jByteArrayToCKByteArray(env, jObject, &(ckParam.pPublicData), &(ckParam.ulPublicDataLen));
88.1487 + if (fieldID == NULL) { return ckParam; }
88.1488 + jPublicData = (*env)->GetObjectField(env, jParam, fieldID);
88.1489
88.1490 /* get ulPrivateDataLen */
88.1491 fieldID = (*env)->GetFieldID(env, jX942Dh2DeriveParamsClass, "ulPrivateDataLen", "J");
88.1492 - assert(fieldID != 0);
88.1493 - jLong = (*env)->GetLongField(env, jParam, fieldID);
88.1494 - ckParam.ulPrivateDataLen = jLongToCKULong(jLong);
88.1495 + if (fieldID == NULL) { return ckParam; }
88.1496 + jPrivateDataLen = (*env)->GetLongField(env, jParam, fieldID);
88.1497
88.1498 /* get hPrivateData */
88.1499 fieldID = (*env)->GetFieldID(env, jX942Dh2DeriveParamsClass, "hPrivateData", "J");
88.1500 - assert(fieldID != 0);
88.1501 - jLong = (*env)->GetLongField(env, jParam, fieldID);
88.1502 - ckParam.hPrivateData = jLongToCKULong(jLong);
88.1503 + if (fieldID == NULL) { return ckParam; }
88.1504 + jPrivateData = (*env)->GetLongField(env, jParam, fieldID);
88.1505
88.1506 /* get pPublicData2 and ulPublicDataLen2 */
88.1507 fieldID = (*env)->GetFieldID(env, jX942Dh2DeriveParamsClass, "pPublicData2", "[B");
88.1508 - assert(fieldID != 0);
88.1509 - jObject = (*env)->GetObjectField(env, jParam, fieldID);
88.1510 - jByteArrayToCKByteArray(env, jObject, &(ckParam.pPublicData2), &(ckParam.ulPublicDataLen2));
88.1511 + if (fieldID == NULL) { return ckParam; }
88.1512 + jPublicData2 = (*env)->GetObjectField(env, jParam, fieldID);
88.1513 +
88.1514 + /* populate java values */
88.1515 + ckParam.kdf = jLongToCKULong(jKdf);
88.1516 + jByteArrayToCKByteArray(env, jOtherInfo, &(ckParam.pOtherInfo), &(ckParam.ulOtherInfoLen));
88.1517 + if ((*env)->ExceptionCheck(env)) { return ckParam; }
88.1518 + jByteArrayToCKByteArray(env, jPublicData, &(ckParam.pPublicData), &(ckParam.ulPublicDataLen));
88.1519 + if ((*env)->ExceptionCheck(env)) {
88.1520 + free(ckParam.pOtherInfo);
88.1521 + return ckParam;
88.1522 + }
88.1523 + ckParam.ulPrivateDataLen = jLongToCKULong(jPrivateDataLen);
88.1524 + ckParam.hPrivateData = jLongToCKULong(jPrivateData);
88.1525 + jByteArrayToCKByteArray(env, jPublicData2, &(ckParam.pPublicData2), &(ckParam.ulPublicDataLen2));
88.1526 + if ((*env)->ExceptionCheck(env)) {
88.1527 + free(ckParam.pOtherInfo);
88.1528 + free(ckParam.pPublicData);
88.1529 + return ckParam;
88.1530 + }
88.1531
88.1532 return ckParam ;
88.1533 }
89.1 --- a/src/share/native/sun/security/pkcs11/wrapper/p11_crypt.c Thu Apr 02 10:16:53 2009 -0700
89.2 +++ b/src/share/native/sun/security/pkcs11/wrapper/p11_crypt.c Wed Apr 08 15:40:56 2009 -0700
89.3 @@ -1,5 +1,5 @@
89.4 /*
89.5 - * Portions Copyright 2003-2007 Sun Microsystems, Inc. All Rights Reserved.
89.6 + * Portions Copyright 2003-2009 Sun Microsystems, Inc. All Rights Reserved.
89.7 */
89.8
89.9 /* Copyright (c) 2002 Graz University of Technology. All rights reserved.
89.10 @@ -81,6 +81,7 @@
89.11 ckSessionHandle = jLongToCKULong(jSessionHandle);
89.12 ckKeyHandle = jLongToCKULong(jKeyHandle);
89.13 jMechanismToCKMechanism(env, jMechanism, &ckMechanism);
89.14 + if ((*env)->ExceptionCheck(env)) { return; }
89.15
89.16 rv = (*ckpFunctions->C_EncryptInit)(ckSessionHandle, &ckMechanism,
89.17 ckKeyHandle);
89.18 @@ -126,14 +127,29 @@
89.19
89.20 if (jInLen > MAX_STACK_BUFFER_LEN) {
89.21 inBufP = (CK_BYTE_PTR)malloc((size_t)jInLen);
89.22 + if (inBufP == NULL) {
89.23 + JNU_ThrowOutOfMemoryError(env, 0);
89.24 + return 0;
89.25 + }
89.26 } else {
89.27 inBufP = IBUF;
89.28 }
89.29 (*env)->GetByteArrayRegion(env, jIn, jInOfs, jInLen, (jbyte *)inBufP);
89.30 + if ((*env)->ExceptionCheck(env)) {
89.31 + if (inBufP != IBUF) { free(inBufP); }
89.32 + return 0;
89.33 + }
89.34
89.35 ckEncryptedPartLen = jOutLen;
89.36 if (jOutLen > MAX_STACK_BUFFER_LEN) {
89.37 outBufP = (CK_BYTE_PTR)malloc((size_t)jOutLen);
89.38 + if (outBufP == NULL) {
89.39 + if (inBufP != IBUF) {
89.40 + free(inBufP);
89.41 + }
89.42 + JNU_ThrowOutOfMemoryError(env, 0);
89.43 + return 0;
89.44 + }
89.45 } else {
89.46 outBufP = OBUF;
89.47 }
89.48 @@ -193,10 +209,18 @@
89.49 } else {
89.50 if (jInLen > MAX_STACK_BUFFER_LEN) {
89.51 inBufP = (CK_BYTE_PTR)malloc((size_t)jInLen);
89.52 + if (inBufP == NULL) {
89.53 + JNU_ThrowOutOfMemoryError(env, 0);
89.54 + return 0;
89.55 + }
89.56 } else {
89.57 inBufP = IBUF;
89.58 }
89.59 (*env)->GetByteArrayRegion(env, jIn, jInOfs, jInLen, (jbyte *)inBufP);
89.60 + if ((*env)->ExceptionCheck(env)) {
89.61 + if (directIn == 0 && inBufP != IBUF) { free(inBufP); }
89.62 + return 0;
89.63 + }
89.64 }
89.65
89.66 ckEncryptedPartLen = jOutLen;
89.67 @@ -205,6 +229,13 @@
89.68 } else {
89.69 if (jOutLen > MAX_STACK_BUFFER_LEN) {
89.70 outBufP = (CK_BYTE_PTR)malloc((size_t)jOutLen);
89.71 + if (outBufP == NULL) {
89.72 + if (directIn == 0 && inBufP != IBUF) {
89.73 + free(inBufP);
89.74 + }
89.75 + JNU_ThrowOutOfMemoryError(env, 0);
89.76 + return 0;
89.77 + }
89.78 } else {
89.79 outBufP = OBUF;
89.80 }
89.81 @@ -317,6 +348,7 @@
89.82 ckSessionHandle = jLongToCKULong(jSessionHandle);
89.83 ckKeyHandle = jLongToCKULong(jKeyHandle);
89.84 jMechanismToCKMechanism(env, jMechanism, &ckMechanism);
89.85 + if ((*env)->ExceptionCheck(env)) { return; }
89.86
89.87 rv = (*ckpFunctions->C_DecryptInit)(ckSessionHandle, &ckMechanism,
89.88 ckKeyHandle);
89.89 @@ -362,14 +394,29 @@
89.90
89.91 if (jInLen > MAX_STACK_BUFFER_LEN) {
89.92 inBufP = (CK_BYTE_PTR)malloc((size_t)jInLen);
89.93 + if (inBufP == NULL) {
89.94 + JNU_ThrowOutOfMemoryError(env, 0);
89.95 + return 0;
89.96 + }
89.97 } else {
89.98 inBufP = IBUF;
89.99 }
89.100 (*env)->GetByteArrayRegion(env, jIn, jInOfs, jInLen, (jbyte *)inBufP);
89.101 + if ((*env)->ExceptionCheck(env)) {
89.102 + if (inBufP != IBUF) { free(inBufP); }
89.103 + return 0;
89.104 + }
89.105
89.106 ckPartLen = jOutLen;
89.107 if (jOutLen > MAX_STACK_BUFFER_LEN) {
89.108 outBufP = (CK_BYTE_PTR)malloc((size_t)jOutLen);
89.109 + if (outBufP == NULL) {
89.110 + if (inBufP != IBUF) {
89.111 + free(inBufP);
89.112 + }
89.113 + JNU_ThrowOutOfMemoryError(env, 0);
89.114 + return 0;
89.115 + }
89.116 } else {
89.117 outBufP = OBUF;
89.118 }
89.119 @@ -429,10 +476,18 @@
89.120 } else {
89.121 if (jInLen > MAX_STACK_BUFFER_LEN) {
89.122 inBufP = (CK_BYTE_PTR)malloc((size_t)jInLen);
89.123 + if (inBufP == NULL) {
89.124 + JNU_ThrowOutOfMemoryError(env, 0);
89.125 + return 0;
89.126 + }
89.127 } else {
89.128 inBufP = IBUF;
89.129 }
89.130 (*env)->GetByteArrayRegion(env, jIn, jInOfs, jInLen, (jbyte *)inBufP);
89.131 + if ((*env)->ExceptionCheck(env)) {
89.132 + if (directIn == 0 && inBufP != IBUF) { free(inBufP); }
89.133 + return 0;
89.134 + }
89.135 }
89.136
89.137 ckDecryptedPartLen = jOutLen;
89.138 @@ -441,6 +496,13 @@
89.139 } else {
89.140 if (jOutLen > MAX_STACK_BUFFER_LEN) {
89.141 outBufP = (CK_BYTE_PTR)malloc((size_t)jOutLen);
89.142 + if (outBufP == NULL) {
89.143 + if (directIn == 0 && inBufP != IBUF) {
89.144 + free(inBufP);
89.145 + }
89.146 + JNU_ThrowOutOfMemoryError(env, 0);
89.147 + return 0;
89.148 + }
89.149 } else {
89.150 outBufP = OBUF;
89.151 }
90.1 --- a/src/share/native/sun/security/pkcs11/wrapper/p11_digest.c Thu Apr 02 10:16:53 2009 -0700
90.2 +++ b/src/share/native/sun/security/pkcs11/wrapper/p11_digest.c Wed Apr 08 15:40:56 2009 -0700
90.3 @@ -1,5 +1,5 @@
90.4 /*
90.5 - * Portions Copyright 2003 Sun Microsystems, Inc. All Rights Reserved.
90.6 + * Portions Copyright 2003-2009 Sun Microsystems, Inc. All Rights Reserved.
90.7 */
90.8
90.9 /* Copyright (c) 2002 Graz University of Technology. All rights reserved.
90.10 @@ -75,6 +75,7 @@
90.11
90.12 ckSessionHandle = jLongToCKULong(jSessionHandle);
90.13 jMechanismToCKMechanism(env, jMechanism, &ckMechanism);
90.14 + if ((*env)->ExceptionCheck(env)) { return; }
90.15
90.16 rv = (*ckpFunctions->C_DigestInit)(ckSessionHandle, &ckMechanism);
90.17
90.18 @@ -82,7 +83,7 @@
90.19 free(ckMechanism.pParameter);
90.20 }
90.21
90.22 - if(ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return; }
90.23 + if (ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return; }
90.24 }
90.25 #endif
90.26
90.27 @@ -114,6 +115,7 @@
90.28
90.29 ckSessionHandle = jLongToCKULong(jSessionHandle);
90.30 jMechanismToCKMechanism(env, jMechanism, &ckMechanism);
90.31 + if ((*env)->ExceptionCheck(env)) { return 0; }
90.32
90.33 rv = (*ckpFunctions->C_DigestInit)(ckSessionHandle, &ckMechanism);
90.34
90.35 @@ -121,29 +123,32 @@
90.36 free(ckMechanism.pParameter);
90.37 }
90.38
90.39 - if(ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return 0; }
90.40 + if (ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return 0; }
90.41
90.42 if (jInLen <= MAX_STACK_BUFFER_LEN) {
90.43 bufP = BUF;
90.44 } else {
90.45 /* always use single part op, even for large data */
90.46 - bufP = (CK_BYTE_PTR)malloc((size_t)jInLen);
90.47 + bufP = (CK_BYTE_PTR) malloc((size_t)jInLen);
90.48 + if (bufP == NULL) {
90.49 + JNU_ThrowOutOfMemoryError(env, 0);
90.50 + return 0;
90.51 + }
90.52 }
90.53
90.54 (*env)->GetByteArrayRegion(env, jIn, jInOfs, jInLen, (jbyte *)bufP);
90.55 - rv = (*ckpFunctions->C_Digest)(ckSessionHandle, bufP, jInLen, DIGESTBUF, &ckDigestLength);
90.56 - if(ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) {
90.57 - if (bufP != BUF) {
90.58 - free(bufP);
90.59 - }
90.60 + if ((*env)->ExceptionCheck(env)) {
90.61 + if (bufP != BUF) { free(bufP); }
90.62 return 0;
90.63 }
90.64
90.65 - (*env)->SetByteArrayRegion(env, jDigest, jDigestOfs, ckDigestLength, (jbyte *)DIGESTBUF);
90.66 + rv = (*ckpFunctions->C_Digest)(ckSessionHandle, bufP, jInLen, DIGESTBUF, &ckDigestLength);
90.67 + if (ckAssertReturnValueOK(env, rv) == CK_ASSERT_OK) {
90.68 + (*env)->SetByteArrayRegion(env, jDigest, jDigestOfs, ckDigestLength, (jbyte *)DIGESTBUF);
90.69 + }
90.70
90.71 - if (bufP != BUF) {
90.72 - free(bufP);
90.73 - }
90.74 + if (bufP != BUF) { free(bufP); }
90.75 +
90.76 return ckDigestLength;
90.77 }
90.78 #endif
90.79 @@ -183,17 +188,23 @@
90.80 bufP = BUF;
90.81 } else {
90.82 bufLen = min(MAX_HEAP_BUFFER_LEN, jInLen);
90.83 - bufP = (CK_BYTE_PTR)malloc((size_t)bufLen);
90.84 + bufP = (CK_BYTE_PTR) malloc((size_t)bufLen);
90.85 + if (bufP == NULL) {
90.86 + JNU_ThrowOutOfMemoryError(env, 0);
90.87 + return;
90.88 + }
90.89 }
90.90
90.91 while (jInLen > 0) {
90.92 jsize chunkLen = min(bufLen, jInLen);
90.93 (*env)->GetByteArrayRegion(env, jIn, jInOfs, chunkLen, (jbyte *)bufP);
90.94 + if ((*env)->ExceptionCheck(env)) {
90.95 + if (bufP != BUF) { free(bufP); }
90.96 + return;
90.97 + }
90.98 rv = (*ckpFunctions->C_DigestUpdate)(ckSessionHandle, bufP, chunkLen);
90.99 - if(ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) {
90.100 - if (bufP != BUF) {
90.101 - free(bufP);
90.102 - }
90.103 + if (ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) {
90.104 + if (bufP != BUF) { free(bufP); }
90.105 return;
90.106 }
90.107 jInOfs += chunkLen;
90.108 @@ -229,7 +240,7 @@
90.109 ckKeyHandle = jLongToCKULong(jKeyHandle);
90.110
90.111 rv = (*ckpFunctions->C_DigestKey)(ckSessionHandle, ckKeyHandle);
90.112 - if(ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return; }
90.113 + if (ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return; }
90.114 }
90.115 #endif
90.116
90.117 @@ -257,10 +268,9 @@
90.118 ckSessionHandle = jLongToCKULong(jSessionHandle);
90.119
90.120 rv = (*ckpFunctions->C_DigestFinal)(ckSessionHandle, BUF, &ckDigestLength);
90.121 - if(ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return 0 ; }
90.122 -
90.123 - (*env)->SetByteArrayRegion(env, jDigest, jDigestOfs, ckDigestLength, (jbyte *)BUF);
90.124 -
90.125 + if (ckAssertReturnValueOK(env, rv) == CK_ASSERT_OK) {
90.126 + (*env)->SetByteArrayRegion(env, jDigest, jDigestOfs, ckDigestLength, (jbyte *)BUF);
90.127 + }
90.128 return ckDigestLength;
90.129 }
90.130 #endif
90.131 @@ -288,12 +298,13 @@
90.132
90.133 ckSessionHandle = jLongToCKULong(jSessionHandle);
90.134 jByteArrayToCKByteArray(env, jSeed, &ckpSeed, &ckSeedLength);
90.135 + if ((*env)->ExceptionCheck(env)) { return; }
90.136
90.137 rv = (*ckpFunctions->C_SeedRandom)(ckSessionHandle, ckpSeed, ckSeedLength);
90.138
90.139 free(ckpSeed);
90.140
90.141 - if(ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return; }
90.142 + if (ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return; }
90.143 }
90.144 #endif
90.145
90.146 @@ -322,6 +333,7 @@
90.147
90.148 jRandomBufferLength = (*env)->GetArrayLength(env, jRandomData);
90.149 jRandomBuffer = (*env)->GetByteArrayElements(env, jRandomData, NULL);
90.150 + if (jRandomBuffer == NULL) { return; }
90.151
90.152 rv = (*ckpFunctions->C_GenerateRandom)(ckSessionHandle,
90.153 (CK_BYTE_PTR) jRandomBuffer,
90.154 @@ -330,6 +342,6 @@
90.155 /* copy back generated bytes */
90.156 (*env)->ReleaseByteArrayElements(env, jRandomData, jRandomBuffer, 0);
90.157
90.158 - if(ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return; }
90.159 + if (ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return; }
90.160 }
90.161 #endif
91.1 --- a/src/share/native/sun/security/pkcs11/wrapper/p11_dual.c Thu Apr 02 10:16:53 2009 -0700
91.2 +++ b/src/share/native/sun/security/pkcs11/wrapper/p11_dual.c Wed Apr 08 15:40:56 2009 -0700
91.3 @@ -1,5 +1,5 @@
91.4 /*
91.5 - * Portions Copyright 2003-2007 Sun Microsystems, Inc. All Rights Reserved.
91.6 + * Portions Copyright 2003-2009 Sun Microsystems, Inc. All Rights Reserved.
91.7 */
91.8
91.9 /* Copyright (c) 2002 Graz University of Technology. All rights reserved.
91.10 @@ -73,7 +73,7 @@
91.11 CK_SESSION_HANDLE ckSessionHandle;
91.12 CK_BYTE_PTR ckpPart = NULL_PTR, ckpEncryptedPart;
91.13 CK_ULONG ckPartLength, ckEncryptedPartLength = 0;
91.14 - jbyteArray jEncryptedPart;
91.15 + jbyteArray jEncryptedPart = NULL;
91.16 CK_RV rv;
91.17
91.18 CK_FUNCTION_LIST_PTR ckpFunctions = getFunctionList(env, obj);
91.19 @@ -81,20 +81,28 @@
91.20
91.21 ckSessionHandle = jLongToCKULong(jSessionHandle);
91.22 jByteArrayToCKByteArray(env, jPart, &ckpPart, &ckPartLength);
91.23 + if ((*env)->ExceptionCheck(env)) { return NULL; }
91.24
91.25 rv = (*ckpFunctions->C_DigestEncryptUpdate)(ckSessionHandle, ckpPart, ckPartLength, NULL_PTR, &ckEncryptedPartLength);
91.26 - if(ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return NULL ; }
91.27 + if (ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) {
91.28 + free(ckpPart);
91.29 + return NULL;
91.30 + }
91.31
91.32 ckpEncryptedPart = (CK_BYTE_PTR) malloc(ckEncryptedPartLength * sizeof(CK_BYTE));
91.33 + if (ckpEncryptedPart == NULL) {
91.34 + free(ckpPart);
91.35 + JNU_ThrowOutOfMemoryError(env, 0);
91.36 + return NULL;
91.37 + }
91.38
91.39 rv = (*ckpFunctions->C_DigestEncryptUpdate)(ckSessionHandle, ckpPart, ckPartLength, ckpEncryptedPart, &ckEncryptedPartLength);
91.40 -
91.41 - jEncryptedPart = ckByteArrayToJByteArray(env, ckpEncryptedPart, ckEncryptedPartLength);
91.42 + if (ckAssertReturnValueOK(env, rv) == CK_ASSERT_OK) {
91.43 + jEncryptedPart = ckByteArrayToJByteArray(env, ckpEncryptedPart, ckEncryptedPartLength);
91.44 + }
91.45 free(ckpPart);
91.46 free(ckpEncryptedPart);
91.47
91.48 - if(ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return NULL ; }
91.49 -
91.50 return jEncryptedPart ;
91.51 }
91.52 #endif
91.53 @@ -117,7 +125,7 @@
91.54 CK_SESSION_HANDLE ckSessionHandle;
91.55 CK_BYTE_PTR ckpPart, ckpEncryptedPart = NULL_PTR;
91.56 CK_ULONG ckPartLength = 0, ckEncryptedPartLength;
91.57 - jbyteArray jPart;
91.58 + jbyteArray jPart = NULL;
91.59 CK_RV rv;
91.60
91.61 CK_FUNCTION_LIST_PTR ckpFunctions = getFunctionList(env, obj);
91.62 @@ -125,19 +133,27 @@
91.63
91.64 ckSessionHandle = jLongToCKULong(jSessionHandle);
91.65 jByteArrayToCKByteArray(env, jEncryptedPart, &ckpEncryptedPart, &ckEncryptedPartLength);
91.66 + if ((*env)->ExceptionCheck(env)) { return NULL; }
91.67
91.68 rv = (*ckpFunctions->C_DecryptDigestUpdate)(ckSessionHandle, ckpEncryptedPart, ckEncryptedPartLength, NULL_PTR, &ckPartLength);
91.69 - if(ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return NULL; }
91.70 + if (ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) {
91.71 + free(ckpEncryptedPart);
91.72 + return NULL;
91.73 + }
91.74
91.75 ckpPart = (CK_BYTE_PTR) malloc(ckPartLength * sizeof(CK_BYTE));
91.76 + if (ckpPart == NULL) {
91.77 + free(ckpEncryptedPart);
91.78 + JNU_ThrowOutOfMemoryError(env, 0);
91.79 + return NULL;
91.80 + }
91.81
91.82 rv = (*ckpFunctions->C_DecryptDigestUpdate)(ckSessionHandle, ckpEncryptedPart, ckEncryptedPartLength, ckpPart, &ckPartLength);
91.83 -
91.84 - jPart = ckByteArrayToJByteArray(env, ckpPart, ckPartLength);
91.85 + if (ckAssertReturnValueOK(env, rv) == CK_ASSERT_OK) {
91.86 + jPart = ckByteArrayToJByteArray(env, ckpPart, ckPartLength);
91.87 + }
91.88 + free(ckpEncryptedPart);
91.89 free(ckpPart);
91.90 - free(ckpEncryptedPart);
91.91 -
91.92 - if(ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return NULL ; }
91.93
91.94 return jPart ;
91.95 }
91.96 @@ -161,7 +177,7 @@
91.97 CK_SESSION_HANDLE ckSessionHandle;
91.98 CK_BYTE_PTR ckpPart = NULL_PTR, ckpEncryptedPart;
91.99 CK_ULONG ckPartLength, ckEncryptedPartLength = 0;
91.100 - jbyteArray jEncryptedPart;
91.101 + jbyteArray jEncryptedPart = NULL;
91.102 CK_RV rv;
91.103
91.104 CK_FUNCTION_LIST_PTR ckpFunctions = getFunctionList(env, obj);
91.105 @@ -169,20 +185,28 @@
91.106
91.107 ckSessionHandle = jLongToCKULong(jSessionHandle);
91.108 jByteArrayToCKByteArray(env, jPart, &ckpPart, &ckPartLength);
91.109 + if ((*env)->ExceptionCheck(env)) { return NULL; }
91.110
91.111 rv = (*ckpFunctions->C_SignEncryptUpdate)(ckSessionHandle, ckpPart, ckPartLength, NULL_PTR, &ckEncryptedPartLength);
91.112 - if(ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return NULL ; }
91.113 + if (ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) {
91.114 + free(ckpPart);
91.115 + return NULL;
91.116 + }
91.117
91.118 ckpEncryptedPart = (CK_BYTE_PTR) malloc(ckEncryptedPartLength * sizeof(CK_BYTE));
91.119 + if (ckpEncryptedPart == NULL) {
91.120 + free(ckpPart);
91.121 + JNU_ThrowOutOfMemoryError(env, 0);
91.122 + return NULL;
91.123 + }
91.124
91.125 rv = (*ckpFunctions->C_SignEncryptUpdate)(ckSessionHandle, ckpPart, ckPartLength, ckpEncryptedPart, &ckEncryptedPartLength);
91.126 -
91.127 - jEncryptedPart = ckByteArrayToJByteArray(env, ckpEncryptedPart, ckEncryptedPartLength);
91.128 + if (ckAssertReturnValueOK(env, rv) == CK_ASSERT_OK) {
91.129 + jEncryptedPart = ckByteArrayToJByteArray(env, ckpEncryptedPart, ckEncryptedPartLength);
91.130 + }
91.131 free(ckpPart);
91.132 free(ckpEncryptedPart);
91.133
91.134 - if(ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return NULL ; }
91.135 -
91.136 return jEncryptedPart ;
91.137 }
91.138 #endif
91.139 @@ -205,7 +229,7 @@
91.140 CK_SESSION_HANDLE ckSessionHandle;
91.141 CK_BYTE_PTR ckpPart, ckpEncryptedPart = NULL_PTR;
91.142 CK_ULONG ckPartLength = 0, ckEncryptedPartLength;
91.143 - jbyteArray jPart;
91.144 + jbyteArray jPart = NULL;
91.145 CK_RV rv;
91.146
91.147 CK_FUNCTION_LIST_PTR ckpFunctions = getFunctionList(env, obj);
91.148 @@ -213,19 +237,28 @@
91.149
91.150 ckSessionHandle = jLongToCKULong(jSessionHandle);
91.151 jByteArrayToCKByteArray(env, jEncryptedPart, &ckpEncryptedPart, &ckEncryptedPartLength);
91.152 + if ((*env)->ExceptionCheck(env)) { return NULL; }
91.153
91.154 rv = (*ckpFunctions->C_DecryptVerifyUpdate)(ckSessionHandle, ckpEncryptedPart, ckEncryptedPartLength, NULL_PTR, &ckPartLength);
91.155 - if(ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return NULL ; }
91.156 + if (ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) {
91.157 + free(ckpEncryptedPart);
91.158 + return NULL;
91.159 + }
91.160
91.161 ckpPart = (CK_BYTE_PTR) malloc(ckPartLength * sizeof(CK_BYTE));
91.162 + if (ckpPart == NULL) {
91.163 + free(ckpEncryptedPart);
91.164 + JNU_ThrowOutOfMemoryError(env, 0);
91.165 + return NULL;
91.166 + }
91.167
91.168 rv = (*ckpFunctions->C_DecryptVerifyUpdate)(ckSessionHandle, ckpEncryptedPart, ckEncryptedPartLength, ckpPart, &ckPartLength);
91.169
91.170 - jPart = ckByteArrayToJByteArray(env, ckpPart, ckPartLength);
91.171 + if (ckAssertReturnValueOK(env, rv) == CK_ASSERT_OK) {
91.172 + jPart = ckByteArrayToJByteArray(env, ckpPart, ckPartLength);
91.173 + }
91.174 + free(ckpEncryptedPart);
91.175 free(ckpPart);
91.176 - free(ckpEncryptedPart);
91.177 -
91.178 - if(ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return NULL ; }
91.179
91.180 return jPart ;
91.181 }
91.182 @@ -252,7 +285,7 @@
91.183
91.184 /* C_GetFunctionStatus should always return CKR_FUNCTION_NOT_PARALLEL */
91.185 rv = (*ckpFunctions->C_GetFunctionStatus)(ckSessionHandle);
91.186 - if(ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return; }
91.187 + if (ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return; }
91.188 }
91.189 #endif
91.190
91.191 @@ -277,6 +310,6 @@
91.192
91.193 /* C_GetFunctionStatus should always return CKR_FUNCTION_NOT_PARALLEL */
91.194 rv = (*ckpFunctions->C_CancelFunction)(ckSessionHandle);
91.195 - if(ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return; }
91.196 + if (ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return; }
91.197 }
91.198 #endif
92.1 --- a/src/share/native/sun/security/pkcs11/wrapper/p11_general.c Thu Apr 02 10:16:53 2009 -0700
92.2 +++ b/src/share/native/sun/security/pkcs11/wrapper/p11_general.c Wed Apr 08 15:40:56 2009 -0700
92.3 @@ -1,5 +1,5 @@
92.4 /*
92.5 - * Portions Copyright 2003-2006 Sun Microsystems, Inc. All Rights Reserved.
92.6 + * Portions Copyright 2003-2009 Sun Microsystems, Inc. All Rights Reserved.
92.7 */
92.8
92.9 /* Copyright (c) 2002 Graz University of Technology. All rights reserved.
92.10 @@ -102,6 +102,7 @@
92.11
92.12 jclass fetchClass(JNIEnv *env, const char *name) {
92.13 jclass tmpClass = (*env)->FindClass(env, name);
92.14 + if (tmpClass == NULL) { return NULL; }
92.15 return (*env)->NewGlobalRef(env, tmpClass);
92.16 }
92.17
92.18 @@ -110,14 +111,18 @@
92.19
92.20 /* PKCS11 */
92.21 pNativeDataID = (*env)->GetFieldID(env, thisClass, "pNativeData", "J");
92.22 + if (pNativeDataID == NULL) { return; }
92.23
92.24 /* CK_MECHANISM */
92.25 tmpClass = (*env)->FindClass(env, CLASS_MECHANISM);
92.26 + if (tmpClass == NULL) { return; }
92.27 mech_mechanismID = (*env)->GetFieldID(env, tmpClass, "mechanism", "J");
92.28 + if (mech_mechanismID == NULL) { return; }
92.29 mech_pParameterID = (*env)->GetFieldID(env, tmpClass, "pParameter",
92.30 "Ljava/lang/Object;");
92.31 -
92.32 + if (mech_pParameterID == NULL) { return; }
92.33 jByteArrayClass = fetchClass(env, "[B");
92.34 + if (jByteArrayClass == NULL) { return; }
92.35 jLongClass = fetchClass(env, "java/lang/Long");
92.36 }
92.37
92.38 @@ -252,10 +257,9 @@
92.39 if (ckpFunctions == NULL) { return NULL; }
92.40
92.41 rv = (*ckpFunctions->C_GetInfo)(&ckLibInfo);
92.42 - if (ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return NULL ; }
92.43 -
92.44 - jInfoObject = ckInfoPtrToJInfo(env, &ckLibInfo);
92.45 -
92.46 + if (ckAssertReturnValueOK(env, rv) == CK_ASSERT_OK) {
92.47 + jInfoObject = ckInfoPtrToJInfo(env, &ckLibInfo);
92.48 + }
92.49 return jInfoObject ;
92.50 }
92.51
92.52 @@ -279,28 +283,31 @@
92.53
92.54 /* load CK_INFO class */
92.55 jInfoClass = (*env)->FindClass(env, CLASS_INFO);
92.56 - assert(jInfoClass != 0);
92.57 + if (jInfoClass == NULL) { return NULL; };
92.58
92.59 /* load CK_INFO constructor */
92.60 jCtrId = (*env)->GetMethodID
92.61 (env, jInfoClass, "<init>",
92.62 "(Lsun/security/pkcs11/wrapper/CK_VERSION;[CJ[CLsun/security/pkcs11/wrapper/CK_VERSION;)V");
92.63 -
92.64 - assert(jCtrId != 0);
92.65 + if (jCtrId == NULL) { return NULL; }
92.66
92.67 /* prep all fields */
92.68 jCryptokiVer = ckVersionPtrToJVersion(env, &(ckpInfo->cryptokiVersion));
92.69 + if (jCryptokiVer == NULL) { return NULL; }
92.70 jVendor =
92.71 ckUTF8CharArrayToJCharArray(env, &(ckpInfo->manufacturerID[0]), 32);
92.72 + if (jVendor == NULL) { return NULL; }
92.73 jFlags = ckULongToJLong(ckpInfo->flags);
92.74 jLibraryDesc =
92.75 ckUTF8CharArrayToJCharArray(env, &(ckpInfo->libraryDescription[0]), 32);
92.76 + if (jLibraryDesc == NULL) { return NULL; }
92.77 jLibraryVer = ckVersionPtrToJVersion(env, &(ckpInfo->libraryVersion));
92.78 + if (jLibraryVer == NULL) { return NULL; }
92.79
92.80 /* create new CK_INFO object */
92.81 jInfoObject = (*env)->NewObject(env, jInfoClass, jCtrId, jCryptokiVer,
92.82 jVendor, jFlags, jLibraryDesc, jLibraryVer);
92.83 - assert(jInfoObject != 0);
92.84 + if (jInfoObject == NULL) { return NULL; }
92.85
92.86 /* free local references */
92.87 (*env)->DeleteLocalRef(env, jInfoClass);
92.88 @@ -343,15 +350,18 @@
92.89 if (ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return NULL ; }
92.90
92.91 ckpSlotList = (CK_SLOT_ID_PTR) malloc(ckTokenNumber * sizeof(CK_SLOT_ID));
92.92 + if (ckpSlotList == NULL) {
92.93 + JNU_ThrowOutOfMemoryError(env, 0);
92.94 + return NULL;
92.95 + }
92.96
92.97 rv = (*ckpFunctions->C_GetSlotList)(ckTokenPresent, ckpSlotList,
92.98 &ckTokenNumber);
92.99 -
92.100 - jSlotList = ckULongArrayToJLongArray(env, ckpSlotList, ckTokenNumber);
92.101 + if (ckAssertReturnValueOK(env, rv) == CK_ASSERT_OK) {
92.102 + jSlotList = ckULongArrayToJLongArray(env, ckpSlotList, ckTokenNumber);
92.103 + }
92.104 free(ckpSlotList);
92.105
92.106 - if (ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return NULL ; }
92.107 -
92.108 return jSlotList ;
92.109 }
92.110 #endif
92.111 @@ -380,10 +390,9 @@
92.112 ckSlotID = jLongToCKULong(jSlotID);
92.113
92.114 rv = (*ckpFunctions->C_GetSlotInfo)(ckSlotID, &ckSlotInfo);
92.115 - if (ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return NULL ; }
92.116 -
92.117 - jSlotInfoObject = ckSlotInfoPtrToJSlotInfo(env, &ckSlotInfo);
92.118 -
92.119 + if (ckAssertReturnValueOK(env, rv) == CK_ASSERT_OK) {
92.120 + jSlotInfoObject = ckSlotInfoPtrToJSlotInfo(env, &ckSlotInfo);
92.121 + }
92.122 return jSlotInfoObject ;
92.123 }
92.124
92.125 @@ -410,28 +419,32 @@
92.126
92.127 /* load CK_SLOT_INFO class */
92.128 jSlotInfoClass = (*env)->FindClass(env, CLASS_SLOT_INFO);
92.129 - assert(jSlotInfoClass != 0);
92.130 + if (jSlotInfoClass == NULL) { return NULL; };
92.131
92.132 /* load CK_SLOT_INFO constructor */
92.133 jCtrId = (*env)->GetMethodID
92.134 (env, jSlotInfoClass, "<init>",
92.135 "([C[CJLsun/security/pkcs11/wrapper/CK_VERSION;Lsun/security/pkcs11/wrapper/CK_VERSION;)V");
92.136 - assert(jCtrId != 0);
92.137 + if (jCtrId == NULL) { return NULL; }
92.138
92.139 /* prep all fields */
92.140 jSlotDesc =
92.141 ckUTF8CharArrayToJCharArray(env, &(ckpSlotInfo->slotDescription[0]), 64);
92.142 + if (jSlotDesc == NULL) { return NULL; }
92.143 jVendor =
92.144 ckUTF8CharArrayToJCharArray(env, &(ckpSlotInfo->manufacturerID[0]), 32);
92.145 + if (jVendor == NULL) { return NULL; }
92.146 jFlags = ckULongToJLong(ckpSlotInfo->flags);
92.147 jHardwareVer = ckVersionPtrToJVersion(env, &(ckpSlotInfo->hardwareVersion));
92.148 + if (jHardwareVer == NULL) { return NULL; }
92.149 jFirmwareVer = ckVersionPtrToJVersion(env, &(ckpSlotInfo->firmwareVersion));
92.150 + if (jFirmwareVer == NULL) { return NULL; }
92.151
92.152 /* create new CK_SLOT_INFO object */
92.153 jSlotInfoObject = (*env)->NewObject
92.154 (env, jSlotInfoClass, jCtrId, jSlotDesc, jVendor, jFlags,
92.155 jHardwareVer, jFirmwareVer);
92.156 - assert(jSlotInfoObject != 0);
92.157 + if (jSlotInfoObject == NULL) { return NULL; }
92.158
92.159 /* free local references */
92.160 (*env)->DeleteLocalRef(env, jSlotInfoClass);
92.161 @@ -460,7 +473,7 @@
92.162 {
92.163 CK_SLOT_ID ckSlotID;
92.164 CK_TOKEN_INFO ckTokenInfo;
92.165 - jobject jInfoTokenObject;
92.166 + jobject jInfoTokenObject = NULL;
92.167 CK_RV rv;
92.168
92.169 CK_FUNCTION_LIST_PTR ckpFunctions = getFunctionList(env, obj);
92.170 @@ -469,10 +482,9 @@
92.171 ckSlotID = jLongToCKULong(jSlotID);
92.172
92.173 rv = (*ckpFunctions->C_GetTokenInfo)(ckSlotID, &ckTokenInfo);
92.174 - if (ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return NULL ; }
92.175 -
92.176 - jInfoTokenObject = ckTokenInfoPtrToJTokenInfo(env, &ckTokenInfo);
92.177 -
92.178 + if (ckAssertReturnValueOK(env, rv) == CK_ASSERT_OK) {
92.179 + jInfoTokenObject = ckTokenInfoPtrToJTokenInfo(env, &ckTokenInfo);
92.180 + }
92.181 return jInfoTokenObject ;
92.182 }
92.183
92.184 @@ -512,21 +524,25 @@
92.185
92.186 /* load CK_TOKEN_INFO class */
92.187 jTokenInfoClass = (*env)->FindClass(env, CLASS_TOKEN_INFO);
92.188 - assert(jTokenInfoClass != 0);
92.189 + if (jTokenInfoClass == NULL) { return NULL; };
92.190
92.191 /* load CK_TOKEN_INFO constructor */
92.192 jCtrId = (*env)->GetMethodID
92.193 (env, jTokenInfoClass, "<init>",
92.194 "([C[C[C[CJJJJJJJJJJJLsun/security/pkcs11/wrapper/CK_VERSION;Lsun/security/pkcs11/wrapper/CK_VERSION;[C)V");
92.195 - assert(jCtrId != 0);
92.196 + if (jCtrId == NULL) { return NULL; };
92.197
92.198 /* prep all fields */
92.199 jLabel = ckUTF8CharArrayToJCharArray(env, &(ckpTokenInfo->label[0]), 32);
92.200 + if (jLabel == NULL) { return NULL; };
92.201 jVendor =
92.202 ckUTF8CharArrayToJCharArray(env, &(ckpTokenInfo->manufacturerID[0]), 32);
92.203 + if (jVendor == NULL) { return NULL; };
92.204 jModel = ckUTF8CharArrayToJCharArray(env, &(ckpTokenInfo->model[0]), 16);
92.205 + if (jModel == NULL) { return NULL; };
92.206 jSerialNo =
92.207 ckUTF8CharArrayToJCharArray(env, &(ckpTokenInfo->serialNumber[0]), 16);
92.208 + if (jSerialNo == NULL) { return NULL; };
92.209 jFlags = ckULongToJLong(ckpTokenInfo->flags);
92.210 jMaxSnCnt = ckULongSpecialToJLong(ckpTokenInfo->ulMaxSessionCount);
92.211 jSnCnt = ckULongSpecialToJLong(ckpTokenInfo->ulSessionCount);
92.212 @@ -540,10 +556,13 @@
92.213 jFreePrivMem = ckULongSpecialToJLong(ckpTokenInfo->ulFreePrivateMemory);
92.214 jHardwareVer =
92.215 ckVersionPtrToJVersion(env, &(ckpTokenInfo->hardwareVersion));
92.216 + if (jHardwareVer == NULL) { return NULL; }
92.217 jFirmwareVer =
92.218 ckVersionPtrToJVersion(env, &(ckpTokenInfo->firmwareVersion));
92.219 + if (jFirmwareVer == NULL) { return NULL; }
92.220 jUtcTime =
92.221 ckUTF8CharArrayToJCharArray(env, &(ckpTokenInfo->utcTime[0]), 16);
92.222 + if (jUtcTime == NULL) { return NULL; }
92.223
92.224 /* create new CK_TOKEN_INFO object */
92.225 jTokenInfoObject =
92.226 @@ -553,7 +572,7 @@
92.227 jMaxPinLen, jMinPinLen,
92.228 jTotalPubMem, jFreePubMem, jTotalPrivMem, jFreePrivMem,
92.229 jHardwareVer, jFirmwareVer, jUtcTime);
92.230 - assert(jTokenInfoObject != 0);
92.231 + if (jTokenInfoObject == NULL) { return NULL; }
92.232
92.233 /* free local references */
92.234 (*env)->DeleteLocalRef(env, jTokenInfoClass);
92.235 @@ -584,7 +603,7 @@
92.236 {
92.237 CK_FLAGS ckFlags;
92.238 CK_SLOT_ID ckSlotID;
92.239 - jlong jSlotID;
92.240 + jlong jSlotID = 0L;
92.241 CK_RV rv;
92.242
92.243 CK_FUNCTION_LIST_PTR ckpFunctions = getFunctionList(env, obj);
92.244 @@ -593,9 +612,9 @@
92.245 ckFlags = jLongToCKULong(jFlags);
92.246
92.247 rv = (*ckpFunctions->C_WaitForSlotEvent)(ckFlags, &ckSlotID, NULL_PTR);
92.248 - if (ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return 0L; }
92.249 -
92.250 - jSlotID = ckULongToJLong(ckSlotID);
92.251 + if (ckAssertReturnValueOK(env, rv) == CK_ASSERT_OK) {
92.252 + jSlotID = ckULongToJLong(ckSlotID);
92.253 + }
92.254
92.255 return jSlotID ;
92.256 }
92.257 @@ -632,16 +651,19 @@
92.258
92.259 ckpMechanismList = (CK_MECHANISM_TYPE_PTR)
92.260 malloc(ckMechanismNumber * sizeof(CK_MECHANISM_TYPE));
92.261 + if (ckpMechanismList == NULL) {
92.262 + JNU_ThrowOutOfMemoryError(env, 0);
92.263 + return NULL;
92.264 + }
92.265
92.266 rv = (*ckpFunctions->C_GetMechanismList)(ckSlotID, ckpMechanismList,
92.267 &ckMechanismNumber);
92.268 -
92.269 - jMechanismList = ckULongArrayToJLongArray(env, ckpMechanismList,
92.270 - ckMechanismNumber);
92.271 + if (ckAssertReturnValueOK(env, rv) == CK_ASSERT_OK) {
92.272 + jMechanismList = ckULongArrayToJLongArray(env, ckpMechanismList,
92.273 + ckMechanismNumber);
92.274 + }
92.275 free(ckpMechanismList);
92.276
92.277 - if (ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return NULL ; }
92.278 -
92.279 return jMechanismList ;
92.280 }
92.281 #endif
92.282 @@ -663,7 +685,7 @@
92.283 CK_SLOT_ID ckSlotID;
92.284 CK_MECHANISM_TYPE ckMechanismType;
92.285 CK_MECHANISM_INFO ckMechanismInfo;
92.286 - jobject jMechanismInfo;
92.287 + jobject jMechanismInfo = NULL;
92.288 CK_RV rv;
92.289
92.290 CK_FUNCTION_LIST_PTR ckpFunctions = getFunctionList(env, obj);
92.291 @@ -674,10 +696,9 @@
92.292
92.293 rv = (*ckpFunctions->C_GetMechanismInfo)(ckSlotID, ckMechanismType,
92.294 &ckMechanismInfo);
92.295 - if (ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return NULL ; }
92.296 -
92.297 - jMechanismInfo = ckMechanismInfoPtrToJMechanismInfo(env, &ckMechanismInfo);
92.298 -
92.299 + if (ckAssertReturnValueOK(env, rv) == CK_ASSERT_OK) {
92.300 + jMechanismInfo = ckMechanismInfoPtrToJMechanismInfo(env, &ckMechanismInfo);
92.301 + }
92.302 return jMechanismInfo ;
92.303 }
92.304
92.305 @@ -703,11 +724,11 @@
92.306
92.307 /* load CK_MECHANISM_INFO class */
92.308 jMechanismInfoClass = (*env)->FindClass(env, CLASS_MECHANISM_INFO);
92.309 - assert(jMechanismInfoClass != 0);
92.310 + if (jMechanismInfoClass == NULL) { return NULL; };
92.311
92.312 /* load CK_MECHANISM_INFO constructor */
92.313 jCtrId = (*env)->GetMethodID(env, jMechanismInfoClass, "<init>", "(JJJ)V");
92.314 - assert(jCtrId != 0);
92.315 + if (jCtrId == NULL) { return NULL; };
92.316
92.317 /* prep all fields */
92.318 jMinKeySize = ckULongToJLong(ckpMechanismInfo->ulMinKeySize);
92.319 @@ -717,7 +738,7 @@
92.320 /* create new CK_MECHANISM_INFO object */
92.321 jMechanismInfoObject = (*env)->NewObject(env, jMechanismInfoClass, jCtrId,
92.322 jMinKeySize, jMaxKeySize, jFlags);
92.323 - assert(jMechanismInfoObject != 0);
92.324 + if (jMechanismInfoObject == NULL) { return NULL; };
92.325
92.326 /* free local references */
92.327 (*env)->DeleteLocalRef(env, jMechanismInfoClass);
92.328 @@ -753,8 +774,13 @@
92.329
92.330 ckSlotID = jLongToCKULong(jSlotID);
92.331 jCharArrayToCKCharArray(env, jPin, &ckpPin, &ckPinLength);
92.332 + if ((*env)->ExceptionCheck(env)) { return; }
92.333 + /* ckLabelLength <= 32 !!! */
92.334 jCharArrayToCKUTF8CharArray(env, jLabel, &ckpLabel, &ckLabelLength);
92.335 - /* ckLabelLength <= 32 !!! */
92.336 + if ((*env)->ExceptionCheck(env)) {
92.337 + free(ckpPin);
92.338 + return;
92.339 + }
92.340
92.341 rv = (*ckpFunctions->C_InitToken)(ckSlotID, ckpPin, ckPinLength, ckpLabel);
92.342 TRACE1("InitToken return code: %d", rv);
92.343 @@ -790,6 +816,7 @@
92.344
92.345 ckSessionHandle = jLongToCKULong(jSessionHandle);
92.346 jCharArrayToCKCharArray(env, jPin, &ckpPin, &ckPinLength);
92.347 + if ((*env)->ExceptionCheck(env)) { return; }
92.348
92.349 rv = (*ckpFunctions->C_InitPIN)(ckSessionHandle, ckpPin, ckPinLength);
92.350
92.351 @@ -828,7 +855,12 @@
92.352
92.353 ckSessionHandle = jLongToCKULong(jSessionHandle);
92.354 jCharArrayToCKCharArray(env, jOldPin, &ckpOldPin, &ckOldPinLength);
92.355 + if ((*env)->ExceptionCheck(env)) { return; }
92.356 jCharArrayToCKCharArray(env, jNewPin, &ckpNewPin, &ckNewPinLength);
92.357 + if ((*env)->ExceptionCheck(env)) {
92.358 + free(ckpOldPin);
92.359 + return;
92.360 + }
92.361
92.362 rv = (*ckpFunctions->C_SetPIN)(ckSessionHandle, ckpOldPin, ckOldPinLength,
92.363 ckpNewPin, ckNewPinLength);
93.1 --- a/src/share/native/sun/security/pkcs11/wrapper/p11_keymgmt.c Thu Apr 02 10:16:53 2009 -0700
93.2 +++ b/src/share/native/sun/security/pkcs11/wrapper/p11_keymgmt.c Wed Apr 08 15:40:56 2009 -0700
93.3 @@ -1,5 +1,5 @@
93.4 /*
93.5 - * Portions Copyright 2003-2006 Sun Microsystems, Inc. All Rights Reserved.
93.6 + * Portions Copyright 2003-2009 Sun Microsystems, Inc. All Rights Reserved.
93.7 */
93.8
93.9 /* Copyright (c) 2002 Graz University of Technology. All rights reserved.
93.10 @@ -74,7 +74,7 @@
93.11 CK_ATTRIBUTE_PTR ckpAttributes = NULL_PTR;
93.12 CK_ULONG ckAttributesLength;
93.13 CK_OBJECT_HANDLE ckKeyHandle;
93.14 - jlong jKeyHandle;
93.15 + jlong jKeyHandle = 0L;
93.16 CK_ULONG i;
93.17 CK_RV rv;
93.18
93.19 @@ -83,21 +83,23 @@
93.20
93.21 ckSessionHandle = jLongToCKULong(jSessionHandle);
93.22 jMechanismToCKMechanism(env, jMechanism, &ckMechanism);
93.23 - if ((*env)->ExceptionOccurred(env)) { return 0L ; }
93.24 + if ((*env)->ExceptionCheck(env)) { return 0L ; }
93.25 +
93.26 jAttributeArrayToCKAttributeArray(env, jTemplate, &ckpAttributes, &ckAttributesLength);
93.27 + if ((*env)->ExceptionCheck(env)) {
93.28 + if (ckMechanism.pParameter != NULL_PTR) {
93.29 + free(ckMechanism.pParameter);
93.30 + }
93.31 + return 0L;
93.32 + }
93.33
93.34 rv = (*ckpFunctions->C_GenerateKey)(ckSessionHandle, &ckMechanism, ckpAttributes, ckAttributesLength, &ckKeyHandle);
93.35
93.36 - jKeyHandle = ckULongToJLong(ckKeyHandle);
93.37 - for(i=0; i<ckAttributesLength; i++) {
93.38 - if(ckpAttributes[i].pValue != NULL_PTR) {
93.39 - free(ckpAttributes[i].pValue);
93.40 - }
93.41 - }
93.42 - free(ckpAttributes);
93.43 + if (ckAssertReturnValueOK(env, rv) == CK_ASSERT_OK) {
93.44 + jKeyHandle = ckULongToJLong(ckKeyHandle);
93.45
93.46 - /* cheack, if we must give a initialization vector back to Java */
93.47 - switch (ckMechanism.mechanism) {
93.48 + /* cheack, if we must give a initialization vector back to Java */
93.49 + switch (ckMechanism.mechanism) {
93.50 case CKM_PBE_MD2_DES_CBC:
93.51 case CKM_PBE_MD5_DES_CBC:
93.52 case CKM_PBE_MD5_CAST_CBC:
93.53 @@ -109,13 +111,13 @@
93.54 /* we must copy back the initialization vector to the jMechanism object */
93.55 copyBackPBEInitializationVector(env, &ckMechanism, jMechanism);
93.56 break;
93.57 + }
93.58 }
93.59
93.60 - if(ckMechanism.pParameter != NULL_PTR) {
93.61 + if (ckMechanism.pParameter != NULL_PTR) {
93.62 free(ckMechanism.pParameter);
93.63 }
93.64 -
93.65 - if(ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return 0L ; }
93.66 + freeCKAttributeArray(ckpAttributes, ckAttributesLength);
93.67
93.68 return jKeyHandle ;
93.69 }
93.70 @@ -158,40 +160,53 @@
93.71
93.72 ckSessionHandle = jLongToCKULong(jSessionHandle);
93.73 jMechanismToCKMechanism(env, jMechanism, &ckMechanism);
93.74 - jAttributeArrayToCKAttributeArray(env, jPublicKeyTemplate, &ckpPublicKeyAttributes, &ckPublicKeyAttributesLength);
93.75 - jAttributeArrayToCKAttributeArray(env, jPrivateKeyTemplate, &ckpPrivateKeyAttributes, &ckPrivateKeyAttributesLength);
93.76 + if ((*env)->ExceptionCheck(env)) { return NULL; }
93.77 +
93.78 ckpKeyHandles = (CK_OBJECT_HANDLE_PTR) malloc(2 * sizeof(CK_OBJECT_HANDLE));
93.79 + if (ckpKeyHandles == NULL) {
93.80 + if (ckMechanism.pParameter != NULL_PTR) {
93.81 + free(ckMechanism.pParameter);
93.82 + }
93.83 + JNU_ThrowOutOfMemoryError(env, 0);
93.84 + return NULL;
93.85 + }
93.86 ckpPublicKeyHandle = ckpKeyHandles; /* first element of array is Public Key */
93.87 ckpPrivateKeyHandle = (ckpKeyHandles + 1); /* second element of array is Private Key */
93.88
93.89 + jAttributeArrayToCKAttributeArray(env, jPublicKeyTemplate, &ckpPublicKeyAttributes, &ckPublicKeyAttributesLength);
93.90 + if ((*env)->ExceptionCheck(env)) {
93.91 + if (ckMechanism.pParameter != NULL_PTR) {
93.92 + free(ckMechanism.pParameter);
93.93 + }
93.94 + free(ckpKeyHandles);
93.95 + return NULL;
93.96 + }
93.97 +
93.98 + jAttributeArrayToCKAttributeArray(env, jPrivateKeyTemplate, &ckpPrivateKeyAttributes, &ckPrivateKeyAttributesLength);
93.99 + if ((*env)->ExceptionCheck(env)) {
93.100 + if (ckMechanism.pParameter != NULL_PTR) {
93.101 + free(ckMechanism.pParameter);
93.102 + }
93.103 + free(ckpKeyHandles);
93.104 + freeCKAttributeArray(ckpPublicKeyAttributes, ckPublicKeyAttributesLength);
93.105 + return NULL;
93.106 + }
93.107 +
93.108 rv = (*ckpFunctions->C_GenerateKeyPair)(ckSessionHandle, &ckMechanism,
93.109 ckpPublicKeyAttributes, ckPublicKeyAttributesLength,
93.110 ckpPrivateKeyAttributes, ckPrivateKeyAttributesLength,
93.111 ckpPublicKeyHandle, ckpPrivateKeyHandle);
93.112
93.113 - jKeyHandles = ckULongArrayToJLongArray(env, ckpKeyHandles, 2);
93.114 -
93.115 - for(i=0; i<ckPublicKeyAttributesLength; i++) {
93.116 - if(ckpPublicKeyAttributes[i].pValue != NULL_PTR) {
93.117 - free(ckpPublicKeyAttributes[i].pValue);
93.118 - }
93.119 + if (ckAssertReturnValueOK(env, rv) == CK_ASSERT_OK) {
93.120 + jKeyHandles = ckULongArrayToJLongArray(env, ckpKeyHandles, 2);
93.121 }
93.122 - free(ckpPublicKeyAttributes);
93.123 -
93.124 - for(i=0; i<ckPrivateKeyAttributesLength; i++) {
93.125 - if(ckpPrivateKeyAttributes[i].pValue != NULL_PTR) {
93.126 - free(ckpPrivateKeyAttributes[i].pValue);
93.127 - }
93.128 - }
93.129 - free(ckpPrivateKeyAttributes);
93.130
93.131 if(ckMechanism.pParameter != NULL_PTR) {
93.132 free(ckMechanism.pParameter);
93.133 }
93.134 -
93.135 free(ckpKeyHandles);
93.136 -
93.137 - if(ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return NULL; }
93.138 + freeCKAttributeArray(ckpPublicKeyAttributes, ckPublicKeyAttributesLength);
93.139 + freeCKAttributeArray(ckpPrivateKeyAttributes, ckPrivateKeyAttributesLength);
93.140
93.141 return jKeyHandles ;
93.142 }
93.143 @@ -217,7 +232,7 @@
93.144 CK_MECHANISM ckMechanism;
93.145 CK_OBJECT_HANDLE ckWrappingKeyHandle;
93.146 CK_OBJECT_HANDLE ckKeyHandle;
93.147 - jbyteArray jWrappedKey;
93.148 + jbyteArray jWrappedKey = NULL;
93.149 CK_RV rv;
93.150 CK_BYTE BUF[MAX_STACK_BUFFER_LEN];
93.151 CK_BYTE_PTR ckpWrappedKey = BUF;
93.152 @@ -228,24 +243,32 @@
93.153
93.154 ckSessionHandle = jLongToCKULong(jSessionHandle);
93.155 jMechanismToCKMechanism(env, jMechanism, &ckMechanism);
93.156 + if ((*env)->ExceptionCheck(env)) { return NULL; }
93.157 +
93.158 ckWrappingKeyHandle = jLongToCKULong(jWrappingKeyHandle);
93.159 ckKeyHandle = jLongToCKULong(jKeyHandle);
93.160
93.161 rv = (*ckpFunctions->C_WrapKey)(ckSessionHandle, &ckMechanism, ckWrappingKeyHandle, ckKeyHandle, ckpWrappedKey, &ckWrappedKeyLength);
93.162 if (rv == CKR_BUFFER_TOO_SMALL) {
93.163 ckpWrappedKey = (CK_BYTE_PTR) malloc(ckWrappedKeyLength);
93.164 + if (ckpWrappedKey == NULL) {
93.165 + if (ckMechanism.pParameter != NULL_PTR) {
93.166 + free(ckMechanism.pParameter);
93.167 + }
93.168 + JNU_ThrowOutOfMemoryError(env, 0);
93.169 + return NULL;
93.170 + }
93.171 +
93.172 rv = (*ckpFunctions->C_WrapKey)(ckSessionHandle, &ckMechanism, ckWrappingKeyHandle, ckKeyHandle, ckpWrappedKey, &ckWrappedKeyLength);
93.173 }
93.174 if (ckAssertReturnValueOK(env, rv) == CK_ASSERT_OK) {
93.175 jWrappedKey = ckByteArrayToJByteArray(env, ckpWrappedKey, ckWrappedKeyLength);
93.176 }
93.177
93.178 - if (ckpWrappedKey != BUF) {
93.179 - free(ckpWrappedKey);
93.180 + if (ckpWrappedKey != BUF) { free(ckpWrappedKey); }
93.181 + if (ckMechanism.pParameter != NULL_PTR) {
93.182 + free(ckMechanism.pParameter);
93.183 }
93.184 - if(ckMechanism.pParameter != NULL_PTR)
93.185 - free(ckMechanism.pParameter);
93.186 -
93.187 return jWrappedKey ;
93.188 }
93.189 #endif
93.190 @@ -277,7 +300,7 @@
93.191 CK_ATTRIBUTE_PTR ckpAttributes = NULL_PTR;
93.192 CK_ULONG ckAttributesLength;
93.193 CK_OBJECT_HANDLE ckKeyHandle;
93.194 - jlong jKeyHandle;
93.195 + jlong jKeyHandle = 0L;
93.196 CK_ULONG i;
93.197 CK_RV rv;
93.198
93.199 @@ -286,37 +309,48 @@
93.200
93.201 ckSessionHandle = jLongToCKULong(jSessionHandle);
93.202 jMechanismToCKMechanism(env, jMechanism, &ckMechanism);
93.203 + if ((*env)->ExceptionCheck(env)) { return 0L; }
93.204 +
93.205 ckUnwrappingKeyHandle = jLongToCKULong(jUnwrappingKeyHandle);
93.206 jByteArrayToCKByteArray(env, jWrappedKey, &ckpWrappedKey, &ckWrappedKeyLength);
93.207 + if ((*env)->ExceptionCheck(env)) {
93.208 + if (ckMechanism.pParameter != NULL_PTR) {
93.209 + free(ckMechanism.pParameter);
93.210 + }
93.211 + return 0L;
93.212 + }
93.213 +
93.214 jAttributeArrayToCKAttributeArray(env, jTemplate, &ckpAttributes, &ckAttributesLength);
93.215 + if ((*env)->ExceptionCheck(env)) {
93.216 + if (ckMechanism.pParameter != NULL_PTR) {
93.217 + free(ckMechanism.pParameter);
93.218 + }
93.219 + free(ckpWrappedKey);
93.220 + return 0L;
93.221 + }
93.222 +
93.223
93.224 rv = (*ckpFunctions->C_UnwrapKey)(ckSessionHandle, &ckMechanism, ckUnwrappingKeyHandle,
93.225 ckpWrappedKey, ckWrappedKeyLength,
93.226 ckpAttributes, ckAttributesLength, &ckKeyHandle);
93.227
93.228 - jKeyHandle = ckLongToJLong(ckKeyHandle);
93.229 -
93.230 - for(i=0; i<ckAttributesLength; i++) {
93.231 - if(ckpAttributes[i].pValue != NULL_PTR) {
93.232 - free(ckpAttributes[i].pValue);
93.233 - }
93.234 - }
93.235 - free(ckpAttributes);
93.236 + if (ckAssertReturnValueOK(env, rv) == CK_ASSERT_OK) {
93.237 + jKeyHandle = ckLongToJLong(ckKeyHandle);
93.238
93.239 #if 0
93.240 - /* cheack, if we must give a initialization vector back to Java */
93.241 - if (ckMechanism.mechanism == CKM_KEY_WRAP_SET_OAEP) {
93.242 - /* we must copy back the unwrapped key info to the jMechanism object */
93.243 - copyBackSetUnwrappedKey(env, &ckMechanism, jMechanism);
93.244 + /* cheack, if we must give a initialization vector back to Java */
93.245 + if (ckMechanism.mechanism == CKM_KEY_WRAP_SET_OAEP) {
93.246 + /* we must copy back the unwrapped key info to the jMechanism object */
93.247 + copyBackSetUnwrappedKey(env, &ckMechanism, jMechanism);
93.248 + }
93.249 +#endif
93.250 }
93.251 -#endif
93.252
93.253 - free(ckpWrappedKey);
93.254 - if(ckMechanism.pParameter != NULL_PTR) {
93.255 + if (ckMechanism.pParameter != NULL_PTR) {
93.256 free(ckMechanism.pParameter);
93.257 }
93.258 -
93.259 - if(ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return 0L ; }
93.260 + freeCKAttributeArray(ckpAttributes, ckAttributesLength);
93.261 + free(ckpWrappedKey);
93.262
93.263 return jKeyHandle ;
93.264 }
93.265 @@ -360,8 +394,7 @@
93.266 */
93.267 void copyBackTLSPrfParams(JNIEnv *env, CK_MECHANISM *ckMechanism, jobject jMechanism)
93.268 {
93.269 - jclass jMechanismClass= (*env)->FindClass(env, CLASS_MECHANISM);
93.270 - jclass jTLSPrfParamsClass = (*env)->FindClass(env, CLASS_TLS_PRF_PARAMS);
93.271 + jclass jMechanismClass, jTLSPrfParamsClass;
93.272 CK_TLS_PRF_PARAMS *ckTLSPrfParams;
93.273 jobject jTLSPrfParams;
93.274 jfieldID fieldID;
93.275 @@ -374,8 +407,10 @@
93.276 int i;
93.277
93.278 /* get mechanism */
93.279 + jMechanismClass = (*env)->FindClass(env, CLASS_MECHANISM);
93.280 + if (jMechanismClass == NULL) { return; }
93.281 fieldID = (*env)->GetFieldID(env, jMechanismClass, "mechanism", "J");
93.282 - assert(fieldID != 0);
93.283 + if (fieldID == NULL) { return; }
93.284 jMechanismType = (*env)->GetLongField(env, jMechanism, fieldID);
93.285 ckMechanismType = jLongToCKULong(jMechanismType);
93.286 if (ckMechanismType != ckMechanism->mechanism) {
93.287 @@ -388,12 +423,14 @@
93.288 if (ckTLSPrfParams != NULL_PTR) {
93.289 /* get the Java CK_TLS_PRF_PARAMS object (pParameter) */
93.290 fieldID = (*env)->GetFieldID(env, jMechanismClass, "pParameter", "Ljava/lang/Object;");
93.291 - assert(fieldID != 0);
93.292 + if (fieldID == NULL) { return; }
93.293 jTLSPrfParams = (*env)->GetObjectField(env, jMechanism, fieldID);
93.294
93.295 /* copy back the client IV */
93.296 + jTLSPrfParamsClass = (*env)->FindClass(env, CLASS_TLS_PRF_PARAMS);
93.297 + if (jTLSPrfParamsClass == NULL) { return; }
93.298 fieldID = (*env)->GetFieldID(env, jTLSPrfParamsClass, "pOutput", "[B");
93.299 - assert(fieldID != 0);
93.300 + if (fieldID == NULL) { return; }
93.301 jOutput = (*env)->GetObjectField(env, jTLSPrfParams, fieldID);
93.302 output = ckTLSPrfParams->pOutput;
93.303
93.304 @@ -402,26 +439,21 @@
93.305 if (jOutput != NULL) {
93.306 jLength = (*env)->GetArrayLength(env, jOutput);
93.307 jBytes = (*env)->GetByteArrayElements(env, jOutput, NULL);
93.308 + if (jBytes == NULL) { return; }
93.309 +
93.310 /* copy the bytes to the Java buffer */
93.311 for (i=0; i < jLength; i++) {
93.312 jBytes[i] = ckByteToJByte(output[i]);
93.313 }
93.314 /* copy back the Java buffer to the object */
93.315 (*env)->ReleaseByteArrayElements(env, jOutput, jBytes, 0);
93.316 - // free malloc'd data
93.317 - free(output);
93.318 }
93.319
93.320 // free malloc'd data
93.321 - if (ckTLSPrfParams->pSeed != NULL) {
93.322 - free(ckTLSPrfParams->pSeed);
93.323 - }
93.324 - if (ckTLSPrfParams->pLabel != NULL) {
93.325 - free(ckTLSPrfParams->pLabel);
93.326 - }
93.327 - if (ckTLSPrfParams->pulOutputLen != NULL) {
93.328 - free(ckTLSPrfParams->pulOutputLen);
93.329 - }
93.330 + free(ckTLSPrfParams->pSeed);
93.331 + free(ckTLSPrfParams->pLabel);
93.332 + free(ckTLSPrfParams->pulOutputLen);
93.333 + free(ckTLSPrfParams->pOutput);
93.334 }
93.335 }
93.336
93.337 @@ -456,8 +488,16 @@
93.338
93.339 ckSessionHandle = jLongToCKULong(jSessionHandle);
93.340 jMechanismToCKMechanism(env, jMechanism, &ckMechanism);
93.341 + if ((*env)->ExceptionCheck(env)) { return 0L; }
93.342 +
93.343 ckBaseKeyHandle = jLongToCKULong(jBaseKeyHandle);
93.344 jAttributeArrayToCKAttributeArray(env, jTemplate, &ckpAttributes, &ckAttributesLength);
93.345 + if ((*env)->ExceptionCheck(env)) {
93.346 + if (ckMechanism.pParameter != NULL_PTR) {
93.347 + free(ckMechanism.pParameter);
93.348 + }
93.349 + return 0L;
93.350 + }
93.351
93.352 switch (ckMechanism.mechanism) {
93.353 case CKM_SSL3_KEY_AND_MAC_DERIVE:
93.354 @@ -476,14 +516,8 @@
93.355 ckpAttributes, ckAttributesLength, phKey);
93.356
93.357 jKeyHandle = ckLongToJLong(ckKeyHandle);
93.358 - for(i=0; i<ckAttributesLength; i++) {
93.359 - if(ckpAttributes[i].pValue != NULL_PTR) {
93.360 - free(ckpAttributes[i].pValue);
93.361 - }
93.362 - }
93.363 - if (ckpAttributes != NULL) {
93.364 - free(ckpAttributes);
93.365 - }
93.366 +
93.367 + freeCKAttributeArray(ckpAttributes, ckAttributesLength);
93.368
93.369 switch (ckMechanism.mechanism) {
93.370 case CKM_SSL3_MASTER_KEY_DERIVE:
93.371 @@ -512,11 +546,10 @@
93.372 break;
93.373 }
93.374
93.375 - if(ckMechanism.pParameter != NULL_PTR) {
93.376 + if (ckMechanism.pParameter != NULL_PTR) {
93.377 free(ckMechanism.pParameter);
93.378 }
93.379 -
93.380 - if(ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return 0L ; }
93.381 + if (ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return 0L ; }
93.382
93.383 return jKeyHandle ;
93.384 }
93.385 @@ -529,9 +562,7 @@
93.386 */
93.387 void copyBackClientVersion(JNIEnv *env, CK_MECHANISM *ckMechanism, jobject jMechanism)
93.388 {
93.389 - jclass jMechanismClass= (*env)->FindClass(env, CLASS_MECHANISM);
93.390 - jclass jSSL3MasterKeyDeriveParamsClass = (*env)->FindClass(env, CLASS_SSL3_MASTER_KEY_DERIVE_PARAMS);
93.391 - jclass jVersionClass = (*env)->FindClass(env, CLASS_VERSION);
93.392 + jclass jMechanismClass, jSSL3MasterKeyDeriveParamsClass, jVersionClass;
93.393 CK_SSL3_MASTER_KEY_DERIVE_PARAMS *ckSSL3MasterKeyDeriveParams;
93.394 CK_VERSION *ckVersion;
93.395 jfieldID fieldID;
93.396 @@ -541,8 +572,10 @@
93.397 jobject jVersion;
93.398
93.399 /* get mechanism */
93.400 + jMechanismClass = (*env)->FindClass(env, CLASS_MECHANISM);
93.401 + if (jMechanismClass == NULL) { return; }
93.402 fieldID = (*env)->GetFieldID(env, jMechanismClass, "mechanism", "J");
93.403 - assert(fieldID != 0);
93.404 + if (fieldID == NULL) { return; }
93.405 jMechanismType = (*env)->GetLongField(env, jMechanism, fieldID);
93.406 ckMechanismType = jLongToCKULong(jMechanismType);
93.407 if (ckMechanismType != ckMechanism->mechanism) {
93.408 @@ -558,27 +591,31 @@
93.409 if (ckVersion != NULL_PTR) {
93.410 /* get the Java CK_SSL3_MASTER_KEY_DERIVE_PARAMS (pParameter) */
93.411 fieldID = (*env)->GetFieldID(env, jMechanismClass, "pParameter", "Ljava/lang/Object;");
93.412 - assert(fieldID != 0);
93.413 + if (fieldID == NULL) { return; }
93.414 +
93.415 jSSL3MasterKeyDeriveParams = (*env)->GetObjectField(env, jMechanism, fieldID);
93.416
93.417 /* get the Java CK_VERSION */
93.418 + jSSL3MasterKeyDeriveParamsClass = (*env)->FindClass(env, CLASS_SSL3_MASTER_KEY_DERIVE_PARAMS);
93.419 + if (jSSL3MasterKeyDeriveParamsClass == NULL) { return; }
93.420 fieldID = (*env)->GetFieldID(env, jSSL3MasterKeyDeriveParamsClass, "pVersion", "L"CLASS_VERSION";");
93.421 - assert(fieldID != 0);
93.422 + if (fieldID == NULL) { return; }
93.423 jVersion = (*env)->GetObjectField(env, jSSL3MasterKeyDeriveParams, fieldID);
93.424
93.425 /* now copy back the version from the native structure to the Java structure */
93.426
93.427 /* copy back the major version */
93.428 + jVersionClass = (*env)->FindClass(env, CLASS_VERSION);
93.429 + if (jVersionClass == NULL) { return; }
93.430 fieldID = (*env)->GetFieldID(env, jVersionClass, "major", "B");
93.431 - assert(fieldID != 0);
93.432 + if (fieldID == NULL) { return; }
93.433 (*env)->SetByteField(env, jVersion, fieldID, ckByteToJByte(ckVersion->major));
93.434
93.435 /* copy back the minor version */
93.436 fieldID = (*env)->GetFieldID(env, jVersionClass, "minor", "B");
93.437 - assert(fieldID != 0);
93.438 + if (fieldID == NULL) { return; }
93.439 (*env)->SetByteField(env, jVersion, fieldID, ckByteToJByte(ckVersion->minor));
93.440 }
93.441 -
93.442 }
93.443 }
93.444
93.445 @@ -591,9 +628,7 @@
93.446 */
93.447 void copyBackSSLKeyMatParams(JNIEnv *env, CK_MECHANISM *ckMechanism, jobject jMechanism)
93.448 {
93.449 - jclass jMechanismClass= (*env)->FindClass(env, CLASS_MECHANISM);
93.450 - jclass jSSL3KeyMatParamsClass = (*env)->FindClass(env, CLASS_SSL3_KEY_MAT_PARAMS);
93.451 - jclass jSSL3KeyMatOutClass = (*env)->FindClass(env, CLASS_SSL3_KEY_MAT_OUT);
93.452 + jclass jMechanismClass, jSSL3KeyMatParamsClass, jSSL3KeyMatOutClass;
93.453 CK_SSL3_KEY_MAT_PARAMS *ckSSL3KeyMatParam;
93.454 CK_SSL3_KEY_MAT_OUT *ckSSL3KeyMatOut;
93.455 jfieldID fieldID;
93.456 @@ -608,8 +643,10 @@
93.457 int i;
93.458
93.459 /* get mechanism */
93.460 + jMechanismClass= (*env)->FindClass(env, CLASS_MECHANISM);
93.461 + if (jMechanismClass == NULL) { return; }
93.462 fieldID = (*env)->GetFieldID(env, jMechanismClass, "mechanism", "J");
93.463 - assert(fieldID != 0);
93.464 + if (fieldID == NULL) { return; }
93.465 jMechanismType = (*env)->GetLongField(env, jMechanism, fieldID);
93.466 ckMechanismType = jLongToCKULong(jMechanismType);
93.467 if (ckMechanismType != ckMechanism->mechanism) {
93.468 @@ -633,74 +670,78 @@
93.469 if (ckSSL3KeyMatOut != NULL_PTR) {
93.470 /* get the Java CK_SSL3_KEY_MAT_PARAMS (pParameter) */
93.471 fieldID = (*env)->GetFieldID(env, jMechanismClass, "pParameter", "Ljava/lang/Object;");
93.472 - assert(fieldID != 0);
93.473 + if (fieldID == NULL) { return; }
93.474 jSSL3KeyMatParam = (*env)->GetObjectField(env, jMechanism, fieldID);
93.475
93.476 /* get the Java CK_SSL3_KEY_MAT_OUT */
93.477 + jSSL3KeyMatParamsClass = (*env)->FindClass(env, CLASS_SSL3_KEY_MAT_PARAMS);
93.478 + if (jSSL3KeyMatParamsClass == NULL) { return; }
93.479 fieldID = (*env)->GetFieldID(env, jSSL3KeyMatParamsClass, "pReturnedKeyMaterial", "L"CLASS_SSL3_KEY_MAT_OUT";");
93.480 - assert(fieldID != 0);
93.481 + if (fieldID == NULL) { return; }
93.482 jSSL3KeyMatOut = (*env)->GetObjectField(env, jSSL3KeyMatParam, fieldID);
93.483
93.484 /* now copy back all the key handles and the initialization vectors */
93.485 /* copy back client MAC secret handle */
93.486 + jSSL3KeyMatOutClass = (*env)->FindClass(env, CLASS_SSL3_KEY_MAT_OUT);
93.487 + if (jSSL3KeyMatOutClass == NULL) { return; }
93.488 fieldID = (*env)->GetFieldID(env, jSSL3KeyMatOutClass, "hClientMacSecret", "J");
93.489 - assert(fieldID != 0);
93.490 + if (fieldID == NULL) { return; }
93.491 (*env)->SetLongField(env, jSSL3KeyMatOut, fieldID, ckULongToJLong(ckSSL3KeyMatOut->hClientMacSecret));
93.492
93.493 /* copy back server MAC secret handle */
93.494 fieldID = (*env)->GetFieldID(env, jSSL3KeyMatOutClass, "hServerMacSecret", "J");
93.495 - assert(fieldID != 0);
93.496 + if (fieldID == NULL) { return; }
93.497 (*env)->SetLongField(env, jSSL3KeyMatOut, fieldID, ckULongToJLong(ckSSL3KeyMatOut->hServerMacSecret));
93.498
93.499 /* copy back client secret key handle */
93.500 fieldID = (*env)->GetFieldID(env, jSSL3KeyMatOutClass, "hClientKey", "J");
93.501 - assert(fieldID != 0);
93.502 + if (fieldID == NULL) { return; }
93.503 (*env)->SetLongField(env, jSSL3KeyMatOut, fieldID, ckULongToJLong(ckSSL3KeyMatOut->hClientKey));
93.504
93.505 /* copy back server secret key handle */
93.506 fieldID = (*env)->GetFieldID(env, jSSL3KeyMatOutClass, "hServerKey", "J");
93.507 - assert(fieldID != 0);
93.508 + if (fieldID == NULL) { return; }
93.509 (*env)->SetLongField(env, jSSL3KeyMatOut, fieldID, ckULongToJLong(ckSSL3KeyMatOut->hServerKey));
93.510
93.511 /* copy back the client IV */
93.512 fieldID = (*env)->GetFieldID(env, jSSL3KeyMatOutClass, "pIVClient", "[B");
93.513 - assert(fieldID != 0);
93.514 + if (fieldID == NULL) { return; }
93.515 jIV = (*env)->GetObjectField(env, jSSL3KeyMatOut, fieldID);
93.516 iv = ckSSL3KeyMatOut->pIVClient;
93.517
93.518 if (jIV != NULL) {
93.519 jLength = (*env)->GetArrayLength(env, jIV);
93.520 jBytes = (*env)->GetByteArrayElements(env, jIV, NULL);
93.521 + if (jBytes == NULL) { return; }
93.522 /* copy the bytes to the Java buffer */
93.523 for (i=0; i < jLength; i++) {
93.524 jBytes[i] = ckByteToJByte(iv[i]);
93.525 }
93.526 /* copy back the Java buffer to the object */
93.527 (*env)->ReleaseByteArrayElements(env, jIV, jBytes, 0);
93.528 - // free malloc'd data
93.529 - free(iv);
93.530 }
93.531 + // free malloc'd data
93.532 + free(ckSSL3KeyMatOut->pIVClient);
93.533
93.534 /* copy back the server IV */
93.535 fieldID = (*env)->GetFieldID(env, jSSL3KeyMatOutClass, "pIVServer", "[B");
93.536 - assert(fieldID != 0);
93.537 + if (fieldID == NULL) { return; }
93.538 jIV = (*env)->GetObjectField(env, jSSL3KeyMatOut, fieldID);
93.539 iv = ckSSL3KeyMatOut->pIVServer;
93.540
93.541 if (jIV != NULL) {
93.542 jLength = (*env)->GetArrayLength(env, jIV);
93.543 jBytes = (*env)->GetByteArrayElements(env, jIV, NULL);
93.544 + if (jBytes == NULL) { return; }
93.545 /* copy the bytes to the Java buffer */
93.546 for (i=0; i < jLength; i++) {
93.547 jBytes[i] = ckByteToJByte(iv[i]);
93.548 }
93.549 /* copy back the Java buffer to the object */
93.550 (*env)->ReleaseByteArrayElements(env, jIV, jBytes, 0);
93.551 - // free malloc'd data
93.552 - free(iv);
93.553 }
93.554 -
93.555 // free malloc'd data
93.556 + free(ckSSL3KeyMatOut->pIVServer);
93.557 free(ckSSL3KeyMatOut);
93.558 }
93.559 }
94.1 --- a/src/share/native/sun/security/pkcs11/wrapper/p11_mutex.c Thu Apr 02 10:16:53 2009 -0700
94.2 +++ b/src/share/native/sun/security/pkcs11/wrapper/p11_mutex.c Wed Apr 08 15:40:56 2009 -0700
94.3 @@ -1,5 +1,5 @@
94.4 /*
94.5 - * Portions Copyright 2003 Sun Microsystems, Inc. All Rights Reserved.
94.6 + * Portions Copyright 2003-2009 Sun Microsystems, Inc. All Rights Reserved.
94.7 */
94.8
94.9 /* Copyright (c) 2002 Graz University of Technology. All rights reserved.
94.10 @@ -76,7 +76,7 @@
94.11 CK_C_INITIALIZE_ARGS_PTR makeCKInitArgsAdapter(JNIEnv *env, jobject jInitArgs)
94.12 {
94.13 CK_C_INITIALIZE_ARGS_PTR ckpInitArgs;
94.14 - jclass jInitArgsClass = (*env)->FindClass(env, CLASS_C_INITIALIZE_ARGS);
94.15 + jclass jInitArgsClass;
94.16 jfieldID fieldID;
94.17 jlong jFlags;
94.18 jobject jReserved;
94.19 @@ -91,10 +91,20 @@
94.20
94.21 /* convert the Java InitArgs object to a pointer to a CK_C_INITIALIZE_ARGS structure */
94.22 ckpInitArgs = (CK_C_INITIALIZE_ARGS_PTR) malloc(sizeof(CK_C_INITIALIZE_ARGS));
94.23 + if (ckpInitArgs == NULL) {
94.24 + JNU_ThrowOutOfMemoryError(env, 0);
94.25 + return NULL_PTR;
94.26 + }
94.27
94.28 /* Set the mutex functions that will call the Java mutex functions, but
94.29 * only set it, if the field is not null.
94.30 */
94.31 + jInitArgsClass = (*env)->FindClass(env, CLASS_C_INITIALIZE_ARGS);
94.32 + if (jInitArgsClass == NULL) {
94.33 + free(ckpInitArgs);
94.34 + return NULL;
94.35 + }
94.36 +
94.37 #ifdef NO_CALLBACKS
94.38 ckpInitArgs->CreateMutex = NULL_PTR;
94.39 ckpInitArgs->DestroyMutex = NULL_PTR;
94.40 @@ -102,22 +112,22 @@
94.41 ckpInitArgs->UnlockMutex = NULL_PTR;
94.42 #else
94.43 fieldID = (*env)->GetFieldID(env, jInitArgsClass, "CreateMutex", "Lsun/security/pkcs11/wrapper/CK_CREATEMUTEX;");
94.44 - assert(fieldID != 0);
94.45 + if (fieldID == NULL) { return NULL; }
94.46 jMutexHandler = (*env)->GetObjectField(env, jInitArgs, fieldID);
94.47 ckpInitArgs->CreateMutex = (jMutexHandler != NULL) ? &callJCreateMutex : NULL_PTR;
94.48
94.49 fieldID = (*env)->GetFieldID(env, jInitArgsClass, "DestroyMutex", "Lsun/security/pkcs11/wrapper/CK_DESTROYMUTEX;");
94.50 - assert(fieldID != 0);
94.51 + if (fieldID == NULL) { return NULL; }
94.52 jMutexHandler = (*env)->GetObjectField(env, jInitArgs, fieldID);
94.53 ckpInitArgs->DestroyMutex = (jMutexHandler != NULL) ? &callJDestroyMutex : NULL_PTR;
94.54
94.55 fieldID = (*env)->GetFieldID(env, jInitArgsClass, "LockMutex", "Lsun/security/pkcs11/wrapper/CK_LOCKMUTEX;");
94.56 - assert(fieldID != 0);
94.57 + if (fieldID == NULL) { return NULL; }
94.58 jMutexHandler = (*env)->GetObjectField(env, jInitArgs, fieldID);
94.59 ckpInitArgs->LockMutex = (jMutexHandler != NULL) ? &callJLockMutex : NULL_PTR;
94.60
94.61 fieldID = (*env)->GetFieldID(env, jInitArgsClass, "UnlockMutex", "Lsun/security/pkcs11/wrapper/CK_UNLOCKMUTEX;");
94.62 - assert(fieldID != 0);
94.63 + if (fieldID == NULL) { return NULL; }
94.64 jMutexHandler = (*env)->GetObjectField(env, jInitArgs, fieldID);
94.65 ckpInitArgs->UnlockMutex = (jMutexHandler != NULL) ? &callJUnlockMutex : NULL_PTR;
94.66
94.67 @@ -129,19 +139,25 @@
94.68 /* set the global object jInitArgs so that the right Java mutex functions will be called */
94.69 jInitArgsObject = (*env)->NewGlobalRef(env, jInitArgs);
94.70 ckpGlobalInitArgs = (CK_C_INITIALIZE_ARGS_PTR) malloc(sizeof(CK_C_INITIALIZE_ARGS));
94.71 + if (ckpGlobalInitArgs == NULL) {
94.72 + free(ckpInitArgs);
94.73 + JNU_ThrowOutOfMemoryError(env, 0);
94.74 + return NULL_PTR;
94.75 + }
94.76 +
94.77 memcpy(ckpGlobalInitArgs, ckpInitArgs, sizeof(CK_C_INITIALIZE_ARGS));
94.78 }
94.79 #endif /* NO_CALLBACKS */
94.80
94.81 /* convert and set the flags field */
94.82 fieldID = (*env)->GetFieldID(env, jInitArgsClass, "flags", "J");
94.83 - assert(fieldID != 0);
94.84 + if (fieldID == NULL) { return NULL; }
94.85 jFlags = (*env)->GetLongField(env, jInitArgs, fieldID);
94.86 ckpInitArgs->flags = jLongToCKULong(jFlags);
94.87
94.88 /* pReserved should be NULL_PTR in this version */
94.89 fieldID = (*env)->GetFieldID(env, jInitArgsClass, "pReserved", "Ljava/lang/Object;");
94.90 - assert(fieldID != 0);
94.91 + if (fieldID == NULL) { return NULL; }
94.92 jReserved = (*env)->GetObjectField(env, jInitArgs, fieldID);
94.93
94.94 /* we try to convert the reserved parameter also */
94.95 @@ -201,20 +217,21 @@
94.96 wasAttached = 1;
94.97 }
94.98
94.99 -
94.100 jCreateMutexClass = (*env)->FindClass(env, CLASS_CREATEMUTEX);
94.101 + if (jCreateMutexClass == NULL) { return rv; }
94.102 jInitArgsClass = (*env)->FindClass(env, CLASS_C_INITIALIZE_ARGS);
94.103 + if (jInitArgsClass == NULL) { return rv; }
94.104
94.105 /* get the CreateMutex object out of the jInitArgs object */
94.106 fieldID = (*env)->GetFieldID(env, jInitArgsClass, "CreateMutex", "Lsun/security/pkcs11/wrapper/CK_CREATEMUTEX;");
94.107 - assert(fieldID != 0);
94.108 + if (fieldID == NULL) { return rv; }
94.109 jCreateMutex = (*env)->GetObjectField(env, jInitArgsObject, fieldID);
94.110 assert(jCreateMutex != 0);
94.111
94.112 /* call the CK_CREATEMUTEX function of the CreateMutex object */
94.113 /* and get the new Java mutex object */
94.114 methodID = (*env)->GetMethodID(env, jCreateMutexClass, "CK_CREATEMUTEX", "()Ljava/lang/Object;");
94.115 - assert(methodID != 0);
94.116 + if (methodID == NULL) { return rv; }
94.117 jMutex = (*env)->CallObjectMethod(env, jCreateMutex, methodID);
94.118
94.119 /* set a global reference on the Java mutex */
94.120 @@ -227,10 +244,13 @@
94.121 pkcs11Exception = (*env)->ExceptionOccurred(env);
94.122
94.123 if (pkcs11Exception != NULL) {
94.124 + /* TBD: clear the pending exception with ExceptionClear? */
94.125 /* The was an exception thrown, now we get the error-code from it */
94.126 pkcs11ExceptionClass = (*env)->FindClass(env, CLASS_PKCS11EXCEPTION);
94.127 + if (pkcs11ExceptionClass == NULL) { return rv; }
94.128 methodID = (*env)->GetMethodID(env, pkcs11ExceptionClass, "getErrorCode", "()J");
94.129 - assert(methodID != 0);
94.130 + if (methodID == NULL) { return rv; }
94.131 +
94.132 errorCode = (*env)->CallLongMethod(env, pkcs11Exception, methodID);
94.133 rv = jLongToCKULong(errorCode);
94.134 }
94.135 @@ -292,22 +312,23 @@
94.136 wasAttached = 1;
94.137 }
94.138
94.139 -
94.140 jDestroyMutexClass = (*env)->FindClass(env, CLASS_DESTROYMUTEX);
94.141 + if (jDestroyMutexClass == NULL) { return rv; }
94.142 jInitArgsClass = (*env)->FindClass(env, CLASS_C_INITIALIZE_ARGS);
94.143 + if (jInitArgsClass == NULL) { return rv; }
94.144
94.145 /* convert the CK mutex to a Java mutex */
94.146 jMutex = ckVoidPtrToJObject(pMutex);
94.147
94.148 /* get the DestroyMutex object out of the jInitArgs object */
94.149 fieldID = (*env)->GetFieldID(env, jInitArgsClass, "DestroyMutex", "Lsun/security/pkcs11/wrapper/CK_DESTROYMUTEX;");
94.150 - assert(fieldID != 0);
94.151 + if (fieldID == NULL) { return rv; }
94.152 jDestroyMutex = (*env)->GetObjectField(env, jInitArgsObject, fieldID);
94.153 assert(jDestroyMutex != 0);
94.154
94.155 /* call the CK_DESTROYMUTEX method of the DestroyMutex object */
94.156 methodID = (*env)->GetMethodID(env, jDestroyMutexClass, "CK_DESTROYMUTEX", "(Ljava/lang/Object;)V");
94.157 - assert(methodID != 0);
94.158 + if (methodID == NULL) { return rv; }
94.159 (*env)->CallVoidMethod(env, jDestroyMutex, methodID, jMutex);
94.160
94.161 /* delete the global reference on the Java mutex */
94.162 @@ -318,10 +339,12 @@
94.163 pkcs11Exception = (*env)->ExceptionOccurred(env);
94.164
94.165 if (pkcs11Exception != NULL) {
94.166 + /* TBD: clear the pending exception with ExceptionClear? */
94.167 /* The was an exception thrown, now we get the error-code from it */
94.168 pkcs11ExceptionClass = (*env)->FindClass(env, CLASS_PKCS11EXCEPTION);
94.169 + if (pkcs11ExceptionClass == NULL) { return rv; }
94.170 methodID = (*env)->GetMethodID(env, pkcs11ExceptionClass, "getErrorCode", "()J");
94.171 - assert(methodID != 0);
94.172 + if (methodID == NULL) { return rv; }
94.173 errorCode = (*env)->CallLongMethod(env, pkcs11Exception, methodID);
94.174 rv = jLongToCKULong(errorCode);
94.175 }
94.176 @@ -383,33 +406,35 @@
94.177 wasAttached = 1;
94.178 }
94.179
94.180 -
94.181 jLockMutexClass = (*env)->FindClass(env, CLASS_LOCKMUTEX);
94.182 + if (jLockMutexClass == NULL) { return rv; }
94.183 jInitArgsClass = (*env)->FindClass(env, CLASS_C_INITIALIZE_ARGS);
94.184 + if (jInitArgsClass == NULL) { return rv; }
94.185
94.186 /* convert the CK mutex to a Java mutex */
94.187 jMutex = ckVoidPtrToJObject(pMutex);
94.188
94.189 /* get the LockMutex object out of the jInitArgs object */
94.190 fieldID = (*env)->GetFieldID(env, jInitArgsClass, "LockMutex", "Lsun/security/pkcs11/wrapper/CK_LOCKMUTEX;");
94.191 - assert(fieldID != 0);
94.192 + if (fieldID == NULL) { return rv; }
94.193 jLockMutex = (*env)->GetObjectField(env, jInitArgsObject, fieldID);
94.194 assert(jLockMutex != 0);
94.195
94.196 /* call the CK_LOCKMUTEX method of the LockMutex object */
94.197 methodID = (*env)->GetMethodID(env, jLockMutexClass, "CK_LOCKMUTEX", "(Ljava/lang/Object;)V");
94.198 - assert(methodID != 0);
94.199 + if (methodID == NULL) { return rv; }
94.200 (*env)->CallVoidMethod(env, jLockMutex, methodID, jMutex);
94.201
94.202 -
94.203 /* check, if callback threw an exception */
94.204 pkcs11Exception = (*env)->ExceptionOccurred(env);
94.205
94.206 if (pkcs11Exception != NULL) {
94.207 + /* TBD: clear the pending exception with ExceptionClear? */
94.208 /* The was an exception thrown, now we get the error-code from it */
94.209 pkcs11ExceptionClass = (*env)->FindClass(env, CLASS_PKCS11EXCEPTION);
94.210 + if (pkcs11ExceptionClass == NULL) { return rv; }
94.211 methodID = (*env)->GetMethodID(env, pkcs11ExceptionClass, "getErrorCode", "()J");
94.212 - assert(methodID != 0);
94.213 + if (methodID == NULL) { return rv; }
94.214 errorCode = (*env)->CallLongMethod(env, pkcs11Exception, methodID);
94.215 rv = jLongToCKULong(errorCode);
94.216 }
94.217 @@ -471,33 +496,35 @@
94.218 wasAttached = 1;
94.219 }
94.220
94.221 -
94.222 jUnlockMutexClass = (*env)->FindClass(env, CLASS_UNLOCKMUTEX);
94.223 + if (jUnlockMutexClass == NULL) { return rv; }
94.224 jInitArgsClass = (*env)->FindClass(env, CLASS_C_INITIALIZE_ARGS);
94.225 + if (jInitArgsClass == NULL) { return rv; }
94.226
94.227 /* convert the CK-type mutex to a Java mutex */
94.228 jMutex = ckVoidPtrToJObject(pMutex);
94.229
94.230 /* get the UnlockMutex object out of the jInitArgs object */
94.231 fieldID = (*env)->GetFieldID(env, jInitArgsClass, "UnlockMutex", "Lsun/security/pkcs11/wrapper/CK_UNLOCKMUTEX;");
94.232 - assert(fieldID != 0);
94.233 + if (fieldID == NULL) { return rv; }
94.234 jUnlockMutex = (*env)->GetObjectField(env, jInitArgsObject, fieldID);
94.235 assert(jUnlockMutex != 0);
94.236
94.237 /* call the CK_UNLOCKMUTEX method of the UnLockMutex object */
94.238 methodID = (*env)->GetMethodID(env, jUnlockMutexClass, "CK_UNLOCKMUTEX", "(Ljava/lang/Object;)V");
94.239 - assert(methodID != 0);
94.240 + if (methodID == NULL) { return rv; }
94.241 (*env)->CallVoidMethod(env, jUnlockMutex, methodID, jMutex);
94.242
94.243 -
94.244 /* check, if callback threw an exception */
94.245 pkcs11Exception = (*env)->ExceptionOccurred(env);
94.246
94.247 if (pkcs11Exception != NULL) {
94.248 + /* TBD: clear the pending exception with ExceptionClear? */
94.249 /* The was an exception thrown, now we get the error-code from it */
94.250 pkcs11ExceptionClass = (*env)->FindClass(env, CLASS_PKCS11EXCEPTION);
94.251 + if (pkcs11ExceptionClass == NULL) { return rv; }
94.252 methodID = (*env)->GetMethodID(env, pkcs11ExceptionClass, "getErrorCode", "()J");
94.253 - assert(methodID != 0);
94.254 + if (methodID == NULL) { return rv; }
94.255 errorCode = (*env)->CallLongMethod(env, pkcs11Exception, methodID);
94.256 rv = jLongToCKULong(errorCode);
94.257 }
95.1 --- a/src/share/native/sun/security/pkcs11/wrapper/p11_objmgmt.c Thu Apr 02 10:16:53 2009 -0700
95.2 +++ b/src/share/native/sun/security/pkcs11/wrapper/p11_objmgmt.c Wed Apr 08 15:40:56 2009 -0700
95.3 @@ -1,5 +1,5 @@
95.4 /*
95.5 - * Portions Copyright 2003 Sun Microsystems, Inc. All Rights Reserved.
95.6 + * Portions Copyright 2003-2009 Sun Microsystems, Inc. All Rights Reserved.
95.7 */
95.8
95.9 /* Copyright (c) 2002 Graz University of Technology. All rights reserved.
95.10 @@ -81,16 +81,14 @@
95.11
95.12 ckSessionHandle = jLongToCKULong(jSessionHandle);
95.13 jAttributeArrayToCKAttributeArray(env, jTemplate, &ckpAttributes, &ckAttributesLength);
95.14 + if ((*env)->ExceptionCheck(env)) { return 0L; }
95.15
95.16 rv = (*ckpFunctions->C_CreateObject)(ckSessionHandle, ckpAttributes, ckAttributesLength, &ckObjectHandle);
95.17
95.18 jObjectHandle = ckULongToJLong(ckObjectHandle);
95.19 - for(i=0; i<ckAttributesLength; i++)
95.20 - if(ckpAttributes[i].pValue != NULL_PTR)
95.21 - free(ckpAttributes[i].pValue);
95.22 - free(ckpAttributes);
95.23 + freeCKAttributeArray(ckpAttributes, ckAttributesLength);
95.24
95.25 - if(ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return 0L ; }
95.26 + if (ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return 0L ; }
95.27
95.28 return jObjectHandle ;
95.29 }
95.30 @@ -126,14 +124,12 @@
95.31 ckSessionHandle = jLongToCKULong(jSessionHandle);
95.32 ckObjectHandle = jLongToCKULong(jObjectHandle);
95.33 jAttributeArrayToCKAttributeArray(env, jTemplate, &ckpAttributes, &ckAttributesLength);
95.34 + if ((*env)->ExceptionCheck(env)) { return 0L; }
95.35
95.36 rv = (*ckpFunctions->C_CopyObject)(ckSessionHandle, ckObjectHandle, ckpAttributes, ckAttributesLength, &ckNewObjectHandle);
95.37
95.38 jNewObjectHandle = ckULongToJLong(ckNewObjectHandle);
95.39 - for(i=0; i<ckAttributesLength; i++)
95.40 - if(ckpAttributes[i].pValue != NULL_PTR)
95.41 - free(ckpAttributes[i].pValue);
95.42 - free(ckpAttributes);
95.43 + freeCKAttributeArray(ckpAttributes, ckAttributesLength);
95.44
95.45 if(ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return 0L ; }
95.46
95.47 @@ -164,7 +160,7 @@
95.48 ckObjectHandle = jLongToCKULong(jObjectHandle);
95.49
95.50 rv = (*ckpFunctions->C_DestroyObject)(ckSessionHandle, ckObjectHandle);
95.51 - if(ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return; }
95.52 + if (ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return; }
95.53 }
95.54 #endif
95.55
95.56 @@ -194,7 +190,7 @@
95.57 ckObjectHandle = jLongToCKULong(jObjectHandle);
95.58
95.59 rv = (*ckpFunctions->C_GetObjectSize)(ckSessionHandle, ckObjectHandle, &ckObjectSize);
95.60 - if(ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return 0L ; }
95.61 + if (ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return 0L ; }
95.62
95.63 jObjectSize = ckULongToJLong(ckObjectSize);
95.64
95.65 @@ -221,7 +217,7 @@
95.66 CK_ATTRIBUTE_PTR ckpAttributes = NULL_PTR;
95.67 CK_ULONG ckAttributesLength;
95.68 CK_ULONG ckBufferLength;
95.69 - CK_ULONG i;
95.70 + CK_ULONG i, j;
95.71 jobject jAttribute;
95.72 CK_RV rv;
95.73
95.74 @@ -238,19 +234,20 @@
95.75 ckObjectHandle = jLongToCKULong(jObjectHandle);
95.76 TRACE1("jAttributeArrayToCKAttributeArray now with jTemplate = %d", jTemplate);
95.77 jAttributeArrayToCKAttributeArray(env, jTemplate, &ckpAttributes, &ckAttributesLength);
95.78 + if ((*env)->ExceptionCheck(env)) { return; }
95.79 +
95.80 TRACE2("DEBUG: jAttributeArrayToCKAttributeArray finished with ckpAttribute = %d, Length = %d\n", ckpAttributes, ckAttributesLength);
95.81
95.82 /* first set all pValue to NULL, to get the needed buffer length */
95.83 for(i = 0; i < ckAttributesLength; i++) {
95.84 - if(ckpAttributes[i].pValue != NULL_PTR) {
95.85 + if (ckpAttributes[i].pValue != NULL_PTR) {
95.86 free(ckpAttributes[i].pValue);
95.87 + ckpAttributes[i].pValue = NULL_PTR;
95.88 }
95.89 }
95.90 - for (i = 0; i < ckAttributesLength; i++) {
95.91 - ckpAttributes[i].pValue = NULL_PTR;
95.92 - }
95.93 +
95.94 rv = (*ckpFunctions->C_GetAttributeValue)(ckSessionHandle, ckObjectHandle, ckpAttributes, ckAttributesLength);
95.95 - if(ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) {
95.96 + if (ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) {
95.97 free(ckpAttributes);
95.98 return ;
95.99 }
95.100 @@ -261,27 +258,34 @@
95.101 for (i = 0; i < ckAttributesLength; i++) {
95.102 ckBufferLength = sizeof(CK_BYTE) * ckpAttributes[i].ulValueLen;
95.103 ckpAttributes[i].pValue = (void *) malloc(ckBufferLength);
95.104 + if (ckpAttributes[i].pValue == NULL) {
95.105 + freeCKAttributeArray(ckpAttributes, i);
95.106 + JNU_ThrowOutOfMemoryError(env, 0);
95.107 + return;
95.108 + }
95.109 ckpAttributes[i].ulValueLen = ckBufferLength;
95.110 }
95.111
95.112 /* now get the attributes with all values */
95.113 rv = (*ckpFunctions->C_GetAttributeValue)(ckSessionHandle, ckObjectHandle, ckpAttributes, ckAttributesLength);
95.114
95.115 - /* copy back the values to the Java attributes */
95.116 - for (i = 0; i < ckAttributesLength; i++) {
95.117 - jAttribute = ckAttributePtrToJAttribute(env, &(ckpAttributes[i]));
95.118 - (*env)->SetObjectArrayElement(env, jTemplate, i, jAttribute);
95.119 - }
95.120 -
95.121 - for(i=0; i<ckAttributesLength; i++) {
95.122 - if(ckpAttributes[i].pValue != NULL_PTR) {
95.123 - free(ckpAttributes[i].pValue);
95.124 + if (ckAssertReturnValueOK(env, rv) == CK_ASSERT_OK) {
95.125 + /* copy back the values to the Java attributes */
95.126 + for (i = 0; i < ckAttributesLength; i++) {
95.127 + jAttribute = ckAttributePtrToJAttribute(env, &(ckpAttributes[i]));
95.128 + if (jAttribute == NULL) {
95.129 + freeCKAttributeArray(ckpAttributes, ckAttributesLength);
95.130 + return;
95.131 + }
95.132 + (*env)->SetObjectArrayElement(env, jTemplate, i, jAttribute);
95.133 + if ((*env)->ExceptionCheck(env)) {
95.134 + freeCKAttributeArray(ckpAttributes, ckAttributesLength);
95.135 + return;
95.136 + }
95.137 }
95.138 }
95.139 - free(ckpAttributes);
95.140 + freeCKAttributeArray(ckpAttributes, ckAttributesLength);
95.141 TRACE0("FINISHED\n");
95.142 -
95.143 - if(ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return ; }
95.144 }
95.145 #endif
95.146
95.147 @@ -312,15 +316,11 @@
95.148 ckSessionHandle = jLongToCKULong(jSessionHandle);
95.149 ckObjectHandle = jLongToCKULong(jObjectHandle);
95.150 jAttributeArrayToCKAttributeArray(env, jTemplate, &ckpAttributes, &ckAttributesLength);
95.151 + if ((*env)->ExceptionCheck(env)) { return; }
95.152
95.153 rv = (*ckpFunctions->C_SetAttributeValue)(ckSessionHandle, ckObjectHandle, ckpAttributes, ckAttributesLength);
95.154
95.155 - for(i=0; i<ckAttributesLength; i++) {
95.156 - if(ckpAttributes[i].pValue != NULL_PTR) {
95.157 - free(ckpAttributes[i].pValue);
95.158 - }
95.159 - }
95.160 - free(ckpAttributes);
95.161 + freeCKAttributeArray(ckpAttributes, ckAttributesLength);
95.162
95.163 if(ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return; }
95.164 }
95.165 @@ -355,15 +355,11 @@
95.166
95.167 ckSessionHandle = jLongToCKULong(jSessionHandle);
95.168 jAttributeArrayToCKAttributeArray(env, jTemplate, &ckpAttributes, &ckAttributesLength);
95.169 + if ((*env)->ExceptionCheck(env)) { return; }
95.170
95.171 rv = (*ckpFunctions->C_FindObjectsInit)(ckSessionHandle, ckpAttributes, ckAttributesLength);
95.172
95.173 - for(i=0; i<ckAttributesLength; i++) {
95.174 - if(ckpAttributes[i].pValue != NULL_PTR) {
95.175 - free(ckpAttributes[i].pValue);
95.176 - }
95.177 - }
95.178 - free(ckpAttributes);
95.179 + freeCKAttributeArray(ckpAttributes, ckAttributesLength);
95.180 TRACE0("FINISHED\n");
95.181
95.182 if(ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return; }
95.183 @@ -397,14 +393,18 @@
95.184 ckSessionHandle = jLongToCKULong(jSessionHandle);
95.185 ckMaxObjectLength = jLongToCKULong(jMaxObjectCount);
95.186 ckpObjectHandleArray = (CK_OBJECT_HANDLE_PTR) malloc(sizeof(CK_OBJECT_HANDLE) * ckMaxObjectLength);
95.187 + if (ckpObjectHandleArray == NULL) {
95.188 + JNU_ThrowOutOfMemoryError(env, 0);
95.189 + return NULL;
95.190 + }
95.191
95.192 rv = (*ckpFunctions->C_FindObjects)(ckSessionHandle, ckpObjectHandleArray, ckMaxObjectLength, &ckActualObjectCount);
95.193 + if (ckAssertReturnValueOK(env, rv) == CK_ASSERT_OK) {
95.194 + jObjectHandleArray = ckULongArrayToJLongArray(env, ckpObjectHandleArray, ckActualObjectCount);
95.195 + }
95.196
95.197 - jObjectHandleArray = ckULongArrayToJLongArray(env, ckpObjectHandleArray, ckActualObjectCount);
95.198 free(ckpObjectHandleArray);
95.199
95.200 - if(ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return NULL ; }
95.201 -
95.202 return jObjectHandleArray ;
95.203 }
95.204 #endif
96.1 --- a/src/share/native/sun/security/pkcs11/wrapper/p11_sessmgmt.c Thu Apr 02 10:16:53 2009 -0700
96.2 +++ b/src/share/native/sun/security/pkcs11/wrapper/p11_sessmgmt.c Wed Apr 08 15:40:56 2009 -0700
96.3 @@ -1,5 +1,5 @@
96.4 /*
96.5 - * Portions Copyright 2003 Sun Microsystems, Inc. All Rights Reserved.
96.6 + * Portions Copyright 2003-2009 Sun Microsystems, Inc. All Rights Reserved.
96.7 */
96.8
96.9 /* Copyright (c) 2002 Graz University of Technology. All rights reserved.
96.10 @@ -97,6 +97,10 @@
96.11 #ifndef NO_CALLBACKS
96.12 if (jNotify != NULL) {
96.13 notifyEncapsulation = (NotifyEncapsulation *) malloc(sizeof(NotifyEncapsulation));
96.14 + if (notifyEncapsulation == NULL) {
96.15 + JNU_ThrowOutOfMemoryError(env, 0);
96.16 + return 0L;
96.17 + }
96.18 notifyEncapsulation->jApplicationData = (jApplication != NULL)
96.19 ? (*env)->NewGlobalRef(env, jApplication)
96.20 : NULL;
96.21 @@ -118,7 +122,18 @@
96.22 TRACE0(" ... ");
96.23
96.24 rv = (*ckpFunctions->C_OpenSession)(ckSlotID, ckFlags, ckpApplication, ckNotify, &ckSessionHandle);
96.25 - if(ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return 0L ; }
96.26 + if (ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) {
96.27 +#ifndef NO_CALLBACKS
96.28 + if (notifyEncapsulation != NULL) {
96.29 + if (notifyEncapsulation->jApplicationData != NULL) {
96.30 + (*env)->DeleteGlobalRef(env, jApplication);
96.31 + }
96.32 + (*env)->DeleteGlobalRef(env, jNotify);
96.33 + free(notifyEncapsulation);
96.34 + }
96.35 +#endif /* NO_CALLBACKS */
96.36 + return 0L;
96.37 + }
96.38
96.39 TRACE0("got session");
96.40 TRACE1(", SessionHandle=%u", ckSessionHandle);
96.41 @@ -163,7 +178,7 @@
96.42 ckSessionHandle = jLongToCKULong(jSessionHandle);
96.43
96.44 rv = (*ckpFunctions->C_CloseSession)(ckSessionHandle);
96.45 - if(ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return; }
96.46 + if (ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return; }
96.47
96.48 #ifndef NO_CALLBACKS
96.49 notifyEncapsulation = removeNotifyEntry(env, ckSessionHandle);
96.50 @@ -208,7 +223,7 @@
96.51 ckSlotID = jLongToCKULong(jSlotID);
96.52
96.53 rv = (*ckpFunctions->C_CloseAllSessions)(ckSlotID);
96.54 - if(ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return; }
96.55 + if (ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return; }
96.56
96.57 #ifndef NO_CALLBACKS
96.58 /* Remove all notify callback helper objects. */
96.59 @@ -250,10 +265,9 @@
96.60 ckSessionHandle = jLongToCKULong(jSessionHandle);
96.61
96.62 rv = (*ckpFunctions->C_GetSessionInfo)(ckSessionHandle, &ckSessionInfo);
96.63 - if(ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return NULL ; }
96.64 -
96.65 - jSessionInfo = ckSessionInfoPtrToJSessionInfo(env, &ckSessionInfo);
96.66 -
96.67 + if (ckAssertReturnValueOK(env, rv) == CK_ASSERT_OK) {
96.68 + jSessionInfo = ckSessionInfoPtrToJSessionInfo(env, &ckSessionInfo);
96.69 + }
96.70 return jSessionInfo ;
96.71 }
96.72 #endif
96.73 @@ -274,7 +288,7 @@
96.74 CK_SESSION_HANDLE ckSessionHandle;
96.75 CK_BYTE_PTR ckpState;
96.76 CK_ULONG ckStateLength;
96.77 - jbyteArray jState;
96.78 + jbyteArray jState = NULL;
96.79 CK_RV rv;
96.80
96.81 CK_FUNCTION_LIST_PTR ckpFunctions = getFunctionList(env, obj);
96.82 @@ -283,17 +297,20 @@
96.83 ckSessionHandle = jLongToCKULong(jSessionHandle);
96.84
96.85 rv = (*ckpFunctions->C_GetOperationState)(ckSessionHandle, NULL_PTR, &ckStateLength);
96.86 - if(ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return NULL ; }
96.87 + if (ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return NULL ; }
96.88
96.89 ckpState = (CK_BYTE_PTR) malloc(ckStateLength);
96.90 + if (ckpState == NULL) {
96.91 + JNU_ThrowOutOfMemoryError(env, 0);
96.92 + return NULL;
96.93 + }
96.94
96.95 rv = (*ckpFunctions->C_GetOperationState)(ckSessionHandle, ckpState, &ckStateLength);
96.96 -
96.97 - jState = ckByteArrayToJByteArray(env, ckpState, ckStateLength);
96.98 + if (ckAssertReturnValueOK(env, rv) == CK_ASSERT_OK) {
96.99 + jState = ckByteArrayToJByteArray(env, ckpState, ckStateLength);
96.100 + }
96.101 free(ckpState);
96.102
96.103 - if(ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return NULL ; }
96.104 -
96.105 return jState ;
96.106 }
96.107 #endif
96.108 @@ -325,6 +342,8 @@
96.109
96.110 ckSessionHandle = jLongToCKULong(jSessionHandle);
96.111 jByteArrayToCKByteArray(env, jOperationState, &ckpState, &ckStateLength);
96.112 + if ((*env)->ExceptionCheck(env)) { return; }
96.113 +
96.114 ckEncryptionKeyHandle = jLongToCKULong(jEncryptionKeyHandle);
96.115 ckAuthenticationKeyHandle = jLongToCKULong(jAuthenticationKeyHandle);
96.116
96.117 @@ -332,7 +351,7 @@
96.118
96.119 free(ckpState);
96.120
96.121 - if(ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return; }
96.122 + if (ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return; }
96.123 }
96.124 #endif
96.125
96.126 @@ -362,12 +381,13 @@
96.127 ckSessionHandle = jLongToCKULong(jSessionHandle);
96.128 ckUserType = jLongToCKULong(jUserType);
96.129 jCharArrayToCKCharArray(env, jPin, &ckpPinArray, &ckPinLength);
96.130 + if ((*env)->ExceptionCheck(env)) { return; }
96.131
96.132 rv = (*ckpFunctions->C_Login)(ckSessionHandle, ckUserType, ckpPinArray, ckPinLength);
96.133
96.134 free(ckpPinArray);
96.135
96.136 - if(ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return; }
96.137 + if (ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return; }
96.138 }
96.139 #endif
96.140
96.141 @@ -391,7 +411,7 @@
96.142 ckSessionHandle = jLongToCKULong(jSessionHandle);
96.143
96.144 rv = (*ckpFunctions->C_Logout)(ckSessionHandle);
96.145 - if(ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return; }
96.146 + if (ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return; }
96.147 }
96.148 #endif
96.149
96.150 @@ -410,10 +430,14 @@
96.151 NotifyListNode *currentNode, *newNode;
96.152
96.153 if (notifyEncapsulation == NULL) {
96.154 - return ;
96.155 + return;
96.156 }
96.157
96.158 newNode = (NotifyListNode *) malloc(sizeof(NotifyListNode));
96.159 + if (newNode == NULL) {
96.160 + JNU_ThrowOutOfMemoryError(env, 0);
96.161 + return;
96.162 + }
96.163 newNode->hSession = hSession;
96.164 newNode->notifyEncapsulation = notifyEncapsulation;
96.165 newNode->next = NULL;
96.166 @@ -578,9 +602,10 @@
96.167 jEvent = ckULongToJLong(event);
96.168
96.169 ckNotifyClass = (*env)->FindClass(env, CLASS_NOTIFY);
96.170 - assert(ckNotifyClass != 0);
96.171 + if (ckNotifyClass == NULL) { return rv; }
96.172 jmethod = (*env)->GetMethodID(env, ckNotifyClass, "CK_NOTIFY", "(JJLjava/lang/Object;)V");
96.173 - assert(jmethod != 0);
96.174 + if (jmethod == NULL) { return rv; }
96.175 +
96.176 (*env)->CallVoidMethod(env, notifyEncapsulation->jNotifyObject, jmethod,
96.177 jSessionHandle, jEvent, notifyEncapsulation->jApplicationData);
96.178
96.179 @@ -588,10 +613,14 @@
96.180 pkcs11Exception = (*env)->ExceptionOccurred(env);
96.181
96.182 if (pkcs11Exception != NULL) {
96.183 + /* TBD: clear the pending exception with ExceptionClear? */
96.184 /* The was an exception thrown, now we get the error-code from it */
96.185 pkcs11ExceptionClass = (*env)->FindClass(env, CLASS_PKCS11EXCEPTION);
96.186 + if (pkcs11ExceptionClass == NULL) { return rv; }
96.187 +
96.188 jmethod = (*env)->GetMethodID(env, pkcs11ExceptionClass, "getErrorCode", "()J");
96.189 - assert(jmethod != 0);
96.190 + if (jmethod == NULL) { return rv; }
96.191 +
96.192 errorCode = (*env)->CallLongMethod(env, pkcs11Exception, jmethod);
96.193 rv = jLongToCKULong(errorCode);
96.194 }
97.1 --- a/src/share/native/sun/security/pkcs11/wrapper/p11_sign.c Thu Apr 02 10:16:53 2009 -0700
97.2 +++ b/src/share/native/sun/security/pkcs11/wrapper/p11_sign.c Wed Apr 08 15:40:56 2009 -0700
97.3 @@ -1,5 +1,5 @@
97.4 /*
97.5 - * Portions Copyright 2003-2005 Sun Microsystems, Inc. All Rights Reserved.
97.6 + * Portions Copyright 2003-2009 Sun Microsystems, Inc. All Rights Reserved.
97.7 */
97.8
97.9 /* Copyright (c) 2002 Graz University of Technology. All rights reserved.
97.10 @@ -77,15 +77,16 @@
97.11
97.12 ckSessionHandle = jLongToCKULong(jSessionHandle);
97.13 jMechanismToCKMechanism(env, jMechanism, &ckMechanism);
97.14 + if ((*env)->ExceptionCheck(env)) { return; }
97.15 ckKeyHandle = jLongToCKULong(jKeyHandle);
97.16
97.17 rv = (*ckpFunctions->C_SignInit)(ckSessionHandle, &ckMechanism, ckKeyHandle);
97.18
97.19 - if(ckMechanism.pParameter != NULL_PTR) {
97.20 + if (ckMechanism.pParameter != NULL_PTR) {
97.21 free(ckMechanism.pParameter);
97.22 }
97.23
97.24 - if(ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return; }
97.25 + if (ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return; }
97.26 }
97.27 #endif
97.28
97.29 @@ -117,14 +118,23 @@
97.30
97.31 ckSessionHandle = jLongToCKULong(jSessionHandle);
97.32 jByteArrayToCKByteArray(env, jData, &ckpData, &ckDataLength);
97.33 + if ((*env)->ExceptionCheck(env)) { return NULL; }
97.34
97.35 /* START standard code */
97.36
97.37 /* first determine the length of the signature */
97.38 rv = (*ckpFunctions->C_Sign)(ckSessionHandle, ckpData, ckDataLength, NULL_PTR, &ckSignatureLength);
97.39 - if(ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return NULL ; }
97.40 + if (ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) {
97.41 + free(ckpData);
97.42 + return NULL;
97.43 + }
97.44
97.45 ckpSignature = (CK_BYTE_PTR) malloc(ckSignatureLength * sizeof(CK_BYTE));
97.46 + if (ckpSignature == NULL) {
97.47 + free(ckpData);
97.48 + JNU_ThrowOutOfMemoryError(env, 0);
97.49 + return NULL;
97.50 + }
97.51
97.52 /* now get the signature */
97.53 rv = (*ckpFunctions->C_Sign)(ckSessionHandle, ckpData, ckDataLength, ckpSignature, &ckSignatureLength);
97.54 @@ -134,22 +144,31 @@
97.55 /* START workaround code for operation abort bug in pkcs#11 of Datakey and iButton */
97.56 /*
97.57 ckpSignature = (CK_BYTE_PTR) malloc(256 * sizeof(CK_BYTE));
97.58 + if (ckpSignature == NULL) {
97.59 + free(ckpData);
97.60 + JNU_ThrowOutOfMemoryError(env, 0);
97.61 + return NULL;
97.62 + }
97.63 rv = (*ckpFunctions->C_Sign)(ckSessionHandle, ckpData, ckDataLength, ckpSignature, &ckSignatureLength);
97.64
97.65 if (rv == CKR_BUFFER_TOO_SMALL) {
97.66 free(ckpSignature);
97.67 ckpSignature = (CK_BYTE_PTR) malloc(ckSignatureLength * sizeof(CK_BYTE));
97.68 + if (ckpSignature == NULL) {
97.69 + free(ckpData);
97.70 + JNU_ThrowOutOfMemoryError(env, 0);
97.71 + return NULL;
97.72 + }
97.73 rv = (*ckpFunctions->C_Sign)(ckSessionHandle, ckpData, ckDataLength, ckpSignature, &ckSignatureLength);
97.74 }
97.75 */
97.76 /* END workaround code */
97.77 -
97.78 - jSignature = ckByteArrayToJByteArray(env, ckpSignature, ckSignatureLength);
97.79 + if (ckAssertReturnValueOK(env, rv) == CK_ASSERT_OK) {
97.80 + jSignature = ckByteArrayToJByteArray(env, ckpSignature, ckSignatureLength);
97.81 + }
97.82 free(ckpData);
97.83 free(ckpSignature);
97.84
97.85 - if(ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return NULL ; }
97.86 -
97.87 return jSignature ;
97.88 }
97.89 #endif
97.90 @@ -189,14 +208,22 @@
97.91 bufP = BUF;
97.92 } else {
97.93 bufLen = min(MAX_HEAP_BUFFER_LEN, jInLen);
97.94 - bufP = (CK_BYTE_PTR)malloc((size_t)bufLen);
97.95 + bufP = (CK_BYTE_PTR) malloc((size_t)bufLen);
97.96 + if (bufP == NULL) {
97.97 + JNU_ThrowOutOfMemoryError(env, 0);
97.98 + return;
97.99 + }
97.100 }
97.101
97.102 while (jInLen > 0) {
97.103 jsize chunkLen = min(bufLen, jInLen);
97.104 (*env)->GetByteArrayRegion(env, jIn, jInOfs, chunkLen, (jbyte *)bufP);
97.105 + if ((*env)->ExceptionCheck(env)) {
97.106 + if (bufP != BUF) { free(bufP); }
97.107 + return;
97.108 + }
97.109 rv = (*ckpFunctions->C_SignUpdate)(ckSessionHandle, bufP, chunkLen);
97.110 - if(ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) {
97.111 + if (ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) {
97.112 if (bufP != BUF) {
97.113 free(bufP);
97.114 }
97.115 @@ -206,9 +233,7 @@
97.116 jInLen -= chunkLen;
97.117 }
97.118
97.119 - if (bufP != BUF) {
97.120 - free(bufP);
97.121 - }
97.122 + if (bufP != BUF) { free(bufP); }
97.123 }
97.124 #endif
97.125
97.126 @@ -244,15 +269,18 @@
97.127 rv = (*ckpFunctions->C_SignFinal)(ckSessionHandle, bufP, &ckSignatureLength);
97.128 if (rv == CKR_BUFFER_TOO_SMALL) {
97.129 bufP = (CK_BYTE_PTR) malloc(ckSignatureLength);
97.130 + if (bufP == NULL) {
97.131 + JNU_ThrowOutOfMemoryError(env, 0);
97.132 + return NULL;
97.133 + }
97.134 rv = (*ckpFunctions->C_SignFinal)(ckSessionHandle, bufP, &ckSignatureLength);
97.135 }
97.136 if (ckAssertReturnValueOK(env, rv) == CK_ASSERT_OK) {
97.137 jSignature = ckByteArrayToJByteArray(env, bufP, ckSignatureLength);
97.138 }
97.139
97.140 - if (bufP != BUF) {
97.141 - free(bufP);
97.142 - }
97.143 + if (bufP != BUF) { free(bufP); }
97.144 +
97.145 return jSignature;
97.146 }
97.147 #endif
97.148 @@ -280,11 +308,13 @@
97.149
97.150 ckSessionHandle = jLongToCKULong(jSessionHandle);
97.151 jMechanismToCKMechanism(env, jMechanism, &ckMechanism);
97.152 + if ((*env)->ExceptionCheck(env)) { return; }
97.153 +
97.154 ckKeyHandle = jLongToCKULong(jKeyHandle);
97.155
97.156 rv = (*ckpFunctions->C_SignRecoverInit)(ckSessionHandle, &ckMechanism, ckKeyHandle);
97.157
97.158 - if(ckMechanism.pParameter != NULL_PTR) {
97.159 + if (ckMechanism.pParameter != NULL_PTR) {
97.160 free(ckMechanism.pParameter);
97.161 }
97.162
97.163 @@ -323,26 +353,38 @@
97.164 if (jInLen <= MAX_STACK_BUFFER_LEN) {
97.165 inBufP = INBUF;
97.166 } else {
97.167 - inBufP = (CK_BYTE_PTR)malloc((size_t)jInLen);
97.168 + inBufP = (CK_BYTE_PTR) malloc((size_t)jInLen);
97.169 + if (inBufP == NULL) {
97.170 + JNU_ThrowOutOfMemoryError(env, 0);
97.171 + return 0;
97.172 + }
97.173 }
97.174
97.175 (*env)->GetByteArrayRegion(env, jIn, jInOfs, jInLen, (jbyte *)inBufP);
97.176 + if ((*env)->ExceptionCheck(env)) {
97.177 + if (inBufP != INBUF) { free(inBufP); }
97.178 + return 0;
97.179 + }
97.180 rv = (*ckpFunctions->C_SignRecover)(ckSessionHandle, inBufP, jInLen, outBufP, &ckSignatureLength);
97.181 /* re-alloc larger buffer if it fits into our Java buffer */
97.182 if ((rv == CKR_BUFFER_TOO_SMALL) && (ckSignatureLength <= jIntToCKULong(jOutLen))) {
97.183 outBufP = (CK_BYTE_PTR) malloc(ckSignatureLength);
97.184 + if (outBufP == NULL) {
97.185 + if (inBufP != INBUF) {
97.186 + free(inBufP);
97.187 + }
97.188 + JNU_ThrowOutOfMemoryError(env, 0);
97.189 + return 0;
97.190 + }
97.191 rv = (*ckpFunctions->C_SignRecover)(ckSessionHandle, inBufP, jInLen, outBufP, &ckSignatureLength);
97.192 }
97.193 if (ckAssertReturnValueOK(env, rv) == CK_ASSERT_OK) {
97.194 (*env)->SetByteArrayRegion(env, jOut, jOutOfs, ckSignatureLength, (jbyte *)outBufP);
97.195 }
97.196
97.197 - if (inBufP != INBUF) {
97.198 - free(inBufP);
97.199 - }
97.200 - if (outBufP != OUTBUF) {
97.201 - free(outBufP);
97.202 - }
97.203 + if (inBufP != INBUF) { free(inBufP); }
97.204 + if (outBufP != OUTBUF) { free(outBufP); }
97.205 +
97.206 return ckSignatureLength;
97.207 }
97.208 #endif
97.209 @@ -370,6 +412,8 @@
97.210
97.211 ckSessionHandle = jLongToCKULong(jSessionHandle);
97.212 jMechanismToCKMechanism(env, jMechanism, &ckMechanism);
97.213 + if ((*env)->ExceptionCheck(env)) { return; }
97.214 +
97.215 ckKeyHandle = jLongToCKULong(jKeyHandle);
97.216
97.217 rv = (*ckpFunctions->C_VerifyInit)(ckSessionHandle, &ckMechanism, ckKeyHandle);
97.218 @@ -378,7 +422,7 @@
97.219 free(ckMechanism.pParameter);
97.220 }
97.221
97.222 - if(ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return; }
97.223 + if (ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return; }
97.224 }
97.225 #endif
97.226
97.227 @@ -409,7 +453,13 @@
97.228
97.229 ckSessionHandle = jLongToCKULong(jSessionHandle);
97.230 jByteArrayToCKByteArray(env, jData, &ckpData, &ckDataLength);
97.231 + if ((*env)->ExceptionCheck(env)) { return; }
97.232 +
97.233 jByteArrayToCKByteArray(env, jSignature, &ckpSignature, &ckSignatureLength);
97.234 + if ((*env)->ExceptionCheck(env)) {
97.235 + free(ckpData);
97.236 + return;
97.237 + }
97.238
97.239 /* verify the signature */
97.240 rv = (*ckpFunctions->C_Verify)(ckSessionHandle, ckpData, ckDataLength, ckpSignature, ckSignatureLength);
97.241 @@ -417,7 +467,7 @@
97.242 free(ckpData);
97.243 free(ckpSignature);
97.244
97.245 - if(ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return; }
97.246 + if (ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return; }
97.247 }
97.248 #endif
97.249
97.250 @@ -456,26 +506,31 @@
97.251 bufP = BUF;
97.252 } else {
97.253 bufLen = min(MAX_HEAP_BUFFER_LEN, jInLen);
97.254 - bufP = (CK_BYTE_PTR)malloc((size_t)bufLen);
97.255 + bufP = (CK_BYTE_PTR) malloc((size_t)bufLen);
97.256 + if (bufP == NULL) {
97.257 + JNU_ThrowOutOfMemoryError(env, 0);
97.258 + return;
97.259 + }
97.260 }
97.261
97.262 while (jInLen > 0) {
97.263 jsize chunkLen = min(bufLen, jInLen);
97.264 (*env)->GetByteArrayRegion(env, jIn, jInOfs, chunkLen, (jbyte *)bufP);
97.265 + if ((*env)->ExceptionCheck(env)) {
97.266 + if (bufP != BUF) { free(bufP); }
97.267 + return;
97.268 + }
97.269 +
97.270 rv = (*ckpFunctions->C_VerifyUpdate)(ckSessionHandle, bufP, chunkLen);
97.271 - if(ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) {
97.272 - if (bufP != BUF) {
97.273 - free(bufP);
97.274 - }
97.275 + if (ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) {
97.276 + if (bufP != BUF) { free(bufP); }
97.277 return;
97.278 }
97.279 jInOfs += chunkLen;
97.280 jInLen -= chunkLen;
97.281 }
97.282
97.283 - if (bufP != BUF) {
97.284 - free(bufP);
97.285 - }
97.286 + if (bufP != BUF) { free(bufP); }
97.287 }
97.288 #endif
97.289
97.290 @@ -502,13 +557,14 @@
97.291
97.292 ckSessionHandle = jLongToCKULong(jSessionHandle);
97.293 jByteArrayToCKByteArray(env, jSignature, &ckpSignature, &ckSignatureLength);
97.294 + if ((*env)->ExceptionCheck(env)) { return; }
97.295
97.296 /* verify the signature */
97.297 rv = (*ckpFunctions->C_VerifyFinal)(ckSessionHandle, ckpSignature, ckSignatureLength);
97.298
97.299 free(ckpSignature);
97.300
97.301 - if(ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return; }
97.302 + if (ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return; }
97.303 }
97.304 #endif
97.305
97.306 @@ -535,15 +591,17 @@
97.307
97.308 ckSessionHandle = jLongToCKULong(jSessionHandle);
97.309 jMechanismToCKMechanism(env, jMechanism, &ckMechanism);
97.310 + if ((*env)->ExceptionCheck(env)) { return; }
97.311 +
97.312 ckKeyHandle = jLongToCKULong(jKeyHandle);
97.313
97.314 rv = (*ckpFunctions->C_VerifyRecoverInit)(ckSessionHandle, &ckMechanism, ckKeyHandle);
97.315
97.316 - if(ckMechanism.pParameter != NULL_PTR) {
97.317 + if (ckMechanism.pParameter != NULL_PTR) {
97.318 free(ckMechanism.pParameter);
97.319 }
97.320
97.321 - if(ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return; }
97.322 + if (ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return; }
97.323 }
97.324 #endif
97.325
97.326 @@ -578,26 +636,38 @@
97.327 if (jInLen <= MAX_STACK_BUFFER_LEN) {
97.328 inBufP = INBUF;
97.329 } else {
97.330 - inBufP = (CK_BYTE_PTR)malloc((size_t)jInLen);
97.331 + inBufP = (CK_BYTE_PTR) malloc((size_t)jInLen);
97.332 + if (inBufP == NULL) {
97.333 + JNU_ThrowOutOfMemoryError(env, 0);
97.334 + return 0;
97.335 + }
97.336 }
97.337
97.338 (*env)->GetByteArrayRegion(env, jIn, jInOfs, jInLen, (jbyte *)inBufP);
97.339 + if ((*env)->ExceptionCheck(env)) {
97.340 + if (inBufP != INBUF) { free(inBufP); }
97.341 + return 0;
97.342 + }
97.343 +
97.344 rv = (*ckpFunctions->C_VerifyRecover)(ckSessionHandle, inBufP, jInLen, outBufP, &ckDataLength);
97.345 +
97.346 /* re-alloc larger buffer if it fits into our Java buffer */
97.347 if ((rv == CKR_BUFFER_TOO_SMALL) && (ckDataLength <= jIntToCKULong(jOutLen))) {
97.348 outBufP = (CK_BYTE_PTR) malloc(ckDataLength);
97.349 + if (outBufP == NULL) {
97.350 + if (inBufP != INBUF) { free(inBufP); }
97.351 + JNU_ThrowOutOfMemoryError(env, 0);
97.352 + return 0;
97.353 + }
97.354 rv = (*ckpFunctions->C_VerifyRecover)(ckSessionHandle, inBufP, jInLen, outBufP, &ckDataLength);
97.355 }
97.356 if (ckAssertReturnValueOK(env, rv) == CK_ASSERT_OK) {
97.357 (*env)->SetByteArrayRegion(env, jOut, jOutOfs, ckDataLength, (jbyte *)outBufP);
97.358 }
97.359
97.360 - if (inBufP != INBUF) {
97.361 - free(inBufP);
97.362 - }
97.363 - if (outBufP != OUTBUF) {
97.364 - free(outBufP);
97.365 - }
97.366 + if (inBufP != INBUF) { free(inBufP); }
97.367 + if (outBufP != OUTBUF) { free(outBufP); }
97.368 +
97.369 return ckDataLength;
97.370 }
97.371 #endif
98.1 --- a/src/share/native/sun/security/pkcs11/wrapper/p11_util.c Thu Apr 02 10:16:53 2009 -0700
98.2 +++ b/src/share/native/sun/security/pkcs11/wrapper/p11_util.c Wed Apr 08 15:40:56 2009 -0700
98.3 @@ -1,5 +1,5 @@
98.4 /*
98.5 - * Portions Copyright 2003 Sun Microsystems, Inc. All Rights Reserved.
98.6 + * Portions Copyright 2003-2009 Sun Microsystems, Inc. All Rights Reserved.
98.7 */
98.8
98.9 /* Copyright (c) 2002 Graz University of Technology. All rights reserved.
98.10 @@ -73,11 +73,11 @@
98.11 jmethodID jConstructor;
98.12
98.13 jObjectClass = (*env)->FindClass(env, "java/lang/Object");
98.14 - assert(jObjectClass != 0);
98.15 + if (jObjectClass == NULL) { return NULL; }
98.16 jConstructor = (*env)->GetMethodID(env, jObjectClass, "<init>", "()V");
98.17 - assert(jConstructor != 0);
98.18 + if (jConstructor == NULL) { return NULL; }
98.19 jLockObject = (*env)->NewObject(env, jObjectClass, jConstructor);
98.20 - assert(jLockObject != 0);
98.21 + if (jLockObject == NULL) { return NULL; }
98.22 jLockObject = (*env)->NewGlobalRef(env, jLockObject);
98.23
98.24 return jLockObject ;
98.25 @@ -200,84 +200,30 @@
98.26 return 0L ;
98.27 } else {
98.28 jPKCS11ExceptionClass = (*env)->FindClass(env, CLASS_PKCS11EXCEPTION);
98.29 - assert(jPKCS11ExceptionClass != 0);
98.30 - jConstructor = (*env)->GetMethodID(env, jPKCS11ExceptionClass, "<init>", "(J)V");
98.31 - assert(jConstructor != 0);
98.32 - jErrorCode = ckULongToJLong(returnValue);
98.33 - jPKCS11Exception = (jthrowable) (*env)->NewObject(env, jPKCS11ExceptionClass, jConstructor, jErrorCode);
98.34 - (*env)->Throw(env, jPKCS11Exception);
98.35 + if (jPKCS11ExceptionClass != NULL) {
98.36 + jConstructor = (*env)->GetMethodID(env, jPKCS11ExceptionClass, "<init>", "(J)V");
98.37 + if (jConstructor != NULL) {
98.38 + jErrorCode = ckULongToJLong(returnValue);
98.39 + jPKCS11Exception = (jthrowable) (*env)->NewObject(env, jPKCS11ExceptionClass, jConstructor, jErrorCode);
98.40 + if (jPKCS11Exception != NULL) {
98.41 + (*env)->Throw(env, jPKCS11Exception);
98.42 + }
98.43 + }
98.44 + }
98.45 + (*env)->DeleteLocalRef(env, jPKCS11ExceptionClass);
98.46 return jErrorCode ;
98.47 }
98.48 }
98.49
98.50 /*
98.51 - * this function simply throws a FileNotFoundException
98.52 - *
98.53 - * @param env Used to call JNI funktions and to get the Exception class.
98.54 - * @param jmessage The message string of the Exception object.
98.55 - */
98.56 -void throwFileNotFoundException(JNIEnv *env, jstring jmessage)
98.57 -{
98.58 - jclass jFileNotFoundExceptionClass;
98.59 - jmethodID jConstructor;
98.60 - jthrowable jFileNotFoundException;
98.61 -
98.62 - jFileNotFoundExceptionClass = (*env)->FindClass(env, CLASS_FILE_NOT_FOUND_EXCEPTION);
98.63 - assert(jFileNotFoundExceptionClass != 0);
98.64 -
98.65 - jConstructor = (*env)->GetMethodID(env, jFileNotFoundExceptionClass, "<init>", "(Ljava/lang/String;)V");
98.66 - assert(jConstructor != 0);
98.67 - jFileNotFoundException = (jthrowable) (*env)->NewObject(env, jFileNotFoundExceptionClass, jConstructor, jmessage);
98.68 - (*env)->Throw(env, jFileNotFoundException);
98.69 -}
98.70 -
98.71 -/*
98.72 - * this function simply throws an IOException
98.73 + * This function simply throws an IOException
98.74 *
98.75 * @param env Used to call JNI funktions and to get the Exception class.
98.76 * @param message The message string of the Exception object.
98.77 */
98.78 -void throwIOException(JNIEnv *env, const char * message)
98.79 +void throwIOException(JNIEnv *env, const char *message)
98.80 {
98.81 - jclass jIOExceptionClass;
98.82 -
98.83 - jIOExceptionClass = (*env)->FindClass(env, CLASS_IO_EXCEPTION);
98.84 - assert(jIOExceptionClass != 0);
98.85 -
98.86 - (*env)->ThrowNew(env, jIOExceptionClass, message);
98.87 -}
98.88 -
98.89 -/*
98.90 - * this function simply throws an IOException and takes a unicode
98.91 - * messge.
98.92 - *
98.93 - * @param env Used to call JNI funktions and to get the Exception class.
98.94 - * @param message The unicode message string of the Exception object.
98.95 - */
98.96 -void throwIOExceptionUnicodeMessage(JNIEnv *env, const short *message)
98.97 -{
98.98 - jclass jIOExceptionClass;
98.99 - jmethodID jConstructor;
98.100 - jthrowable jIOException;
98.101 - jstring jmessage;
98.102 - jsize length;
98.103 - short *currentCharacter;
98.104 -
98.105 - jIOExceptionClass = (*env)->FindClass(env, CLASS_IO_EXCEPTION);
98.106 - assert(jIOExceptionClass != 0);
98.107 -
98.108 - length = 0;
98.109 - if (message != NULL) {
98.110 - currentCharacter = (short *) message;
98.111 - while (*(currentCharacter++) != 0) length++;
98.112 - }
98.113 -
98.114 - jmessage = (*env)->NewString(env, (const jchar *)message, length);
98.115 -
98.116 - jConstructor = (*env)->GetMethodID(env, jIOExceptionClass, "<init>", "(Ljava/lang/String;)V");
98.117 - assert(jConstructor != 0);
98.118 - jIOException = (jthrowable) (*env)->NewObject(env, jIOExceptionClass, jConstructor, jmessage);
98.119 - (*env)->Throw(env, jIOException);
98.120 + JNU_ThrowByName(env, CLASS_IO_EXCEPTION, message);
98.121 }
98.122
98.123 /*
98.124 @@ -288,26 +234,9 @@
98.125 * @param env Used to call JNI funktions and to get the Exception class.
98.126 * @param jmessage The message string of the Exception object.
98.127 */
98.128 -void throwPKCS11RuntimeException(JNIEnv *env, jstring jmessage)
98.129 +void throwPKCS11RuntimeException(JNIEnv *env, const char *message)
98.130 {
98.131 - jclass jPKCS11RuntimeExceptionClass;
98.132 - jmethodID jConstructor;
98.133 - jthrowable jPKCS11RuntimeException;
98.134 -
98.135 - jPKCS11RuntimeExceptionClass = (*env)->FindClass(env, CLASS_PKCS11RUNTIMEEXCEPTION);
98.136 - assert(jPKCS11RuntimeExceptionClass != 0);
98.137 -
98.138 - if (jmessage == NULL) {
98.139 - jConstructor = (*env)->GetMethodID(env, jPKCS11RuntimeExceptionClass, "<init>", "()V");
98.140 - assert(jConstructor != 0);
98.141 - jPKCS11RuntimeException = (jthrowable) (*env)->NewObject(env, jPKCS11RuntimeExceptionClass, jConstructor);
98.142 - (*env)->Throw(env, jPKCS11RuntimeException);
98.143 - } else {
98.144 - jConstructor = (*env)->GetMethodID(env, jPKCS11RuntimeExceptionClass, "<init>", "(Ljava/lang/String;)V");
98.145 - assert(jConstructor != 0);
98.146 - jPKCS11RuntimeException = (jthrowable) (*env)->NewObject(env, jPKCS11RuntimeExceptionClass, jConstructor, jmessage);
98.147 - (*env)->Throw(env, jPKCS11RuntimeException);
98.148 - }
98.149 + JNU_ThrowByName(env, CLASS_PKCS11RUNTIMEEXCEPTION, message);
98.150 }
98.151
98.152 /*
98.153 @@ -318,9 +247,24 @@
98.154 */
98.155 void throwDisconnectedRuntimeException(JNIEnv *env)
98.156 {
98.157 - jstring jExceptionMessage = (*env)->NewStringUTF(env, "This object is not connected to a module.");
98.158 + throwPKCS11RuntimeException(env, "This object is not connected to a module.");
98.159 +}
98.160
98.161 - throwPKCS11RuntimeException(env, jExceptionMessage);
98.162 +/* This function frees the specified CK_ATTRIBUTE array.
98.163 + *
98.164 + * @param attrPtr pointer to the to-be-freed CK_ATTRIBUTE array.
98.165 + * @param len the length of the array
98.166 + */
98.167 +void freeCKAttributeArray(CK_ATTRIBUTE_PTR attrPtr, int len)
98.168 +{
98.169 + int i;
98.170 +
98.171 + for (i=0; i<len; i++) {
98.172 + if (attrPtr[i].pValue != NULL_PTR) {
98.173 + free(attrPtr[i].pValue);
98.174 + }
98.175 + }
98.176 + free(attrPtr);
98.177 }
98.178
98.179 /*
98.180 @@ -375,8 +319,22 @@
98.181 }
98.182 *ckpLength = (*env)->GetArrayLength(env, jArray);
98.183 jpTemp = (jboolean*) malloc((*ckpLength) * sizeof(jboolean));
98.184 + if (jpTemp == NULL) {
98.185 + JNU_ThrowOutOfMemoryError(env, 0);
98.186 + return;
98.187 + }
98.188 (*env)->GetBooleanArrayRegion(env, jArray, 0, *ckpLength, jpTemp);
98.189 + if ((*env)->ExceptionCheck(env)) {
98.190 + free(jpTemp);
98.191 + return;
98.192 + }
98.193 +
98.194 *ckpArray = (CK_BBOOL*) malloc ((*ckpLength) * sizeof(CK_BBOOL));
98.195 + if (*ckpArray == NULL) {
98.196 + free(jpTemp);
98.197 + JNU_ThrowOutOfMemoryError(env, 0);
98.198 + return;
98.199 + }
98.200 for (i=0; i<(*ckpLength); i++) {
98.201 (*ckpArray)[i] = jBooleanToCKBBool(jpTemp[i]);
98.202 }
98.203 @@ -403,13 +361,26 @@
98.204 }
98.205 *ckpLength = (*env)->GetArrayLength(env, jArray);
98.206 jpTemp = (jbyte*) malloc((*ckpLength) * sizeof(jbyte));
98.207 + if (jpTemp == NULL) {
98.208 + JNU_ThrowOutOfMemoryError(env, 0);
98.209 + return;
98.210 + }
98.211 (*env)->GetByteArrayRegion(env, jArray, 0, *ckpLength, jpTemp);
98.212 + if ((*env)->ExceptionCheck(env)) {
98.213 + free(jpTemp);
98.214 + return;
98.215 + }
98.216
98.217 /* if CK_BYTE is the same size as jbyte, we save an additional copy */
98.218 if (sizeof(CK_BYTE) == sizeof(jbyte)) {
98.219 *ckpArray = (CK_BYTE_PTR) jpTemp;
98.220 } else {
98.221 *ckpArray = (CK_BYTE_PTR) malloc ((*ckpLength) * sizeof(CK_BYTE));
98.222 + if (*ckpArray == NULL) {
98.223 + free(jpTemp);
98.224 + JNU_ThrowOutOfMemoryError(env, 0);
98.225 + return;
98.226 + }
98.227 for (i=0; i<(*ckpLength); i++) {
98.228 (*ckpArray)[i] = jByteToCKByte(jpTemp[i]);
98.229 }
98.230 @@ -437,8 +408,22 @@
98.231 }
98.232 *ckpLength = (*env)->GetArrayLength(env, jArray);
98.233 jTemp = (jlong*) malloc((*ckpLength) * sizeof(jlong));
98.234 + if (jTemp == NULL) {
98.235 + JNU_ThrowOutOfMemoryError(env, 0);
98.236 + return;
98.237 + }
98.238 (*env)->GetLongArrayRegion(env, jArray, 0, *ckpLength, jTemp);
98.239 + if ((*env)->ExceptionCheck(env)) {
98.240 + free(jTemp);
98.241 + return;
98.242 + }
98.243 +
98.244 *ckpArray = (CK_ULONG_PTR) malloc (*ckpLength * sizeof(CK_ULONG));
98.245 + if (*ckpArray == NULL) {
98.246 + free(jTemp);
98.247 + JNU_ThrowOutOfMemoryError(env, 0);
98.248 + return;
98.249 + }
98.250 for (i=0; i<(*ckpLength); i++) {
98.251 (*ckpArray)[i] = jLongToCKULong(jTemp[i]);
98.252 }
98.253 @@ -465,8 +450,22 @@
98.254 }
98.255 *ckpLength = (*env)->GetArrayLength(env, jArray);
98.256 jpTemp = (jchar*) malloc((*ckpLength) * sizeof(jchar));
98.257 + if (jpTemp == NULL) {
98.258 + JNU_ThrowOutOfMemoryError(env, 0);
98.259 + return;
98.260 + }
98.261 (*env)->GetCharArrayRegion(env, jArray, 0, *ckpLength, jpTemp);
98.262 + if ((*env)->ExceptionCheck(env)) {
98.263 + free(jpTemp);
98.264 + return;
98.265 + }
98.266 +
98.267 *ckpArray = (CK_CHAR_PTR) malloc (*ckpLength * sizeof(CK_CHAR));
98.268 + if (*ckpArray == NULL) {
98.269 + free(jpTemp);
98.270 + JNU_ThrowOutOfMemoryError(env, 0);
98.271 + return;
98.272 + }
98.273 for (i=0; i<(*ckpLength); i++) {
98.274 (*ckpArray)[i] = jCharToCKChar(jpTemp[i]);
98.275 }
98.276 @@ -493,8 +492,22 @@
98.277 }
98.278 *ckpLength = (*env)->GetArrayLength(env, jArray);
98.279 jTemp = (jchar*) malloc((*ckpLength) * sizeof(jchar));
98.280 + if (jTemp == NULL) {
98.281 + JNU_ThrowOutOfMemoryError(env, 0);
98.282 + return;
98.283 + }
98.284 (*env)->GetCharArrayRegion(env, jArray, 0, *ckpLength, jTemp);
98.285 + if ((*env)->ExceptionCheck(env)) {
98.286 + free(jTemp);
98.287 + return;
98.288 + }
98.289 +
98.290 *ckpArray = (CK_UTF8CHAR_PTR) malloc (*ckpLength * sizeof(CK_UTF8CHAR));
98.291 + if (*ckpArray == NULL) {
98.292 + free(jTemp);
98.293 + JNU_ThrowOutOfMemoryError(env, 0);
98.294 + return;
98.295 + }
98.296 for (i=0; i<(*ckpLength); i++) {
98.297 (*ckpArray)[i] = jCharToCKUTF8Char(jTemp[i]);
98.298 }
98.299 @@ -521,8 +534,15 @@
98.300 }
98.301
98.302 pCharArray = (*env)->GetStringUTFChars(env, jArray, &isCopy);
98.303 + if (pCharArray == NULL) { return; }
98.304 +
98.305 *ckpLength = strlen(pCharArray);
98.306 *ckpArray = (CK_UTF8CHAR_PTR) malloc((*ckpLength + 1) * sizeof(CK_UTF8CHAR));
98.307 + if (*ckpArray == NULL) {
98.308 + (*env)->ReleaseStringUTFChars(env, (jstring) jArray, pCharArray);
98.309 + JNU_ThrowOutOfMemoryError(env, 0);
98.310 + return;
98.311 + }
98.312 strcpy((char*)*ckpArray, pCharArray);
98.313 (*env)->ReleaseStringUTFChars(env, (jstring) jArray, pCharArray);
98.314 }
98.315 @@ -552,55 +572,36 @@
98.316 jLength = (*env)->GetArrayLength(env, jArray);
98.317 *ckpLength = jLongToCKULong(jLength);
98.318 *ckpArray = (CK_ATTRIBUTE_PTR) malloc(*ckpLength * sizeof(CK_ATTRIBUTE));
98.319 + if (*ckpArray == NULL) {
98.320 + JNU_ThrowOutOfMemoryError(env, 0);
98.321 + return;
98.322 + }
98.323 TRACE1(", converting %d attibutes", jLength);
98.324 for (i=0; i<(*ckpLength); i++) {
98.325 TRACE1(", getting %d. attibute", i);
98.326 jAttribute = (*env)->GetObjectArrayElement(env, jArray, i);
98.327 + if ((*env)->ExceptionCheck(env)) {
98.328 + freeCKAttributeArray(*ckpArray, i);
98.329 + return;
98.330 + }
98.331 TRACE1(", jAttribute = %d", jAttribute);
98.332 TRACE1(", converting %d. attibute", i);
98.333 (*ckpArray)[i] = jAttributeToCKAttribute(env, jAttribute);
98.334 + if ((*env)->ExceptionCheck(env)) {
98.335 + freeCKAttributeArray(*ckpArray, i);
98.336 + return;
98.337 + }
98.338 }
98.339 TRACE0("FINISHED\n");
98.340 }
98.341
98.342 /*
98.343 - * converts a jobjectArray to a CK_VOID_PTR array. The allocated memory has to be freed after
98.344 - * use!
98.345 - * NOTE: this function does not work and is not used yet
98.346 - *
98.347 - * @param env - used to call JNI funktions to get the array informtaion
98.348 - * @param jArray - the Java object array to convert
98.349 - * @param ckpArray - the reference, where the pointer to the new CK_VOID_PTR array will be stored
98.350 - * @param ckpLength - the reference, where the array length will be stored
98.351 - */
98.352 -/*
98.353 -void jObjectArrayToCKVoidPtrArray(JNIEnv *env, const jobjectArray jArray, CK_VOID_PTR_PTR *ckpArray, CK_ULONG_PTR ckpLength)
98.354 -{
98.355 - jobject jTemp;
98.356 - CK_ULONG i;
98.357 -
98.358 - if(jArray == NULL) {
98.359 - *ckpArray = NULL_PTR;
98.360 - *ckpLength = 0L;
98.361 - return;
98.362 - }
98.363 - *ckpLength = (*env)->GetArrayLength(env, jArray);
98.364 - *ckpArray = (CK_VOID_PTR_PTR) malloc (*ckpLength * sizeof(CK_VOID_PTR));
98.365 - for (i=0; i<(*ckpLength); i++) {
98.366 - jTemp = (*env)->GetObjectArrayElement(env, jArray, i);
98.367 - (*ckpArray)[i] = jObjectToCKVoidPtr(jTemp);
98.368 - }
98.369 - free(jTemp);
98.370 -}
98.371 -*/
98.372 -
98.373 -/*
98.374 * converts a CK_BYTE array and its length to a jbyteArray.
98.375 *
98.376 * @param env - used to call JNI funktions to create the new Java array
98.377 * @param ckpArray - the pointer to the CK_BYTE array to convert
98.378 * @param ckpLength - the length of the array to convert
98.379 - * @return - the new Java byte array
98.380 + * @return - the new Java byte array or NULL if error occurred
98.381 */
98.382 jbyteArray ckByteArrayToJByteArray(JNIEnv *env, const CK_BYTE_PTR ckpArray, CK_ULONG ckLength)
98.383 {
98.384 @@ -613,17 +614,21 @@
98.385 jpTemp = (jbyte*) ckpArray;
98.386 } else {
98.387 jpTemp = (jbyte*) malloc((ckLength) * sizeof(jbyte));
98.388 + if (jpTemp == NULL) {
98.389 + JNU_ThrowOutOfMemoryError(env, 0);
98.390 + return NULL;
98.391 + }
98.392 for (i=0; i<ckLength; i++) {
98.393 jpTemp[i] = ckByteToJByte(ckpArray[i]);
98.394 }
98.395 }
98.396
98.397 jArray = (*env)->NewByteArray(env, ckULongToJSize(ckLength));
98.398 - (*env)->SetByteArrayRegion(env, jArray, 0, ckULongToJSize(ckLength), jpTemp);
98.399 + if (jArray != NULL) {
98.400 + (*env)->SetByteArrayRegion(env, jArray, 0, ckULongToJSize(ckLength), jpTemp);
98.401 + }
98.402
98.403 - if (sizeof(CK_BYTE) != sizeof(jbyte)) {
98.404 - free(jpTemp);
98.405 - }
98.406 + if (sizeof(CK_BYTE) != sizeof(jbyte)) { free(jpTemp); }
98.407
98.408 return jArray ;
98.409 }
98.410 @@ -643,11 +648,17 @@
98.411 jlongArray jArray;
98.412
98.413 jpTemp = (jlong*) malloc((ckLength) * sizeof(jlong));
98.414 + if (jpTemp == NULL) {
98.415 + JNU_ThrowOutOfMemoryError(env, 0);
98.416 + return NULL;
98.417 + }
98.418 for (i=0; i<ckLength; i++) {
98.419 jpTemp[i] = ckLongToJLong(ckpArray[i]);
98.420 }
98.421 jArray = (*env)->NewLongArray(env, ckULongToJSize(ckLength));
98.422 - (*env)->SetLongArrayRegion(env, jArray, 0, ckULongToJSize(ckLength), jpTemp);
98.423 + if (jArray != NULL) {
98.424 + (*env)->SetLongArrayRegion(env, jArray, 0, ckULongToJSize(ckLength), jpTemp);
98.425 + }
98.426 free(jpTemp);
98.427
98.428 return jArray ;
98.429 @@ -668,11 +679,17 @@
98.430 jcharArray jArray;
98.431
98.432 jpTemp = (jchar*) malloc(ckLength * sizeof(jchar));
98.433 + if (jpTemp == NULL) {
98.434 + JNU_ThrowOutOfMemoryError(env, 0);
98.435 + return NULL;
98.436 + }
98.437 for (i=0; i<ckLength; i++) {
98.438 jpTemp[i] = ckCharToJChar(ckpArray[i]);
98.439 }
98.440 jArray = (*env)->NewCharArray(env, ckULongToJSize(ckLength));
98.441 - (*env)->SetCharArrayRegion(env, jArray, 0, ckULongToJSize(ckLength), jpTemp);
98.442 + if (jArray != NULL) {
98.443 + (*env)->SetCharArrayRegion(env, jArray, 0, ckULongToJSize(ckLength), jpTemp);
98.444 + }
98.445 free(jpTemp);
98.446
98.447 return jArray ;
98.448 @@ -693,11 +710,17 @@
98.449 jcharArray jArray;
98.450
98.451 jpTemp = (jchar*) malloc(ckLength * sizeof(jchar));
98.452 + if (jpTemp == NULL) {
98.453 + JNU_ThrowOutOfMemoryError(env, 0);
98.454 + return NULL;
98.455 + }
98.456 for (i=0; i<ckLength; i++) {
98.457 jpTemp[i] = ckUTF8CharToJChar(ckpArray[i]);
98.458 }
98.459 jArray = (*env)->NewCharArray(env, ckULongToJSize(ckLength));
98.460 - (*env)->SetCharArrayRegion(env, jArray, 0, ckULongToJSize(ckLength), jpTemp);
98.461 + if (jArray != NULL) {
98.462 + (*env)->SetCharArrayRegion(env, jArray, 0, ckULongToJSize(ckLength), jpTemp);
98.463 + }
98.464 free(jpTemp);
98.465
98.466 return jArray ;
98.467 @@ -736,12 +759,11 @@
98.468 jboolean jValue;
98.469
98.470 jValueObjectClass = (*env)->FindClass(env, "java/lang/Boolean");
98.471 - assert(jValueObjectClass != 0);
98.472 + if (jValueObjectClass == NULL) { return NULL; }
98.473 jConstructor = (*env)->GetMethodID(env, jValueObjectClass, "<init>", "(Z)V");
98.474 - assert(jConstructor != 0);
98.475 + if (jConstructor == NULL) { return NULL; }
98.476 jValue = ckBBoolToJBoolean(*ckpValue);
98.477 jValueObject = (*env)->NewObject(env, jValueObjectClass, jConstructor, jValue);
98.478 - assert(jValueObject != 0);
98.479
98.480 return jValueObject ;
98.481 }
98.482 @@ -761,12 +783,11 @@
98.483 jlong jValue;
98.484
98.485 jValueObjectClass = (*env)->FindClass(env, "java/lang/Long");
98.486 - assert(jValueObjectClass != 0);
98.487 + if (jValueObjectClass == NULL) { return NULL; }
98.488 jConstructor = (*env)->GetMethodID(env, jValueObjectClass, "<init>", "(J)V");
98.489 - assert(jConstructor != 0);
98.490 + if (jConstructor == NULL) { return NULL; }
98.491 jValue = ckULongToJLong(*ckpValue);
98.492 jValueObject = (*env)->NewObject(env, jValueObjectClass, jConstructor, jValue);
98.493 - assert(jValueObject != 0);
98.494
98.495 return jValueObject ;
98.496 }
98.497 @@ -787,11 +808,15 @@
98.498 CK_BBOOL *ckpValue;
98.499
98.500 jObjectClass = (*env)->FindClass(env, "java/lang/Boolean");
98.501 - assert(jObjectClass != 0);
98.502 + if (jObjectClass == NULL) { return NULL; }
98.503 jValueMethod = (*env)->GetMethodID(env, jObjectClass, "booleanValue", "()Z");
98.504 - assert(jValueMethod != 0);
98.505 + if (jValueMethod == NULL) { return NULL; }
98.506 jValue = (*env)->CallBooleanMethod(env, jObject, jValueMethod);
98.507 ckpValue = (CK_BBOOL *) malloc(sizeof(CK_BBOOL));
98.508 + if (ckpValue == NULL) {
98.509 + JNU_ThrowOutOfMemoryError(env, 0);
98.510 + return NULL;
98.511 + }
98.512 *ckpValue = jBooleanToCKBBool(jValue);
98.513
98.514 return ckpValue ;
98.515 @@ -813,13 +838,16 @@
98.516 CK_BYTE_PTR ckpValue;
98.517
98.518 jObjectClass = (*env)->FindClass(env, "java/lang/Byte");
98.519 - assert(jObjectClass != 0);
98.520 + if (jObjectClass == NULL) { return NULL; }
98.521 jValueMethod = (*env)->GetMethodID(env, jObjectClass, "byteValue", "()B");
98.522 - assert(jValueMethod != 0);
98.523 + if (jValueMethod == NULL) { return NULL; }
98.524 jValue = (*env)->CallByteMethod(env, jObject, jValueMethod);
98.525 ckpValue = (CK_BYTE_PTR) malloc(sizeof(CK_BYTE));
98.526 + if (ckpValue == NULL) {
98.527 + JNU_ThrowOutOfMemoryError(env, 0);
98.528 + return NULL;
98.529 + }
98.530 *ckpValue = jByteToCKByte(jValue);
98.531 -
98.532 return ckpValue ;
98.533 }
98.534
98.535 @@ -839,13 +867,16 @@
98.536 CK_ULONG *ckpValue;
98.537
98.538 jObjectClass = (*env)->FindClass(env, "java/lang/Integer");
98.539 - assert(jObjectClass != 0);
98.540 + if (jObjectClass == NULL) { return NULL; }
98.541 jValueMethod = (*env)->GetMethodID(env, jObjectClass, "intValue", "()I");
98.542 - assert(jValueMethod != 0);
98.543 + if (jValueMethod == NULL) { return NULL; }
98.544 jValue = (*env)->CallIntMethod(env, jObject, jValueMethod);
98.545 ckpValue = (CK_ULONG *) malloc(sizeof(CK_ULONG));
98.546 + if (ckpValue == NULL) {
98.547 + JNU_ThrowOutOfMemoryError(env, 0);
98.548 + return NULL;
98.549 + }
98.550 *ckpValue = jLongToCKLong(jValue);
98.551 -
98.552 return ckpValue ;
98.553 }
98.554
98.555 @@ -865,11 +896,15 @@
98.556 CK_ULONG *ckpValue;
98.557
98.558 jObjectClass = (*env)->FindClass(env, "java/lang/Long");
98.559 - assert(jObjectClass != 0);
98.560 + if (jObjectClass == NULL) { return NULL; }
98.561 jValueMethod = (*env)->GetMethodID(env, jObjectClass, "longValue", "()J");
98.562 - assert(jValueMethod != 0);
98.563 + if (jValueMethod == NULL) { return NULL; }
98.564 jValue = (*env)->CallLongMethod(env, jObject, jValueMethod);
98.565 ckpValue = (CK_ULONG *) malloc(sizeof(CK_ULONG));
98.566 + if (ckpValue == NULL) {
98.567 + JNU_ThrowOutOfMemoryError(env, 0);
98.568 + return NULL;
98.569 + }
98.570 *ckpValue = jLongToCKULong(jValue);
98.571
98.572 return ckpValue ;
98.573 @@ -891,11 +926,15 @@
98.574 CK_CHAR_PTR ckpValue;
98.575
98.576 jObjectClass = (*env)->FindClass(env, "java/lang/Char");
98.577 - assert(jObjectClass != 0);
98.578 + if (jObjectClass == NULL) { return NULL; }
98.579 jValueMethod = (*env)->GetMethodID(env, jObjectClass, "charValue", "()C");
98.580 - assert(jValueMethod != 0);
98.581 + if (jValueMethod == NULL) { return NULL; }
98.582 jValue = (*env)->CallCharMethod(env, jObject, jValueMethod);
98.583 ckpValue = (CK_CHAR_PTR) malloc(sizeof(CK_CHAR));
98.584 + if (ckpValue == NULL) {
98.585 + JNU_ThrowOutOfMemoryError(env, 0);
98.586 + return NULL;
98.587 + }
98.588 *ckpValue = jCharToCKChar(jValue);
98.589
98.590 return ckpValue ;
98.591 @@ -913,124 +952,172 @@
98.592 */
98.593 void jObjectToPrimitiveCKObjectPtrPtr(JNIEnv *env, jobject jObject, CK_VOID_PTR *ckpObjectPtr, CK_ULONG *ckpLength)
98.594 {
98.595 - jclass jBooleanClass = (*env)->FindClass(env, "java/lang/Boolean");
98.596 - jclass jByteClass = (*env)->FindClass(env, "java/lang/Byte");
98.597 - jclass jCharacterClass = (*env)->FindClass(env, "java/lang/Character");
98.598 - jclass jClassClass = (*env)->FindClass(env, "java/lang/Class");
98.599 - /* jclass jShortClass = (*env)->FindClass(env, "java/lang/Short"); */
98.600 - jclass jIntegerClass = (*env)->FindClass(env, "java/lang/Integer");
98.601 - jclass jLongClass = (*env)->FindClass(env, "java/lang/Long");
98.602 - /* jclass jFloatClass = (*env)->FindClass(env, "java/lang/Float"); */
98.603 - /* jclass jDoubleClass = (*env)->FindClass(env, "java/lang/Double"); */
98.604 - jclass jDateClass = (*env)->FindClass(env, CLASS_DATE);
98.605 - jclass jStringClass = (*env)->FindClass(env, "java/lang/String");
98.606 - jclass jStringBufferClass = (*env)->FindClass(env, "java/lang/StringBuffer");
98.607 - jclass jBooleanArrayClass = (*env)->FindClass(env, "[Z");
98.608 - jclass jByteArrayClass = (*env)->FindClass(env, "[B");
98.609 - jclass jCharArrayClass = (*env)->FindClass(env, "[C");
98.610 - /* jclass jShortArrayClass = (*env)->FindClass(env, "[S"); */
98.611 - jclass jIntArrayClass = (*env)->FindClass(env, "[I");
98.612 - jclass jLongArrayClass = (*env)->FindClass(env, "[J");
98.613 - /* jclass jFloatArrayClass = (*env)->FindClass(env, "[F"); */
98.614 - /* jclass jDoubleArrayClass = (*env)->FindClass(env, "[D"); */
98.615 - jclass jObjectClass = (*env)->FindClass(env, "java/lang/Object");
98.616 - /* jclass jObjectArrayClass = (*env)->FindClass(env, "[java/lang/Object"); */
98.617 - /* ATTENTION: jObjectArrayClass is always NULL !! */
98.618 - /* CK_ULONG ckArrayLength; */
98.619 - /* CK_VOID_PTR *ckpElementObject; */
98.620 - /* CK_ULONG ckElementLength; */
98.621 - /* CK_ULONG i; */
98.622 + jclass jLongClass, jBooleanClass, jByteArrayClass, jCharArrayClass;
98.623 + jclass jByteClass, jDateClass, jCharacterClass, jIntegerClass;
98.624 + jclass jBooleanArrayClass, jIntArrayClass, jLongArrayClass;
98.625 + jclass jStringClass;
98.626 + jclass jObjectClass, jClassClass;
98.627 CK_VOID_PTR ckpVoid = *ckpObjectPtr;
98.628 jmethodID jMethod;
98.629 jobject jClassObject;
98.630 jstring jClassNameString;
98.631 - jstring jExceptionMessagePrefix;
98.632 - jobject jExceptionMessageStringBuffer;
98.633 - jstring jExceptionMessage;
98.634 + char *classNameString, *exceptionMsgPrefix, *exceptionMsg;
98.635
98.636 TRACE0("\nDEBUG: jObjectToPrimitiveCKObjectPtrPtr");
98.637 if (jObject == NULL) {
98.638 *ckpObjectPtr = NULL;
98.639 *ckpLength = 0;
98.640 - } else if ((*env)->IsInstanceOf(env, jObject, jLongClass)) {
98.641 + return;
98.642 + }
98.643 +
98.644 + jLongClass = (*env)->FindClass(env, "java/lang/Long");
98.645 + if (jLongClass == NULL) { return; }
98.646 + if ((*env)->IsInstanceOf(env, jObject, jLongClass)) {
98.647 *ckpObjectPtr = jLongObjectToCKULongPtr(env, jObject);
98.648 *ckpLength = sizeof(CK_ULONG);
98.649 TRACE1("<converted long value %X>", *((CK_ULONG *) *ckpObjectPtr));
98.650 - } else if ((*env)->IsInstanceOf(env, jObject, jBooleanClass)) {
98.651 + return;
98.652 + }
98.653 +
98.654 + jBooleanClass = (*env)->FindClass(env, "java/lang/Boolean");
98.655 + if (jBooleanClass == NULL) { return; }
98.656 + if ((*env)->IsInstanceOf(env, jObject, jBooleanClass)) {
98.657 *ckpObjectPtr = jBooleanObjectToCKBBoolPtr(env, jObject);
98.658 *ckpLength = sizeof(CK_BBOOL);
98.659 TRACE0(" <converted boolean value ");
98.660 TRACE0((*((CK_BBOOL *) *ckpObjectPtr) == TRUE) ? "TRUE>" : "FALSE>");
98.661 - } else if ((*env)->IsInstanceOf(env, jObject, jByteArrayClass)) {
98.662 + return;
98.663 + }
98.664 +
98.665 + jByteArrayClass = (*env)->FindClass(env, "[B");
98.666 + if (jByteArrayClass == NULL) { return; }
98.667 + if ((*env)->IsInstanceOf(env, jObject, jByteArrayClass)) {
98.668 jByteArrayToCKByteArray(env, jObject, (CK_BYTE_PTR*)ckpObjectPtr, ckpLength);
98.669 - } else if ((*env)->IsInstanceOf(env, jObject, jCharArrayClass)) {
98.670 + return;
98.671 + }
98.672 +
98.673 + jCharArrayClass = (*env)->FindClass(env, "[C");
98.674 + if (jCharArrayClass == NULL) { return; }
98.675 + if ((*env)->IsInstanceOf(env, jObject, jCharArrayClass)) {
98.676 jCharArrayToCKUTF8CharArray(env, jObject, (CK_UTF8CHAR_PTR*)ckpObjectPtr, ckpLength);
98.677 - } else if ((*env)->IsInstanceOf(env, jObject, jByteClass)) {
98.678 + return;
98.679 + }
98.680 +
98.681 + jByteClass = (*env)->FindClass(env, "java/lang/Byte");
98.682 + if (jByteClass == NULL) { return; }
98.683 + if ((*env)->IsInstanceOf(env, jObject, jByteClass)) {
98.684 *ckpObjectPtr = jByteObjectToCKBytePtr(env, jObject);
98.685 *ckpLength = sizeof(CK_BYTE);
98.686 TRACE1("<converted byte value %X>", *((CK_BYTE *) *ckpObjectPtr));
98.687 - } else if ((*env)->IsInstanceOf(env, jObject, jDateClass)) {
98.688 + return;
98.689 + }
98.690 +
98.691 + jDateClass = (*env)->FindClass(env, CLASS_DATE);
98.692 + if (jDateClass == NULL) { return; }
98.693 + if ((*env)->IsInstanceOf(env, jObject, jDateClass)) {
98.694 *ckpObjectPtr = jDateObjectPtrToCKDatePtr(env, jObject);
98.695 *ckpLength = sizeof(CK_DATE);
98.696 - TRACE3("<converted date value %.4s-%.2s-%.2s>", (*((CK_DATE *) *ckpObjectPtr)).year,
98.697 - (*((CK_DATE *) *ckpObjectPtr)).month,
98.698 - (*((CK_DATE *) *ckpObjectPtr)).day);
98.699 - } else if ((*env)->IsInstanceOf(env, jObject, jCharacterClass)) {
98.700 + TRACE3("<converted date value %.4s-%.2s-%.2s>", (*((CK_DATE *) *ckpObjectPtr)).year, (*((CK_DATE *) *ckpObjectPtr)).month, (*((CK_DATE *) *ckpObjectPtr)).day);
98.701 + return;
98.702 + }
98.703 +
98.704 + jCharacterClass = (*env)->FindClass(env, "java/lang/Character");
98.705 + if (jCharacterClass == NULL) { return; }
98.706 + if ((*env)->IsInstanceOf(env, jObject, jCharacterClass)) {
98.707 *ckpObjectPtr = jCharObjectToCKCharPtr(env, jObject);
98.708 *ckpLength = sizeof(CK_UTF8CHAR);
98.709 TRACE1("<converted char value %c>", *((CK_CHAR *) *ckpObjectPtr));
98.710 - } else if ((*env)->IsInstanceOf(env, jObject, jIntegerClass)) {
98.711 + return;
98.712 + }
98.713 +
98.714 + jIntegerClass = (*env)->FindClass(env, "java/lang/Integer");
98.715 + if (jIntegerClass == NULL) { return; }
98.716 + if ((*env)->IsInstanceOf(env, jObject, jIntegerClass)) {
98.717 *ckpObjectPtr = jIntegerObjectToCKULongPtr(env, jObject);
98.718 *ckpLength = sizeof(CK_ULONG);
98.719 TRACE1("<converted integer value %X>", *((CK_ULONG *) *ckpObjectPtr));
98.720 - } else if ((*env)->IsInstanceOf(env, jObject, jBooleanArrayClass)) {
98.721 + return;
98.722 + }
98.723 +
98.724 + jBooleanArrayClass = (*env)->FindClass(env, "[Z");
98.725 + if (jBooleanArrayClass == NULL) { return; }
98.726 + if ((*env)->IsInstanceOf(env, jObject, jBooleanArrayClass)) {
98.727 jBooleanArrayToCKBBoolArray(env, jObject, (CK_BBOOL**)ckpObjectPtr, ckpLength);
98.728 - } else if ((*env)->IsInstanceOf(env, jObject, jIntArrayClass)) {
98.729 + return;
98.730 + }
98.731 +
98.732 + jIntArrayClass = (*env)->FindClass(env, "[I");
98.733 + if (jIntArrayClass == NULL) { return; }
98.734 + if ((*env)->IsInstanceOf(env, jObject, jIntArrayClass)) {
98.735 jLongArrayToCKULongArray(env, jObject, (CK_ULONG_PTR*)ckpObjectPtr, ckpLength);
98.736 - } else if ((*env)->IsInstanceOf(env, jObject, jLongArrayClass)) {
98.737 + return;
98.738 + }
98.739 +
98.740 + jLongArrayClass = (*env)->FindClass(env, "[J");
98.741 + if (jLongArrayClass == NULL) { return; }
98.742 + if ((*env)->IsInstanceOf(env, jObject, jLongArrayClass)) {
98.743 jLongArrayToCKULongArray(env, jObject, (CK_ULONG_PTR*)ckpObjectPtr, ckpLength);
98.744 - } else if ((*env)->IsInstanceOf(env, jObject, jStringClass)) {
98.745 + return;
98.746 + }
98.747 +
98.748 + jStringClass = (*env)->FindClass(env, "java/lang/String");
98.749 + if (jStringClass == NULL) { return; }
98.750 + if ((*env)->IsInstanceOf(env, jObject, jStringClass)) {
98.751 jStringToCKUTF8CharArray(env, jObject, (CK_UTF8CHAR_PTR*)ckpObjectPtr, ckpLength);
98.752 + return;
98.753 + }
98.754
98.755 - /* a Java object array is not used by CK_ATTRIBUTE by now... */
98.756 -/* } else if ((*env)->IsInstanceOf(env, jObject, jObjectArrayClass)) {
98.757 - ckArrayLength = (*env)->GetArrayLength(env, (jarray) jObject);
98.758 - ckpObjectPtr = (CK_VOID_PTR_PTR) malloc(sizeof(CK_VOID_PTR) * ckArrayLength);
98.759 - *ckpLength = 0;
98.760 - for (i = 0; i < ckArrayLength; i++) {
98.761 - jObjectToPrimitiveCKObjectPtrPtr(env, (*env)->GetObjectArrayElement(env, (jarray) jObject, i),
98.762 - ckpElementObject, &ckElementLength);
98.763 - (*ckpObjectPtr)[i] = *ckpElementObject;
98.764 - *ckpLength += ckElementLength;
98.765 - }
98.766 -*/
98.767 - } else {
98.768 - /* type of jObject unknown, throw PKCS11RuntimeException */
98.769 - jMethod = (*env)->GetMethodID(env, jObjectClass, "getClass", "()Ljava/lang/Class;");
98.770 - assert(jMethod != 0);
98.771 - jClassObject = (*env)->CallObjectMethod(env, jObject, jMethod);
98.772 - assert(jClassObject != 0);
98.773 - jMethod = (*env)->GetMethodID(env, jClassClass, "getName", "()Ljava/lang/String;");
98.774 - assert(jMethod != 0);
98.775 - jClassNameString = (jstring)
98.776 - (*env)->CallObjectMethod(env, jClassObject, jMethod);
98.777 - assert(jClassNameString != 0);
98.778 - jExceptionMessagePrefix = (*env)->NewStringUTF(env, "Java object of this class cannot be converted to native PKCS#11 type: ");
98.779 - jMethod = (*env)->GetMethodID(env, jStringBufferClass, "<init>", "(Ljava/lang/String;)V");
98.780 - assert(jMethod != 0);
98.781 - jExceptionMessageStringBuffer = (*env)->NewObject(env, jStringBufferClass, jMethod, jExceptionMessagePrefix);
98.782 - assert(jClassNameString != 0);
98.783 - jMethod = (*env)->GetMethodID(env, jStringBufferClass, "append", "(Ljava/lang/String;)Ljava/lang/StringBuffer;");
98.784 - assert(jMethod != 0);
98.785 - jExceptionMessage = (jstring)
98.786 - (*env)->CallObjectMethod(env, jExceptionMessageStringBuffer, jMethod, jClassNameString);
98.787 - assert(jExceptionMessage != 0);
98.788 -
98.789 - throwPKCS11RuntimeException(env, jExceptionMessage);
98.790 -
98.791 - *ckpObjectPtr = NULL;
98.792 - *ckpLength = 0;
98.793 + /* type of jObject unknown, throw PKCS11RuntimeException */
98.794 + jObjectClass = (*env)->FindClass(env, "java/lang/Object");
98.795 + if (jObjectClass == NULL) { return; }
98.796 + jMethod = (*env)->GetMethodID(env, jObjectClass, "getClass", "()Ljava/lang/Class;");
98.797 + if (jMethod == NULL) { return; }
98.798 + jClassObject = (*env)->CallObjectMethod(env, jObject, jMethod);
98.799 + assert(jClassObject != 0);
98.800 + jClassClass = (*env)->FindClass(env, "java/lang/Class");
98.801 + if (jClassClass == NULL) { return; }
98.802 + jMethod = (*env)->GetMethodID(env, jClassClass, "getName", "()Ljava/lang/String;");
98.803 + if (jMethod == NULL) { return; }
98.804 + jClassNameString = (jstring)
98.805 + (*env)->CallObjectMethod(env, jClassObject, jMethod);
98.806 + assert(jClassNameString != 0);
98.807 + classNameString = (char*)
98.808 + (*env)->GetStringUTFChars(env, jClassNameString, NULL);
98.809 + if (classNameString == NULL) { return; }
98.810 + exceptionMsgPrefix = "Java object of this class cannot be converted to native PKCS#11 type: ";
98.811 + exceptionMsg = (char *)
98.812 + malloc((strlen(exceptionMsgPrefix) + strlen(classNameString) + 1));
98.813 + if (exceptionMsg == NULL) {
98.814 + (*env)->ReleaseStringUTFChars(env, jClassNameString, classNameString);
98.815 + JNU_ThrowOutOfMemoryError(env, 0);
98.816 + return;
98.817 }
98.818 + strcpy(exceptionMsg, exceptionMsgPrefix);
98.819 + strcat(exceptionMsg, classNameString);
98.820 + (*env)->ReleaseStringUTFChars(env, jClassNameString, classNameString);
98.821 + throwPKCS11RuntimeException(env, exceptionMsg);
98.822 + free(exceptionMsg);
98.823 + *ckpObjectPtr = NULL;
98.824 + *ckpLength = 0;
98.825
98.826 TRACE0("FINISHED\n");
98.827 }
98.828 +
98.829 +#ifdef P11_MEMORYDEBUG
98.830 +
98.831 +#undef malloc
98.832 +#undef free
98.833 +
98.834 +void *p11malloc(size_t c, char *file, int line) {
98.835 + void *p = malloc(c);
98.836 + printf("malloc\t%08x\t%d\t%s:%d\n", p, c, file, line); fflush(stdout);
98.837 + return p;
98.838 +}
98.839 +
98.840 +void p11free(void *p, char *file, int line) {
98.841 + printf("free\t%08x\t\t%s:%d\n", p, file, line); fflush(stdout);
98.842 + free(p);
98.843 +}
98.844 +
98.845 +#endif
98.846 +
99.1 --- a/src/share/native/sun/security/pkcs11/wrapper/pkcs11wrapper.h Thu Apr 02 10:16:53 2009 -0700
99.2 +++ b/src/share/native/sun/security/pkcs11/wrapper/pkcs11wrapper.h Wed Apr 08 15:40:56 2009 -0700
99.3 @@ -1,5 +1,5 @@
99.4 /*
99.5 - * Portions Copyright 2003-2006 Sun Microsystems, Inc. All Rights Reserved.
99.6 + * Portions Copyright 2003-2009 Sun Microsystems, Inc. All Rights Reserved.
99.7 */
99.8
99.9 /* Copyright (c) 2002 Graz University of Technology. All rights reserved.
99.10 @@ -154,6 +154,7 @@
99.11
99.12 #include "pkcs11.h"
99.13 #include <jni.h>
99.14 +#include <jni_util.h>
99.15
99.16 #define MAX_STACK_BUFFER_LEN (4 * 1024)
99.17 #define MAX_HEAP_BUFFER_LEN (64 * 1024)
99.18 @@ -277,12 +278,14 @@
99.19 */
99.20
99.21 jlong ckAssertReturnValueOK(JNIEnv *env, CK_RV returnValue);
99.22 -void throwPKCS11RuntimeException(JNIEnv *env, jstring jmessage);
99.23 -void throwFileNotFoundException(JNIEnv *env, jstring jmessage);
99.24 void throwIOException(JNIEnv *env, const char *message);
99.25 -void throwIOExceptionUnicodeMessage(JNIEnv *env, const short *message);
99.26 +void throwPKCS11RuntimeException(JNIEnv *env, const char *message);
99.27 void throwDisconnectedRuntimeException(JNIEnv *env);
99.28
99.29 +/* function to free CK_ATTRIBUTE array
99.30 + */
99.31 +void freeCKAttributeArray(CK_ATTRIBUTE_PTR attrPtr, int len);
99.32 +
99.33 /* funktions to convert Java arrays to a CK-type array and the array length */
99.34
99.35 void jBooleanArrayToCKBBoolArray(JNIEnv *env, const jbooleanArray jArray, CK_BBOOL **ckpArray, CK_ULONG_PTR ckLength);
99.36 @@ -438,3 +441,15 @@
99.37 extern jobject jInitArgsObject;
99.38 extern CK_C_INITIALIZE_ARGS_PTR ckpGlobalInitArgs;
99.39 #endif /* NO_CALLBACKS */
99.40 +
99.41 +#ifdef P11_MEMORYDEBUG
99.42 +#include <stdlib.h>
99.43 +
99.44 +/* Simple malloc/free dumper */
99.45 +void *p11malloc(size_t c, char *file, int line);
99.46 +void p11free(void *p, char *file, int line);
99.47 +
99.48 +#define malloc(c) (p11malloc((c), __FILE__, __LINE__))
99.49 +#define free(c) (p11free((c), __FILE__, __LINE__))
99.50 +
99.51 +#endif
100.1 --- a/src/solaris/classes/sun/nio/ch/UnixAsynchronousSocketChannelImpl.java Thu Apr 02 10:16:53 2009 -0700
100.2 +++ b/src/solaris/classes/sun/nio/ch/UnixAsynchronousSocketChannelImpl.java Wed Apr 08 15:40:56 2009 -0700
100.3 @@ -16,7 +16,7 @@
100.4 *
100.5 * You should have received a copy of the GNU General Public License version
100.6 * 2 along with this work; if not, write to the Free Software Foundation,
100.7 - * Inc., 51 Franklin St, Fifth Floor, Boston, MA conne02110-1301 USA.
100.8 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
100.9 *
100.10 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
100.11 * CA 95054 USA or visit www.sun.com if you need additional information or
101.1 --- a/src/solaris/native/java/net/NetworkInterface.c Thu Apr 02 10:16:53 2009 -0700
101.2 +++ b/src/solaris/native/java/net/NetworkInterface.c Wed Apr 08 15:40:56 2009 -0700
101.3 @@ -1,5 +1,5 @@
101.4 /*
101.5 - * Copyright 2000-2008 Sun Microsystems, Inc. All Rights Reserved.
101.6 + * Copyright 2000-2009 Sun Microsystems, Inc. All Rights Reserved.
101.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
101.8 *
101.9 * This code is free software; you can redistribute it and/or modify it
102.1 --- a/src/windows/classes/sun/nio/ch/WindowsAsynchronousSocketChannelImpl.java Thu Apr 02 10:16:53 2009 -0700
102.2 +++ b/src/windows/classes/sun/nio/ch/WindowsAsynchronousSocketChannelImpl.java Wed Apr 08 15:40:56 2009 -0700
102.3 @@ -16,7 +16,7 @@
102.4 *
102.5 * You should have received a copy of the GNU General Public License version
102.6 * 2 along with this work; if not, write to the Free Software Foundation,
102.7 - * Inc., 51 Franklin St, Fifth Floor, Boston, MA conne02110-1301 USA.
102.8 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
102.9 *
102.10 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
102.11 * CA 95054 USA or visit www.sun.com if you need additional information or
103.1 --- a/src/windows/native/sun/windows/awt.rc Thu Apr 02 10:16:53 2009 -0700
103.2 +++ b/src/windows/native/sun/windows/awt.rc Wed Apr 08 15:40:56 2009 -0700
103.3 @@ -23,7 +23,7 @@
103.4 // have any questions.
103.5 //
103.6
103.7 -#include "afxres.h"
103.8 +#include "windows.h"
103.9
103.10 // Need 2 defines so macro argument to XSTR will get expanded before quoting.
103.11 #define XSTR(x) STR(x)
104.1 --- a/src/windows/resource/version.rc Thu Apr 02 10:16:53 2009 -0700
104.2 +++ b/src/windows/resource/version.rc Wed Apr 08 15:40:56 2009 -0700
104.3 @@ -23,7 +23,7 @@
104.4 // have any questions.
104.5 //
104.6
104.7 -#include "afxres.h"
104.8 +#include "windows.h"
104.9
104.10 // Need 2 defines so macro argument to XSTR will get expanded before quoting.
104.11 #define XSTR(x) STR(x)
105.1 --- a/test/Makefile Thu Apr 02 10:16:53 2009 -0700
105.2 +++ b/test/Makefile Wed Apr 08 15:40:56 2009 -0700
105.3 @@ -1,12 +1,44 @@
105.4 #
105.5 -# Makefile to run jtreg
105.6 +# Copyright 1995-2008 Sun Microsystems, Inc. All Rights Reserved.
105.7 +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
105.8 +#
105.9 +# This code is free software; you can redistribute it and/or modify it
105.10 +# under the terms of the GNU General Public License version 2 only, as
105.11 +# published by the Free Software Foundation. Sun designates this
105.12 +# particular file as subject to the "Classpath" exception as provided
105.13 +# by Sun in the LICENSE file that accompanied this code.
105.14 +#
105.15 +# This code is distributed in the hope that it will be useful, but WITHOUT
105.16 +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
105.17 +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
105.18 +# version 2 for more details (a copy is included in the LICENSE file that
105.19 +# accompanied this code).
105.20 +#
105.21 +# You should have received a copy of the GNU General Public License version
105.22 +# 2 along with this work; if not, write to the Free Software Foundation,
105.23 +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
105.24 +#
105.25 +# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
105.26 +# CA 95054 USA or visit www.sun.com if you need additional information or
105.27 +# have any questions.
105.28 +#
105.29 +
105.30 +#
105.31 +# Makefile to run various jdk tests
105.32 #
105.33
105.34 # Get OS/ARCH specifics
105.35 OSNAME = $(shell uname -s)
105.36 +
105.37 +# Commands to run on paths to make mixed paths for java on windows
105.38 +GETMIXEDPATH=echo
105.39 +
105.40 +# Location of developer shared files
105.41 +SLASH_JAVA = /java
105.42 +
105.43 +# Platform specific settings
105.44 ifeq ($(OSNAME), SunOS)
105.45 PLATFORM = solaris
105.46 - JCT_PLATFORM = solaris
105.47 ARCH = $(shell uname -p)
105.48 ifeq ($(ARCH), i386)
105.49 ARCH=i586
105.50 @@ -14,97 +46,403 @@
105.51 endif
105.52 ifeq ($(OSNAME), Linux)
105.53 PLATFORM = linux
105.54 - JCT_PLATFORM = linux
105.55 ARCH = $(shell uname -m)
105.56 ifeq ($(ARCH), i386)
105.57 ARCH=i586
105.58 endif
105.59 endif
105.60 -ifeq ($(OSNAME), Windows_NT)
105.61 +
105.62 +# Cannot trust uname output
105.63 +ifneq ($(PROCESSOR_IDENTIFIER), )
105.64 PLATFORM = windows
105.65 - JCT_PLATFORM = win32
105.66 - ifeq ($(word 1, $(PROCESSOR_IDENTIFIER)),ia64)
105.67 - ARCH=ia64
105.68 + SLASH_JAVA = J:
105.69 + # A variety of ways to say X64 arch :^(
105.70 + PROC_ARCH:=$(word 1, $(PROCESSOR_IDENTIFIER))
105.71 + PROC_ARCH:=$(subst x86,X86,$(PROC_ARCH))
105.72 + PROC_ARCH:=$(subst x64,X64,$(PROC_ARCH))
105.73 + PROC_ARCH:=$(subst AMD64,X64,$(PROC_ARCH))
105.74 + PROC_ARCH:=$(subst amd64,X64,$(PROC_ARCH))
105.75 + PROC_ARCH:=$(subst EM64T,X64,$(PROC_ARCH))
105.76 + PROC_ARCH:=$(subst em64t,X64,$(PROC_ARCH))
105.77 + PROC_ARCH:=$(subst intel64,X64,$(PROC_ARCH))
105.78 + PROC_ARCH:=$(subst Intel64,X64,$(PROC_ARCH))
105.79 + PROC_ARCH:=$(subst INTEL64,X64,$(PROC_ARCH))
105.80 + PROC_ARCH:=$(subst ia64,IA64,$(PROC_ARCH))
105.81 + ifeq ($(PROC_ARCH),IA64)
105.82 + ARCH = ia64
105.83 else
105.84 - ifeq ($(word 1, $(PROCESSOR_IDENTIFIER)),AMD64)
105.85 - ARCH=x64
105.86 + ifeq ($(PROC_ARCH),X64)
105.87 + ARCH = x64
105.88 else
105.89 - ifeq ($(word 1, $(PROCESSOR_IDENTIFIER)),EM64T)
105.90 - ARCH=x64
105.91 - else
105.92 - ARCH=i586
105.93 - endif
105.94 + ARCH = i586
105.95 endif
105.96 endif
105.97 + EXESUFFIX = .exe
105.98 + # These need to be different depending on MKS or CYGWIN
105.99 + ifeq ($(findstring cygdrive,$(shell (cd C:/ && pwd))), )
105.100 + GETMIXEDPATH=dosname -s
105.101 + else
105.102 + GETMIXEDPATH=cygpath -m -s
105.103 + endif
105.104 endif
105.105
105.106 +# Utilities used
105.107 +CD = cd
105.108 +CP = cp
105.109 +ECHO = echo
105.110 +MKDIR = mkdir
105.111 +ZIP = zip
105.112 +
105.113 # Root of this test area (important to use full paths in some places)
105.114 TEST_ROOT := $(shell pwd)
105.115
105.116 -# Default bundle of all test results (passed or not)
105.117 -JPRT_ARCHIVE_BUNDLE=$(TEST_ROOT)/JPRT_ARCHIVE_BUNDLE.zip
105.118 +# Root of all test results
105.119 +ifdef ALT_OUTPUTDIR
105.120 + ABS_OUTPUTDIR = $(ALT_OUTPUTDIR)
105.121 +else
105.122 + ABS_OUTPUTDIR = $(TEST_ROOT)/../build/$(PLATFORM)-$(ARCH)
105.123 +endif
105.124 +ABS_BUILD_ROOT = $(ABS_OUTPUTDIR)
105.125 +ABS_TEST_OUTPUT_DIR := $(ABS_BUILD_ROOT)/testoutput
105.126
105.127 -# Default home for JTREG
105.128 -ifeq ($(PLATFORM), windows)
105.129 - JT_HOME = J:/svc/jct-tools3.2.2_02
105.130 - JTREG_KEY_OPTION=-k:!ignore
105.131 -else
105.132 - JT_HOME = /java/svc/jct-tools3.2.2_02
105.133 - JTREG_KEY_OPTION=-k:\!ignore
105.134 +# Expect JPRT to set PRODUCT_HOME (the product or jdk in this case to test)
105.135 +ifndef PRODUCT_HOME
105.136 + # Try to use j2sdk-image if it exists
105.137 + ABS_JDK_IMAGE = $(ABS_BUILD_ROOT)/j2sdk-image
105.138 + PRODUCT_HOME := \
105.139 + $(shell \
105.140 + if [ -d $(ABS_JDK_IMAGE) ] ; then \
105.141 + $(ECHO) "$(ABS_JDK_IMAGE)"; \
105.142 + else \
105.143 + $(ECHO) "$(ABS_BUILD_ROOT)" ; \
105.144 + fi)
105.145 + PRODUCT_HOME := $(PRODUCT_HOME)
105.146 endif
105.147
105.148 -# Default JTREG to run
105.149 -JTREG = $(JT_HOME)/$(JCT_PLATFORM)/bin/jtreg
105.150 +# Expect JPRT to set JPRT_PRODUCT_ARGS (e.g. -server etc.)
105.151 +# Should be passed into 'java' only.
105.152 +ifdef JPRT_PRODUCT_ARGS
105.153 + JAVA_ARGS = $(JPRT_PRODUCT_ARGS)
105.154 +endif
105.155
105.156 -# Default JDK to test
105.157 -JAVA_HOME = $(TEST_ROOT)/../build/$(PLATFORM)-$(ARCH)
105.158 +# Expect JPRT to set JPRT_PRODUCT_VM_ARGS (e.g. -Xcomp etc.)
105.159 +# Should be passed into anything running the vm (java, javac, javadoc, ...).
105.160 +ifdef JPRT_PRODUCT_VM_ARGS
105.161 + JAVA_VM_ARGS = $(JPRT_PRODUCT_VM_ARGS)
105.162 +endif
105.163
105.164 -# The test directories to run
105.165 -DEFAULT_TESTDIRS = demo/jvmti/gctest demo/jvmti/hprof
105.166 -TESTDIRS = $(DEFAULT_TESTDIRS)
105.167 +# Expect JPRT to set JPRT_ARCHIVE_BUNDLE (path to zip bundle for results)
105.168 +ARCHIVE_BUNDLE = $(ABS_TEST_OUTPUT_DIR)/ARCHIVE_BUNDLE.zip
105.169 +ifdef JPRT_ARCHIVE_BUNDLE
105.170 + ARCHIVE_BUNDLE = $(JPRT_ARCHIVE_BUNDLE)
105.171 +endif
105.172
105.173 -# Root of all test results
105.174 -JTREG_OUTPUT_DIR = $(TEST_ROOT)/o_$(PLATFORM)-$(ARCH)
105.175 +# How to create the test bundle (pass or fail, we want to create this)
105.176 +# Follow command with ";$(BUNDLE_UP_AND_EXIT)", so it always gets executed.
105.177 +ZIP_UP_RESULTS = ( $(MKDIR) -p `dirname $(ARCHIVE_BUNDLE)` \
105.178 + && $(CD) $(ABS_TEST_OUTPUT_DIR) \
105.179 + && $(ZIP) -q -r $(ARCHIVE_BUNDLE) . )
105.180 +BUNDLE_UP_AND_EXIT = ( exitCode=$$? && $(ZIP_UP_RESULTS) && exit $${exitCode} )
105.181
105.182 -# Export this setting and pass it in.
105.183 -#JAVA_TOOL_OPTIONS = -Djava.awt.headless=true
105.184 -#export JAVA_TOOL_OPTIONS
105.185 +################################################################
105.186
105.187 -# Default make rule
105.188 -all: clean check tests $(JPRT_ARCHIVE_BUNDLE)
105.189 - @echo "Testing completed successfully"
105.190 +# Default make rule (runs jtreg_tests)
105.191 +all: jtreg_tests
105.192 + @$(ECHO) "Testing completed successfully"
105.193
105.194 -# Chaeck to make sure these directories exist
105.195 -check: $(JT_HOME) $(JAVA_HOME) $(JTREG)
105.196 -
105.197 -# Run the tests
105.198 -tests: FRC
105.199 - @echo "Using export JAVA_TOOL_OPTIONS=$(JAVA_TOOL_OPTIONS)"
105.200 - @rm -f -r $(JTREG_OUTPUT_DIR)
105.201 - @mkdir -p $(JTREG_OUTPUT_DIR)
105.202 - $(JTREG) -a -v:fail,error \
105.203 - $(JTREG_KEY_OPTION) \
105.204 - -r:$(JTREG_OUTPUT_DIR)/JTreport \
105.205 - -w:$(JTREG_OUTPUT_DIR)/JTwork \
105.206 - -jdk:$(JAVA_HOME) \
105.207 - $(JAVA_TOOL_OPTIONS:%=-vmoption:%) \
105.208 - $(JAVA_ARGS:%=-vmoption:%) \
105.209 - $(TESTDIRS)
105.210 -
105.211 -# Bundle up the results
105.212 -$(JPRT_ARCHIVE_BUNDLE): FRC
105.213 - @rm -f $@
105.214 - @mkdir -p $(@D)
105.215 - ( cd $(JTREG_OUTPUT_DIR) && zip -q -r $@ . )
105.216 +# Prep for output
105.217 +prep: clean
105.218 + @$(MKDIR) -p $(ABS_TEST_OUTPUT_DIR)
105.219 + @$(MKDIR) -p `dirname $(ARCHIVE_BUNDLE)`
105.220
105.221 # Cleanup
105.222 clean:
105.223 - rm -f -r $(JTREG_OUTPUT_DIR)
105.224 - rm -f $(JPRT_ARCHIVE_BUNDLE)
105.225 + $(RM) -r $(ABS_TEST_OUTPUT_DIR)
105.226 + $(RM) $(ARCHIVE_BUNDLE)
105.227
105.228 -# Used to force a target rules to run
105.229 -FRC:
105.230 +################################################################
105.231 +
105.232 +# jtreg tests
105.233 +
105.234 +# Expect JT_HOME to be set for jtreg tests. (home for jtreg)
105.235 +JT_HOME = $(SLASH_JAVA)/re/jtreg/4.0/promoted/latest/binaries/jtreg
105.236 +ifdef JPRT_JTREG_HOME
105.237 + JT_HOME = $(JPRT_JTREG_HOME)
105.238 +endif
105.239 +
105.240 +# Expect JPRT to set TESTDIRS to the jtreg test dirs
105.241 +ifndef TESTDIRS
105.242 + TESTDIRS = demo/jvmti/gctest demo/jvmti/hprof
105.243 +endif
105.244 +
105.245 +# Default JTREG to run (win32 script works for everybody)
105.246 +JTREG = $(JT_HOME)/win32/bin/jtreg
105.247 +
105.248 +jtreg_tests: prep $(JT_HOME) $(PRODUCT_HOME) $(JTREG)
105.249 + $(RM) $(JTREG).orig
105.250 + cp $(JTREG) $(JTREG).orig
105.251 + $(RM) $(JTREG)
105.252 + sed -e 's@-J\*@-J-*@' $(JTREG).orig > $(JTREG)
105.253 + chmod a+x $(JTREG)
105.254 + ( JT_HOME=$(shell $(GETMIXEDPATH) "$(JT_HOME)"); \
105.255 + export JT_HOME; \
105.256 + $(shell $(GETMIXEDPATH) "$(JTREG)") \
105.257 + -a -v:fail,error \
105.258 + -ignore:quiet \
105.259 + $(EXTRA_JTREG_OPTIONS) \
105.260 + -r:$(shell $(GETMIXEDPATH) "$(ABS_TEST_OUTPUT_DIR)")/JTreport \
105.261 + -w:$(shell $(GETMIXEDPATH) "$(ABS_TEST_OUTPUT_DIR)")/JTwork \
105.262 + -jdk:$(shell $(GETMIXEDPATH) "$(PRODUCT_HOME)") \
105.263 + $(JAVA_ARGS:%=-javaoptions:%) \
105.264 + $(JAVA_VM_ARGS:%=-vmoption:%) \
105.265 + $(TESTDIRS) \
105.266 + ) ; $(BUNDLE_UP_AND_EXIT)
105.267 +
105.268 +PHONY_LIST += jtreg_tests
105.269 +
105.270 +################################################################
105.271 +
105.272 +# packtest
105.273 +
105.274 +# Expect JPRT to set JPRT_PACKTEST_HOME.
105.275 +PACKTEST_HOME = /net/jprt-web.sfbay.sun.com/jprt/allproducts/packtest
105.276 +ifdef JPRT_PACKTEST_HOME
105.277 + PACKTEST_HOME = $(JPRT_PACKTEST_HOME)
105.278 +endif
105.279 +
105.280 +packtest: prep $(PACKTEST_HOME)/ptest $(PRODUCT_HOME)
105.281 + ( $(CD) $(PACKTEST_HOME) && \
105.282 + $(PACKTEST_HOME)/ptest \
105.283 + -t "$(PRODUCT_HOME)" \
105.284 + $(PACKTEST_STRESS_OPTION) \
105.285 + $(EXTRA_PACKTEST_OPTIONS) \
105.286 + -W $(ABS_TEST_OUTPUT_DIR) \
105.287 + $(JAVA_ARGS:%=-J %) \
105.288 + $(JAVA_VM_ARGS:%=-J %) \
105.289 + ) ; $(BUNDLE_UP_AND_EXIT)
105.290 +
105.291 +packtest_stress: PACKTEST_STRESS_OPTION=-s
105.292 +packtest_stress: packtest
105.293 +
105.294 +PHONY_LIST += packtest packtest_stress
105.295 +
105.296 +################################################################
105.297 +
105.298 +# vmsqe tests
105.299 +
105.300 +# Expect JPRT to set JPRT_VMSQE_HOME.
105.301 +VMSQE_HOME = /java/sqe/comp/vm/testbase/sqe/vm/current/build/latest/vm
105.302 +ifdef JPRT_VMSQE_HOME
105.303 + VMSQE_HOME = $(JPRT_VMSQE_HOME)
105.304 +endif
105.305 +
105.306 +# Expect JPRT to set JPRT_RUNVMSQE_HOME.
105.307 +RUNVMSQE_HOME = /net/jprt-web.sfbay.sun.com/jprt/allproducts/runvmsqe
105.308 +ifdef JPRT_RUNVMSQE_HOME
105.309 + RUNVMSQE_HOME = $(JPRT_RUNVMSQE_HOME)
105.310 +endif
105.311 +
105.312 +# Expect JPRT to set JPRT_TONGA3_HOME.
105.313 +TONGA3_HOME = /java/sqe//tools/gtee/harness/tonga
105.314 +ifdef JPRT_TONGA3_HOME
105.315 + TONGA3_HOME = $(JPRT_TONGA3_HOME)
105.316 +endif
105.317 +
105.318 +RUNVMSQE_BIN = $(RUNVMSQE_HOME)/bin/runvmsqe
105.319 +
105.320 +vmsqe_tests: prep $(VMSQE_HOME)/vm $(TONGA3_HOME) $(RUNVMSQE_BIN) $(PRODUCT_HOME)
105.321 + $(RM) -r $(ABS_TEST_OUTPUT_DIR)/vmsqe
105.322 + ( $(CD) $(ABS_TEST_OUTPUT_DIR) && \
105.323 + $(RUNVMSQE_BIN) \
105.324 + -jdk "$(PRODUCT_HOME)" \
105.325 + -o "$(ABS_TEST_OUTPUT_DIR)/vmsqe" \
105.326 + -testbase "$(VMSQE_HOME)/vm" \
105.327 + -tonga "$(TONGA3_HOME)" \
105.328 + -tongajdk "$(ALT_BOOTDIR)" \
105.329 + $(JAVA_ARGS) \
105.330 + $(JAVA_VM_ARGS) \
105.331 + $(RUNVMSQE_TEST_OPTION) \
105.332 + $(EXTRA_RUNVMSQE_OPTIONS) \
105.333 + ) ; $(BUNDLE_UP_AND_EXIT)
105.334 +
105.335 +vmsqe_jdwp: RUNVMSQE_TEST_OPTION=-jdwp
105.336 +vmsqe_jdwp: vmsqe_tests
105.337 +
105.338 +vmsqe_jdi: RUNVMSQE_TEST_OPTION=-jdi
105.339 +vmsqe_jdi: vmsqe_tests
105.340 +
105.341 +vmsqe_jdb: RUNVMSQE_TEST_OPTION=-jdb
105.342 +vmsqe_jdb: vmsqe_tests
105.343 +
105.344 +vmsqe_quick-jdi: RUNVMSQE_TEST_OPTION=-quick-jdi
105.345 +vmsqe_quick-jdi: vmsqe_tests
105.346 +
105.347 +vmsqe_sajdi: RUNVMSQE_TEST_OPTION=-sajdi
105.348 +vmsqe_sajdi: vmsqe_tests
105.349 +
105.350 +vmsqe_jvmti: RUNVMSQE_TEST_OPTION=-jvmti
105.351 +vmsqe_jvmti: vmsqe_tests
105.352 +
105.353 +vmsqe_hprof: RUNVMSQE_TEST_OPTION=-hprof
105.354 +vmsqe_hprof: vmsqe_tests
105.355 +
105.356 +vmsqe_monitoring: RUNVMSQE_TEST_OPTION=-monitoring
105.357 +vmsqe_monitoring: vmsqe_tests
105.358 +
105.359 +PHONY_LIST += vmsqe_jdwp vmsqe_jdi vmsqe_jdb vmsqe_quick-jdi vmsqe_sajdi \
105.360 + vmsqe_jvmti vmsqe_hprof vmsqe_monitoring vmsqe_tests
105.361 +
105.362 +################################################################
105.363 +
105.364 +# jck tests
105.365 +
105.366 +JCK_WORK_DIR = $(ABS_TEST_OUTPUT_DIR)/JCKwork
105.367 +JCK_REPORT_DIR = $(ABS_TEST_OUTPUT_DIR)/JCKreport
105.368 +JCK_PROPERTIES = $(ABS_TEST_OUTPUT_DIR)/jck.properties
105.369 +JCK_CONFIG = $(ABS_TEST_OUTPUT_DIR)/jck.config
105.370 +
105.371 +JCK_JAVA_EXE = $(PRODUCT_HOME)/bin/java$(EXESUFFIX)
105.372 +
105.373 +JCK_JAVATEST_JAR = $(JCK_HOME)/lib/javatest.jar
105.374 +JCK_JAVATEST = $(ALT_BOOTDIR)/bin/java -jar $(JCK_JAVATEST_JAR)
105.375 +
105.376 +$(JCK_CONFIG): $(TEST_ROOT)/JCK-$(JCK_BUNDLE_NAME)-$(JCK_RELEASE)-base.jti
105.377 + $(RM) $@
105.378 + $(MKDIR) -p $(@D)
105.379 + $(CP) $< $@
105.380 +
105.381 +$(JCK_PROPERTIES): $(PRODUCT_HOME) $(JCK_JAVA_EXE)
105.382 + $(RM) $@
105.383 + $(MKDIR) -p $(@D)
105.384 + $(ECHO) "jck.env.compiler.compRefExecute.cmdAsFile=$(JCK_JAVA_EXE)" >> $@
105.385 + $(ECHO) "jck.env.compiler.compRefExecute.systemRoot=$(SYSTEMROOT)" >> $@
105.386 + $(ECHO) "jck.env.compiler.testCompile.testCompileAPImultiJVM.cmdAsFile=$(JCK_JAVA_EXE)" >> $@
105.387 + $(ECHO) "jck.tests.tests=$(JCK_BUNDLE_TESTDIRS)" >> $@
105.388 +
105.389 +jck_tests: prep $(JCK_HOME) $(JCK_PROPERTIES) $(JCK_CONFIG) $(JCK_JAVATEST_JAR)
105.390 + $(MKDIR) -p $(JCK_WORK_DIR)
105.391 + ( $(JCK_JAVATEST) \
105.392 + -verbose:commands,non-pass \
105.393 + -testSuite $(JCK_HOME) \
105.394 + -workDir $(JCK_WORK_DIR) \
105.395 + -config $(JCK_CONFIG) \
105.396 + -set -file $(JCK_PROPERTIES) \
105.397 + -runtests \
105.398 + -writeReport $(JCK_REPORT_DIR) \
105.399 + ) ; $(BUNDLE_UP_AND_EXIT)
105.400 +
105.401 +PHONY_LIST += jck_tests
105.402 +
105.403 +################################################################
105.404 +
105.405 +# jck6 tests
105.406 +
105.407 +JCK6_RELEASE = 6b
105.408 +JCK6_DEFAULT_HOME = $(SLASH_JAVA)/re/jck/$(JCK6_RELEASE)/archive/fcs/binaries
105.409 +
105.410 +# Expect JPRT to set JPRT_JCK6COMPILER_HOME.
105.411 +JCK6COMPILER_HOME = $(JCK6_DEFAULT_HOME)/JCK-compiler-$(JCK6_RELEASE)
105.412 +ifdef JPRT_JCK6COMPILER_HOME
105.413 + JCK6COMPILER_HOME = $(JPRT_JCK6COMPILER_HOME)
105.414 +endif
105.415 +
105.416 +# Expect JPRT to set JPRT_JCK6RUNTIME_HOME.
105.417 +JCK6RUNTIME_HOME = $(JCK6_DEFAULT_HOME)/JCK-runtime-$(JCK6_RELEASE)
105.418 +ifdef JPRT_JCK6RUNTIME_HOME
105.419 + JCK6RUNTIME_HOME = $(JPRT_JCK6RUNTIME_HOME)
105.420 +endif
105.421 +
105.422 +# Expect JPRT to set JPRT_JCK6DEVTOOLS_HOME.
105.423 +JCK6DEVTOOLS_HOME = $(JCK6_DEFAULT_HOME)/JCK-devtools-$(JCK6_RELEASE)
105.424 +ifdef JPRT_JCK6DEVTOOLS_HOME
105.425 + JCK6DEVTOOLS_HOME = $(JPRT_JCK6DEVTOOLS_HOME)
105.426 +endif
105.427 +
105.428 +jck6_tests: JCK_HOME=$(JCK6_HOME)
105.429 +jck6_tests: JCK_RELEASE=$(JCK6_RELEASE)
105.430 +jck6_tests: jck_tests
105.431 +
105.432 +jck6compiler: JCK6_HOME=$(JCK6COMPILER_HOME)
105.433 +jck6compiler: JCK_BUNDLE_NAME=compiler
105.434 +jck6compiler: jck6_tests
105.435 +
105.436 +jck6compiler_lang: JCK_BUNDLE_TESTDIRS=lang
105.437 +jck6compiler_lang: jck6compiler
105.438 +
105.439 +jck6runtime: JCK6_HOME=$(JCK6RUNTIME_HOME)
105.440 +jck6runtime: JCK_BUNDLE_NAME=runtime
105.441 +jck6runtime: jck6_tests
105.442 +
105.443 +jck6runtime_lang: JCK_BUNDLE_TESTDIRS=lang
105.444 +jck6runtime_lang: jck6runtime
105.445 +
105.446 +jck6devtools: JCK6_HOME=$(JCK6DEVTOOLS_HOME)
105.447 +jck6devtools: JCK_BUNDLE_NAME=devtools
105.448 +jck6devtools: jck6_tests
105.449 +
105.450 +jck6devtools_lang: JCK_BUNDLE_TESTDIRS=lang
105.451 +jck6devtools_lang: jck6devtools
105.452 +
105.453 +PHONY_LIST += jck6compiler jck6runtime jck6devtools jck6_tests \
105.454 + jck6compiler_lang jck6runtime_lang jck6devtools_lang
105.455 +
105.456 +################################################################
105.457 +
105.458 +# jck7 tests
105.459 +
105.460 +JCK7_RELEASE = 7
105.461 +JCK7_DEFAULT_HOME = $(SLASH_JAVA)/re/jck/$(JCK7_RELEASE)/archive/fcs/binaries
105.462 +
105.463 +# Expect JPRT to set JPRT_JCK7COMPILER_HOME.
105.464 +JCK7COMPILER_HOME = $(JCK7_DEFAULT_HOME)/JCK-compiler-$(JCK7_RELEASE)
105.465 +ifdef JPRT_JCK7COMPILER_HOME
105.466 + JCK7COMPILER_HOME = $(JPRT_JCK7COMPILER_HOME)
105.467 +endif
105.468 +
105.469 +# Expect JPRT to set JPRT_JCK7RUNTIME_HOME.
105.470 +JCK7RUNTIME_HOME = $(JCK7_DEFAULT_HOME)/JCK-runtime-$(JCK7_RELEASE)
105.471 +ifdef JPRT_JCK7RUNTIME_HOME
105.472 + JCK7RUNTIME_HOME = $(JPRT_JCK7RUNTIME_HOME)
105.473 +endif
105.474 +
105.475 +# Expect JPRT to set JPRT_JCK7DEVTOOLS_HOME.
105.476 +JCK7DEVTOOLS_HOME = $(JCK7_DEFAULT_HOME)/JCK-devtools-$(JCK7_RELEASE)
105.477 +ifdef JPRT_JCK7DEVTOOLS_HOME
105.478 + JCK7DEVTOOLS_HOME = $(JPRT_JCK7DEVTOOLS_HOME)
105.479 +endif
105.480 +
105.481 +jck7_tests: JCK_HOME=$(JCK7_HOME)
105.482 +jck7_tests: JCK_RELEASE=$(JCK7_RELEASE)
105.483 +jck7_tests: jck_tests
105.484 +
105.485 +jck7compiler: JCK7_HOME=$(JCK7COMPILER_HOME)
105.486 +jck7compiler: JCK_BUNDLE_NAME=compiler
105.487 +jck7compiler: jck7_tests
105.488 +
105.489 +jck7compiler_lang: JCK_BUNDLE_TESTDIRS=lang
105.490 +jck7compiler_lang: jck7compiler
105.491 +
105.492 +jck7runtime: JCK7_HOME=$(JCK7RUNTIME_HOME)
105.493 +jck7runtime: JCK_BUNDLE_NAME=runtime
105.494 +jck7runtime: jck7_tests
105.495 +
105.496 +jck7runtime_lang: JCK_BUNDLE_TESTDIRS=lang
105.497 +jck7runtime_lang: jck7runtime
105.498 +
105.499 +jck7devtools: JCK7_HOME=$(JCK7DEVTOOLS_HOME)
105.500 +jck7devtools: JCK_BUNDLE_NAME=devtools
105.501 +jck7devtools: jck7_tests
105.502 +
105.503 +jck7devtools_lang: JCK_BUNDLE_TESTDIRS=lang
105.504 +jck7devtools_lang: jck7devtools
105.505 +
105.506 +PHONY_LIST += jck7compiler jck7runtime jck7devtools jck7_tests \
105.507 + jck7compiler_lang jck7runtime_lang jck7devtools_lang
105.508 +
105.509 +################################################################
105.510
105.511 # Phony targets (e.g. these are not filenames)
105.512 -.PHONY: all tests clean check
105.513 +.PHONY: all clean prep $(PHONY_LIST)
105.514
105.515 +################################################################
105.516 +
106.1 --- a/test/com/sun/jmx/snmp/SnmpOidHashCode.java Thu Apr 02 10:16:53 2009 -0700
106.2 +++ b/test/com/sun/jmx/snmp/SnmpOidHashCode.java Wed Apr 08 15:40:56 2009 -0700
106.3 @@ -1,5 +1,5 @@
106.4 /*
106.5 - * Copyright 2003 Sun Microsystems, Inc. All Rights Reserved.
106.6 + * Copyright 2003-2008 Sun Microsystems, Inc. All Rights Reserved.
106.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
106.8 *
106.9 * This code is free software; you can redistribute it and/or modify it
106.10 @@ -28,7 +28,8 @@
106.11 * @build SnmpOidHashCode
106.12 * @run main SnmpOidHashCode
106.13 */
106.14 -import com.sun.jmx.snmp.SnmpOid;
106.15 +import java.lang.reflect.Constructor;
106.16 +import java.lang.reflect.InvocationTargetException;
106.17
106.18 public class SnmpOidHashCode {
106.19 public static final String[] oids = {
106.20 @@ -57,16 +58,81 @@
106.21 ".39."+0xFFFFFFFFL
106.22 };
106.23
106.24 + // We use an SnmpOidBuilder in order to adapt this test case to a
106.25 + // configuration where the SNMP packages are not present in rt.jar.
106.26 + //
106.27 + public static final class SnmpOidBuilder {
106.28 + public static final String SNMP_OID_CLASS_NAME =
106.29 + "com.sun.jmx.snmp.SnmpOid";
106.30 + private static final Class<?> SNMP_OID_CLASS;
106.31 + private static final Constructor<?> SNMP_OID_CTOR;
106.32 + static {
106.33 + Class<?> snmpOidClass;
106.34 + try {
106.35 + snmpOidClass =
106.36 + Class.forName(SNMP_OID_CLASS_NAME, true, null);
106.37 + } catch (ClassNotFoundException x) {
106.38 + snmpOidClass = null;
106.39 + System.err.println("WARNING: can't load "+SNMP_OID_CLASS_NAME);
106.40 + } catch (NoClassDefFoundError x) {
106.41 + snmpOidClass = null;
106.42 + System.err.println("WARNING: can't load "+SNMP_OID_CLASS_NAME);
106.43 + }
106.44 + SNMP_OID_CLASS = snmpOidClass;
106.45 + if (SNMP_OID_CLASS != null) {
106.46 + try {
106.47 + SNMP_OID_CTOR = snmpOidClass.getConstructor(String.class);
106.48 + } catch (Exception x) {
106.49 + throw new ExceptionInInitializerError(x);
106.50 + }
106.51 + } else {
106.52 + SNMP_OID_CTOR = null;
106.53 + }
106.54 + }
106.55 +
106.56 + public static boolean isSnmpPresent() {
106.57 + System.out.println(SnmpOidHashCode.class.getName()+
106.58 + ": Testing for SNMP Packages...");
106.59 + return SNMP_OID_CLASS != null;
106.60 + }
106.61 +
106.62 + public static Object newSnmpOid(String oid)
106.63 + throws InstantiationException,
106.64 + IllegalAccessException,
106.65 + InvocationTargetException {
106.66 + return SNMP_OID_CTOR.newInstance(oid);
106.67 + }
106.68 +
106.69 + }
106.70 +
106.71 + private static Object newSnmpOid(String oid) throws Exception {
106.72 + try {
106.73 + return SnmpOidBuilder.newSnmpOid(oid);
106.74 + } catch (InvocationTargetException x) {
106.75 + final Throwable cause = x.getCause();
106.76 + if (cause instanceof Exception) throw (Exception)cause;
106.77 + if (cause instanceof Error) throw (Error)cause;
106.78 + throw x;
106.79 + }
106.80 + }
106.81 +
106.82 public static void main(String args[]) {
106.83 + if (!SnmpOidBuilder.isSnmpPresent()) {
106.84 + System.err.println("WARNING: "+
106.85 + SnmpOidBuilder.SNMP_OID_CLASS_NAME+" not present.");
106.86 + System.err.println(SnmpOidHashCode.class.getName()+
106.87 + ": test skipped.");
106.88 + return;
106.89 + }
106.90 try {
106.91 int errCount=0;
106.92 int collisions=0;
106.93 for (int i=0;i<oids.length;i++) {
106.94 System.out.println("Testing " + oids[i]);
106.95 - final SnmpOid o1 = new SnmpOid(oids[i]);
106.96 + final Object o1 = newSnmpOid(oids[i]);
106.97 final int startCount=errCount;
106.98 for (int j=0;j<oids.length;j++) {
106.99 - final SnmpOid o2 = new SnmpOid(oids[j]);
106.100 + final Object o2 = newSnmpOid(oids[j]);
106.101 if (o1.equals(o2)) {
106.102 if (!(oids[i].equals(oids[j]))) {
106.103 System.err.println("OIDs differ but " +
107.1 --- a/test/com/sun/jmx/snmp/TimeTicksWrapping.java Thu Apr 02 10:16:53 2009 -0700
107.2 +++ b/test/com/sun/jmx/snmp/TimeTicksWrapping.java Wed Apr 08 15:40:56 2009 -0700
107.3 @@ -1,5 +1,5 @@
107.4 /*
107.5 - * Copyright 2003 Sun Microsystems, Inc. All Rights Reserved.
107.6 + * Copyright 2003-2008 Sun Microsystems, Inc. All Rights Reserved.
107.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
107.8 *
107.9 * This code is free software; you can redistribute it and/or modify it
107.10 @@ -29,33 +29,158 @@
107.11 * @build TimeTicksWrapping
107.12 * @run main TimeTicksWrapping
107.13 */
107.14 -import com.sun.jmx.snmp.SnmpTimeticks;
107.15 -import com.sun.jmx.snmp.SnmpUnsignedInt;
107.16 +import java.lang.reflect.Constructor;
107.17 +import java.lang.reflect.InvocationTargetException;
107.18 +import java.lang.reflect.Method;
107.19
107.20 public class TimeTicksWrapping {
107.21 + // We use an SnmpTimeticksBuilder in order to adapt this test case to a
107.22 + // configuration where the SNMP packages are not present in rt.jar.
107.23 + //
107.24 + public static final class SnmpTimeticksBuilder {
107.25 + public static final long MAX_VALUE = 0x0ffffffffL;
107.26 + public static final String SNMP_TIME_TICKS_CLASS_NAME =
107.27 + "com.sun.jmx.snmp.SnmpTimeticks";
107.28 + private static final Class<?> SNMP_TIME_TICKS_CLASS;
107.29 + private static final Constructor<?> SNMP_long_CTOR;
107.30 + private static final Constructor<?> SNMP_LONG_CTOR;
107.31 + private static final Method SNMP_LONG_VALUE;
107.32 + static {
107.33 + Class<?> snmpTimeTicksClass;
107.34 + try {
107.35 + snmpTimeTicksClass =
107.36 + Class.forName(SNMP_TIME_TICKS_CLASS_NAME, true, null);
107.37 + } catch (ClassNotFoundException x) {
107.38 + snmpTimeTicksClass = null;
107.39 + System.err.println("WARNING: can't load "+
107.40 + SNMP_TIME_TICKS_CLASS_NAME);
107.41 + } catch (NoClassDefFoundError x) {
107.42 + snmpTimeTicksClass = null;
107.43 + System.err.println("WARNING: can't load "+
107.44 + SNMP_TIME_TICKS_CLASS_NAME);
107.45 + }
107.46 + SNMP_TIME_TICKS_CLASS = snmpTimeTicksClass;
107.47 + if (SNMP_TIME_TICKS_CLASS != null) {
107.48 + try {
107.49 + SNMP_long_CTOR =
107.50 + SNMP_TIME_TICKS_CLASS.getConstructor(long.class);
107.51 + } catch (Exception x) {
107.52 + throw new ExceptionInInitializerError(x);
107.53 + }
107.54 + } else {
107.55 + SNMP_long_CTOR = null;
107.56 + }
107.57 + if (SNMP_TIME_TICKS_CLASS != null) {
107.58 + try {
107.59 + SNMP_LONG_CTOR =
107.60 + SNMP_TIME_TICKS_CLASS.getConstructor(Long.class);
107.61 + } catch (Exception x) {
107.62 + throw new ExceptionInInitializerError(x);
107.63 + }
107.64 + } else {
107.65 + SNMP_LONG_CTOR = null;
107.66 + }
107.67 + if (SNMP_TIME_TICKS_CLASS != null) {
107.68 + try {
107.69 + SNMP_LONG_VALUE =
107.70 + SNMP_TIME_TICKS_CLASS.getMethod("longValue");
107.71 + } catch (Exception x) {
107.72 + throw new ExceptionInInitializerError(x);
107.73 + }
107.74 + } else {
107.75 + SNMP_LONG_VALUE = null;
107.76 + }
107.77 +
107.78 + }
107.79 +
107.80 + private final Object timeticks;
107.81 +
107.82 + public SnmpTimeticksBuilder(long ticks) throws Exception {
107.83 + timeticks = newSnmpTimeticks(ticks);
107.84 + }
107.85 + public SnmpTimeticksBuilder(Long ticks) throws Exception {
107.86 + timeticks = newSnmpTimeticks(ticks);
107.87 + }
107.88 + public long longValue() throws Exception {
107.89 + return longValue(timeticks);
107.90 + }
107.91 +
107.92 + public static boolean isSnmpPresent() {
107.93 + System.out.println(TimeTicksWrapping.class.getName()+
107.94 + ": Testing for SNMP Packages...");
107.95 + return SNMP_TIME_TICKS_CLASS != null;
107.96 + }
107.97 +
107.98 + private static Object newSnmpTimeticks(long time)
107.99 + throws Exception {
107.100 + try {
107.101 + return SNMP_long_CTOR.newInstance(time);
107.102 + } catch (InvocationTargetException x) {
107.103 + final Throwable cause = x.getCause();
107.104 + if (cause instanceof Exception) throw (Exception) cause;
107.105 + if (cause instanceof Error) throw (Error) cause;
107.106 + throw x;
107.107 + }
107.108 + }
107.109 +
107.110 + private static Object newSnmpTimeticks(Long time)
107.111 + throws Exception {
107.112 + try {
107.113 + return SNMP_LONG_CTOR.newInstance(time);
107.114 + } catch (InvocationTargetException x) {
107.115 + final Throwable cause = x.getCause();
107.116 + if (cause instanceof Exception) throw (Exception) cause;
107.117 + if (cause instanceof Error) throw (Error) cause;
107.118 + throw x;
107.119 + }
107.120 + }
107.121 +
107.122 + private static long longValue(Object o)
107.123 + throws Exception {
107.124 + try {
107.125 + return ((Long)SNMP_LONG_VALUE.invoke(o)).longValue();
107.126 + } catch (InvocationTargetException x) {
107.127 + final Throwable cause = x.getCause();
107.128 + if (cause instanceof Exception) throw (Exception) cause;
107.129 + if (cause instanceof Error) throw (Error) cause;
107.130 + throw x;
107.131 + }
107.132 + }
107.133 +
107.134 + }
107.135 +
107.136 public static final long[] oks = {
107.137 0L, 1L, (long)Integer.MAX_VALUE, (long)Integer.MAX_VALUE*2,
107.138 (long)Integer.MAX_VALUE*2+1L, (long)Integer.MAX_VALUE*2+2L,
107.139 (long)Integer.MAX_VALUE*3,
107.140 - SnmpUnsignedInt.MAX_VALUE, SnmpUnsignedInt.MAX_VALUE+1L,
107.141 - SnmpUnsignedInt.MAX_VALUE*3-1L, Long.MAX_VALUE
107.142 + SnmpTimeticksBuilder.MAX_VALUE, SnmpTimeticksBuilder.MAX_VALUE+1L,
107.143 + SnmpTimeticksBuilder.MAX_VALUE*3-1L, Long.MAX_VALUE
107.144 };
107.145
107.146 public static final long[] kos = {
107.147 -1L, (long)Integer.MIN_VALUE, (long)Integer.MIN_VALUE*2,
107.148 (long)Integer.MIN_VALUE*2-1L, (long)Integer.MIN_VALUE*3,
107.149 - -SnmpUnsignedInt.MAX_VALUE, -(SnmpUnsignedInt.MAX_VALUE+1L),
107.150 - -(SnmpUnsignedInt.MAX_VALUE*3-1L), Long.MIN_VALUE
107.151 + -SnmpTimeticksBuilder.MAX_VALUE, -(SnmpTimeticksBuilder.MAX_VALUE+1L),
107.152 + -(SnmpTimeticksBuilder.MAX_VALUE*3-1L), Long.MIN_VALUE
107.153 };
107.154
107.155 +
107.156 public static void main(String args[]) {
107.157 + if (!SnmpTimeticksBuilder.isSnmpPresent()) {
107.158 + System.err.println("WARNING: "+
107.159 + SnmpTimeticksBuilder.SNMP_TIME_TICKS_CLASS_NAME+
107.160 + " not present.");
107.161 + System.err.println(TimeTicksWrapping.class.getName()+
107.162 + ": test skipped.");
107.163 + return;
107.164 + }
107.165 try {
107.166 - SnmpTimeticks t;
107.167 + SnmpTimeticksBuilder t = null;
107.168
107.169 for (int i=0;i<oks.length;i++) {
107.170 final long t1,t2,t3;
107.171 - t1 = (new SnmpTimeticks(oks[i])).longValue();
107.172 - t2 = (new SnmpTimeticks(new Long(oks[i]))).longValue();
107.173 + t1 = (new SnmpTimeticksBuilder(oks[i])).longValue();
107.174 + t2 = (new SnmpTimeticksBuilder(new Long(oks[i]))).longValue();
107.175 t3 = oks[i]%0x0100000000L;
107.176 if (t1 != t3)
107.177 throw new Exception("Value should have wrapped: " +
107.178 @@ -64,16 +189,16 @@
107.179 throw new Exception("Value should have wrapped: " +
107.180 "Long("+oks[i]+") expected: " + t3);
107.181
107.182 - if (t1 > SnmpUnsignedInt.MAX_VALUE)
107.183 + if (t1 > SnmpTimeticksBuilder.MAX_VALUE)
107.184 throw new Exception("Value should have wrapped " +
107.185 "for " + oks[i] + ": " +
107.186 t1 + " exceeds max: " +
107.187 - SnmpUnsignedInt.MAX_VALUE);
107.188 - if (t2 > SnmpUnsignedInt.MAX_VALUE)
107.189 + SnmpTimeticksBuilder.MAX_VALUE);
107.190 + if (t2 > SnmpTimeticksBuilder.MAX_VALUE)
107.191 throw new Exception("Value should have wrapped " +
107.192 "for " + oks[i] + ": " +
107.193 t2 + " exceeds max: " +
107.194 - SnmpUnsignedInt.MAX_VALUE);
107.195 + SnmpTimeticksBuilder.MAX_VALUE);
107.196
107.197 if (t1 < 0)
107.198 throw new Exception("Value should have wrapped: " +
107.199 @@ -90,14 +215,14 @@
107.200
107.201 for (int i=0;i<kos.length;i++) {
107.202 try {
107.203 - t = new SnmpTimeticks(kos[i]);
107.204 + t = new SnmpTimeticksBuilder(kos[i]);
107.205 throw new Exception("Value should have been rejected: " +
107.206 kos[i]);
107.207 } catch (IllegalArgumentException x) {
107.208 // OK!
107.209 }
107.210 try {
107.211 - t = new SnmpTimeticks(new Long(kos[i]));
107.212 + t = new SnmpTimeticksBuilder(new Long(kos[i]));
107.213 throw new Exception("Value should have been rejected: " +
107.214 "Long("+kos[i]+")");
107.215 } catch (IllegalArgumentException x) {
108.1 --- a/test/java/awt/Frame/FrameSize/TestFrameSize.java Thu Apr 02 10:16:53 2009 -0700
108.2 +++ b/test/java/awt/Frame/FrameSize/TestFrameSize.java Wed Apr 08 15:40:56 2009 -0700
108.3 @@ -15,6 +15,10 @@
108.4 * You should have received a copy of the GNU General Public License version
108.5 * 2 along with this work; if not, write to the Free Software Foundation,
108.6 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
108.7 + *
108.8 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
108.9 + * CA 95054 USA or visit www.sun.com if you need additional information or
108.10 + * have any questions.
108.11 */
108.12
108.13 /*
109.1 --- a/test/java/io/File/GetXSpace.java Thu Apr 02 10:16:53 2009 -0700
109.2 +++ b/test/java/io/File/GetXSpace.java Wed Apr 08 15:40:56 2009 -0700
109.3 @@ -24,6 +24,7 @@
109.4 /**
109.5 * @test
109.6 * @bug 4057701 6286712 6364377
109.7 + * @ignore until 6492634 and 6501010 is fixed
109.8 * @run build GetXSpace
109.9 * @run shell GetXSpace.sh
109.10 * @summary Basic functionality of File.get-X-Space methods.
110.1 --- a/test/java/lang/Thread/StartOOMTest.java Thu Apr 02 10:16:53 2009 -0700
110.2 +++ b/test/java/lang/Thread/StartOOMTest.java Wed Apr 08 15:40:56 2009 -0700
110.3 @@ -24,6 +24,7 @@
110.4 /*
110.5 * @test
110.6 * @bug 6379235
110.7 + * @ignore until 6721694 is fixed
110.8 * @run main/othervm -server -Xmx32m -Xms32m -Xss256m StartOOMTest
110.9 * @summary ThreadGroup accounting mistake possible with failure of Thread.start()
110.10 */
111.1 --- a/test/java/lang/reflect/Method/InheritedMethods.java Thu Apr 02 10:16:53 2009 -0700
111.2 +++ b/test/java/lang/reflect/Method/InheritedMethods.java Wed Apr 08 15:40:56 2009 -0700
111.3 @@ -23,6 +23,7 @@
111.4
111.5 /* @test
111.6 @bug 4471738
111.7 + @ignore until 6825739 fixed
111.8 @summary Failure to properly traverse class hierarchy in Class.getMethod()
111.9 */
111.10
112.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
112.2 +++ b/test/java/security/Permission/ToString.java Wed Apr 08 15:40:56 2009 -0700
112.3 @@ -0,0 +1,101 @@
112.4 +/*
112.5 + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved.
112.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
112.7 + *
112.8 + * This code is free software; you can redistribute it and/or modify it
112.9 + * under the terms of the GNU General Public License version 2 only, as
112.10 + * published by the Free Software Foundation.
112.11 + *
112.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
112.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
112.14 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
112.15 + * version 2 for more details (a copy is included in the LICENSE file that
112.16 + * accompanied this code).
112.17 + *
112.18 + * You should have received a copy of the GNU General Public License version
112.19 + * 2 along with this work; if not, write to the Free Software Foundation,
112.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
112.21 + *
112.22 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
112.23 + * CA 95054 USA or visit www.sun.com if you need additional information or
112.24 + * have any questions.
112.25 + */
112.26 +
112.27 +/*
112.28 + * @test
112.29 + * @bug 6549506
112.30 + * @summary Specification of Permission.toString() method contradicts with
112.31 + * JDK implementation
112.32 + */
112.33 +
112.34 +import java.security.*;
112.35 +
112.36 +public class ToString {
112.37 +
112.38 + public static void main(String[]args) throws Exception {
112.39 + DummyWritePermission dummyPerm = new DummyWritePermission();
112.40 + NullActionPermission nullActionPerm = new NullActionPermission();
112.41 + System.out.println(dummyPerm.toString());
112.42 + System.out.println(dummyPerm.getDescription());
112.43 + System.out.println(nullActionPerm.toString());
112.44 + System.out.println(nullActionPerm.getDescription());
112.45 + if (!dummyPerm.toString().equals(dummyPerm.getDescription())) {
112.46 + throw new Exception("The expected permission.toString() is " +
112.47 + dummyPerm.getDescription() + ", but " +
112.48 + dummyPerm.toString() + " returned!");
112.49 + }
112.50 +
112.51 + if (!nullActionPerm.toString().equals(nullActionPerm.getDescription())) {
112.52 + throw new Exception("The expected permission.toString() is " +
112.53 + nullActionPerm.getDescription() + ", but " +
112.54 + nullActionPerm.toString() + " returned!");
112.55 + }
112.56 + }
112.57 +
112.58 + private static abstract class SimplePermission extends Permission {
112.59 + public SimplePermission(String name) {
112.60 + super(name);
112.61 + }
112.62 +
112.63 + public boolean implies(Permission permission) {
112.64 + return false;
112.65 + }
112.66 +
112.67 + public boolean equals(Object obj) {
112.68 + return false;
112.69 + }
112.70 +
112.71 + public int hashCode() {
112.72 + return 13;
112.73 + }
112.74 + }
112.75 +
112.76 + private static class DummyWritePermission extends SimplePermission {
112.77 + public DummyWritePermission() {
112.78 + super("permit to");
112.79 + }
112.80 +
112.81 + public String getActions() {
112.82 + return "write";
112.83 + }
112.84 +
112.85 + public String getDescription() {
112.86 + return "(\"ToString$DummyWritePermission\" \"permit to\" \"write\")";
112.87 + }
112.88 + }
112.89 +
112.90 + private static class NullActionPermission extends SimplePermission {
112.91 + public NullActionPermission() {
112.92 + super("permit to");
112.93 + }
112.94 +
112.95 + public String getActions() {
112.96 + return null;
112.97 + }
112.98 +
112.99 + public String getDescription() {
112.100 + return "(\"ToString$NullActionPermission\" \"permit to\")";
112.101 + }
112.102 + }
112.103 +
112.104 +}
113.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
113.2 +++ b/test/java/security/cert/CertPathValidator/OCSP/FailoverToCRL.java Wed Apr 08 15:40:56 2009 -0700
113.3 @@ -0,0 +1,265 @@
113.4 +/*
113.5 + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved.
113.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
113.7 + *
113.8 + * This code is free software; you can redistribute it and/or modify it
113.9 + * under the terms of the GNU General Public License version 2 only, as
113.10 + * published by the Free Software Foundation.
113.11 + *
113.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
113.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
113.14 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
113.15 + * version 2 for more details (a copy is included in the LICENSE file that
113.16 + * accompanied this code).
113.17 + *
113.18 + * You should have received a copy of the GNU General Public License version
113.19 + * 2 along with this work; if not, write to the Free Software Foundation,
113.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
113.21 + *
113.22 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
113.23 + * CA 95054 USA or visit www.sun.com if you need additional information or
113.24 + * have any questions.
113.25 + */
113.26 +
113.27 +/**
113.28 + * @test
113.29 + * @bug 6383095
113.30 + * @summary CRL revoked certificate failures masked by OCSP failures
113.31 + *
113.32 + * Note that the certificate validity is from Mar 16 14:55:35 2009 GMT to
113.33 + * Dec 1 14:55:35 2028 GMT, please update it with newer certificate if
113.34 + * expires.
113.35 + *
113.36 + * @author Xuelei Fan
113.37 + */
113.38 +
113.39 +/*
113.40 + * Certificates used in the test.
113.41 + *
113.42 + * end entity certificate:
113.43 + * Data:
113.44 + * Version: 3 (0x2)
113.45 + * Serial Number: 25 (0x19)
113.46 + * Signature Algorithm: md5WithRSAEncryption
113.47 + * Issuer: C=US, ST=Some-State, L=Some-City, O=Some-Org
113.48 + * Validity
113.49 + * Not Before: Mar 16 14:55:35 2009 GMT
113.50 + * Not After : Dec 1 14:55:35 2028 GMT
113.51 + * Subject: C=US, ST=Some-State, L=Some-City, O=Some-Org, OU=SSL-Client,
113.52 + * CN=localhost
113.53 + * Subject Public Key Info:
113.54 + * Public Key Algorithm: rsaEncryption
113.55 + * RSA Public Key: (1024 bit)
113.56 + * Modulus (1024 bit):
113.57 + * 00:bb:f0:40:36:ac:26:54:4e:f4:a3:5a:00:2f:69:
113.58 + * 21:6f:b9:7a:3a:93:ec:a2:f6:e1:8e:c7:63:d8:2f:
113.59 + * 12:30:99:2e:b0:f2:8f:f8:27:2d:24:78:28:84:f7:
113.60 + * 01:bf:8d:44:79:dd:3b:d2:55:f3:ce:3c:b2:5b:21:
113.61 + * 7d:ef:fd:33:4a:b1:a3:ff:c6:c8:9b:b9:0f:7c:41:
113.62 + * 35:97:f9:db:3a:05:60:05:15:af:59:17:92:a3:10:
113.63 + * ad:16:1c:e4:07:53:af:a8:76:a2:56:2a:92:d3:f9:
113.64 + * 28:e0:78:cf:5e:1f:48:ab:5c:19:dd:e1:67:43:ba:
113.65 + * 75:8d:f5:82:ac:43:92:44:1b
113.66 + * Exponent: 65537 (0x10001)
113.67 + * X509v3 extensions:
113.68 + * X509v3 Basic Constraints:
113.69 + * CA:FALSE
113.70 + * X509v3 Key Usage:
113.71 + * Digital Signature, Non Repudiation, Key Encipherment
113.72 + * X509v3 Subject Key Identifier:
113.73 + * CD:BB:C8:85:AA:91:BD:FD:1D:BE:CD:67:7C:FF:B3:E9:4C:A8:22:E6
113.74 + * X509v3 Authority Key Identifier:
113.75 + * keyid:FA:B9:51:BF:4C:E7:D9:86:98:33:F9:E7:CB:1E:F1:33:49:F7:A8:14
113.76 + * Signature Algorithm: md5WithRSAEncryption
113.77 + *
113.78 + *
113.79 + * trusted certificate authority:
113.80 + * Data:
113.81 + * Version: 3 (0x2)
113.82 + * Serial Number: 0 (0x0)
113.83 + * Signature Algorithm: md5WithRSAEncryption
113.84 + * Issuer: C=US, ST=Some-State, L=Some-City, O=Some-Org
113.85 + * Validity
113.86 + * Not Before: Dec 8 02:43:36 2008 GMT
113.87 + * Not After : Aug 25 02:43:36 2028 GMT
113.88 + * Subject: C=US, ST=Some-State, L=Some-City, O=Some-Org
113.89 + * Subject Public Key Info:
113.90 + * Public Key Algorithm: rsaEncryption
113.91 + * RSA Public Key: (1024 bit)
113.92 + * Modulus (1024 bit):
113.93 + * 00:cb:c4:38:20:07:be:88:a7:93:b0:a1:43:51:2d:
113.94 + * d7:8e:85:af:54:dd:ad:a2:7b:23:5b:cf:99:13:53:
113.95 + * 99:45:7d:ee:6d:ba:2d:bf:e3:ad:6e:3d:9f:1a:f9:
113.96 + * 03:97:e0:17:55:ae:11:26:57:de:01:29:8e:05:3f:
113.97 + * 21:f7:e7:36:e8:2e:37:d7:48:ac:53:d6:60:0e:c7:
113.98 + * 50:6d:f6:c5:85:f7:8b:a6:c5:91:35:72:3c:94:ee:
113.99 + * f1:17:f0:71:e3:ec:1b:ce:ca:4e:40:42:b0:6d:ee:
113.100 + * 6a:0e:d6:e5:ad:3c:0f:c9:ba:82:4f:78:f8:89:97:
113.101 + * 89:2a:95:12:4c:d8:09:2a:e9
113.102 + * Exponent: 65537 (0x10001)
113.103 + * X509v3 extensions:
113.104 + * X509v3 Subject Key Identifier:
113.105 + * FA:B9:51:BF:4C:E7:D9:86:98:33:F9:E7:CB:1E:F1:33:49:F7:A8:14
113.106 + * X509v3 Authority Key Identifier:
113.107 + * keyid:FA:B9:51:BF:4C:E7:D9:86:98:33:F9:E7:CB:1E:F1:33:49:F7:A8:14
113.108 + * DirName:/C=US/ST=Some-State/L=Some-City/O=Some-Org
113.109 + * X509v3 Basic Constraints:
113.110 + * CA:TRUE
113.111 + * Signature Algorithm: md5WithRSAEncryption
113.112 + *
113.113 + * CRL:
113.114 + * Certificate Revocation List (CRL):
113.115 + * Version 2 (0x1)
113.116 + * Signature Algorithm: md5WithRSAEncryption
113.117 + * Issuer: /C=US/ST=Some-State/L=Some-City/O=Some-Org
113.118 + * Last Update: Mar 16 16:27:14 2009 GMT
113.119 + * Next Update: May 15 16:27:14 2028 GMT
113.120 + * CRL extensions:
113.121 + * X509v3 CRL Number:
113.122 + * 2
113.123 + * Revoked Certificates:
113.124 + * Serial Number: 19
113.125 + * Revocation Date: Mar 16 16:22:08 2009 GMT
113.126 + * CRL entry extensions:
113.127 + * X509v3 CRL Reason Code:
113.128 + * Superseded
113.129 + * Signature Algorithm: md5WithRSAEncryption
113.130 + */
113.131 +
113.132 +import java.io.*;
113.133 +import java.net.SocketException;
113.134 +import java.util.*;
113.135 +import java.security.Security;
113.136 +import java.security.cert.*;
113.137 +import java.security.InvalidAlgorithmParameterException;
113.138 +import java.security.cert.CertPathValidatorException.BasicReason;
113.139 +
113.140 +public class FailoverToCRL {
113.141 +
113.142 + static String trusedCertStr =
113.143 + "-----BEGIN CERTIFICATE-----\n" +
113.144 + "MIICrDCCAhWgAwIBAgIBADANBgkqhkiG9w0BAQQFADBJMQswCQYDVQQGEwJVUzET\n" +
113.145 + "MBEGA1UECBMKU29tZS1TdGF0ZTESMBAGA1UEBxMJU29tZS1DaXR5MREwDwYDVQQK\n" +
113.146 + "EwhTb21lLU9yZzAeFw0wODEyMDgwMjQzMzZaFw0yODA4MjUwMjQzMzZaMEkxCzAJ\n" +
113.147 + "BgNVBAYTAlVTMRMwEQYDVQQIEwpTb21lLVN0YXRlMRIwEAYDVQQHEwlTb21lLUNp\n" +
113.148 + "dHkxETAPBgNVBAoTCFNvbWUtT3JnMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB\n" +
113.149 + "gQDLxDggB76Ip5OwoUNRLdeOha9U3a2ieyNbz5kTU5lFfe5tui2/461uPZ8a+QOX\n" +
113.150 + "4BdVrhEmV94BKY4FPyH35zboLjfXSKxT1mAOx1Bt9sWF94umxZE1cjyU7vEX8HHj\n" +
113.151 + "7BvOyk5AQrBt7moO1uWtPA/JuoJPePiJl4kqlRJM2Akq6QIDAQABo4GjMIGgMB0G\n" +
113.152 + "A1UdDgQWBBT6uVG/TOfZhpgz+efLHvEzSfeoFDBxBgNVHSMEajBogBT6uVG/TOfZ\n" +
113.153 + "hpgz+efLHvEzSfeoFKFNpEswSTELMAkGA1UEBhMCVVMxEzARBgNVBAgTClNvbWUt\n" +
113.154 + "U3RhdGUxEjAQBgNVBAcTCVNvbWUtQ2l0eTERMA8GA1UEChMIU29tZS1PcmeCAQAw\n" +
113.155 + "DAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQQFAAOBgQBcIm534U123Hz+rtyYO5uA\n" +
113.156 + "ofd81G6FnTfEAV8Kw9fGyyEbQZclBv34A9JsFKeMvU4OFIaixD7nLZ/NZ+IWbhmZ\n" +
113.157 + "LovmJXyCkOufea73pNiZ+f/4/ScZaIlM/PRycQSqbFNd4j9Wott+08qxHPLpsf3P\n" +
113.158 + "6Mvf0r1PNTY2hwTJLJmKtg==\n" +
113.159 + "-----END CERTIFICATE-----";
113.160 +
113.161 + static String targetCertStr =
113.162 + "-----BEGIN CERTIFICATE-----\n" +
113.163 + "MIICizCCAfSgAwIBAgIBGTANBgkqhkiG9w0BAQQFADBJMQswCQYDVQQGEwJVUzET\n" +
113.164 + "MBEGA1UECBMKU29tZS1TdGF0ZTESMBAGA1UEBxMJU29tZS1DaXR5MREwDwYDVQQK\n" +
113.165 + "EwhTb21lLU9yZzAeFw0wOTAzMTYxNDU1MzVaFw0yODEyMDExNDU1MzVaMHIxCzAJ\n" +
113.166 + "BgNVBAYTAlVTMRMwEQYDVQQIEwpTb21lLVN0YXRlMRIwEAYDVQQHEwlTb21lLUNp\n" +
113.167 + "dHkxETAPBgNVBAoTCFNvbWUtT3JnMRMwEQYDVQQLEwpTU0wtQ2xpZW50MRIwEAYD\n" +
113.168 + "VQQDEwlsb2NhbGhvc3QwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALvwQDas\n" +
113.169 + "JlRO9KNaAC9pIW+5ejqT7KL24Y7HY9gvEjCZLrDyj/gnLSR4KIT3Ab+NRHndO9JV\n" +
113.170 + "8848slshfe/9M0qxo//GyJu5D3xBNZf52zoFYAUVr1kXkqMQrRYc5AdTr6h2olYq\n" +
113.171 + "ktP5KOB4z14fSKtcGd3hZ0O6dY31gqxDkkQbAgMBAAGjWjBYMAkGA1UdEwQCMAAw\n" +
113.172 + "CwYDVR0PBAQDAgXgMB0GA1UdDgQWBBTNu8iFqpG9/R2+zWd8/7PpTKgi5jAfBgNV\n" +
113.173 + "HSMEGDAWgBT6uVG/TOfZhpgz+efLHvEzSfeoFDANBgkqhkiG9w0BAQQFAAOBgQBv\n" +
113.174 + "p7JjCDOrMBNun46xs4Gz7Y4ygM5VHaFP0oO7369twvRSu0pCuIdZd5OIMPFeRqQw\n" +
113.175 + "PA68ZdhYVR0pG5W7isV+jB+Dfge/IOgOA85sZ/6FlP3PBRW+YMQKKdRr5So3ook9\n" +
113.176 + "PimQ7rbxRAofPECv20IUKFBbOUkU+gFcn+WbTKYxBw==\n" +
113.177 + "-----END CERTIFICATE-----";
113.178 +
113.179 + static String crlStr =
113.180 + "-----BEGIN X509 CRL-----\n" +
113.181 + "MIIBRTCBrwIBATANBgkqhkiG9w0BAQQFADBJMQswCQYDVQQGEwJVUzETMBEGA1UE\n" +
113.182 + "CBMKU29tZS1TdGF0ZTESMBAGA1UEBxMJU29tZS1DaXR5MREwDwYDVQQKEwhTb21l\n" +
113.183 + "LU9yZxcNMDkwMzE2MTYyNzE0WhcNMjgwNTE1MTYyNzE0WjAiMCACARkXDTA5MDMx\n" +
113.184 + "NjE2MjIwOFowDDAKBgNVHRUEAwoBBKAOMAwwCgYDVR0UBAMCAQIwDQYJKoZIhvcN\n" +
113.185 + "AQEEBQADgYEAMixJI9vBwYpOGosn46+T/MTEtlm2S5pIVT/xPDrHkCPfw8l4Zrgp\n" +
113.186 + "dGPuUkglWdrGdxY9MNRUj2YFNfdZi6zZ7JF6XbkDHYOAKYgPDJRjS/0VcBntn5RJ\n" +
113.187 + "sQfZsBqc9fFSP8gknRRn3LT41kr9xNRxTT1t3YYjv7J3zkMYyInqeUA=\n" +
113.188 + "-----END X509 CRL-----";
113.189 +
113.190 +
113.191 + private static CertPath generateCertificatePath()
113.192 + throws CertificateException {
113.193 + // generate certificate from cert strings
113.194 + CertificateFactory cf = CertificateFactory.getInstance("X.509");
113.195 +
113.196 + ByteArrayInputStream is =
113.197 + new ByteArrayInputStream(targetCertStr.getBytes());
113.198 + Certificate targetCert = cf.generateCertificate(is);
113.199 +
113.200 + // generate certification path
113.201 + List<Certificate> list = Arrays.asList(new Certificate[] {targetCert});
113.202 +
113.203 + return cf.generateCertPath(list);
113.204 + }
113.205 +
113.206 + private static Set<TrustAnchor> generateTrustAnchors()
113.207 + throws CertificateException {
113.208 + // generate certificate from cert string
113.209 + CertificateFactory cf = CertificateFactory.getInstance("X.509");
113.210 +
113.211 + ByteArrayInputStream is =
113.212 + new ByteArrayInputStream(trusedCertStr.getBytes());
113.213 + Certificate trusedCert = cf.generateCertificate(is);
113.214 +
113.215 + // generate a trust anchor
113.216 + TrustAnchor anchor = new TrustAnchor((X509Certificate)trusedCert, null);
113.217 +
113.218 + return Collections.singleton(anchor);
113.219 + }
113.220 +
113.221 + private static CertStore generateCertificateStore() throws Exception {
113.222 + // generate CRL from CRL string
113.223 + CertificateFactory cf = CertificateFactory.getInstance("X.509");
113.224 +
113.225 + ByteArrayInputStream is =
113.226 + new ByteArrayInputStream(crlStr.getBytes());
113.227 +
113.228 + // generate a cert store
113.229 + Collection<? extends CRL> crls = cf.generateCRLs(is);
113.230 + return CertStore.getInstance("Collection",
113.231 + new CollectionCertStoreParameters(crls));
113.232 + }
113.233 +
113.234 + public static void main(String args[]) throws Exception {
113.235 + CertPath path = generateCertificatePath();
113.236 + Set<TrustAnchor> anchors = generateTrustAnchors();
113.237 + CertStore crls = generateCertificateStore();
113.238 +
113.239 + PKIXParameters params = new PKIXParameters(anchors);
113.240 +
113.241 + // add the CRL store
113.242 + params.addCertStore(crls);
113.243 +
113.244 + // Activate certificate revocation checking
113.245 + params.setRevocationEnabled(true);
113.246 +
113.247 + // Activate OCSP
113.248 + Security.setProperty("ocsp.enable", "true");
113.249 + System.setProperty("com.sun.security.enableCRLDP", "true");
113.250 +
113.251 + // Ensure that the ocsp.responderURL property is not set.
113.252 + if (Security.getProperty("ocsp.responderURL") != null) {
113.253 + throw new
113.254 + Exception("The ocsp.responderURL property must not be set");
113.255 + }
113.256 +
113.257 + CertPathValidator validator = CertPathValidator.getInstance("PKIX");
113.258 +
113.259 + try {
113.260 + validator.validate(path, params);
113.261 + } catch (CertPathValidatorException cpve) {
113.262 + if (cpve.getReason() != BasicReason.REVOKED) {
113.263 + throw new Exception(
113.264 + "unexpect exception, should be a REVOKED CPVE", cpve);
113.265 + }
113.266 + }
113.267 + }
113.268 +}
114.1 --- a/test/java/util/concurrent/TimeUnit/Basic.java Thu Apr 02 10:16:53 2009 -0700
114.2 +++ b/test/java/util/concurrent/TimeUnit/Basic.java Wed Apr 08 15:40:56 2009 -0700
114.3 @@ -60,10 +60,11 @@
114.4 equal(1000L, MICROSECONDS.toNanos(1));
114.5
114.6 long t0 = System.nanoTime();
114.7 - MILLISECONDS.sleep(3);
114.8 + MILLISECONDS.sleep(3); /* See windows bug 6313903, might not sleep */
114.9 long elapsedMillis = (System.nanoTime() - t0)/(1000L * 1000L);
114.10 System.out.printf("elapsed=%d%n", elapsedMillis);
114.11 - check(elapsedMillis >= 3);
114.12 + check(elapsedMillis >= 0);
114.13 + /* Might not sleep on windows: check(elapsedMillis >= 3); */
114.14 check(elapsedMillis < 1000);
114.15
114.16 //----------------------------------------------------------------
115.1 --- a/test/java/util/logging/LoggingDeadlock2.java Thu Apr 02 10:16:53 2009 -0700
115.2 +++ b/test/java/util/logging/LoggingDeadlock2.java Wed Apr 08 15:40:56 2009 -0700
115.3 @@ -24,7 +24,7 @@
115.4 /*
115.5 * @test
115.6 * @bug 6467152
115.7 - *
115.8 + * @ignore until 6716076 is fixed
115.9 * @summary deadlock occurs in LogManager initialization and JVM termination
115.10 * @author Serguei Spitsyn / Hittachi
115.11 *
116.1 --- a/test/java/util/regex/RegExTest.java Thu Apr 02 10:16:53 2009 -0700
116.2 +++ b/test/java/util/regex/RegExTest.java Wed Apr 08 15:40:56 2009 -0700
116.3 @@ -3389,6 +3389,11 @@
116.4 "gname",
116.5 "yyy");
116.6
116.7 + check(Pattern.compile("x+(?<8gname>y+)z+"),
116.8 + "xxxyyyzzz",
116.9 + "8gname",
116.10 + "yyy");
116.11 +
116.12 //backref
116.13 Pattern pattern = Pattern.compile("(a*)bc\\1");
116.14 check(pattern, "zzzaabcazzz", true); // found "abca"
117.1 --- a/test/java/util/zip/ZipFile/LargeZipFile.java Thu Apr 02 10:16:53 2009 -0700
117.2 +++ b/test/java/util/zip/ZipFile/LargeZipFile.java Wed Apr 08 15:40:56 2009 -0700
117.3 @@ -1,3 +1,26 @@
117.4 +/*
117.5 + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved.
117.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
117.7 + *
117.8 + * This code is free software; you can redistribute it and/or modify it
117.9 + * under the terms of the GNU General Public License version 2 only, as
117.10 + * published by the Free Software Foundation.
117.11 + *
117.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
117.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
117.14 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
117.15 + * version 2 for more details (a copy is included in the LICENSE file that
117.16 + * accompanied this code).
117.17 + *
117.18 + * You should have received a copy of the GNU General Public License version
117.19 + * 2 along with this work; if not, write to the Free Software Foundation,
117.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
117.21 + *
117.22 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
117.23 + * CA 95054 USA or visit www.sun.com if you need additional information or
117.24 + * have any questions.
117.25 + */
117.26 +
117.27 import java.io.*;
117.28 import java.nio.*;
117.29 import java.util.*;
118.1 --- a/test/javax/script/Test3.java Thu Apr 02 10:16:53 2009 -0700
118.2 +++ b/test/javax/script/Test3.java Wed Apr 08 15:40:56 2009 -0700
118.3 @@ -4,7 +4,6 @@
118.4 *
118.5 * This code is free software; you can redistribute it and/or modify it
118.6 * under the terms of the GNU General Public License version 2 only, as
118.7 -
118.8 * published by the Free Software Foundation.
118.9 *
118.10 * This code is distributed in the hope that it will be useful, but WITHOUT
119.1 --- a/test/sun/nio/cs/FindEncoderBugs.java Thu Apr 02 10:16:53 2009 -0700
119.2 +++ b/test/sun/nio/cs/FindEncoderBugs.java Wed Apr 08 15:40:56 2009 -0700
119.3 @@ -526,4 +526,3 @@
119.4 System.out.printf("%nPassed = %d, failed = %d%n%n", passed, failed);
119.5 if (failed > 0) throw new AssertionError("Some tests failed");}
119.6 }
119.7 -
120.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
120.2 +++ b/test/sun/nio/cs/StrCodingBenchmark.java Wed Apr 08 15:40:56 2009 -0700
120.3 @@ -0,0 +1,200 @@
120.4 +/*
120.5 + * Copyright (c) 2009 Sun Microsystems, Inc. All Rights Reserved.
120.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
120.7 + *
120.8 + * This code is free software; you can redistribute it and/or modify it
120.9 + * under the terms of the GNU General Public License version 2 only, as
120.10 + * published by the Free Software Foundation.
120.11 + *
120.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
120.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
120.14 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
120.15 + * version 2 for more details (a copy is included in the LICENSE file that
120.16 + * accompanied this code).
120.17 + *
120.18 + * You should have received a copy of the GNU General Public License version
120.19 + * 2 along with this work; if not, write to the Free Software Foundation,
120.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
120.21 + *
120.22 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
120.23 + * CA 95054 USA or visit www.sun.com if you need additional information or
120.24 + * have any questions.
120.25 + */
120.26 +
120.27 +import java.util.*;
120.28 +import java.nio.*;
120.29 +import java.nio.charset.*;
120.30 +import java.util.concurrent.*;
120.31 +import java.util.regex.Pattern;
120.32 +
120.33 +/**
120.34 + * Usage: java StringCodingBenchmark
120.35 + * [-Diterations=N] [-Dsize=N] [-Dsubsize=N] [-Dmaxchar=N]
120.36 + * [-Dfilter=REGEXP] [-DSecurityManager=true]
120.37 + */
120.38 +public class StrCodingBenchmark {
120.39 + abstract static class Job {
120.40 + private final String name;
120.41 + public Job(String name) { this.name = name; }
120.42 + public String name() { return name; }
120.43 + public abstract void work() throws Throwable;
120.44 + }
120.45 +
120.46 + private static void collectAllGarbage() {
120.47 + final java.util.concurrent.CountDownLatch drained
120.48 + = new java.util.concurrent.CountDownLatch(1);
120.49 + try {
120.50 + System.gc(); // enqueue finalizable objects
120.51 + new Object() { protected void finalize() {
120.52 + drained.countDown(); }};
120.53 + System.gc(); // enqueue detector
120.54 + drained.await(); // wait for finalizer queue to drain
120.55 + System.gc(); // cleanup finalized objects
120.56 + } catch (InterruptedException e) { throw new Error(e); }
120.57 + }
120.58 +
120.59 + /**
120.60 + * Runs each job for long enough that all the runtime compilers
120.61 + * have had plenty of time to warm up, i.e. get around to
120.62 + * compiling everything worth compiling.
120.63 + * Returns array of average times per job per run.
120.64 + */
120.65 + public static long[] time0(Job ... jobs) throws Throwable {
120.66 + //final long warmupNanos = 10L * 1000L * 1000L * 1000L;
120.67 + final long warmupNanos = 100L * 100L;
120.68 + long[] nanoss = new long[jobs.length];
120.69 + for (int i = 0; i < jobs.length; i++) {
120.70 + collectAllGarbage();
120.71 + long t0 = System.nanoTime();
120.72 + long t;
120.73 + int j = 0;
120.74 + do { jobs[i].work(); j++; }
120.75 + while ((t = System.nanoTime() - t0) < warmupNanos);
120.76 + nanoss[i] = t/j;
120.77 + }
120.78 + return nanoss;
120.79 + }
120.80 +
120.81 + public static void time(Job ... jobs) throws Throwable {
120.82 +
120.83 + long[] warmup = time0(jobs); // Warm up run
120.84 + long[] nanoss = time0(jobs); // Real timing run
120.85 + long[] milliss = new long[jobs.length];
120.86 + double[] ratios = new double[jobs.length];
120.87 +
120.88 + final String nameHeader = "Method";
120.89 + final String millisHeader = "Millis";
120.90 + final String ratioHeader = "Ratio";
120.91 +
120.92 + int nameWidth = nameHeader.length();
120.93 + int millisWidth = millisHeader.length();
120.94 + int ratioWidth = ratioHeader.length();
120.95 +
120.96 + for (int i = 0; i < jobs.length; i++) {
120.97 + nameWidth = Math.max(nameWidth, jobs[i].name().length());
120.98 +
120.99 + milliss[i] = nanoss[i]/(1000L * 1000L);
120.100 + millisWidth = Math.max(millisWidth,
120.101 + String.format("%d", milliss[i]).length());
120.102 +
120.103 + ratios[i] = (double) nanoss[i] / (double) nanoss[0];
120.104 + ratioWidth = Math.max(ratioWidth,
120.105 + String.format("%.3f", ratios[i]).length());
120.106 + }
120.107 + String format = String.format("%%-%ds %%%dd %n",
120.108 + nameWidth, millisWidth);
120.109 + String headerFormat = String.format("%%-%ds %%%ds%n",
120.110 + nameWidth, millisWidth);
120.111 + System.out.printf(headerFormat, "Method", "Millis");
120.112 +
120.113 + // Print out absolute and relative times, calibrated against first job
120.114 + for (int i = 0; i < jobs.length; i++)
120.115 + System.out.printf(format, jobs[i].name(), milliss[i], ratios[i]);
120.116 + }
120.117 +
120.118 + public static Job[] filter(Pattern filter, Job[] jobs) {
120.119 + if (filter == null) return jobs;
120.120 + Job[] newJobs = new Job[jobs.length];
120.121 + int n = 0;
120.122 + for (Job job : jobs)
120.123 + if (filter.matcher(job.name()).find())
120.124 + newJobs[n++] = job;
120.125 + // Arrays.copyOf not available in JDK 5
120.126 + Job[] ret = new Job[n];
120.127 + System.arraycopy(newJobs, 0, ret, 0, n);
120.128 + return ret;
120.129 + }
120.130 +
120.131 + static class PermissiveSecurityManger extends SecurityManager {
120.132 + @Override public void checkPermission(java.security.Permission p) {
120.133 + }
120.134 + }
120.135 +
120.136 + public static void main(String[] args) throws Throwable {
120.137 + final int itrs = Integer.getInteger("iterations", 100000);
120.138 + final int size = Integer.getInteger("size", 2048);
120.139 + final int subsize = Integer.getInteger("subsize", 128);
120.140 + final int maxchar = Integer.getInteger("maxchar", 128);
120.141 + final String regex = System.getProperty("filter");
120.142 + final Pattern filter = (regex == null) ? null : Pattern.compile(regex);
120.143 + final boolean useSecurityManager = Boolean.getBoolean("SecurityManager");
120.144 + if (useSecurityManager)
120.145 + System.setSecurityManager(new PermissiveSecurityManger());
120.146 + final Random rnd = new Random();
120.147 +
120.148 + for (Charset charset: Charset.availableCharsets().values()) {
120.149 + if (!("ISO-8859-1".equals(charset.name()) ||
120.150 + "US-ASCII".equals(charset.name()) ||
120.151 + charset.newDecoder() instanceof sun.nio.cs.SingleByte.Decoder))
120.152 + continue;
120.153 + final String csn = charset.name();
120.154 + final Charset cs = charset;
120.155 + final StringBuilder sb = new StringBuilder();
120.156 + {
120.157 + final CharsetEncoder enc = cs.newEncoder();
120.158 + for (int i = 0; i < size; ) {
120.159 + char c = (char) rnd.nextInt(maxchar);
120.160 + if (enc.canEncode(c)) {
120.161 + sb.append(c);
120.162 + i++;
120.163 + }
120.164 + }
120.165 + }
120.166 + final String string = sb.toString();
120.167 + final byte[] bytes = string.getBytes(cs);
120.168 +
120.169 + System.out.printf("%n--------%s---------%n", csn);
120.170 + for (int sz = 4; sz <= 2048; sz *= 2) {
120.171 + System.out.printf(" [len=%d]%n", sz);
120.172 + final byte[] bs = Arrays.copyOf(bytes, sz);
120.173 + final String str = new String(bs, csn);
120.174 + Job[] jobs = {
120.175 + new Job("String decode: csn") {
120.176 + public void work() throws Throwable {
120.177 + for (int i = 0; i < itrs; i++)
120.178 + new String(bs, csn);
120.179 + }},
120.180 +
120.181 + new Job("String decode: cs") {
120.182 + public void work() throws Throwable {
120.183 + for (int i = 0; i < itrs; i++)
120.184 + new String(bs, cs);
120.185 + }},
120.186 +
120.187 + new Job("String encode: csn") {
120.188 + public void work() throws Throwable {
120.189 + for (int i = 0; i < itrs; i++)
120.190 + str.getBytes(csn);
120.191 + }},
120.192 +
120.193 + new Job("String encode: cs") {
120.194 + public void work() throws Throwable {
120.195 + for (int i = 0; i < itrs; i++)
120.196 + str.getBytes(cs);
120.197 + }},
120.198 + };
120.199 + time(filter(filter, jobs));
120.200 + }
120.201 + }
120.202 + }
120.203 +}
121.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
121.2 +++ b/test/sun/nio/cs/TestStringCoding.java Wed Apr 08 15:40:56 2009 -0700
121.3 @@ -0,0 +1,151 @@
121.4 +/*
121.5 + * Copyright 2000-2009 Sun Microsystems, Inc. All Rights Reserved.
121.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
121.7 + *
121.8 + * This code is free software; you can redistribute it and/or modify it
121.9 + * under the terms of the GNU General Public License version 2 only, as
121.10 + * published by the Free Software Foundation. Sun designates this
121.11 + * particular file as subject to the "Classpath" exception as provided
121.12 + * by Sun in the LICENSE file that accompanied this code.
121.13 + *
121.14 + * This code is distributed in the hope that it will be useful, but WITHOUT
121.15 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
121.16 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
121.17 + * version 2 for more details (a copy is included in the LICENSE file that
121.18 + * accompanied this code).
121.19 + *
121.20 + * You should have received a copy of the GNU General Public License version
121.21 + * 2 along with this work; if not, write to the Free Software Foundation,
121.22 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
121.23 + *
121.24 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
121.25 + * CA 95054 USA or visit www.sun.com if you need additional information or
121.26 + * have any questions.
121.27 + */
121.28 +
121.29 +/* @test
121.30 + @bug 6636323 6636319
121.31 + @summary Test if StringCoding and NIO result have the same de/encoding result
121.32 + * @run main/timeout=2000 TestStringCoding
121.33 + */
121.34 +
121.35 +import java.util.*;
121.36 +import java.nio.*;
121.37 +import java.nio.charset.*;
121.38 +
121.39 +public class TestStringCoding {
121.40 + public static void main(String[] args) throws Throwable {
121.41 +
121.42 + for (Boolean hasSM: new boolean[] { false, true }) {
121.43 + if (hasSM)
121.44 + System.setSecurityManager(new PermissiveSecurityManger());
121.45 + for (Charset cs: Charset.availableCharsets().values()) {
121.46 + if ("ISO-2022-CN".equals(cs.name()) ||
121.47 + "x-COMPOUND_TEXT".equals(cs.name()) ||
121.48 + "x-JISAutoDetect".equals(cs.name()))
121.49 + continue;
121.50 + System.out.printf("Testing(sm=%b) " + cs.name() + "....", hasSM);
121.51 + // full bmp first
121.52 + char[] bmpCA = new char[0x10000];
121.53 + for (int i = 0; i < 0x10000; i++) {
121.54 + bmpCA[i] = (char)i;
121.55 + }
121.56 + byte[] sbBA = new byte[0x100];
121.57 + for (int i = 0; i < 0x100; i++) {
121.58 + sbBA[i] = (byte)i;
121.59 + }
121.60 + test(cs, bmpCA, sbBA);
121.61 + // "randomed" sizes
121.62 + Random rnd = new Random();
121.63 + for (int i = 0; i < 10; i++) {
121.64 + int clen = rnd.nextInt(0x10000);
121.65 + int blen = rnd.nextInt(0x100);
121.66 + //System.out.printf(" blen=%d, clen=%d%n", blen, clen);
121.67 + test(cs, Arrays.copyOf(bmpCA, clen), Arrays.copyOf(sbBA, blen));
121.68 + //add a pair of surrogates
121.69 + int pos = clen / 2;
121.70 + if ((pos + 1) < blen) {
121.71 + bmpCA[pos] = '\uD800';
121.72 + bmpCA[pos+1] = '\uDC00';
121.73 + }
121.74 + test(cs, Arrays.copyOf(bmpCA, clen), Arrays.copyOf(sbBA, blen));
121.75 + }
121.76 + System.out.println("done!");
121.77 + }
121.78 + }
121.79 + }
121.80 +
121.81 + static void test(Charset cs, char[] bmpCA, byte[] sbBA) throws Throwable {
121.82 + String bmpStr = new String(bmpCA);
121.83 + CharsetDecoder dec = cs.newDecoder()
121.84 + .onMalformedInput(CodingErrorAction.REPLACE)
121.85 + .onUnmappableCharacter(CodingErrorAction.REPLACE);
121.86 + CharsetEncoder enc = cs.newEncoder()
121.87 + .onMalformedInput(CodingErrorAction.REPLACE)
121.88 + .onUnmappableCharacter(CodingErrorAction.REPLACE);
121.89 +
121.90 + //getBytes(csn);
121.91 + byte[] baSC = bmpStr.getBytes(cs.name());
121.92 + ByteBuffer bf = enc.reset().encode(CharBuffer.wrap(bmpCA));
121.93 + byte[] baNIO = new byte[bf.limit()];
121.94 + bf.get(baNIO, 0, baNIO.length);
121.95 + if (!Arrays.equals(baSC, baNIO))
121.96 + throw new RuntimeException("getBytes(csn) failed -> " + cs.name());
121.97 +
121.98 + //getBytes(cs);
121.99 + baSC = bmpStr.getBytes(cs);
121.100 + if (!Arrays.equals(baSC, baNIO))
121.101 + throw new RuntimeException("getBytes(cs) failed -> " + cs.name());
121.102 +
121.103 + //new String(csn);
121.104 + String strSC = new String(sbBA, cs.name());
121.105 + String strNIO = dec.reset().decode(ByteBuffer.wrap(sbBA)).toString();
121.106 + if(!strNIO.equals(strSC))
121.107 + throw new RuntimeException("new String(csn) failed -> " + cs.name());
121.108 +
121.109 + //new String(cs);
121.110 + strSC = new String(sbBA, cs);
121.111 + if (!strNIO.equals(strSC))
121.112 + throw new RuntimeException("new String(cs) failed -> " + cs.name());
121.113 +
121.114 + //encode unmappable surrogates
121.115 + if (enc instanceof sun.nio.cs.ArrayEncoder &&
121.116 + cs.contains(Charset.forName("ASCII"))) {
121.117 + enc.replaceWith(new byte[] { (byte)'A'});
121.118 + sun.nio.cs.ArrayEncoder cae = (sun.nio.cs.ArrayEncoder)enc;
121.119 +
121.120 + String str = "ab\uD800\uDC00\uD800\uDC00cd";
121.121 + byte[] ba = new byte[str.length() - 2];
121.122 + int n = cae.encode(str.toCharArray(), 0, str.length(), ba);
121.123 + if (n != 6 || !"abAAcd".equals(new String(ba, cs.name())))
121.124 + throw new RuntimeException("encode1(surrogates) failed -> "
121.125 + + cs.name());
121.126 +
121.127 + ba = new byte[str.length()];
121.128 + n = cae.encode(str.toCharArray(), 0, str.length(), ba);
121.129 + if (n != 6 || !"abAAcd".equals(new String(ba, 0, n,
121.130 + cs.name())))
121.131 + throw new RuntimeException("encode2(surrogates) failed -> "
121.132 + + cs.name());
121.133 + str = "ab\uD800B\uDC00Bcd";
121.134 + ba = new byte[str.length()];
121.135 + n = cae.encode(str.toCharArray(), 0, str.length(), ba);
121.136 + if (n != 8 || !"abABABcd".equals(new String(ba, 0, n,
121.137 + cs.name())))
121.138 + throw new RuntimeException("encode3(surrogates) failed -> "
121.139 + + cs.name());
121.140 +
121.141 + ba = new byte[str.length() - 1];
121.142 + n = cae.encode(str.toCharArray(), 0, str.length(), ba);
121.143 + if (n != 7 || !"abABABc".equals(new String(ba, 0, n,
121.144 + cs.name())))
121.145 + throw new RuntimeException("encode4(surrogates) failed -> "
121.146 + + cs.name());
121.147 + }
121.148 +
121.149 + }
121.150 +
121.151 + static class PermissiveSecurityManger extends SecurityManager {
121.152 + @Override public void checkPermission(java.security.Permission p) {}
121.153 + }
121.154 +}
122.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
122.2 +++ b/test/sun/security/krb5/auto/SpnegoReqFlags.java Wed Apr 08 15:40:56 2009 -0700
122.3 @@ -0,0 +1,92 @@
122.4 +/*
122.5 + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved.
122.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
122.7 + *
122.8 + * This code is free software; you can redistribute it and/or modify it
122.9 + * under the terms of the GNU General Public License version 2 only, as
122.10 + * published by the Free Software Foundation.
122.11 + *
122.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
122.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
122.14 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
122.15 + * version 2 for more details (a copy is included in the LICENSE file that
122.16 + * accompanied this code).
122.17 + *
122.18 + * You should have received a copy of the GNU General Public License version
122.19 + * 2 along with this work; if not, write to the Free Software Foundation,
122.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
122.21 + *
122.22 + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
122.23 + * CA 95054 USA or visit www.sun.com if you need additional information or
122.24 + * have any questions.
122.25 + */
122.26 +
122.27 +/*
122.28 + * @test
122.29 + * @bug 6815182
122.30 + * @summary GSSAPI/SPNEGO does not work with server using MIT Kerberos library
122.31 + */
122.32 +
122.33 +import sun.security.jgss.GSSUtil;
122.34 +import sun.security.util.BitArray;
122.35 +import sun.security.util.DerInputStream;
122.36 +import sun.security.util.DerValue;
122.37 +
122.38 +public class SpnegoReqFlags {
122.39 +
122.40 + public static void main(String[] args)
122.41 + throws Exception {
122.42 +
122.43 + // Create and start the KDC
122.44 + new OneKDC(null).writeJAASConf();
122.45 + new SpnegoReqFlags().go();
122.46 + }
122.47 +
122.48 + void go() throws Exception {
122.49 + Context c = Context.fromJAAS("client");
122.50 + c.startAsClient(OneKDC.SERVER, GSSUtil.GSS_SPNEGO_MECH_OID);
122.51 +
122.52 + byte[] token = c.doAs(new Action() {
122.53 + @Override
122.54 + public byte[] run(Context me, byte[] input) throws Exception {
122.55 + me.x().requestCredDeleg(true);
122.56 + me.x().requestReplayDet(false);
122.57 + me.x().requestSequenceDet(false);
122.58 + return me.x().initSecContext(new byte[0], 0, 0);
122.59 + }
122.60 + }, null);
122.61 +
122.62 + DerValue d = new DerValue(token); // GSSToken
122.63 + DerInputStream ins = d.data; // OID + mech token
122.64 + d.data.getDerValue(); // skip OID
122.65 + d = d.data.getDerValue(); // NegTokenInit
122.66 + d = d.data.getDerValue(); // The SEQUENCE inside
122.67 +
122.68 + boolean found = false;
122.69 +
122.70 + // Go through all fields inside NegTokenInit. The reqFlags field
122.71 + // is optional. It's even not recommended in RFC 4178.
122.72 + while (d.data.available() > 0) {
122.73 + DerValue d2 = d.data.getDerValue();
122.74 + if (d2.isContextSpecific((byte)1)) {
122.75 + found = true;
122.76 + System.out.println("regFlags field located.");
122.77 + BitArray ba = d2.data.getUnalignedBitString();
122.78 + if (ba.length() != 7) {
122.79 + throw new Exception("reqFlags should contain 7 bits");
122.80 + }
122.81 + if (!ba.get(0)) {
122.82 + throw new Exception("delegFlag should be true");
122.83 + }
122.84 + if (ba.get(2) || ba.get(3)) {
122.85 + throw new Exception("replay/sequenceFlag should be false");
122.86 + }
122.87 + }
122.88 + }
122.89 +
122.90 + if (!found) {
122.91 + System.out.println("Warning: regFlags field not found, too new?");
122.92 + }
122.93 + c.dispose();
122.94 + }
122.95 +}
123.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
123.2 +++ b/test/sun/security/tools/keytool/NoExtNPE.sh Wed Apr 08 15:40:56 2009 -0700
123.3 @@ -0,0 +1,65 @@
123.4 +#
123.5 +# Copyright 2009 Sun Microsystems, Inc. All Rights Reserved.
123.6 +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
123.7 +#
123.8 +# This code is free software; you can redistribute it and/or modify it
123.9 +# under the terms of the GNU General Public License version 2 only, as
123.10 +# published by the Free Software Foundation.
123.11 +#
123.12 +# This code is distributed in the hope that it will be useful, but WITHOUT
123.13 +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
123.14 +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
123.15 +# version 2 for more details (a copy is included in the LICENSE file that
123.16 +# accompanied this code).
123.17 +#
123.18 +# You should have received a copy of the GNU General Public License version
123.19 +# 2 along with this work; if not, write to the Free Software Foundation,
123.20 +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
123.21 +#
123.22 +# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
123.23 +# CA 95054 USA or visit www.sun.com if you need additional information or
123.24 +# have any questions.
123.25 +#
123.26 +
123.27 +# @test
123.28 +# @bug 6813402
123.29 +# @summary keytool cannot -printcert entries without extensions
123.30 +#
123.31 +# @run shell NoExtNPE.sh
123.32 +
123.33 +# set a few environment variables so that the shell-script can run stand-alone
123.34 +# in the source directory
123.35 +if [ "${TESTSRC}" = "" ] ; then
123.36 + TESTSRC="."
123.37 +fi
123.38 +
123.39 +if [ "${TESTJAVA}" = "" ] ; then
123.40 + echo "TESTJAVA not set. Test cannot execute."
123.41 + echo "FAILED!!!"
123.42 + exit 1
123.43 +fi
123.44 +
123.45 +# set platform-dependent variables
123.46 +OS=`uname -s`
123.47 +case "$OS" in
123.48 + SunOS )
123.49 + FILESEP="/"
123.50 + ;;
123.51 + Linux )
123.52 + FILESEP="/"
123.53 + ;;
123.54 + Windows* )
123.55 + FILESEP="\\"
123.56 + ;;
123.57 + * )
123.58 + echo "Unrecognized system!"
123.59 + exit 1;
123.60 + ;;
123.61 +esac
123.62 +
123.63 +${TESTJAVA}${FILESEP}bin${FILESEP}keytool \
123.64 + -list -v \
123.65 + -keystore ${TESTSRC}${FILESEP}CloneKeyAskPassword.jks \
123.66 + -storepass test123
123.67 +
123.68 +exit $?
124.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
124.2 +++ b/test/sun/security/tools/keytool/importreadall.sh Wed Apr 08 15:40:56 2009 -0700
124.3 @@ -0,0 +1,62 @@
124.4 +#
124.5 +# Copyright 2009 Sun Microsystems, Inc. All Rights Reserved.
124.6 +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
124.7 +#
124.8 +# This code is free software; you can redistribute it and/or modify it
124.9 +# under the terms of the GNU General Public License version 2 only, as
124.10 +# published by the Free Software Foundation.
124.11 +#
124.12 +# This code is distributed in the hope that it will be useful, but WITHOUT
124.13 +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
124.14 +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
124.15 +# version 2 for more details (a copy is included in the LICENSE file that
124.16 +# accompanied this code).
124.17 +#
124.18 +# You should have received a copy of the GNU General Public License version
124.19 +# 2 along with this work; if not, write to the Free Software Foundation,
124.20 +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
124.21 +#
124.22 +# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
124.23 +# CA 95054 USA or visit www.sun.com if you need additional information or
124.24 +# have any questions.
124.25 +#
124.26 +
124.27 +# @test
124.28 +# @bug 6819272
124.29 +# @summary keytool -importcert should read the whole input
124.30 +#
124.31 +# @run shell importreadall.sh
124.32 +
124.33 +# set a few environment variables so that the shell-script can run stand-alone
124.34 +# in the source directory
124.35 +if [ "${TESTSRC}" = "" ] ; then
124.36 + TESTSRC="."
124.37 +fi
124.38 +
124.39 +if [ "${TESTJAVA}" = "" ] ; then
124.40 + JAVA_CMD=`which java`
124.41 + TESTJAVA=`dirname $JAVA_CMD`/..
124.42 +fi
124.43 +
124.44 +# set platform-dependent variables
124.45 +OS=`uname -s`
124.46 +case "$OS" in
124.47 + Windows_* )
124.48 + FS="\\"
124.49 + ;;
124.50 + * )
124.51 + FS="/"
124.52 + ;;
124.53 +esac
124.54 +
124.55 +KEYTOOL="${TESTJAVA}${FS}bin${FS}keytool -keystore importreadall.jks -storepass changeit -keypass changeit"
124.56 +
124.57 +# In case the test is run twice in the same directory
124.58 +
124.59 +$KEYTOOL -delete -alias a
124.60 +$KEYTOOL -delete -alias ca
124.61 +$KEYTOOL -genkeypair -alias a -dname CN=a || exit 1
124.62 +$KEYTOOL -genkeypair -alias ca -dname CN=ca || exit 2
124.63 +$KEYTOOL -certreq -alias a | $KEYTOOL -gencert -alias ca | $KEYTOOL -importcert -alias a
124.64 +
124.65 +exit $?