Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_jdk
提交
83d20ffd
D
dragonwell8_jdk
项目概览
openanolis
/
dragonwell8_jdk
通知
4
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
dragonwell8_jdk
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
83d20ffd
编写于
11月 18, 2011
作者:
L
lana
浏览文件
操作
浏览文件
下载
差异文件
Merge
上级
dfcecf97
54a79bd1
变更
75
展开全部
隐藏空白更改
内联
并排
Showing
75 changed file
with
3010 addition
and
415 deletion
+3010
-415
.hgtags
.hgtags
+2
-0
make/common/Demo.gmk
make/common/Demo.gmk
+12
-0
make/java/nio/FILES_java.gmk
make/java/nio/FILES_java.gmk
+1
-0
make/sun/net/Makefile
make/sun/net/Makefile
+1
-0
src/share/classes/com/sun/net/ssl/HttpsURLConnection.java
src/share/classes/com/sun/net/ssl/HttpsURLConnection.java
+7
-1
src/share/classes/com/sun/org/apache/xml/internal/security/utils/IdResolver.java
...un/org/apache/xml/internal/security/utils/IdResolver.java
+2
-0
src/share/classes/java/awt/AWTKeyStroke.java
src/share/classes/java/awt/AWTKeyStroke.java
+38
-13
src/share/classes/java/io/InputStream.java
src/share/classes/java/io/InputStream.java
+6
-10
src/share/classes/java/lang/ref/Reference.java
src/share/classes/java/lang/ref/Reference.java
+19
-12
src/share/classes/java/net/InetAddress.java
src/share/classes/java/net/InetAddress.java
+5
-3
src/share/classes/java/net/ServerSocket.java
src/share/classes/java/net/ServerSocket.java
+3
-4
src/share/classes/java/nio/charset/Charset.java
src/share/classes/java/nio/charset/Charset.java
+1
-1
src/share/classes/java/nio/file/Files.java
src/share/classes/java/nio/file/Files.java
+12
-6
src/share/classes/java/security/Security.java
src/share/classes/java/security/Security.java
+1
-1
src/share/classes/java/text/BreakIterator.java
src/share/classes/java/text/BreakIterator.java
+8
-8
src/share/classes/java/util/Collections.java
src/share/classes/java/util/Collections.java
+96
-0
src/share/classes/java/util/CurrencyData.properties
src/share/classes/java/util/CurrencyData.properties
+6
-6
src/share/classes/javax/net/ssl/HttpsURLConnection.java
src/share/classes/javax/net/ssl/HttpsURLConnection.java
+8
-1
src/share/classes/javax/net/ssl/SSLEngine.java
src/share/classes/javax/net/ssl/SSLEngine.java
+2
-2
src/share/classes/sun/net/ResourceManager.java
src/share/classes/sun/net/ResourceManager.java
+5
-4
src/share/classes/sun/nio/ch/Util.java
src/share/classes/sun/nio/ch/Util.java
+8
-8
src/share/classes/sun/nio/cs/CESU_8.java
src/share/classes/sun/nio/cs/CESU_8.java
+604
-0
src/share/classes/sun/nio/cs/UTF_8.java
src/share/classes/sun/nio/cs/UTF_8.java
+123
-62
src/share/classes/sun/nio/cs/standard-charsets
src/share/classes/sun/nio/cs/standard-charsets
+4
-0
src/share/classes/sun/print/PSPrinterJob.java
src/share/classes/sun/print/PSPrinterJob.java
+37
-6
src/share/classes/sun/rmi/registry/RegistryImpl.java
src/share/classes/sun/rmi/registry/RegistryImpl.java
+79
-4
src/share/classes/sun/rmi/server/LoaderHandler.java
src/share/classes/sun/rmi/server/LoaderHandler.java
+3
-3
src/share/classes/sun/rmi/server/UnicastServerRef.java
src/share/classes/sun/rmi/server/UnicastServerRef.java
+6
-0
src/share/classes/sun/security/ssl/AppOutputStream.java
src/share/classes/sun/security/ssl/AppOutputStream.java
+28
-2
src/share/classes/sun/security/ssl/CipherBox.java
src/share/classes/sun/security/ssl/CipherBox.java
+15
-0
src/share/classes/sun/security/ssl/CipherSuite.java
src/share/classes/sun/security/ssl/CipherSuite.java
+11
-2
src/share/classes/sun/security/ssl/EngineOutputRecord.java
src/share/classes/sun/security/ssl/EngineOutputRecord.java
+44
-3
src/share/classes/sun/security/ssl/MAC.java
src/share/classes/sun/security/ssl/MAC.java
+6
-6
src/share/classes/sun/security/ssl/Record.java
src/share/classes/sun/security/ssl/Record.java
+18
-1
src/share/classes/sun/security/ssl/SSLEngineImpl.java
src/share/classes/sun/security/ssl/SSLEngineImpl.java
+34
-0
src/share/classes/sun/security/ssl/SSLSocketImpl.java
src/share/classes/sun/security/ssl/SSLSocketImpl.java
+35
-0
src/share/classes/sun/text/resources/CollationData_th.java
src/share/classes/sun/text/resources/CollationData_th.java
+46
-55
src/share/classes/sun/util/resources/CalendarData_lv.properties
...are/classes/sun/util/resources/CalendarData_lv.properties
+40
-16
src/share/classes/sun/util/xml/XMLUtils.java
src/share/classes/sun/util/xml/XMLUtils.java
+2
-2
src/share/javavm/export/jvm.h
src/share/javavm/export/jvm.h
+2
-1
src/share/native/com/sun/java/util/jar/pack/unpack.cpp
src/share/native/com/sun/java/util/jar/pack/unpack.cpp
+5
-0
src/share/native/com/sun/java/util/jar/pack/utils.cpp
src/share/native/com/sun/java/util/jar/pack/utils.cpp
+2
-2
src/share/native/com/sun/java/util/jar/pack/utils.h
src/share/native/com/sun/java/util/jar/pack/utils.h
+2
-2
src/share/native/common/jdk_util.c
src/share/native/common/jdk_util.c
+1
-1
src/share/native/sun/java2d/loops/TransformHelper.c
src/share/native/sun/java2d/loops/TransformHelper.c
+41
-16
src/solaris/classes/sun/print/UnixPrintJob.java
src/solaris/classes/sun/print/UnixPrintJob.java
+35
-6
src/windows/classes/java/lang/ProcessImpl.java
src/windows/classes/java/lang/ProcessImpl.java
+3
-2
src/windows/classes/sun/nio/fs/WindowsDirectoryStream.java
src/windows/classes/sun/nio/fs/WindowsDirectoryStream.java
+17
-12
src/windows/classes/sun/nio/fs/WindowsPathParser.java
src/windows/classes/sun/nio/fs/WindowsPathParser.java
+9
-3
src/windows/native/sun/windows/awt_Window.cpp
src/windows/native/sun/windows/awt_Window.cpp
+2
-2
test/ProblemList.txt
test/ProblemList.txt
+0
-3
test/java/lang/ref/ReferenceEnqueue.java
test/java/lang/ref/ReferenceEnqueue.java
+79
-0
test/java/lang/ref/ReferenceEnqueuePending.java
test/java/lang/ref/ReferenceEnqueuePending.java
+201
-0
test/java/nio/charset/coders/Errors.java
test/java/nio/charset/coders/Errors.java
+1
-3
test/java/util/Collections/EmptySortedSet.java
test/java/util/Collections/EmptySortedSet.java
+351
-0
test/java/util/Currency/CurrencyTest.java
test/java/util/Currency/CurrencyTest.java
+14
-12
test/java/util/Currency/ValidateISO4217.java
test/java/util/Currency/ValidateISO4217.java
+1
-1
test/java/util/Currency/tablea1.txt
test/java/util/Currency/tablea1.txt
+5
-5
test/javax/xml/crypto/dsig/GenerationTests.java
test/javax/xml/crypto/dsig/GenerationTests.java
+49
-2
test/sun/nio/cs/TestStringCoding.java
test/sun/nio/cs/TestStringCoding.java
+3
-3
test/sun/nio/cs/TestStringCodingUTF8.java
test/sun/nio/cs/TestStringCodingUTF8.java
+6
-4
test/sun/nio/cs/TestUTF8.java
test/sun/nio/cs/TestUTF8.java
+155
-32
test/sun/security/pkcs11/Provider/Absolute.java
test/sun/security/pkcs11/Provider/Absolute.java
+0
-1
test/sun/security/pkcs11/fips/CipherTest.java
test/sun/security/pkcs11/fips/CipherTest.java
+40
-45
test/sun/security/pkcs11/fips/ClientJSSEServerJSSE.java
test/sun/security/pkcs11/fips/ClientJSSEServerJSSE.java
+1
-1
test/sun/security/ssl/com/sun/net/ssl/internal/ssl/GenSSLConfigs/main.java
.../ssl/com/sun/net/ssl/internal/ssl/GenSSLConfigs/main.java
+1
-4
test/sun/security/ssl/javax/net/ssl/NewAPIs/SSLEngine/CheckStatus.java
...rity/ssl/javax/net/ssl/NewAPIs/SSLEngine/CheckStatus.java
+3
-1
test/sun/security/ssl/javax/net/ssl/NewAPIs/SSLEngine/LargeBufs.java
...curity/ssl/javax/net/ssl/NewAPIs/SSLEngine/LargeBufs.java
+3
-1
test/sun/security/ssl/javax/net/ssl/NewAPIs/SSLEngine/LargePacket.java
...rity/ssl/javax/net/ssl/NewAPIs/SSLEngine/LargePacket.java
+2
-5
test/sun/security/ssl/templates/SSLSocketSSLEngineTemplate.java
...un/security/ssl/templates/SSLSocketSSLEngineTemplate.java
+479
-0
test/sun/text/resources/Collator/Bug6755060.java
test/sun/text/resources/Collator/Bug6755060.java
+100
-0
test/sun/text/resources/LocaleData
test/sun/text/resources/LocaleData
+4
-0
test/sun/text/resources/LocaleDataTest.java
test/sun/text/resources/LocaleDataTest.java
+1
-1
test/sun/tools/jinfo/Basic.sh
test/sun/tools/jinfo/Basic.sh
+13
-1
test/sun/tools/jstatd/jstatdExternalRegistry.sh
test/sun/tools/jstatd/jstatdExternalRegistry.sh
+1
-1
未找到文件。
.hgtags
浏览文件 @
83d20ffd
...
...
@@ -134,3 +134,5 @@ f1ec21b8142168ff40f3278d2f6b5fe4bd5f3b26 jdk8-b09
4788745572ef2bde34924ef34e7e4d55ba07e979 jdk8-b10
7ab0d613cd1a271a9763ffb894dc1f0a5b95a7e4 jdk8-b11
09fd2067f715e4505c44b01c301258a4e8f8964e jdk8-b12
4cb2e8679b27432854690cb688ea06d3b2d8e008 jdk8-b13
99632935785e2038b2fc836da9f2ede69dea294b jdk8-b14
make/common/Demo.gmk
浏览文件 @
83d20ffd
...
...
@@ -158,6 +158,8 @@ ifneq ($(strip $(DEMO_ALL_NATIVE_SOURCES)),)
# bit between them.
LINK.demo = $(LINK.c)
LDLIBS.demo = $(EXTRA_LIBS) $(LFLAGS_$(COMPILER_VERSION))
DEMO_VERSION_INFO = $(OBJDIR)/$(LIBRARY).res
LDLIBS.demo += $(DEMO_VERSION_INFO)
else
ifneq ($(DEMO_NEEDS_CPP),)
LINK.demo = $(LINK.cpp)
...
...
@@ -288,6 +290,13 @@ ifndef DEMO_SKIP_SRCZIP
$(install-file)
endif
ifeq ($(PLATFORM),windows)
# JDK name required here
RC_FLAGS += /D "JDK_FNAME=$(LIBRARY).dll" \
/D "JDK_INTERNAL_NAME=$(LIBRARY)" \
/D "JDK_FTYPE=0x2L"
endif
# Native library building
ifdef DEMO_LIBRARY
...
...
@@ -308,6 +317,9 @@ $(OBJDIR)/%.$(OBJECT_SUFFIX): $(DEMO_BUILD_SRCDIR)/%.cpp
# Actual creation of the native shared library (C++ and C are different)
$(DEMO_LIBRARY): $(DEMO_FULL_OBJECTS)
@$(prep-target)
ifeq ($(PLATFORM),windows)
$(RC) $(RC_FLAGS) $(CC_OBJECT_OUTPUT_FLAG)$(DEMO_VERSION_INFO) $(VERSIONINFO_RESOURCE)
endif
$(LINK.demo) $(SHARED_LIBRARY_FLAG) $(CC_PROGRAM_OUTPUT_FLAG)$@ \
$(DEMO_FULL_OBJECTS) $(LDLIBS.demo)
@$(call binary_file_verification,$@)
...
...
make/java/nio/FILES_java.gmk
浏览文件 @
83d20ffd
...
...
@@ -232,6 +232,7 @@ FILES_src = \
sun/nio/cs/UTF_16BE.java \
sun/nio/cs/UTF_16LE.java \
sun/nio/cs/UTF_8.java \
sun/nio/cs/CESU_8.java \
sun/nio/cs/Unicode.java \
sun/nio/cs/UnicodeDecoder.java \
sun/nio/cs/UnicodeEncoder.java \
...
...
make/sun/net/Makefile
浏览文件 @
83d20ffd
...
...
@@ -28,6 +28,7 @@ PACKAGE = sun.net
PRODUCT
=
sun
SUBDIRS_MAKEFLAGS
+=
JAVAC_MAX_WARNINGS
=
true
SUBDIRS_MAKEFLAGS
+=
JAVAC_WARNINGS_FATAL
=
true
SUBDIRS_MAKEFLAGS
+=
JAVAC_LINT_OPTIONS
=
-Xlint
:all,-deprecation,-path
include
$(BUILDDIR)/common/Defs.gmk
SUBDIRS
=
others spi
...
...
src/share/classes/com/sun/net/ssl/HttpsURLConnection.java
浏览文件 @
83d20ffd
/*
* Copyright (c) 2000, 20
04
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2000, 20
11
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -179,6 +179,12 @@ class HttpsURLConnection extends HttpURLConnection
throw
new
IllegalArgumentException
(
"no SSLSocketFactory specified"
);
}
SecurityManager
sm
=
System
.
getSecurityManager
();
if
(
sm
!=
null
)
{
sm
.
checkSetFactory
();
}
sslSocketFactory
=
sf
;
}
...
...
src/share/classes/com/sun/org/apache/xml/internal/security/utils/IdResolver.java
浏览文件 @
83d20ffd
...
...
@@ -250,6 +250,8 @@ public class IdResolver {
int
index
=
s
==
null
?
elementIndex
:
names
.
indexOf
(
n
.
getNamespaceURI
());
index
=(
index
<
0
)
?
namesLength
:
index
;
String
name
=
n
.
getLocalName
();
if
(
name
==
null
)
name
=
n
.
getName
();
if
(
name
.
length
()>
2
)
continue
;
String
value
=
n
.
getNodeValue
();
...
...
src/share/classes/java/awt/AWTKeyStroke.java
浏览文件 @
83d20ffd
/*
* Copyright (c) 2000, 20
09
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2000, 20
11
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -25,6 +25,7 @@
package
java.awt
;
import
java.awt.event.KeyEvent
;
import
sun.awt.AppContext
;
import
java.awt.event.InputEvent
;
import
java.util.Collections
;
import
java.util.HashMap
;
...
...
@@ -66,9 +67,6 @@ import java.lang.reflect.Field;
public
class
AWTKeyStroke
implements
Serializable
{
static
final
long
serialVersionUID
=
-
6430539691155161871L
;
private
static
Map
cache
;
private
static
AWTKeyStroke
cacheKey
;
private
static
Constructor
ctor
=
getCtor
(
AWTKeyStroke
.
class
);
private
static
Map
modifierKeywords
;
/**
* Associates VK_XXX (as a String) with code (as Integer). This is
...
...
@@ -77,6 +75,25 @@ public class AWTKeyStroke implements Serializable {
*/
private
static
VKCollection
vks
;
//A key for the collection of AWTKeyStrokes within AppContext.
private
static
Object
APP_CONTEXT_CACHE_KEY
=
new
Object
();
//A key withing the cache
private
static
AWTKeyStroke
APP_CONTEXT_KEYSTROKE_KEY
=
new
AWTKeyStroke
();
/*
* Reads keystroke class from AppContext and if null, puts there the
* AWTKeyStroke class.
* Must be called under locked AWTKeyStro
*/
private
static
Class
getAWTKeyStrokeClass
()
{
Class
clazz
=
(
Class
)
AppContext
.
getAppContext
().
get
(
AWTKeyStroke
.
class
);
if
(
clazz
==
null
)
{
clazz
=
AWTKeyStroke
.
class
;
AppContext
.
getAppContext
().
put
(
AWTKeyStroke
.
class
,
AWTKeyStroke
.
class
);
}
return
clazz
;
}
private
char
keyChar
=
KeyEvent
.
CHAR_UNDEFINED
;
private
int
keyCode
=
KeyEvent
.
VK_UNDEFINED
;
private
int
modifiers
;
...
...
@@ -164,9 +181,12 @@ public class AWTKeyStroke implements Serializable {
if
(
subclass
==
null
)
{
throw
new
IllegalArgumentException
(
"subclass cannot be null"
);
}
if
(
AWTKeyStroke
.
ctor
.
getDeclaringClass
().
equals
(
subclass
))
{
// Already registered
return
;
synchronized
(
AWTKeyStroke
.
class
)
{
Class
keyStrokeClass
=
(
Class
)
AppContext
.
getAppContext
().
get
(
AWTKeyStroke
.
class
);
if
(
keyStrokeClass
!=
null
&&
keyStrokeClass
.
equals
(
subclass
)){
// Already registered
return
;
}
}
if
(!
AWTKeyStroke
.
class
.
isAssignableFrom
(
subclass
))
{
throw
new
ClassCastException
(
"subclass is not derived from AWTKeyStroke"
);
...
...
@@ -197,9 +217,9 @@ public class AWTKeyStroke implements Serializable {
}
synchronized
(
AWTKeyStroke
.
class
)
{
A
WTKeyStroke
.
ctor
=
ctor
;
cache
=
null
;
cacheKey
=
null
;
A
ppContext
.
getAppContext
().
put
(
AWTKeyStroke
.
class
,
subclass
)
;
AppContext
.
getAppContext
().
remove
(
APP_CONTEXT_CACHE_KEY
)
;
AppContext
.
getAppContext
().
remove
(
APP_CONTEXT_KEYSTROKE_KEY
)
;
}
}
...
...
@@ -229,13 +249,19 @@ public class AWTKeyStroke implements Serializable {
private
static
synchronized
AWTKeyStroke
getCachedStroke
(
char
keyChar
,
int
keyCode
,
int
modifiers
,
boolean
onKeyRelease
)
{
Map
cache
=
(
Map
)
AppContext
.
getAppContext
().
get
(
APP_CONTEXT_CACHE_KEY
);
AWTKeyStroke
cacheKey
=
(
AWTKeyStroke
)
AppContext
.
getAppContext
().
get
(
APP_CONTEXT_KEYSTROKE_KEY
);
if
(
cache
==
null
)
{
cache
=
new
HashMap
();
AppContext
.
getAppContext
().
put
(
APP_CONTEXT_CACHE_KEY
,
cache
);
}
if
(
cacheKey
==
null
)
{
try
{
cacheKey
=
(
AWTKeyStroke
)
ctor
.
newInstance
((
Object
[])
null
);
Class
clazz
=
getAWTKeyStrokeClass
();
cacheKey
=
(
AWTKeyStroke
)
getCtor
(
clazz
).
newInstance
((
Object
[])
null
);
AppContext
.
getAppContext
().
put
(
APP_CONTEXT_KEYSTROKE_KEY
,
cacheKey
);
}
catch
(
InstantiationException
e
)
{
assert
(
false
);
}
catch
(
IllegalAccessException
e
)
{
...
...
@@ -253,9 +279,8 @@ public class AWTKeyStroke implements Serializable {
if
(
stroke
==
null
)
{
stroke
=
cacheKey
;
cache
.
put
(
stroke
,
stroke
);
cacheKey
=
null
;
AppContext
.
getAppContext
().
remove
(
APP_CONTEXT_KEYSTROKE_KEY
)
;
}
return
stroke
;
}
...
...
src/share/classes/java/io/InputStream.java
浏览文件 @
83d20ffd
...
...
@@ -44,10 +44,9 @@ package java.io;
*/
public
abstract
class
InputStream
implements
Closeable
{
// SKIP_BUFFER_SIZE is used to determine the size of skipBuffer
private
static
final
int
SKIP_BUFFER_SIZE
=
2048
;
// skipBuffer is initialized in skip(long), if needed.
private
static
byte
[]
skipBuffer
;
// MAX_SKIP_BUFFER_SIZE is used to determine the maximum buffer size to
// use when skipping.
private
static
final
int
MAX_SKIP_BUFFER_SIZE
=
2048
;
/**
* Reads the next byte of data from the input stream. The value byte is
...
...
@@ -212,18 +211,15 @@ public abstract class InputStream implements Closeable {
long
remaining
=
n
;
int
nr
;
if
(
skipBuffer
==
null
)
skipBuffer
=
new
byte
[
SKIP_BUFFER_SIZE
];
byte
[]
localSkipBuffer
=
skipBuffer
;
if
(
n
<=
0
)
{
return
0
;
}
int
size
=
(
int
)
Math
.
min
(
MAX_SKIP_BUFFER_SIZE
,
remaining
);
byte
[]
skipBuffer
=
new
byte
[
size
];
while
(
remaining
>
0
)
{
nr
=
read
(
localSkipBuffer
,
0
,
(
int
)
Math
.
min
(
SKIP_BUFFER_SIZE
,
remaining
));
nr
=
read
(
skipBuffer
,
0
,
(
int
)
Math
.
min
(
size
,
remaining
));
if
(
nr
<
0
)
{
break
;
}
...
...
src/share/classes/java/lang/ref/Reference.java
浏览文件 @
83d20ffd
...
...
@@ -27,7 +27,6 @@ package java.lang.ref;
import
sun.misc.Cleaner
;
/**
* Abstract base class for reference objects. This class defines the
* operations common to all reference objects. Because reference objects are
...
...
@@ -69,7 +68,7 @@ public abstract class Reference<T> {
* null.
*
* Pending: queue = ReferenceQueue with which instance is registered;
* next =
Following instance in queue, or this if at end of list.
* next =
this
*
* Enqueued: queue = ReferenceQueue.ENQUEUED; next = Following instance
* in queue, or this if at end of list.
...
...
@@ -81,17 +80,28 @@ public abstract class Reference<T> {
* the next field is null then the instance is active; if it is non-null,
* then the collector should treat the instance normally.
*
* To ensure that concurrent collector can discover active Reference
* To ensure that
a
concurrent collector can discover active Reference
* objects without interfering with application threads that may apply
* the enqueue() method to those objects, collectors should link
* discovered objects through the discovered field.
* discovered objects through the discovered field. The discovered
* field is also used for linking Reference objects in the pending list.
*/
private
T
referent
;
/* Treated specially by GC */
ReferenceQueue
<?
super
T
>
queue
;
/* When active: NULL
* pending: this
* Enqueued: next reference in queue (or this if last)
* Inactive: this
*/
Reference
next
;
/* When active: next element in a discovered reference list maintained by GC (or this if last)
* pending: next element in the pending list (or null if last)
* otherwise: NULL
*/
transient
private
Reference
<
T
>
discovered
;
/* used by VM */
...
...
@@ -106,7 +116,8 @@ public abstract class Reference<T> {
/* List of References waiting to be enqueued. The collector adds
* References to this list, while the Reference-handler thread removes
* them. This list is protected by the above lock object.
* them. This list is protected by the above lock object. The
* list uses the discovered field to link its elements.
*/
private
static
Reference
pending
=
null
;
...
...
@@ -120,14 +131,12 @@ public abstract class Reference<T> {
public
void
run
()
{
for
(;;)
{
Reference
r
;
synchronized
(
lock
)
{
if
(
pending
!=
null
)
{
r
=
pending
;
Reference
rn
=
r
.
next
;
pending
=
(
rn
==
r
)
?
null
:
rn
;
r
.
next
=
r
;
pending
=
r
.
discovered
;
r
.
discovered
=
null
;
}
else
{
try
{
lock
.
wait
();
...
...
@@ -201,10 +210,8 @@ public abstract class Reference<T> {
* been enqueued
*/
public
boolean
isEnqueued
()
{
/* In terms of the internal states, this predicate actually tests
whether the instance is either Pending or Enqueued */
synchronized
(
this
)
{
return
(
this
.
queue
!=
ReferenceQueue
.
NULL
)
&&
(
this
.
next
!=
null
);
return
(
this
.
next
!=
null
&&
this
.
queue
==
ReferenceQueue
.
ENQUEUED
);
}
}
...
...
src/share/classes/java/net/InetAddress.java
浏览文件 @
83d20ffd
...
...
@@ -876,10 +876,12 @@ class InetAddress implements java.io.Serializable {
nameService
=
java
.
security
.
AccessController
.
doPrivileged
(
new
java
.
security
.
PrivilegedExceptionAction
<
NameService
>()
{
public
NameService
run
()
{
Iterator
itr
=
Service
.
providers
(
NameServiceDescriptor
.
class
);
// sun.misc.Service.providers returns a raw Iterator
@SuppressWarnings
(
"unchecked"
)
Iterator
<
NameServiceDescriptor
>
itr
=
Service
.
providers
(
NameServiceDescriptor
.
class
);
while
(
itr
.
hasNext
())
{
NameServiceDescriptor
nsd
=
(
NameServiceDescriptor
)
itr
.
next
();
NameServiceDescriptor
nsd
=
itr
.
next
();
if
(
providerName
.
equalsIgnoreCase
(
nsd
.
getType
()+
","
+
nsd
.
getProviderName
()))
{
...
...
src/share/classes/java/net/ServerSocket.java
浏览文件 @
83d20ffd
...
...
@@ -267,10 +267,9 @@ class ServerSocket implements java.io.Closeable {
AccessController
.
doPrivileged
(
new
PrivilegedExceptionAction
<
Void
>()
{
public
Void
run
()
throws
NoSuchMethodException
{
Class
[]
cl
=
new
Class
[
2
];
cl
[
0
]
=
SocketAddress
.
class
;
cl
[
1
]
=
Integer
.
TYPE
;
impl
.
getClass
().
getDeclaredMethod
(
"connect"
,
cl
);
impl
.
getClass
().
getDeclaredMethod
(
"connect"
,
SocketAddress
.
class
,
int
.
class
);
return
null
;
}
});
...
...
src/share/classes/java/nio/charset/Charset.java
浏览文件 @
83d20ffd
...
...
@@ -435,7 +435,7 @@ public abstract class Charset
AccessController
.
doPrivileged
(
new
PrivilegedAction
<
Object
>()
{
public
Object
run
()
{
try
{
Class
epc
Class
<?>
epc
=
Class
.
forName
(
"sun.nio.cs.ext.ExtendedCharsets"
);
extendedProvider
=
(
CharsetProvider
)
epc
.
newInstance
();
}
catch
(
ClassNotFoundException
x
)
{
...
...
src/share/classes/java/nio/file/Files.java
浏览文件 @
83d20ffd
...
...
@@ -363,6 +363,17 @@ public final class Files {
// -- Directories --
private
static
class
AcceptAllFilter
implements
DirectoryStream
.
Filter
<
Path
>
{
private
AcceptAllFilter
()
{
}
@Override
public
boolean
accept
(
Path
entry
)
{
return
true
;
}
static
final
AcceptAllFilter
FILTER
=
new
AcceptAllFilter
();
}
/**
* Opens a directory, returning a {@link DirectoryStream} to iterate over
* all entries in the directory. The elements returned by the directory
...
...
@@ -397,12 +408,7 @@ public final class Files {
public
static
DirectoryStream
<
Path
>
newDirectoryStream
(
Path
dir
)
throws
IOException
{
return
provider
(
dir
).
newDirectoryStream
(
dir
,
new
DirectoryStream
.
Filter
<
Path
>()
{
@Override
public
boolean
accept
(
Path
entry
)
{
return
true
;
}
});
return
provider
(
dir
).
newDirectoryStream
(
dir
,
AcceptAllFilter
.
FILTER
);
}
/**
...
...
src/share/classes/java/security/Security.java
浏览文件 @
83d20ffd
...
...
@@ -814,7 +814,7 @@ public final class Security {
public
Void
run
()
{
try
{
/* Get the class via the bootstrap class loader. */
Class
cl
=
Class
.
forName
(
Class
<?>
cl
=
Class
.
forName
(
"java.lang.SecurityManager"
,
false
,
null
);
Field
f
=
null
;
boolean
accessible
=
false
;
...
...
src/share/classes/java/text/BreakIterator.java
浏览文件 @
83d20ffd
...
...
@@ -443,7 +443,7 @@ public abstract class BreakIterator implements Cloneable
/**
* Returns a new <code>BreakIterator</code> instance
* for <a href="#word">word breaks</a>
* for <a href="
BreakIterator.html
#word">word breaks</a>
* for the {@linkplain Locale#getDefault() default locale}.
* @return A break iterator for word breaks
*/
...
...
@@ -454,7 +454,7 @@ public abstract class BreakIterator implements Cloneable
/**
* Returns a new <code>BreakIterator</code> instance
* for <a href="#word">word breaks</a>
* for <a href="
BreakIterator.html
#word">word breaks</a>
* for the given locale.
* @param locale the desired locale
* @return A break iterator for word breaks
...
...
@@ -470,7 +470,7 @@ public abstract class BreakIterator implements Cloneable
/**
* Returns a new <code>BreakIterator</code> instance
* for <a href="#line">line breaks</a>
* for <a href="
BreakIterator.html
#line">line breaks</a>
* for the {@linkplain Locale#getDefault() default locale}.
* @return A break iterator for line breaks
*/
...
...
@@ -481,7 +481,7 @@ public abstract class BreakIterator implements Cloneable
/**
* Returns a new <code>BreakIterator</code> instance
* for <a href="#line">line breaks</a>
* for <a href="
BreakIterator.html
#line">line breaks</a>
* for the given locale.
* @param locale the desired locale
* @return A break iterator for line breaks
...
...
@@ -497,7 +497,7 @@ public abstract class BreakIterator implements Cloneable
/**
* Returns a new <code>BreakIterator</code> instance
* for <a href="#character">character breaks</a>
* for <a href="
BreakIterator.html
#character">character breaks</a>
* for the {@linkplain Locale#getDefault() default locale}.
* @return A break iterator for character breaks
*/
...
...
@@ -508,7 +508,7 @@ public abstract class BreakIterator implements Cloneable
/**
* Returns a new <code>BreakIterator</code> instance
* for <a href="#character">character breaks</a>
* for <a href="
BreakIterator.html
#character">character breaks</a>
* for the given locale.
* @param locale the desired locale
* @return A break iterator for character breaks
...
...
@@ -524,7 +524,7 @@ public abstract class BreakIterator implements Cloneable
/**
* Returns a new <code>BreakIterator</code> instance
* for <a href="#sentence">sentence breaks</a>
* for <a href="
BreakIterator.html
#sentence">sentence breaks</a>
* for the {@linkplain Locale#getDefault() default locale}.
* @return A break iterator for sentence breaks
*/
...
...
@@ -535,7 +535,7 @@ public abstract class BreakIterator implements Cloneable
/**
* Returns a new <code>BreakIterator</code> instance
* for <a href="#sentence">sentence breaks</a>
* for <a href="
BreakIterator.html
#sentence">sentence breaks</a>
* for the given locale.
* @param locale the desired locale
* @return A break iterator for sentence breaks
...
...
src/share/classes/java/util/Collections.java
浏览文件 @
83d20ffd
...
...
@@ -3201,6 +3201,102 @@ public class Collections {
}
}
/**
* Returns the empty sorted set (immutable). This set is serializable.
*
* <p>This example illustrates the type-safe way to obtain an empty sorted
* set:
* <pre>
* SortedSet<String> s = Collections.emptySortedSet();
* </pre>
* Implementation note: Implementations of this method need not
* create a separate <tt>SortedSet</tt> object for each call.
*
* @since 1.8
*/
@SuppressWarnings
(
"unchecked"
)
public
static
final
<
E
>
SortedSet
<
E
>
emptySortedSet
()
{
return
(
SortedSet
<
E
>)
new
EmptySortedSet
<>();
}
/**
* @serial include
*/
private
static
class
EmptySortedSet
<
E
>
extends
AbstractSet
<
E
>
implements
SortedSet
<
E
>,
Serializable
{
private
static
final
long
serialVersionUID
=
6316515401502265487L
;
public
Iterator
<
E
>
iterator
()
{
return
emptyIterator
();
}
public
int
size
()
{
return
0
;}
public
boolean
isEmpty
()
{
return
true
;}
public
boolean
contains
(
Object
obj
)
{
return
false
;}
public
boolean
containsAll
(
Collection
<?>
c
)
{
return
c
.
isEmpty
();
}
public
Object
[]
toArray
()
{
return
new
Object
[
0
];
}
public
<
E
>
E
[]
toArray
(
E
[]
a
)
{
if
(
a
.
length
>
0
)
a
[
0
]
=
null
;
return
a
;
}
// Preserves singleton property
private
Object
readResolve
()
{
return
new
EmptySortedSet
<>();
}
public
Comparator
comparator
()
{
return
null
;
}
public
SortedSet
<
E
>
subSet
(
Object
fromElement
,
Object
toElement
)
{
Objects
.
requireNonNull
(
fromElement
);
Objects
.
requireNonNull
(
toElement
);
if
(!(
fromElement
instanceof
Comparable
)
||
!(
toElement
instanceof
Comparable
))
{
throw
new
ClassCastException
();
}
if
((((
Comparable
)
fromElement
).
compareTo
(
toElement
)
>=
0
)
||
(((
Comparable
)
toElement
).
compareTo
(
fromElement
)
<
0
))
{
throw
new
IllegalArgumentException
();
}
return
emptySortedSet
();
}
public
SortedSet
<
E
>
headSet
(
Object
toElement
)
{
Objects
.
requireNonNull
(
toElement
);
if
(!(
toElement
instanceof
Comparable
))
{
throw
new
ClassCastException
();
}
return
emptySortedSet
();
}
public
SortedSet
<
E
>
tailSet
(
Object
fromElement
)
{
Objects
.
requireNonNull
(
fromElement
);
if
(!(
fromElement
instanceof
Comparable
))
{
throw
new
ClassCastException
();
}
return
emptySortedSet
();
}
public
E
first
()
{
throw
new
NoSuchElementException
();
}
public
E
last
()
{
throw
new
NoSuchElementException
();
}
}
/**
* The empty list (immutable). This list is serializable.
*
...
...
src/share/classes/java/util/CurrencyData.properties
浏览文件 @
83d20ffd
...
...
@@ -71,7 +71,7 @@ all=ADP020-AED784-AFA004-AFN971-ALL008-AMD051-ANG532-AOA973-ARS032-ATS040-AUD036
#
# The table is based on the following web sites:
# http://www.din.de/gremien/nas/nabd/iso3166ma/codlstp1/db_en.html
# http://www.
bsi-global.com/iso4217currency
# http://www.
currency-iso.org/iso_index/iso_tables.htm
# http://www.cia.gov/cia/publications/factbook/indexgeo.html
# AFGHANISTAN
...
...
@@ -105,7 +105,7 @@ AU=AUD
# AUSTRIA
AT
=
EUR
# AZERBAIJAN
AZ
=
AZ
M;2005-12-31-20-00-00;AZ
N
AZ
=
AZN
# BAHAMAS
BS
=
BSD
# BAHRAIN
...
...
@@ -378,7 +378,7 @@ MS=XCD
# MOROCCO
MA
=
MAD
# MOZAMBIQUE
MZ
=
MZ
M;2006-06-30-22-00-00;MZ
N
MZ
=
MZN
# MYANMAR
MM
=
MMK
# NAMIBIA
...
...
@@ -440,7 +440,7 @@ QA=QAR
# REUNION
RE
=
EUR
# ROMANIA
RO
=
RO
L;2005-06-30-21-00-00;RO
N
RO
=
RON
# RUSSIAN FEDERATION
RU
=
RUB
# RWANDA
...
...
@@ -532,7 +532,7 @@ TT=TTD
# TUNISIA
TN
=
TND
# TURKEY
TR
=
TR
L;2004-12-31-22-00-00;TR
Y
TR
=
TRY
# TURKMENISTAN
TM
=
TMT
# TURKS AND CAICOS ISLANDS
...
...
@@ -558,7 +558,7 @@ UZ=UZS
# VANUATU
VU
=
VUV
# VENEZUELA
VE
=
VE
B;2008-01-01-04-00-00;VE
F
VE
=
VEF
# VIET NAM
VN
=
VND
# VIRGIN ISLANDS, BRITISH
...
...
src/share/classes/javax/net/ssl/HttpsURLConnection.java
浏览文件 @
83d20ffd
/*
* Copyright (c) 1999, 201
0
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1999, 201
1
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -347,6 +347,9 @@ class HttpsURLConnection extends HttpURLConnection
* @param sf the SSL socket factory
* @throws IllegalArgumentException if the <code>SSLSocketFactory</code>
* parameter is null.
* @throws SecurityException if a security manager exists and its
* <code>checkSetFactory</code> method does not allow
* a socket factory to be specified.
* @see #getSSLSocketFactory()
*/
public
void
setSSLSocketFactory
(
SSLSocketFactory
sf
)
{
...
...
@@ -355,6 +358,10 @@ class HttpsURLConnection extends HttpURLConnection
"no SSLSocketFactory specified"
);
}
SecurityManager
sm
=
System
.
getSecurityManager
();
if
(
sm
!=
null
)
{
sm
.
checkSetFactory
();
}
sslSocketFactory
=
sf
;
}
...
...
src/share/classes/javax/net/ssl/SSLEngine.java
浏览文件 @
83d20ffd
/*
* Copyright (c) 2003, 201
0
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2003, 201
1
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -538,7 +538,7 @@ public abstract class SSLEngine {
* If this <code>SSLEngine</code> has not yet started its initial
* handshake, this method will automatically start the handshake.
* <P>
* This method will attempt to produce
one SSL/TLS packet
, and will
* This method will attempt to produce
SSL/TLS records
, and will
* consume as much source data as possible, but will never consume
* more than the sum of the bytes remaining in each buffer. Each
* <code>ByteBuffer</code>'s position is updated to reflect the
...
...
src/share/classes/sun/net/ResourceManager.java
浏览文件 @
83d20ffd
...
...
@@ -41,13 +41,14 @@ public class ResourceManager {
/* default maximum number of udp sockets per VM
* when a security manager is enabled.
* The default is
1024
which is high enough to be useful
* The default is
25
which is high enough to be useful
* but low enough to be well below the maximum number
* of port numbers actually available on all OSes for
* such sockets (5000 on some versions of windows)
* of port numbers actually available on all OSes
* when multiplied by the maximum feasible number of VM processes
* that could practically be spawned.
*/
private
static
final
int
DEFAULT_MAX_SOCKETS
=
1024
;
private
static
final
int
DEFAULT_MAX_SOCKETS
=
25
;
private
static
final
int
maxSockets
;
private
static
final
AtomicInteger
numSockets
;
...
...
src/share/classes/sun/nio/ch/Util.java
浏览文件 @
83d20ffd
...
...
@@ -363,10 +363,10 @@ class Util {
try
{
Class
<?>
cl
=
Class
.
forName
(
"java.nio.DirectByteBuffer"
);
Constructor
<?>
ctor
=
cl
.
getDeclaredConstructor
(
new
Class
[]
{
int
.
class
,
long
.
class
,
FileDescriptor
.
class
,
Runnable
.
class
});
new
Class
<?>
[]
{
int
.
class
,
long
.
class
,
FileDescriptor
.
class
,
Runnable
.
class
});
ctor
.
setAccessible
(
true
);
directByteBufferConstructor
=
ctor
;
}
catch
(
ClassNotFoundException
|
...
...
@@ -408,10 +408,10 @@ class Util {
try
{
Class
<?>
cl
=
Class
.
forName
(
"java.nio.DirectByteBufferR"
);
Constructor
<?>
ctor
=
cl
.
getDeclaredConstructor
(
new
Class
[]
{
int
.
class
,
long
.
class
,
FileDescriptor
.
class
,
Runnable
.
class
});
new
Class
<?>
[]
{
int
.
class
,
long
.
class
,
FileDescriptor
.
class
,
Runnable
.
class
});
ctor
.
setAccessible
(
true
);
directByteBufferRConstructor
=
ctor
;
}
catch
(
ClassNotFoundException
|
...
...
src/share/classes/sun/nio/cs/CESU_8.java
0 → 100644
浏览文件 @
83d20ffd
此差异已折叠。
点击以展开。
src/share/classes/sun/nio/cs/UTF_8.java
浏览文件 @
83d20ffd
...
...
@@ -72,8 +72,8 @@ class UTF_8 extends Unicode
return
new
Encoder
(
this
);
}
static
final
void
updatePositions
(
Buffer
src
,
int
sp
,
Buffer
dst
,
int
dp
)
{
private
static
final
void
updatePositions
(
Buffer
src
,
int
sp
,
Buffer
dst
,
int
dp
)
{
src
.
position
(
sp
-
src
.
arrayOffset
());
dst
.
position
(
dp
-
dst
.
arrayOffset
());
}
...
...
@@ -88,11 +88,6 @@ class UTF_8 extends Unicode
return
(
b
&
0xc0
)
!=
0x80
;
}
// [C2..DF] [80..BF]
private
static
boolean
isMalformed2
(
int
b1
,
int
b2
)
{
return
(
b1
&
0x1e
)
==
0x0
||
(
b2
&
0xc0
)
!=
0x80
;
}
// [E0] [A0..BF] [80..BF]
// [E1..EF] [80..BF] [80..BF]
private
static
boolean
isMalformed3
(
int
b1
,
int
b2
,
int
b3
)
{
...
...
@@ -100,6 +95,12 @@ class UTF_8 extends Unicode
(
b2
&
0xc0
)
!=
0x80
||
(
b3
&
0xc0
)
!=
0x80
;
}
// only used when there is only one byte left in src buffer
private
static
boolean
isMalformed3_2
(
int
b1
,
int
b2
)
{
return
(
b1
==
(
byte
)
0xe0
&&
(
b2
&
0xe0
)
==
0x80
)
||
(
b2
&
0xc0
)
!=
0x80
;
}
// [F0] [90..BF] [80..BF] [80..BF]
// [F1..F3] [80..BF] [80..BF] [80..BF]
// [F4] [80..8F] [80..BF] [80..BF]
...
...
@@ -110,6 +111,16 @@ class UTF_8 extends Unicode
(
b4
&
0xc0
)
!=
0x80
;
}
// only used when there is less than 4 bytes left in src buffer
private
static
boolean
isMalformed4_2
(
int
b1
,
int
b2
)
{
return
(
b1
==
0xf0
&&
b2
==
0x90
)
||
(
b2
&
0xc0
)
!=
0x80
;
}
private
static
boolean
isMalformed4_3
(
int
b3
)
{
return
(
b3
&
0xc0
)
!=
0x80
;
}
private
static
CoderResult
lookupN
(
ByteBuffer
src
,
int
n
)
{
for
(
int
i
=
1
;
i
<
n
;
i
++)
{
...
...
@@ -122,28 +133,14 @@ class UTF_8 extends Unicode
private
static
CoderResult
malformedN
(
ByteBuffer
src
,
int
nb
)
{
switch
(
nb
)
{
case
1
:
int
b1
=
src
.
get
();
if
((
b1
>>
2
)
==
-
2
)
{
// 5 bytes 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
if
(
src
.
remaining
()
<
4
)
return
CoderResult
.
UNDERFLOW
;
return
lookupN
(
src
,
5
);
}
if
((
b1
>>
1
)
==
-
2
)
{
// 6 bytes 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
if
(
src
.
remaining
()
<
5
)
return
CoderResult
.
UNDERFLOW
;
return
lookupN
(
src
,
6
);
}
return
CoderResult
.
malformedForLength
(
1
);
case
2
:
// always 1
return
CoderResult
.
malformedForLength
(
1
);
case
3
:
b1
=
src
.
get
();
int
b1
=
src
.
get
();
int
b2
=
src
.
get
();
// no need to lookup b3
return
CoderResult
.
malformedForLength
(
((
b1
==
(
byte
)
0xe0
&&
(
b2
&
0xe0
)
==
0x80
)
||
isNotContinuation
(
b2
))
?
1
:
2
);
isNotContinuation
(
b2
))
?
1
:
2
);
case
4
:
// we don't care the speed here
b1
=
src
.
get
()
&
0xff
;
b2
=
src
.
get
()
&
0xff
;
...
...
@@ -171,6 +168,7 @@ class UTF_8 extends Unicode
return
cr
;
}
private
static
CoderResult
malformed
(
ByteBuffer
src
,
int
mark
,
int
nb
)
{
...
...
@@ -180,18 +178,36 @@ class UTF_8 extends Unicode
return
cr
;
}
private
static
CoderResult
malformedForLength
(
ByteBuffer
src
,
int
sp
,
CharBuffer
dst
,
int
dp
,
int
malformedNB
)
{
updatePositions
(
src
,
sp
,
dst
,
dp
);
return
CoderResult
.
malformedForLength
(
malformedNB
);
}
private
static
CoderResult
malformedForLength
(
ByteBuffer
src
,
int
mark
,
int
malformedNB
)
{
src
.
position
(
mark
);
return
CoderResult
.
malformedForLength
(
malformedNB
);
}
private
static
CoderResult
xflow
(
Buffer
src
,
int
sp
,
int
sl
,
Buffer
dst
,
int
dp
,
int
nb
)
{
updatePositions
(
src
,
sp
,
dst
,
dp
);
return
(
nb
==
0
||
sl
-
sp
<
nb
)
?
CoderResult
.
UNDERFLOW
:
CoderResult
.
OVERFLOW
;
?
CoderResult
.
UNDERFLOW
:
CoderResult
.
OVERFLOW
;
}
private
static
CoderResult
xflow
(
Buffer
src
,
int
mark
,
int
nb
)
{
CoderResult
cr
=
(
nb
==
0
||
src
.
remaining
()
<
(
nb
-
1
))
?
CoderResult
.
UNDERFLOW
:
CoderResult
.
OVERFLOW
;
src
.
position
(
mark
);
return
cr
;
return
(
nb
==
0
||
src
.
remaining
()
<
nb
)
?
CoderResult
.
UNDERFLOW
:
CoderResult
.
OVERFLOW
;
}
private
CoderResult
decodeArrayLoop
(
ByteBuffer
src
,
...
...
@@ -210,7 +226,6 @@ class UTF_8 extends Unicode
// ASCII only loop
while
(
dp
<
dlASCII
&&
sa
[
sp
]
>=
0
)
da
[
dp
++]
=
(
char
)
sa
[
sp
++];
while
(
sp
<
sl
)
{
int
b1
=
sa
[
sp
];
if
(
b1
>=
0
)
{
...
...
@@ -219,13 +234,20 @@ class UTF_8 extends Unicode
return
xflow
(
src
,
sp
,
sl
,
dst
,
dp
,
1
);
da
[
dp
++]
=
(
char
)
b1
;
sp
++;
}
else
if
((
b1
>>
5
)
==
-
2
)
{
}
else
if
((
b1
>>
5
)
==
-
2
&&
(
b1
&
0x1e
)
!=
0
)
{
// 2 bytes, 11 bits: 110xxxxx 10xxxxxx
// [C2..DF] [80..BF]
if
(
sl
-
sp
<
2
||
dp
>=
dl
)
return
xflow
(
src
,
sp
,
sl
,
dst
,
dp
,
2
);
int
b2
=
sa
[
sp
+
1
];
if
(
isMalformed2
(
b1
,
b2
))
return
malformed
(
src
,
sp
,
dst
,
dp
,
2
);
// Now we check the first byte of 2-byte sequence as
// if ((b1 >> 5) == -2 && (b1 & 0x1e) != 0)
// no longer need to check b1 against c1 & c0 for
// malformed as we did in previous version
// (b1 & 0x1e) == 0x0 || (b2 & 0xc0) != 0x80;
// only need to check the second byte b2.
if
(
isNotContinuation
(
b2
))
return
malformedForLength
(
src
,
sp
,
dst
,
dp
,
1
);
da
[
dp
++]
=
(
char
)
(((
b1
<<
6
)
^
b2
)
^
(((
byte
)
0xC0
<<
6
)
^
...
...
@@ -233,24 +255,37 @@ class UTF_8 extends Unicode
sp
+=
2
;
}
else
if
((
b1
>>
4
)
==
-
2
)
{
// 3 bytes, 16 bits: 1110xxxx 10xxxxxx 10xxxxxx
if
(
sl
-
sp
<
3
||
dp
>=
dl
)
int
srcRemaining
=
sl
-
sp
;
if
(
srcRemaining
<
3
||
dp
>=
dl
)
{
if
(
srcRemaining
>
1
&&
isMalformed3_2
(
b1
,
sa
[
sp
+
1
]))
return
malformedForLength
(
src
,
sp
,
dst
,
dp
,
1
);
return
xflow
(
src
,
sp
,
sl
,
dst
,
dp
,
3
);
}
int
b2
=
sa
[
sp
+
1
];
int
b3
=
sa
[
sp
+
2
];
if
(
isMalformed3
(
b1
,
b2
,
b3
))
return
malformed
(
src
,
sp
,
dst
,
dp
,
3
);
da
[
dp
++]
=
(
char
)
char
c
=
(
char
)
((
b1
<<
12
)
^
(
b2
<<
6
)
^
(
b3
^
(((
byte
)
0xE0
<<
12
)
^
((
byte
)
0x80
<<
6
)
^
((
byte
)
0x80
<<
0
))));
if
(
Character
.
isSurrogate
(
c
))
return
malformedForLength
(
src
,
sp
,
dst
,
dp
,
3
);
da
[
dp
++]
=
c
;
sp
+=
3
;
}
else
if
((
b1
>>
3
)
==
-
2
)
{
// 4 bytes, 21 bits: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
if
(
sl
-
sp
<
4
||
dl
-
dp
<
2
)
int
srcRemaining
=
sl
-
sp
;
if
(
srcRemaining
<
4
||
dl
-
dp
<
2
)
{
if
(
srcRemaining
>
1
&&
isMalformed4_2
(
b1
,
sa
[
sp
+
1
]))
return
malformedForLength
(
src
,
sp
,
dst
,
dp
,
1
);
if
(
srcRemaining
>
2
&&
isMalformed4_3
(
sa
[
sp
+
2
]))
return
malformedForLength
(
src
,
sp
,
dst
,
dp
,
2
);
return
xflow
(
src
,
sp
,
sl
,
dst
,
dp
,
4
);
}
int
b2
=
sa
[
sp
+
1
];
int
b3
=
sa
[
sp
+
2
];
int
b4
=
sa
[
sp
+
3
];
...
...
@@ -289,38 +324,51 @@ class UTF_8 extends Unicode
return
xflow
(
src
,
mark
,
1
);
// overflow
dst
.
put
((
char
)
b1
);
mark
++;
}
else
if
((
b1
>>
5
)
==
-
2
)
{
}
else
if
((
b1
>>
5
)
==
-
2
&&
(
b1
&
0x1e
)
!=
0
)
{
// 2 bytes, 11 bits: 110xxxxx 10xxxxxx
if
(
limit
-
mark
<
2
||
dst
.
remaining
()
<
1
)
return
xflow
(
src
,
mark
,
2
);
int
b2
=
src
.
get
();
if
(
is
Malformed2
(
b1
,
b2
))
return
malformed
(
src
,
mark
,
2
);
dst
.
put
((
char
)
(((
b1
<<
6
)
^
b2
)
if
(
is
NotContinuation
(
b2
))
return
malformed
ForLength
(
src
,
mark
,
1
);
dst
.
put
((
char
)
(((
b1
<<
6
)
^
b2
)
^
(((
byte
)
0xC0
<<
6
)
^
((
byte
)
0x80
<<
0
))));
mark
+=
2
;
}
else
if
((
b1
>>
4
)
==
-
2
)
{
// 3 bytes, 16 bits: 1110xxxx 10xxxxxx 10xxxxxx
if
(
limit
-
mark
<
3
||
dst
.
remaining
()
<
1
)
int
srcRemaining
=
limit
-
mark
;
if
(
srcRemaining
<
3
||
dst
.
remaining
()
<
1
)
{
if
(
srcRemaining
>
1
&&
isMalformed3_2
(
b1
,
src
.
get
()))
return
malformedForLength
(
src
,
mark
,
1
);
return
xflow
(
src
,
mark
,
3
);
}
int
b2
=
src
.
get
();
int
b3
=
src
.
get
();
if
(
isMalformed3
(
b1
,
b2
,
b3
))
return
malformed
(
src
,
mark
,
3
);
dst
.
put
((
char
)
((
b1
<<
12
)
^
(
b2
<<
6
)
^
(
b3
^
(((
byte
)
0xE0
<<
12
)
^
((
byte
)
0x80
<<
6
)
^
((
byte
)
0x80
<<
0
)))));
char
c
=
(
char
)
((
b1
<<
12
)
^
(
b2
<<
6
)
^
(
b3
^
(((
byte
)
0xE0
<<
12
)
^
((
byte
)
0x80
<<
6
)
^
((
byte
)
0x80
<<
0
))));
if
(
Character
.
isSurrogate
(
c
))
return
malformedForLength
(
src
,
mark
,
3
);
dst
.
put
(
c
);
mark
+=
3
;
}
else
if
((
b1
>>
3
)
==
-
2
)
{
// 4 bytes, 21 bits: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
if
(
limit
-
mark
<
4
||
dst
.
remaining
()
<
2
)
int
srcRemaining
=
limit
-
mark
;
if
(
srcRemaining
<
4
||
dst
.
remaining
()
<
2
)
{
if
(
srcRemaining
>
1
&&
isMalformed4_2
(
b1
,
src
.
get
()))
return
malformedForLength
(
src
,
mark
,
1
);
if
(
srcRemaining
>
2
&&
isMalformed4_3
(
src
.
get
()))
return
malformedForLength
(
src
,
mark
,
2
);
return
xflow
(
src
,
mark
,
4
);
}
int
b2
=
src
.
get
();
int
b3
=
src
.
get
();
int
b4
=
src
.
get
();
...
...
@@ -364,7 +412,7 @@ class UTF_8 extends Unicode
return
bb
;
}
// returns -1 if there is malformed byte(s) and the
// returns -1 if there is
/are
malformed byte(s) and the
// "action" for malformed input is not REPLACE.
public
int
decode
(
byte
[]
sa
,
int
sp
,
int
len
,
char
[]
da
)
{
final
int
sl
=
sp
+
len
;
...
...
@@ -381,11 +429,11 @@ class UTF_8 extends Unicode
if
(
b1
>=
0
)
{
// 1 byte, 7 bits: 0xxxxxxx
da
[
dp
++]
=
(
char
)
b1
;
}
else
if
((
b1
>>
5
)
==
-
2
)
{
}
else
if
((
b1
>>
5
)
==
-
2
&&
(
b1
&
0x1e
)
!=
0
)
{
// 2 bytes, 11 bits: 110xxxxx 10xxxxxx
if
(
sp
<
sl
)
{
int
b2
=
sa
[
sp
++];
if
(
is
Malformed2
(
b1
,
b2
))
{
if
(
is
NotContinuation
(
b2
))
{
if
(
malformedInputAction
()
!=
CodingErrorAction
.
REPLACE
)
return
-
1
;
da
[
dp
++]
=
replacement
().
charAt
(
0
);
...
...
@@ -410,21 +458,33 @@ class UTF_8 extends Unicode
if
(
malformedInputAction
()
!=
CodingErrorAction
.
REPLACE
)
return
-
1
;
da
[
dp
++]
=
replacement
().
charAt
(
0
);
sp
-=
3
;
sp
-=
3
;
bb
=
getByteBuffer
(
bb
,
sa
,
sp
);
sp
+=
malformedN
(
bb
,
3
).
length
();
}
else
{
da
[
dp
++]
=
(
char
)((
b1
<<
12
)
^
char
c
=
(
char
)((
b1
<<
12
)
^
(
b2
<<
6
)
^
(
b3
^
(((
byte
)
0xE0
<<
12
)
^
((
byte
)
0x80
<<
6
)
^
((
byte
)
0x80
<<
0
))));
if
(
Character
.
isSurrogate
(
c
))
{
if
(
malformedInputAction
()
!=
CodingErrorAction
.
REPLACE
)
return
-
1
;
da
[
dp
++]
=
replacement
().
charAt
(
0
);
}
else
{
da
[
dp
++]
=
c
;
}
}
continue
;
}
if
(
malformedInputAction
()
!=
CodingErrorAction
.
REPLACE
)
return
-
1
;
if
(
sp
<
sl
&&
isMalformed3_2
(
b1
,
sa
[
sp
]))
{
da
[
dp
++]
=
replacement
().
charAt
(
0
);
continue
;
}
da
[
dp
++]
=
replacement
().
charAt
(
0
);
return
dp
;
}
else
if
((
b1
>>
3
)
==
-
2
)
{
...
...
@@ -458,28 +518,29 @@ class UTF_8 extends Unicode
}
if
(
malformedInputAction
()
!=
CodingErrorAction
.
REPLACE
)
return
-
1
;
if
(
sp
<
sl
&&
isMalformed4_2
(
b1
,
sa
[
sp
]))
{
da
[
dp
++]
=
replacement
().
charAt
(
0
);
continue
;
}
sp
++;
if
(
sp
<
sl
&&
isMalformed4_3
(
sa
[
sp
]))
{
da
[
dp
++]
=
replacement
().
charAt
(
0
);
continue
;
}
da
[
dp
++]
=
replacement
().
charAt
(
0
);
return
dp
;
}
else
{
if
(
malformedInputAction
()
!=
CodingErrorAction
.
REPLACE
)
return
-
1
;
da
[
dp
++]
=
replacement
().
charAt
(
0
);
sp
--;
bb
=
getByteBuffer
(
bb
,
sa
,
sp
);
CoderResult
cr
=
malformedN
(
bb
,
1
);
if
(!
cr
.
isError
())
{
// leading byte for 5 or 6-byte, but don't have enough
// bytes in buffer to check. Consumed rest as malformed.
return
dp
;
}
sp
+=
cr
.
length
();
}
}
return
dp
;
}
}
private
static
class
Encoder
extends
CharsetEncoder
private
static
final
class
Encoder
extends
CharsetEncoder
implements
ArrayEncoder
{
private
Encoder
(
Charset
cs
)
{
...
...
src/share/classes/sun/nio/cs/standard-charsets
浏览文件 @
83d20ffd
...
...
@@ -63,6 +63,10 @@ charset UTF-8 UTF_8
alias
UTF8
#
JDK
historical
alias
unicode
-
1
-
1
-
utf
-
8
charset
CESU
-
8
CESU_8
alias
CESU8
alias
csCESU
-
8
charset
UTF
-
16
UTF_16
alias
UTF_16
#
JDK
historical
alias
utf16
...
...
src/share/classes/sun/print/PSPrinterJob.java
浏览文件 @
83d20ffd
...
...
@@ -68,14 +68,18 @@ import javax.print.attribute.standard.Sides;
import
java.io.BufferedInputStream
;
import
java.io.BufferedOutputStream
;
import
java.io.BufferedReader
;
import
java.io.CharConversionException
;
import
java.io.File
;
import
java.io.InputStream
;
import
java.io.InputStreamReader
;
import
java.io.IOException
;
import
java.io.FileInputStream
;
import
java.io.FileOutputStream
;
import
java.io.OutputStream
;
import
java.io.PrintStream
;
import
java.io.PrintWriter
;
import
java.io.StringWriter
;
import
java.util.ArrayList
;
import
java.util.Enumeration
;
...
...
@@ -673,15 +677,38 @@ public class PSPrinterJob extends RasterPrinterJob {
private
class
PrinterSpooler
implements
java
.
security
.
PrivilegedAction
{
PrinterException
pex
;
private
void
handleProcessFailure
(
final
Process
failedProcess
,
final
String
[]
execCmd
,
final
int
result
)
throws
IOException
{
try
(
StringWriter
sw
=
new
StringWriter
();
PrintWriter
pw
=
new
PrintWriter
(
sw
))
{
pw
.
append
(
"error="
).
append
(
Integer
.
toString
(
result
));
pw
.
append
(
" running:"
);
for
(
String
arg:
execCmd
)
{
pw
.
append
(
" '"
).
append
(
arg
).
append
(
"'"
);
}
try
(
InputStream
is
=
failedProcess
.
getErrorStream
();
InputStreamReader
isr
=
new
InputStreamReader
(
is
);
BufferedReader
br
=
new
BufferedReader
(
isr
))
{
while
(
br
.
ready
())
{
pw
.
println
();
pw
.
append
(
"\t\t"
).
append
(
br
.
readLine
());
}
}
finally
{
pw
.
flush
();
throw
new
IOException
(
sw
.
toString
());
}
}
}
public
Object
run
()
{
if
(
spoolFile
==
null
||
!
spoolFile
.
exists
())
{
pex
=
new
PrinterException
(
"No spool file"
);
return
null
;
}
try
{
/**
* Spool to the printer.
*/
if
(
spoolFile
==
null
||
!
spoolFile
.
exists
())
{
pex
=
new
PrinterException
(
"No spool file"
);
return
null
;
}
String
fileName
=
spoolFile
.
getAbsolutePath
();
String
execCmd
[]
=
printExecCmd
(
mDestination
,
mOptions
,
mNoJobSheet
,
getJobNameInt
(),
...
...
@@ -689,12 +716,16 @@ public class PSPrinterJob extends RasterPrinterJob {
Process
process
=
Runtime
.
getRuntime
().
exec
(
execCmd
);
process
.
waitFor
();
spoolFile
.
delete
();
final
int
result
=
process
.
exitValue
();
if
(
0
!=
result
)
{
handleProcessFailure
(
process
,
execCmd
,
result
);
}
}
catch
(
IOException
ex
)
{
pex
=
new
PrinterIOException
(
ex
);
}
catch
(
InterruptedException
ie
)
{
pex
=
new
PrinterException
(
ie
.
toString
());
}
finally
{
spoolFile
.
delete
();
}
return
null
;
}
...
...
src/share/classes/sun/rmi/registry/RegistryImpl.java
浏览文件 @
83d20ffd
...
...
@@ -38,13 +38,23 @@ import java.rmi.server.ServerNotActiveException;
import
java.rmi.registry.Registry
;
import
java.rmi.server.RMIClientSocketFactory
;
import
java.rmi.server.RMIServerSocketFactory
;
import
java.security.AccessControlContext
;
import
java.security.AccessController
;
import
java.security.CodeSource
;
import
java.security.Policy
;
import
java.security.PrivilegedActionException
;
import
java.security.PrivilegedExceptionAction
;
import
java.security.PermissionCollection
;
import
java.security.Permissions
;
import
java.security.ProtectionDomain
;
import
java.text.MessageFormat
;
import
sun.rmi.server.LoaderHandler
;
import
sun.rmi.server.UnicastServerRef
;
import
sun.rmi.server.UnicastServerRef2
;
import
sun.rmi.transport.LiveRef
;
import
sun.rmi.transport.ObjectTable
;
import
sun.rmi.transport.Target
;
import
sun.security.action.GetPropertyAction
;
/**
* A "registry" exists on every node that allows RMI connections to
...
...
@@ -325,6 +335,19 @@ public class RegistryImpl extends java.rmi.server.RemoteServer
URL
[]
urls
=
sun
.
misc
.
URLClassPath
.
pathToURLs
(
envcp
);
ClassLoader
cl
=
new
URLClassLoader
(
urls
);
String
codebaseProperty
=
null
;
String
prop
=
java
.
security
.
AccessController
.
doPrivileged
(
new
GetPropertyAction
(
"java.rmi.server.codebase"
));
if
(
prop
!=
null
&&
prop
.
trim
().
length
()
>
0
)
{
codebaseProperty
=
prop
;
}
URL
[]
codebaseURLs
=
null
;
if
(
codebaseProperty
!=
null
)
{
codebaseURLs
=
sun
.
misc
.
URLClassPath
.
pathToURLs
(
codebaseProperty
);
}
else
{
codebaseURLs
=
new
URL
[
0
];
}
/*
* Fix bugid 4242317: Classes defined by this class loader should
* be annotated with the value of the "java.rmi.server.codebase"
...
...
@@ -334,11 +357,19 @@ public class RegistryImpl extends java.rmi.server.RemoteServer
Thread
.
currentThread
().
setContextClassLoader
(
cl
);
int
regPort
=
Registry
.
REGISTRY_PORT
;
if
(
args
.
length
>=
1
)
{
regPort
=
Integer
.
parseInt
(
args
[
0
]);
final
int
regPort
=
(
args
.
length
>=
1
)
?
Integer
.
parseInt
(
args
[
0
])
:
Registry
.
REGISTRY_PORT
;
try
{
registry
=
AccessController
.
doPrivileged
(
new
PrivilegedExceptionAction
<
RegistryImpl
>()
{
public
RegistryImpl
run
()
throws
RemoteException
{
return
new
RegistryImpl
(
regPort
);
}
},
getAccessControlContext
(
codebaseURLs
));
}
catch
(
PrivilegedActionException
ex
)
{
throw
(
RemoteException
)
ex
.
getException
();
}
registry
=
new
RegistryImpl
(
regPort
);
// prevent registry from exiting
while
(
true
)
{
try
{
...
...
@@ -358,4 +389,48 @@ public class RegistryImpl extends java.rmi.server.RemoteServer
}
System
.
exit
(
1
);
}
/**
* Generates an AccessControlContext from several URLs.
* The approach used here is taken from the similar method
* getAccessControlContext() in the sun.applet.AppletPanel class.
*/
private
static
AccessControlContext
getAccessControlContext
(
URL
[]
urls
)
{
// begin with permissions granted to all code in current policy
PermissionCollection
perms
=
AccessController
.
doPrivileged
(
new
java
.
security
.
PrivilegedAction
<
PermissionCollection
>()
{
public
PermissionCollection
run
()
{
CodeSource
codesource
=
new
CodeSource
(
null
,
(
java
.
security
.
cert
.
Certificate
[])
null
);
Policy
p
=
java
.
security
.
Policy
.
getPolicy
();
if
(
p
!=
null
)
{
return
p
.
getPermissions
(
codesource
);
}
else
{
return
new
Permissions
();
}
}
});
/*
* Anyone can connect to the registry and the registry can connect
* to and possibly download stubs from anywhere. Downloaded stubs and
* related classes themselves are more tightly limited by RMI.
*/
perms
.
add
(
new
SocketPermission
(
"*"
,
"connect,accept"
));
perms
.
add
(
new
RuntimePermission
(
"accessClassInPackage.sun.*"
));
// add permissions required to load from codebase URL path
LoaderHandler
.
addPermissionsForURLs
(
urls
,
perms
,
false
);
/*
* Create an AccessControlContext that consists of a single
* protection domain with only the permissions calculated above.
*/
ProtectionDomain
pd
=
new
ProtectionDomain
(
new
CodeSource
((
urls
.
length
>
0
?
urls
[
0
]
:
null
),
(
java
.
security
.
cert
.
Certificate
[])
null
),
perms
);
return
new
AccessControlContext
(
new
ProtectionDomain
[]
{
pd
});
}
}
src/share/classes/sun/rmi/server/LoaderHandler.java
浏览文件 @
83d20ffd
...
...
@@ -1031,9 +1031,9 @@ public final class LoaderHandler {
* loader. A given permission is only added to the collection if
* it is not already implied by the collection.
*/
p
rivate
static
void
addPermissionsForURLs
(
URL
[]
urls
,
PermissionCollection
perms
,
boolean
forLoader
)
p
ublic
static
void
addPermissionsForURLs
(
URL
[]
urls
,
PermissionCollection
perms
,
boolean
forLoader
)
{
for
(
int
i
=
0
;
i
<
urls
.
length
;
i
++)
{
URL
url
=
urls
[
i
];
...
...
src/share/classes/sun/rmi/server/UnicastServerRef.java
浏览文件 @
83d20ffd
...
...
@@ -390,6 +390,12 @@ public class UnicastServerRef extends UnicastRef
ObjectInput
in
;
try
{
in
=
call
.
getInputStream
();
try
{
Class
<?>
clazz
=
Class
.
forName
(
"sun.rmi.transport.DGCImpl_Skel"
);
if
(
clazz
.
isAssignableFrom
(
skel
.
getClass
()))
{
((
MarshalInputStream
)
in
).
useCodebaseOnly
();
}
}
catch
(
ClassNotFoundException
ignore
)
{
}
hash
=
in
.
readLong
();
}
catch
(
Exception
readEx
)
{
throw
new
UnmarshalException
(
"error unmarshalling call header"
,
...
...
src/share/classes/sun/security/ssl/AppOutputStream.java
浏览文件 @
83d20ffd
/*
* Copyright (c) 1996, 20
09
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1996, 20
11
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -69,12 +69,38 @@ class AppOutputStream extends OutputStream {
// check if the Socket is invalid (error or closed)
c
.
checkWrite
();
/*
* By default, we counter chosen plaintext issues on CBC mode
* ciphersuites in SSLv3/TLS1.0 by sending one byte of application
* data in the first record of every payload, and the rest in
* subsequent record(s). Note that the issues have been solved in
* TLS 1.1 or later.
*
* It is not necessary to split the very first application record of
* a freshly negotiated TLS session, as there is no previous
* application data to guess. To improve compatibility, we will not
* split such records.
*
* This avoids issues in the outbound direction. For a full fix,
* the peer must have similar protections.
*/
boolean
isFirstRecordOfThePayload
=
true
;
// Always flush at the end of each application level record.
// This lets application synchronize read and write streams
// however they like; if we buffered here, they couldn't.
try
{
do
{
int
howmuch
=
Math
.
min
(
len
,
r
.
availableDataBytes
());
int
howmuch
;
if
(
isFirstRecordOfThePayload
&&
c
.
needToSplitPayload
())
{
howmuch
=
Math
.
min
(
0x01
,
r
.
availableDataBytes
());
}
else
{
howmuch
=
Math
.
min
(
len
,
r
.
availableDataBytes
());
}
if
(
isFirstRecordOfThePayload
&&
howmuch
!=
0
)
{
isFirstRecordOfThePayload
=
false
;
}
// NOTE: *must* call c.writeRecord() even for howmuch == 0
if
(
howmuch
>
0
)
{
...
...
src/share/classes/sun/security/ssl/CipherBox.java
浏览文件 @
83d20ffd
...
...
@@ -112,6 +112,11 @@ final class CipherBox {
*/
private
SecureRandom
random
;
/**
* Is the cipher of CBC mode?
*/
private
final
boolean
isCBCMode
;
/**
* Fixed masks of various block size, as the initial decryption IVs
* for TLS 1.1 or later.
...
...
@@ -128,6 +133,7 @@ final class CipherBox {
private
CipherBox
()
{
this
.
protocolVersion
=
ProtocolVersion
.
DEFAULT
;
this
.
cipher
=
null
;
this
.
isCBCMode
=
false
;
}
/**
...
...
@@ -148,6 +154,7 @@ final class CipherBox {
random
=
JsseJce
.
getSecureRandom
();
}
this
.
random
=
random
;
this
.
isCBCMode
=
bulkCipher
.
isCBCMode
;
/*
* RFC 4346 recommends two algorithms used to generated the
...
...
@@ -694,4 +701,12 @@ final class CipherBox {
}
}
/*
* Does the cipher use CBC mode?
*
* @return true if the cipher use CBC mode, false otherwise.
*/
boolean
isCBCMode
()
{
return
isCBCMode
;
}
}
src/share/classes/sun/security/ssl/CipherSuite.java
浏览文件 @
83d20ffd
...
...
@@ -420,10 +420,16 @@ final class CipherSuite implements Comparable<CipherSuite> {
// exportable under 512/40 bit rules
final
boolean
exportable
;
// Is the cipher algorithm of Cipher Block Chaining (CBC) mode?
final
boolean
isCBCMode
;
BulkCipher
(
String
transformation
,
int
keySize
,
int
expandedKeySize
,
int
ivSize
,
boolean
allowed
)
{
this
.
transformation
=
transformation
;
this
.
algorithm
=
transformation
.
split
(
"/"
)[
0
];
String
[]
splits
=
transformation
.
split
(
"/"
);
this
.
algorithm
=
splits
[
0
];
this
.
isCBCMode
=
splits
.
length
<=
1
?
false
:
"CBC"
.
equalsIgnoreCase
(
splits
[
1
]);
this
.
description
=
this
.
algorithm
+
"/"
+
(
keySize
<<
3
);
this
.
keySize
=
keySize
;
this
.
ivSize
=
ivSize
;
...
...
@@ -436,7 +442,10 @@ final class CipherSuite implements Comparable<CipherSuite> {
BulkCipher
(
String
transformation
,
int
keySize
,
int
ivSize
,
boolean
allowed
)
{
this
.
transformation
=
transformation
;
this
.
algorithm
=
transformation
.
split
(
"/"
)[
0
];
String
[]
splits
=
transformation
.
split
(
"/"
);
this
.
algorithm
=
splits
[
0
];
this
.
isCBCMode
=
splits
.
length
<=
1
?
false
:
"CBC"
.
equalsIgnoreCase
(
splits
[
1
]);
this
.
description
=
this
.
algorithm
+
"/"
+
(
keySize
<<
3
);
this
.
keySize
=
keySize
;
this
.
ivSize
=
ivSize
;
...
...
src/share/classes/sun/security/ssl/EngineOutputRecord.java
浏览文件 @
83d20ffd
/*
* Copyright (c) 2003, 20
07
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2003, 20
11
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -46,6 +46,7 @@ import sun.misc.HexDumpEncoder;
*/
final
class
EngineOutputRecord
extends
OutputRecord
{
private
SSLEngineImpl
engine
;
private
EngineWriter
writer
;
private
boolean
finishedMsg
=
false
;
...
...
@@ -62,6 +63,7 @@ final class EngineOutputRecord extends OutputRecord {
*/
EngineOutputRecord
(
byte
type
,
SSLEngineImpl
engine
)
{
super
(
type
,
recordSize
(
type
));
this
.
engine
=
engine
;
writer
=
engine
.
writer
;
}
...
...
@@ -227,11 +229,50 @@ final class EngineOutputRecord extends OutputRecord {
* implementations are fragile and don't like to see empty
* records, so this increases robustness.
*/
int
length
=
Math
.
min
(
ea
.
getAppRemaining
(),
maxDataSize
);
if
(
length
==
0
)
{
if
(
ea
.
getAppRemaining
()
==
0
)
{
return
;
}
/*
* By default, we counter chosen plaintext issues on CBC mode
* ciphersuites in SSLv3/TLS1.0 by sending one byte of application
* data in the first record of every payload, and the rest in
* subsequent record(s). Note that the issues have been solved in
* TLS 1.1 or later.
*
* It is not necessary to split the very first application record of
* a freshly negotiated TLS session, as there is no previous
* application data to guess. To improve compatibility, we will not
* split such records.
*
* Because of the compatibility, we'd better produce no more than
* SSLSession.getPacketBufferSize() net data for each wrap. As we
* need a one-byte record at first, the 2nd record size should be
* equal to or less than Record.maxDataSizeMinusOneByteRecord.
*
* This avoids issues in the outbound direction. For a full fix,
* the peer must have similar protections.
*/
int
length
;
if
(
engine
.
needToSplitPayload
(
writeCipher
,
protocolVersion
))
{
write
(
ea
,
writeMAC
,
writeCipher
,
0x01
);
ea
.
resetLim
();
// reset application data buffer limit
length
=
Math
.
min
(
ea
.
getAppRemaining
(),
maxDataSizeMinusOneByteRecord
);
}
else
{
length
=
Math
.
min
(
ea
.
getAppRemaining
(),
maxDataSize
);
}
// Don't bother to really write empty records.
if
(
length
>
0
)
{
write
(
ea
,
writeMAC
,
writeCipher
,
length
);
}
return
;
}
void
write
(
EngineArgs
ea
,
MAC
writeMAC
,
CipherBox
writeCipher
,
int
length
)
throws
IOException
{
/*
* Copy out existing buffer values.
*/
...
...
src/share/classes/sun/security/ssl/MAC.java
浏览文件 @
83d20ffd
/*
* Copyright (c) 1996, 201
0
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1996, 201
1
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -172,10 +172,10 @@ final class MAC {
* when there are only 2^8 sequence numbers left.
*/
return
(
block
!=
null
&&
mac
!=
null
&&
block
[
0
]
==
0xFF
&&
block
[
1
]
==
0xFF
&&
block
[
2
]
==
0xFF
&&
block
[
3
]
==
0xFF
&&
block
[
4
]
==
0xFF
&&
block
[
5
]
==
0xFF
&&
block
[
6
]
==
0xFF
);
block
[
0
]
==
(
byte
)
0xFF
&&
block
[
1
]
==
(
byte
)
0xFF
&&
block
[
2
]
==
(
byte
)
0xFF
&&
block
[
3
]
==
(
byte
)
0xFF
&&
block
[
4
]
==
(
byte
)
0xFF
&&
block
[
5
]
==
(
byte
)
0xFF
&&
block
[
6
]
==
(
byte
)
0xFF
);
}
/*
...
...
@@ -192,7 +192,7 @@ final class MAC {
* only 2^48 sequence numbers left.
*/
return
(
block
!=
null
&&
mac
!=
null
&&
block
[
0
]
==
0xFF
&&
block
[
1
]
==
0xFF
);
block
[
0
]
==
(
byte
)
0xFF
&&
block
[
1
]
==
(
byte
)
0xFF
);
}
// increment the sequence number in the block array
...
...
src/share/classes/sun/security/ssl/Record.java
浏览文件 @
83d20ffd
/*
* Copyright (c) 1996, 201
0
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1996, 201
1
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -67,6 +67,23 @@ interface Record {
+
maxPadding
// padding
+
trailerSize
;
// MAC
static
final
boolean
enableCBCProtection
=
Debug
.
getBooleanProperty
(
"jsse.enableCBCProtection"
,
true
);
/*
* For CBC protection in SSL3/TLS1, we break some plaintext into two
* packets. Max application data size for the second packet.
*/
static
final
int
maxDataSizeMinusOneByteRecord
=
maxDataSize
// max data size
-
(
// max one byte record size
headerSize
// header
+
maxIVLength
// iv
+
1
// one byte data
+
maxPadding
// padding
+
trailerSize
// MAC
);
/*
* The maximum large record size.
*
...
...
src/share/classes/sun/security/ssl/SSLEngineImpl.java
浏览文件 @
83d20ffd
...
...
@@ -308,6 +308,11 @@ final public class SSLEngineImpl extends SSLEngine {
private
Object
unwrapLock
;
Object
writeLock
;
/*
* Is it the first application record to write?
*/
private
boolean
isFirstAppOutputRecord
=
true
;
/*
* Class and subclass dynamic debugging support
*/
...
...
@@ -612,6 +617,9 @@ final public class SSLEngineImpl extends SSLEngine {
// See comment above.
oldCipher
.
dispose
();
// reset the flag of the first application record
isFirstAppOutputRecord
=
true
;
}
/*
...
...
@@ -1286,9 +1294,35 @@ final public class SSLEngineImpl extends SSLEngine {
}
}
/*
* turn off the flag of the first application record if we really
* consumed at least byte.
*/
if
(
isFirstAppOutputRecord
&&
ea
.
deltaApp
()
>
0
)
{
isFirstAppOutputRecord
=
false
;
}
return
hsStatus
;
}
/*
* Need to split the payload except the following cases:
*
* 1. protocol version is TLS 1.1 or later;
* 2. bulk cipher does not use CBC mode, including null bulk cipher suites.
* 3. the payload is the first application record of a freshly
* negotiated TLS session.
* 4. the CBC protection is disabled;
*
* More details, please refer to
* EngineOutputRecord.write(EngineArgs, MAC, CipherBox).
*/
boolean
needToSplitPayload
(
CipherBox
cipher
,
ProtocolVersion
protocol
)
{
return
(
protocol
.
v
<=
ProtocolVersion
.
TLS10
.
v
)
&&
cipher
.
isCBCMode
()
&&
!
isFirstAppOutputRecord
&&
Record
.
enableCBCProtection
;
}
/*
* Non-application OutputRecords go through here.
*/
...
...
src/share/classes/sun/security/ssl/SSLSocketImpl.java
浏览文件 @
83d20ffd
...
...
@@ -369,6 +369,11 @@ final public class SSLSocketImpl extends BaseSSLSocketImpl {
/* Class and subclass dynamic debugging support */
private
static
final
Debug
debug
=
Debug
.
getInstance
(
"ssl"
);
/*
* Is it the first application record to write?
*/
private
boolean
isFirstAppOutputRecord
=
true
;
//
// CONSTRUCTORS AND INITIALIZATION CODE
//
...
...
@@ -802,8 +807,35 @@ final public class SSLSocketImpl extends BaseSSLSocketImpl {
if
(
connectionState
<
cs_ERROR
)
{
checkSequenceNumber
(
writeMAC
,
r
.
contentType
());
}
// turn off the flag of the first application record
if
(
isFirstAppOutputRecord
&&
r
.
contentType
()
==
Record
.
ct_application_data
)
{
isFirstAppOutputRecord
=
false
;
}
}
/*
* Need to split the payload except the following cases:
*
* 1. protocol version is TLS 1.1 or later;
* 2. bulk cipher does not use CBC mode, including null bulk cipher suites.
* 3. the payload is the first application record of a freshly
* negotiated TLS session.
* 4. the CBC protection is disabled;
*
* More details, please refer to AppOutputStream.write(byte[], int, int).
*/
boolean
needToSplitPayload
()
{
writeLock
.
lock
();
try
{
return
(
protocolVersion
.
v
<=
ProtocolVersion
.
TLS10
.
v
)
&&
writeCipher
.
isCBCMode
()
&&
!
isFirstAppOutputRecord
&&
Record
.
enableCBCProtection
;
}
finally
{
writeLock
.
unlock
();
}
}
/*
* Read an application data record. Alerts and handshake
...
...
@@ -2030,6 +2062,9 @@ final public class SSLSocketImpl extends BaseSSLSocketImpl {
// See comment above.
oldCipher
.
dispose
();
// reset the flag of the first application record
isFirstAppOutputRecord
=
true
;
}
/*
...
...
src/share/classes/sun/text/resources/CollationData_th.java
浏览文件 @
83d20ffd
/*
* Copyright (c) 20
05
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 20
11
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -103,18 +103,13 @@ public class CollationData_th extends ListResourceBundle {
//
// Normal vowels
//
+
"< \u0E4D "
// NIKHAHIT
+
"< \u0E30 "
// SARA A
+
"< \u0E31 "
// MAI HAN-AKAT
+
"< \u0E32 "
// SARA AA
// Normalizer will decompose this character to \u0e4d\u0e32. This is
// a Bad Thing, because we want the separate characters to sort
// differently than this individual one. Since there's no public way to
// set the decomposition to be used when creating a collator, there's
// no way around this right now.
// It's best to go ahead and leave the character in, because it occurs
// this way a lot more often than it occurs as separate characters.
+
"< \u0E33 "
// SARA AM
// Normalizer will decompose this character to \u0e4d\u0e32.
+
"< \u0E33 = \u0E4D\u0E32 "
// SARA AM
+
"< \u0E34 "
// SARA I
...
...
@@ -133,62 +128,58 @@ public class CollationData_th extends ListResourceBundle {
+
"< \u0E43 "
// SARA AI MAIMUAN
+
"< \u0E44 "
// SARA AI MAIMALAI
//
// Digits
//
+
"< \u0E50 "
// DIGIT ZERO
+
"< \u0E51 "
// DIGIT ONE
+
"< \u0E52 "
// DIGIT TWO
+
"< \u0E53 "
// DIGIT THREE
+
"< \u0E54 "
// DIGIT FOUR
+
"< \u0E55 "
// DIGIT FIVE
+
"< \u0E56 "
// DIGIT SIX
+
"< \u0E57 "
// DIGIT SEVEN
+
"< \u0E58 "
// DIGIT EIGHT
+
"< \u0E59 "
// DIGIT NINE
// Sorta tonal marks, but maybe not really
+
"< \u0E4D "
// NIKHAHIT
//
// Thai symbols are supposed to sort "after white space".
// I'm treating this as making them sort just after the normal Latin-1
// symbols, which are in turn after the white space.
//
+
"&'\u007d'"
// right-brace
+
"< \u0E2F "
// PAIYANNOI (ellipsis, abbreviation)
+
"< \u0E46 "
// MAIYAMOK
+
"< \u0E4F "
// FONGMAN
+
"< \u0E5A "
// ANGKHANKHU
+
"< \u0E5B "
// KHOMUT
+
"< \u0E3F "
// CURRENCY SYMBOL BAHT
// These symbols are supposed to be "after all characters"
+
"< \u0E4E "
// YAMAKKAN
// This rare symbol also comes after all characters. But when it is
// used in combination with RU and LU, the combination is treated as
// a separate letter, ala "CH" sorting after "C" in traditional Spanish.
//according to CLDR, it's after 0e44
+
"< \u0E3A "
// PHINTHU
// This rare symbol comes after all characters.
+
"< \u0E45 "
// LAKKHANGYAO
+
"& \u0E
24 < \u0E24\u0E45 "
+
"& \u0E26 < \u0E26\u0E45 "
+
"& \u0E
32 , \0E45 "
// According to CLDR, 0E45 is after 0E32 in tertiary level
// Tonal marks are primary ignorables but are treated as secondary
// differences
// Below are thai puntuation marks and Tonal(Accent) marks. According to CLDR 1.9 and
// ISO/IEC 14651, Annex C, C.2.1 Thai ordering principles, 0E2F to 0E5B are punctuaion marks that need to be ignored
// in the first three leveles. 0E4E to 0E4B are tonal marks to be compared in secondary level.
// In real implmentation, set puncutation marks in tertiary as there is no fourth level in Java.
// Set all these special marks after \u0301, the accute accent.
+
"& \u0301 "
// acute accent
//puncutation marks
+
", \u0E2F "
// PAIYANNOI (ellipsis, abbreviation)
+
", \u0E46 "
// MAIYAMOK
+
", \u0E4F "
// FONGMAN
+
", \u0E5A "
// ANGKHANKHU
+
", \u0E5B "
// KHOMUT
//tonal marks
+
"; \u0E4E "
// YAMAKKAN
+
"; \u0E4C "
// THANTHAKHAT
+
"; \u0E47 "
// MAITAIKHU
+
"; \u0E48 "
// MAI EK
+
"; \u0E49 "
// MAI THO
+
"; \u0E4A "
// MAI TRI
+
"; \u0E4B "
// MAI CHATTAWA
+
"; \u0E4C "
// THANTHAKHAT
// These are supposed to be ignored, so I'm treating them as controls
+
"& \u0001 "
+
"= \u0E3A "
// PHINTHU
+
"= '.' "
// period
}
//
// Digits are equal to their corresponding Arabic digits in the first level
//
+
"& 0 = \u0E50 "
// DIGIT ZERO
+
"& 1 = \u0E51 "
// DIGIT ONE
+
"& 2 = \u0E52 "
// DIGIT TWO
+
"& 3 = \u0E53 "
// DIGIT THREE
+
"& 4 = \u0E54 "
// DIGIT FOUR
+
"& 5 = \u0E55 "
// DIGIT FIVE
+
"& 6 = \u0E56 "
// DIGIT SIX
+
"& 7 = \u0E57 "
// DIGIT SEVEN
+
"& 8 = \u0E58 "
// DIGIT EIGHT
+
"& 9 = \u0E59 "
// DIGIT NINE
}
};
}
}
src/share/classes/sun/util/resources/CalendarData_lv.properties
浏览文件 @
83d20ffd
#
# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved.
# Copyright (c) 2005,
2011,
Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
...
...
@@ -23,21 +23,45 @@
# questions.
#
# (C) Copyright Taligent, Inc. 1996, 1997 - All Rights Reserved
# (C) Copyright IBM Corp. 1996 - 1999 - All Rights Reserved
#
# The original version of this source code and documentation
# is copyrighted and owned by Taligent, Inc., a wholly-owned
# subsidiary of IBM. These materials are provided under terms
# of a License Agreement between Taligent and Sun. This technology
# is protected by multiple US and International patents.
# COPYRIGHT AND PERMISSION NOTICE
#
# This notice and attribution to Taligent may not be removed.
# Taligent is a registered trademark of Taligent, Inc.
# Copyright (C) 1991-2011 Unicode, Inc. All rights reserved.
# Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of the Unicode data files and any associated documentation (the
# "Data Files") or Unicode software and any associated documentation
# (the "Software") to deal in the Data Files or Software without
# restriction, including without limitation the rights to use, copy,
# modify, merge, publish, distribute, and/or sell copies of the Data
# Files or Software, and to permit persons to whom the Data Files or
# Software are furnished to do so, provided that (a) the above copyright
# notice(s) and this permission notice appear with all copies of the
# Data Files or Software, (b) both the above copyright notice(s) and
# this permission notice appear in associated documentation, and (c)
# there is clear notice in each modified Data File or in the Software as
# well as in the documentation associated with the Data File(s) or
# Software that the data or software has been modified.
#
# THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF
# ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
# NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT
# HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR
# ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA FILES OR
# SOFTWARE.
#
# Except as contained in this notice, the name of a copyright holder
# shall not be used in advertising or otherwise to promote the sale, use
# or other dealings in these Data Files or Software without prior
# written authorization of the copyright holder.
#
This bundle is empty because the data of the base bundle
#
is adequate for this locale.
#
The bundle is necessary to prevent the resource
# bundle lookup from falling back to the default
# locale.
#
#
Generated automatically from the Common Locale Data Repository. DO NOT EDIT!
#
firstDayOfWeek
=
2
minimalDaysInFirstWeek
=
4
src/share/classes/sun/util/xml/XMLUtils.java
浏览文件 @
83d20ffd
/*
* Copyright (c) 2003, 201
0
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2003, 201
1
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -76,7 +76,7 @@ public class XMLUtils {
}
catch
(
SAXException
saxe
)
{
throw
new
InvalidPropertiesFormatException
(
saxe
);
}
Element
propertiesElement
=
(
Element
)
doc
.
getChildNodes
().
item
(
1
);
Element
propertiesElement
=
doc
.
getDocumentElement
(
);
String
xmlVersion
=
propertiesElement
.
getAttribute
(
"version"
);
if
(
xmlVersion
.
compareTo
(
EXTERNAL_XML_VERSION
)
>
0
)
throw
new
InvalidPropertiesFormatException
(
...
...
src/share/javavm/export/jvm.h
浏览文件 @
83d20ffd
...
...
@@ -1424,7 +1424,8 @@ typedef struct {
*/
unsigned
int
thread_park_blocker
:
1
;
unsigned
int
post_vm_init_hook_enabled
:
1
;
unsigned
int
:
30
;
unsigned
int
pending_list_uses_discovered_field
:
1
;
unsigned
int
:
29
;
unsigned
int
:
32
;
unsigned
int
:
32
;
}
jdk_version_info
;
...
...
src/share/native/com/sun/java/util/jar/pack/unpack.cpp
浏览文件 @
83d20ffd
...
...
@@ -1112,11 +1112,14 @@ void unpacker::read_Utf8_values(entry* cpMap, int len) {
uint
size3
=
suffix
*
3
;
if
(
suffix
==
0
)
continue
;
// done with empty string
chars
.
malloc
(
size3
);
CHECK
;
byte
*
chp
=
chars
.
ptr
;
band
saved_band
=
cp_Utf8_big_chars
;
cp_Utf8_big_chars
.
readData
(
suffix
);
CHECK
;
for
(
int
j
=
0
;
j
<
suffix
;
j
++
)
{
unsigned
short
ch
=
cp_Utf8_big_chars
.
getInt
();
CHECK
;
chp
=
store_Utf8_char
(
chp
,
ch
);
}
chars
.
realloc
(
chp
-
chars
.
ptr
);
...
...
@@ -1134,10 +1137,12 @@ void unpacker::read_Utf8_values(entry* cpMap, int len) {
CHECK
;
int
prevlen
=
0
;
// previous string length (in chars)
tmallocs
.
add
(
bigbuf
.
ptr
);
// free after this block
CHECK
;
cp_Utf8_prefix
.
rewind
();
for
(
i
=
0
;
i
<
len
;
i
++
)
{
bytes
&
chars
=
allsuffixes
[
i
];
int
prefix
=
(
i
<
PREFIX_SKIP_2
)
?
0
:
cp_Utf8_prefix
.
getInt
();
CHECK
;
int
suffix
=
(
int
)
chars
.
len
;
byte
*
fillp
;
// by induction, the buffer is already filled with the prefix
...
...
src/share/native/com/sun/java/util/jar/pack/utils.cpp
浏览文件 @
83d20ffd
/*
* Copyright (c) 2001, 20
08
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2001, 20
11
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -52,7 +52,7 @@ void* must_malloc(size_t size) {
if
(
msize
>=
0
&&
msize
<
sizeof
(
int
))
msize
=
sizeof
(
int
);
// see 0xbaadf00d below
#endif
void
*
ptr
=
(
msize
>
PSIZE_MAX
)
?
null
:
malloc
(
msize
);
void
*
ptr
=
(
msize
>
PSIZE_MAX
||
msize
<=
0
)
?
null
:
malloc
(
msize
);
if
(
ptr
!=
null
)
{
memset
(
ptr
,
0
,
size
);
}
else
{
...
...
src/share/native/com/sun/java/util/jar/pack/utils.h
浏览文件 @
83d20ffd
/*
* Copyright (c) 2001, 20
08
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2001, 20
11
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -33,7 +33,7 @@ void mtrace(char c, void* ptr, size_t size);
#endif
// overflow management
#define OVERFLOW ((
size_
t)-1)
#define OVERFLOW ((
uin
t)-1)
#define PSIZE_MAX (OVERFLOW/2)
/* normal size limit */
inline
size_t
scale_size
(
size_t
size
,
size_t
scale
)
{
...
...
src/share/native/common/jdk_util.c
浏览文件 @
83d20ffd
...
...
@@ -101,5 +101,5 @@ JDK_GetVersionInfo0(jdk_version_info* info, size_t info_size) {
// Advertise presence of sun.misc.PostVMInitHook:
// future optimization: detect if this is enabled.
info
->
post_vm_init_hook_enabled
=
1
;
info
->
pending_list_uses_discovered_field
=
1
;
}
src/share/native/sun/java2d/loops/TransformHelper.c
浏览文件 @
83d20ffd
/*
* Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2004,
2011,
Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -284,7 +284,7 @@ Java_sun_java2d_loops_TransformHelper_Transform
TransformHelperFunc
*
pHelperFunc
;
TransformInterpFunc
*
pInterpFunc
;
jdouble
xorig
,
yorig
;
j
int
numedges
;
j
long
numedges
;
jint
*
pEdges
;
jint
edgebuf
[
2
+
MAXEDGES
*
2
];
union
{
...
...
@@ -379,19 +379,44 @@ Java_sun_java2d_loops_TransformHelper_Transform
}
Region_IntersectBounds
(
&
clipInfo
,
&
dstInfo
.
bounds
);
numedges
=
(
dstInfo
.
bounds
.
y2
-
dstInfo
.
bounds
.
y1
);
if
(
numedges
>
MAXEDGES
)
{
pEdges
=
malloc
((
2
+
2
*
numedges
)
*
sizeof
(
*
pEdges
));
if
(
pEdges
==
NULL
)
{
SurfaceData_InvokeUnlock
(
env
,
dstOps
,
&
dstInfo
);
SurfaceData_InvokeUnlock
(
env
,
srcOps
,
&
srcInfo
);
/* edgeArray should already contain zeros for min/maxy */
return
;
}
numedges
=
(((
jlong
)
dstInfo
.
bounds
.
y2
)
-
((
jlong
)
dstInfo
.
bounds
.
y1
));
if
(
numedges
<=
0
)
{
pEdges
=
NULL
;
}
else
if
(
!
JNU_IsNull
(
env
,
edgeArray
))
{
/*
* Ideally Java should allocate an array large enough, but if
* we ever have a miscommunication about the number of edge
* lines, or if the Java array calculation should overflow to
* a positive number and succeed in allocating an array that
* is too small, we need to verify that it can still hold the
* number of integers that we plan to store to be safe.
*/
jsize
edgesize
=
(
*
env
)
->
GetArrayLength
(
env
,
edgeArray
);
/* (edgesize/2 - 1) should avoid any overflow or underflow. */
pEdges
=
(((
edgesize
/
2
)
-
1
)
>=
numedges
)
?
(
*
env
)
->
GetPrimitiveArrayCritical
(
env
,
edgeArray
,
NULL
)
:
NULL
;
}
else
if
(
numedges
>
MAXEDGES
)
{
/* numedges variable (jlong) can be at most ((1<<32)-1) */
/* memsize can overflow a jint, but not a jlong */
jlong
memsize
=
((
numedges
*
2
)
+
2
)
*
sizeof
(
*
pEdges
);
pEdges
=
(
memsize
==
((
size_t
)
memsize
))
?
malloc
((
size_t
)
memsize
)
:
NULL
;
}
else
{
pEdges
=
edgebuf
;
}
if
(
pEdges
==
NULL
)
{
if
(
numedges
>
0
)
{
JNU_ThrowInternalError
(
env
,
"Unable to allocate edge list"
);
}
SurfaceData_InvokeUnlock
(
env
,
dstOps
,
&
dstInfo
);
SurfaceData_InvokeUnlock
(
env
,
srcOps
,
&
srcInfo
);
/* edgeArray should already contain zeros for min/maxy */
return
;
}
Transform_GetInfo
(
env
,
itxform
,
&
itxInfo
);
if
(
!
Region_IsEmpty
(
&
clipInfo
))
{
...
...
@@ -500,14 +525,14 @@ Java_sun_java2d_loops_TransformHelper_Transform
}
else
{
pEdges
[
0
]
=
pEdges
[
1
]
=
0
;
}
SurfaceData_InvokeUnlock
(
env
,
dstOps
,
&
dstInfo
);
SurfaceData_InvokeUnlock
(
env
,
srcOps
,
&
srcInfo
);
if
(
!
JNU_IsNull
(
env
,
edgeArray
))
{
(
*
env
)
->
SetIntArrayRegion
(
env
,
edgeArray
,
0
,
2
+
numedges
*
2
,
pEdges
);
}
if
(
pEdges
!=
edgebuf
)
{
(
*
env
)
->
ReleasePrimitiveArrayCritical
(
env
,
edgeArray
,
pEdges
,
0
);
}
else
if
(
pEdges
!=
edgebuf
)
{
free
(
pEdges
);
}
SurfaceData_InvokeUnlock
(
env
,
dstOps
,
&
dstInfo
);
SurfaceData_InvokeUnlock
(
env
,
srcOps
,
&
srcInfo
);
}
static
void
...
...
src/solaris/classes/sun/print/UnixPrintJob.java
浏览文件 @
83d20ffd
...
...
@@ -38,7 +38,9 @@ import java.io.InputStreamReader;
import
java.io.OutputStream
;
import
java.io.OutputStreamWriter
;
import
java.io.IOException
;
import
java.io.PrintWriter
;
import
java.io.Reader
;
import
java.io.StringWriter
;
import
java.io.UnsupportedEncodingException
;
import
java.util.Vector
;
...
...
@@ -955,23 +957,49 @@ public class UnixPrintJob implements CancelablePrintJob {
private
class
PrinterSpooler
implements
java
.
security
.
PrivilegedAction
{
PrintException
pex
;
private
void
handleProcessFailure
(
final
Process
failedProcess
,
final
String
[]
execCmd
,
final
int
result
)
throws
IOException
{
try
(
StringWriter
sw
=
new
StringWriter
();
PrintWriter
pw
=
new
PrintWriter
(
sw
))
{
pw
.
append
(
"error="
).
append
(
Integer
.
toString
(
result
));
pw
.
append
(
" running:"
);
for
(
String
arg:
execCmd
)
{
pw
.
append
(
" '"
).
append
(
arg
).
append
(
"'"
);
}
try
(
InputStream
is
=
failedProcess
.
getErrorStream
();
InputStreamReader
isr
=
new
InputStreamReader
(
is
);
BufferedReader
br
=
new
BufferedReader
(
isr
))
{
while
(
br
.
ready
())
{
pw
.
println
();
pw
.
append
(
"\t\t"
).
append
(
br
.
readLine
());
}
}
finally
{
pw
.
flush
();
throw
new
IOException
(
sw
.
toString
());
}
}
}
public
Object
run
()
{
if
(
spoolFile
==
null
||
!
spoolFile
.
exists
())
{
pex
=
new
PrintException
(
"No spool file"
);
notifyEvent
(
PrintJobEvent
.
JOB_FAILED
);
return
null
;
}
try
{
/**
* Spool to the printer.
*/
if
(
spoolFile
==
null
||
!
spoolFile
.
exists
())
{
pex
=
new
PrintException
(
"No spool file"
);
notifyEvent
(
PrintJobEvent
.
JOB_FAILED
);
return
null
;
}
String
fileName
=
spoolFile
.
getAbsolutePath
();
String
execCmd
[]
=
printExecCmd
(
mDestination
,
mOptions
,
mNoJobSheet
,
jobName
,
copies
,
fileName
);
Process
process
=
Runtime
.
getRuntime
().
exec
(
execCmd
);
process
.
waitFor
();
spoolFile
.
delete
();
final
int
result
=
process
.
exitValue
();
if
(
0
!=
result
)
{
handleProcessFailure
(
process
,
execCmd
,
result
);
}
notifyEvent
(
PrintJobEvent
.
DATA_TRANSFER_COMPLETE
);
}
catch
(
IOException
ex
)
{
notifyEvent
(
PrintJobEvent
.
JOB_FAILED
);
...
...
@@ -981,6 +1009,7 @@ public class UnixPrintJob implements CancelablePrintJob {
notifyEvent
(
PrintJobEvent
.
JOB_FAILED
);
pex
=
new
PrintException
(
ie
);
}
finally
{
spoolFile
.
delete
();
notifyEvent
(
PrintJobEvent
.
NO_MORE_EVENTS
);
}
return
null
;
...
...
src/windows/classes/java/lang/ProcessImpl.java
浏览文件 @
83d20ffd
...
...
@@ -60,10 +60,11 @@ final class ProcessImpl extends Process {
throws
IOException
{
if
(
append
)
{
String
path
=
f
.
getPath
();
SecurityManager
sm
=
System
.
getSecurityManager
();
if
(
sm
!=
null
)
sm
.
checkWrite
(
f
.
getPath
()
);
long
handle
=
openForAtomicAppend
(
f
.
getPath
()
);
sm
.
checkWrite
(
path
);
long
handle
=
openForAtomicAppend
(
path
);
final
FileDescriptor
fd
=
new
FileDescriptor
();
fdAccess
.
setHandle
(
fd
,
handle
);
return
AccessController
.
doPrivileged
(
...
...
src/windows/classes/sun/nio/fs/WindowsDirectoryStream.java
浏览文件 @
83d20ffd
...
...
@@ -124,26 +124,27 @@ class WindowsDirectoryStream
private
boolean
atEof
;
private
String
first
;
private
Path
nextEntry
;
private
String
prefix
;
WindowsDirectoryIterator
(
String
first
)
{
atEof
=
false
;
this
.
first
=
first
;
if
(
dir
.
needsSlashWhenResolving
())
{
prefix
=
dir
.
toString
()
+
"\\"
;
}
else
{
prefix
=
dir
.
toString
();
}
}
// links to self and parent directories are ignored
private
boolean
isSelfOrParent
(
String
name
)
{
return
name
.
equals
(
"."
)
||
name
.
equals
(
".."
);
}
// applies filter and also ignores "." and ".."
private
Path
acceptEntry
(
String
s
,
BasicFileAttributes
attrs
)
{
if
(
s
.
equals
(
"."
)
||
s
.
equals
(
".."
))
return
null
;
if
(
dir
.
needsSlashWhenResolving
())
{
StringBuilder
sb
=
new
StringBuilder
(
dir
.
toString
());
sb
.
append
(
'\\'
);
sb
.
append
(
s
);
s
=
sb
.
toString
();
}
else
{
s
=
dir
+
s
;
}
Path
entry
=
WindowsPath
.
createFromNormalizedPath
(
dir
.
getFileSystem
(),
s
,
attrs
);
.
createFromNormalizedPath
(
dir
.
getFileSystem
(),
prefix
+
s
,
attrs
);
try
{
if
(
filter
.
accept
(
entry
))
return
entry
;
...
...
@@ -157,7 +158,7 @@ class WindowsDirectoryStream
private
Path
readNextEntry
()
{
// handle first element returned by search
if
(
first
!=
null
)
{
nextEntry
=
acceptEntry
(
first
,
null
);
nextEntry
=
isSelfOrParent
(
first
)
?
null
:
acceptEntry
(
first
,
null
);
first
=
null
;
if
(
nextEntry
!=
null
)
return
nextEntry
;
...
...
@@ -184,6 +185,10 @@ class WindowsDirectoryStream
return
null
;
}
// ignore link to self and parent directories
if
(
isSelfOrParent
(
name
))
continue
;
// grab the attributes from the WIN32_FIND_DATA structure
// (needs to be done while holding closeLock because close
// will release the buffer)
...
...
src/windows/classes/sun/nio/fs/WindowsPathParser.java
浏览文件 @
83d20ffd
...
...
@@ -120,12 +120,18 @@ class WindowsPathParser {
off
=
next
;
}
else
{
if
(
isLetter
(
c0
)
&&
c1
==
':'
)
{
root
=
input
.
substring
(
0
,
2
);
if
(
len
>
2
&&
isSlash
(
input
.
charAt
(
2
)))
{
char
c2
;
if
(
len
>
2
&&
isSlash
(
c2
=
input
.
charAt
(
2
)))
{
// avoid concatenation when root is "D:\"
if
(
c2
==
'\\'
)
{
root
=
input
.
substring
(
0
,
3
);
}
else
{
root
=
input
.
substring
(
0
,
2
)
+
'\\'
;
}
off
=
3
;
root
+=
"\\"
;
type
=
WindowsPathType
.
ABSOLUTE
;
}
else
{
root
=
input
.
substring
(
0
,
2
);
off
=
2
;
type
=
WindowsPathType
.
DRIVE_RELATIVE
;
}
...
...
src/windows/native/sun/windows/awt_Window.cpp
浏览文件 @
83d20ffd
...
...
@@ -355,7 +355,7 @@ void AwtWindow::RepositionSecurityWarning(JNIEnv *env)
RECT
rect
;
CalculateWarningWindowBounds
(
env
,
&
rect
);
::
SetWindowPos
(
warningWindow
,
IsAlwaysOnTop
()
?
HWND_TOPMOST
:
GetHWnd
()
,
::
SetWindowPos
(
warningWindow
,
IsAlwaysOnTop
()
?
HWND_TOPMOST
:
HWND_NOTOPMOST
,
rect
.
left
,
rect
.
top
,
rect
.
right
-
rect
.
left
,
rect
.
bottom
-
rect
.
top
,
SWP_ASYNCWINDOWPOS
|
SWP_NOACTIVATE
|
...
...
@@ -835,7 +835,7 @@ void AwtWindow::StartSecurityAnimation(AnimationKind kind)
if
(
securityAnimationKind
==
akShow
)
{
::
SetWindowPos
(
warningWindow
,
IsAlwaysOnTop
()
?
HWND_TOPMOST
:
GetHWnd
()
,
IsAlwaysOnTop
()
?
HWND_TOPMOST
:
HWND_NOTOPMOST
,
0
,
0
,
0
,
0
,
SWP_NOACTIVATE
|
SWP_NOSIZE
|
SWP_NOMOVE
|
SWP_SHOWWINDOW
|
SWP_NOOWNERZORDER
);
...
...
test/ProblemList.txt
浏览文件 @
83d20ffd
...
...
@@ -490,9 +490,6 @@ sun/security/pkcs11/ec/TestECDSA.java solaris-i586
#sun/security/pkcs11/ec/TestKeyFactory.java solaris-i586
sun/security/pkcs11/sslecc/ClientJSSEServerJSSE.java solaris-i586
# Directly references PKCS11 class
sun/security/pkcs11/Provider/Absolute.java windows-x64
# Fails on Fedora 9/Ubuntu 10.04 64bit, PKCS11Exception: CKR_DEVICE_ERROR
sun/security/pkcs11/KeyAgreement/TestDH.java generic-all
...
...
test/java/lang/ref/ReferenceEnqueue.java
0 → 100644
浏览文件 @
83d20ffd
/*
* Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/* @test
* @bug 4268317
* @summary Test if Reference.enqueue() works properly with GC
*/
import
java.lang.ref.*
;
public
class
ReferenceEnqueue
{
public
static
void
main
(
String
args
[])
throws
Exception
{
for
(
int
i
=
0
;
i
<
5
;
i
++)
new
WeakRef
().
run
();
System
.
out
.
println
(
"Test passed."
);
}
static
class
WeakRef
{
final
ReferenceQueue
<
Object
>
queue
=
new
ReferenceQueue
<
Object
>();
final
Reference
<
Object
>
ref
;
final
int
iterations
=
1000
;
WeakRef
()
{
this
.
ref
=
new
WeakReference
<
Object
>(
new
Object
(),
queue
);
}
void
run
()
throws
InterruptedException
{
System
.
gc
();
for
(
int
i
=
0
;
i
<
iterations
;
i
++)
{
System
.
gc
();
if
(
ref
.
isEnqueued
())
{
break
;
}
Thread
.
sleep
(
100
);
}
if
(
ref
.
isEnqueued
()
==
false
)
{
// GC have not enqueued refWeak for the timeout period
System
.
out
.
println
(
"Reference not enqueued yet"
);
return
;
}
if
(
ref
.
enqueue
()
==
true
)
{
// enqueue() should return false since
// ref is already enqueued by the GC
throw
new
RuntimeException
(
"Error: enqueue() returned true;"
+
" expected false"
);
}
if
(
queue
.
poll
()
==
null
)
{
// poll() should return ref enqueued by the GC
throw
new
RuntimeException
(
"Error: poll() returned null;"
+
" expected ref object"
);
}
}
}
}
test/java/lang/ref/ReferenceEnqueuePending.java
0 → 100644
浏览文件 @
83d20ffd
/* Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/* @test
* @bug 4243978
* @summary Test if Reference.enqueue() works properly with pending references
*/
import
java.lang.ref.*
;
public
class
ReferenceEnqueuePending
{
static
class
NumberedWeakReference
extends
WeakReference
<
Integer
>
{
// Add an integer to identify the weak reference object.
int
number
;
NumberedWeakReference
(
Integer
referent
,
ReferenceQueue
<
Integer
>
q
,
int
i
)
{
super
(
referent
,
q
);
number
=
i
;
}
}
final
static
boolean
debug
=
System
.
getProperty
(
"test.debug"
)
!=
null
;
final
static
int
iterations
=
1000
;
final
static
int
gc_trigger
=
99
;
static
int
[]
a
=
new
int
[
2
*
iterations
];
// Keep all weak references alive with the following array.
static
NumberedWeakReference
[]
b
=
new
NumberedWeakReference
[
iterations
];
public
static
void
main
(
String
[]
argv
)
throws
Exception
{
if
(
debug
)
{
System
.
out
.
println
(
"Starting the test."
);
}
// Raise thread priority to match the referenceHandler
// priority, so that they can race also on a uniprocessor.
raisePriority
();
ReferenceQueue
<
Integer
>
refQueue
=
new
ReferenceQueue
<>();
// Our objective is to let the mutator enqueue
// a Reference object that may already be in the
// pending state because of having been identified
// as weakly reachable at a previous garbage collection.
// To this end, we create many Reference objects, each with a
// a unique integer object as its referant.
// We let the referents become eligible for collection,
// while racing with the garbage collector which may
// have pended some of these Reference objects.
// Finally we check that all of the Reference objects
// end up on the their queue. The test was originally
// submitted to show that such races could break the
// pending list and/or the reference queue, because of sharing
// the same link ("next") for maintaining both lists, thus
// losing some of the Reference objects on either queue.
Integer
obj
=
new
Integer
(
0
);
NumberedWeakReference
weaky
=
new
NumberedWeakReference
(
obj
,
refQueue
,
0
);
for
(
int
i
=
1
;
i
<
iterations
;
i
++)
{
// Create a new object, dropping the onlY strong reference to
// the previous Integer object.
obj
=
new
Integer
(
i
);
// Trigger gc each gc_trigger iterations.
if
((
i
%
gc_trigger
)
==
0
)
{
forceGc
(
0
);
}
// Enqueue every other weaky.
if
((
i
%
2
)
==
0
)
{
weaky
.
enqueue
();
}
// Remember the Reference objects, for testing later.
b
[
i
-
1
]
=
weaky
;
// Get a new weaky for the Integer object just
// created, which may be explicitly enqueued in
// our next trip around the loop.
weaky
=
new
NumberedWeakReference
(
obj
,
refQueue
,
i
);
}
// Do a final collection to discover and process all
// Reference objects created above, allowing enough time
// for the ReferenceHandler thread to queue the References.
forceGc
(
100
);
forceGc
(
100
);
// Verify that all WeakReference objects ended up queued.
checkResult
(
refQueue
,
obj
,
iterations
-
1
);
System
.
out
.
println
(
"Test passed."
);
}
private
static
void
checkResult
(
ReferenceQueue
<
Integer
>
queue
,
Integer
obj
,
int
expected
)
{
if
(
debug
)
{
System
.
out
.
println
(
"Reading the queue"
);
}
// Empty the queue and record numbers into a[];
NumberedWeakReference
weakRead
=
(
NumberedWeakReference
)
queue
.
poll
();
int
length
=
0
;
while
(
weakRead
!=
null
)
{
a
[
length
++]
=
weakRead
.
number
;
weakRead
=
(
NumberedWeakReference
)
queue
.
poll
();
}
if
(
debug
)
{
System
.
out
.
println
(
"Reference Queue had "
+
length
+
" elements"
);
}
// Use the last Reference object of those created above, so as to keep it "alive".
System
.
out
.
println
(
"I must write "
+
obj
+
" to prevent compiler optimizations."
);
// verify the queued references: all but the last Reference object
// should have been in the queue.
if
(
debug
)
{
System
.
out
.
println
(
"Start of final check"
);
}
// Sort the first "length" elements in array "a[]".
sort
(
length
);
boolean
fail
=
(
length
!=
expected
);
for
(
int
i
=
0
;
i
<
length
;
i
++)
{
if
(
a
[
i
]
!=
i
)
{
if
(
debug
)
{
System
.
out
.
println
(
"a["
+
i
+
"] is not "
+
i
+
" but "
+
a
[
i
]);
}
fail
=
true
;
}
}
if
(
fail
)
{
printMissingElements
(
length
,
expected
);
throw
new
RuntimeException
(
"TEST FAILED: only "
+
length
+
" reference objects have been queued out of "
+
expected
);
}
}
private
static
void
printMissingElements
(
int
length
,
int
expected
)
{
System
.
out
.
println
(
"The following numbers were not found in the reference queue: "
);
int
missing
=
0
;
int
element
=
0
;
for
(
int
i
=
0
;
i
<
length
;
i
++)
{
while
((
a
[
i
]
!=
element
)
&
(
element
<
expected
))
{
System
.
out
.
print
(
element
+
" "
);
if
(
missing
%
20
==
19
)
{
System
.
out
.
println
(
" "
);
}
missing
++;
element
++;
}
element
++;
}
System
.
out
.
print
(
"\n"
);
}
private
static
void
forceGc
(
long
millis
)
throws
InterruptedException
{
Runtime
.
getRuntime
().
gc
();
Thread
.
sleep
(
millis
);
}
// Bubble sort the first "length" elements in array "a".
private
static
void
sort
(
int
length
)
{
int
hold
;
if
(
debug
)
{
System
.
out
.
println
(
"Sorting. Length="
+
length
);
}
for
(
int
pass
=
1
;
pass
<
length
;
pass
++)
{
// passes over the array
for
(
int
i
=
0
;
i
<
length
-
pass
;
i
++)
{
// a single pass
if
(
a
[
i
]
>
a
[
i
+
1
])
{
// then swap
hold
=
a
[
i
];
a
[
i
]
=
a
[
i
+
1
];
a
[
i
+
1
]
=
hold
;
}
}
// End of i loop
}
// End of pass loop
}
// Raise thread priority so as to increase the
// probability of the mutator succeeding in enqueueing
// an object that is still in the pending state.
// This is (probably) only required for a uniprocessor.
static
void
raisePriority
()
{
Thread
tr
=
Thread
.
currentThread
();
tr
.
setPriority
(
Thread
.
MAX_PRIORITY
);
}
}
// End of class ReferenceEnqueuePending
test/java/nio/charset/coders/Errors.java
浏览文件 @
83d20ffd
...
...
@@ -23,7 +23,7 @@
/* @test
* @summary Check that error cases are replaced correctly in String/ISR/OSW
* @bug 4457851
* @bug 4457851
7096080
*
* @build Errors Util
* @run main Errors
...
...
@@ -193,11 +193,9 @@ public class Errors {
t
.
test
(
"\uFFFF"
,
new
byte
[]
{
(
byte
)
0xEF
,
(
byte
)
0xBF
,
(
byte
)
0xBF
});
t
.
test
(
new
byte
[]
{
X
,
(
byte
)
0x7f
,
Y
},
"x\u007Fy"
);
t
.
test
(
new
byte
[]
{
X
,
(
byte
)
0x80
,
Y
},
"x\uFFFDy"
);
t
.
test
(
new
byte
[]
{
(
byte
)
0xf0
,
(
byte
)
0xf0
},
"\uFFFD"
);
}
public
static
void
main
(
String
[]
args
)
throws
Exception
{
test_US_ASCII
(
new
TestString
(
"US-ASCII"
));
test_US_ASCII
(
new
TestStream
(
"US-ASCII"
));
...
...
test/java/util/Collections/EmptySortedSet.java
0 → 100644
浏览文件 @
83d20ffd
/*
* Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @bug 4533691
* @summary Unit test for Collections.emptySortedSet
*/
import
java.lang.reflect.Method
;
import
java.math.BigInteger
;
import
java.util.Collections
;
import
java.util.Comparator
;
import
java.util.Iterator
;
import
java.util.NoSuchElementException
;
import
java.util.SortedSet
;
import
java.util.TreeSet
;
public
class
EmptySortedSet
{
static
int
status
=
0
;
private
static
final
String
FAILED
=
" failed. "
;
private
static
final
String
PERIOD
=
"."
;
private
final
String
thisClassName
=
this
.
getClass
().
getName
();
public
static
void
main
(
String
[]
args
)
throws
Exception
{
new
EmptySortedSet
();
}
public
EmptySortedSet
()
throws
Exception
{
run
();
}
/**
* Returns {@code true} if the {@link Object} passed in is an empty
* {@link SortedSet}.
*
* @param obj the object to test
* @return {@code true} if the {@link Object} is an empty {@link SortedSet}
* otherwise {@code false}.
*/
private
boolean
isEmptySortedSet
(
Object
obj
)
{
boolean
isEmptySortedSet
=
false
;
// We determine if the object is an empty sorted set by testing if it's
// an instance of SortedSet, and if so, if it's empty. Currently the
// testing doesn't include checks of the other methods.
if
(
obj
instanceof
SortedSet
)
{
SortedSet
ss
=
(
SortedSet
)
obj
;
if
((
ss
.
isEmpty
())
&&
(
ss
.
size
()
==
0
))
{
isEmptySortedSet
=
true
;
}
}
return
isEmptySortedSet
;
}
private
void
run
()
throws
Exception
{
Method
[]
methods
=
this
.
getClass
().
getDeclaredMethods
();
for
(
int
i
=
0
;
i
<
methods
.
length
;
i
++)
{
Method
method
=
methods
[
i
];
String
methodName
=
method
.
getName
();
if
(
methodName
.
startsWith
(
"test"
))
{
try
{
Object
obj
=
method
.
invoke
(
this
,
new
Object
[
0
]);
}
catch
(
Exception
e
)
{
throw
new
Exception
(
this
.
getClass
().
getName
()
+
"."
+
methodName
+
" test failed, test exception "
+
"follows\n"
+
e
.
getCause
());
}
}
}
}
private
void
throwException
(
String
methodName
,
String
reason
)
throws
Exception
{
StringBuilder
sb
=
new
StringBuilder
(
thisClassName
);
sb
.
append
(
PERIOD
);
sb
.
append
(
methodName
);
sb
.
append
(
FAILED
);
sb
.
append
(
reason
);
throw
new
Exception
(
sb
.
toString
());
}
/**
*
*/
private
void
test00
()
throws
Exception
{
//throwException("test00", "This test has not been implemented yet.");
}
/**
* Tests that the comparator is {@code null}.
*/
private
void
testComparatorIsNull
()
throws
Exception
{
SortedSet
sortedSet
=
Collections
.
emptySortedSet
();
Comparator
comparator
=
sortedSet
.
comparator
();
if
(
comparator
!=
null
)
{
throwException
(
"testComparatorIsNull"
,
"Comparator is not null."
);
}
}
/**
* Tests that the contains method returns {@code false}.
*/
private
void
testContains
()
throws
Exception
{
SortedSet
sortedSet
=
Collections
.
emptySortedSet
();
if
(
sortedSet
.
contains
(
new
Object
()))
{
throwException
(
"testContains"
,
"Should not contain any elements."
);
}
}
/**
* Tests that the containsAll method returns {@code false}.
*/
private
void
testContainsAll
()
throws
Exception
{
SortedSet
sortedSet
=
Collections
.
emptySortedSet
();
TreeSet
treeSet
=
new
TreeSet
();
treeSet
.
add
(
"1"
);
treeSet
.
add
(
"2"
);
treeSet
.
add
(
"3"
);
if
(
sortedSet
.
containsAll
(
treeSet
))
{
throwException
(
"testContainsAll"
,
"Should not contain any elements."
);
}
}
/**
* Tests that the iterator is empty.
*/
private
void
testEmptyIterator
()
throws
Exception
{
SortedSet
sortedSet
=
Collections
.
emptySortedSet
();
Iterator
emptyIterator
=
sortedSet
.
iterator
();
if
((
emptyIterator
!=
null
)
&&
(
emptyIterator
.
hasNext
()))
{
throwException
(
"testEmptyIterator"
,
"The iterator is not empty."
);
}
}
/**
* Tests that the set is empty.
*/
private
void
testIsEmpty
()
throws
Exception
{
SortedSet
sortedSet
=
Collections
.
emptySortedSet
();
if
((
sortedSet
!=
null
)
&&
(!
sortedSet
.
isEmpty
()))
{
throwException
(
"testSizeIsZero"
,
"The set is not empty."
);
}
}
/**
* Tests that the first() method throws NoSuchElementException
*/
private
void
testFirst
()
throws
Exception
{
SortedSet
sortedSet
=
Collections
.
emptySortedSet
();
try
{
sortedSet
.
first
();
throwException
(
"testFirst"
,
"NoSuchElemenException was not thrown."
);
}
catch
(
NoSuchElementException
nsee
)
{
// Do nothing
}
}
/**
* Tests the headSet() method.
*/
private
void
testHeadSet
()
throws
Exception
{
SortedSet
sortedSet
=
Collections
.
emptySortedSet
();
SortedSet
ss
;
try
{
ss
=
sortedSet
.
headSet
(
null
);
throwException
(
"testHeadSet"
,
"Must throw NullPointerException for null element"
);
}
catch
(
NullPointerException
npe
)
{
// Do nothing
}
try
{
ss
=
sortedSet
.
headSet
(
new
Object
());
throwException
(
"testHeadSet"
,
"Must throw ClassCastException for non-Comparable element"
);
}
catch
(
ClassCastException
cce
)
{
// Do nothing.
}
ss
=
sortedSet
.
headSet
(
"1"
);
if
((
ss
==
null
)
||
!
isEmptySortedSet
(
ss
))
{
throwException
(
"testHeadSet"
,
"Returned value is null or not an EmptySortedSet."
);
}
}
/**
* Tests that the last() method throws NoSuchElementException
*/
private
void
testLast
()
throws
Exception
{
SortedSet
sortedSet
=
Collections
.
emptySortedSet
();
try
{
sortedSet
.
last
();
throwException
(
"testLast"
,
"NoSuchElemenException was not thrown."
);
}
catch
(
NoSuchElementException
nsee
)
{
// Do nothing
}
}
/**
* Tests that the size is 0.
*/
private
void
testSizeIsZero
()
throws
Exception
{
SortedSet
sortedSet
=
Collections
.
emptySortedSet
();
int
size
=
sortedSet
.
size
();
if
(
size
>
0
)
{
throwException
(
"testSizeIsZero"
,
"The size of the set is greater then 0."
);
}
}
/**
* Tests the subSet() method.
*/
private
void
testSubSet
()
throws
Exception
{
SortedSet
sortedSet
=
Collections
.
emptySortedSet
();
SortedSet
ss
=
sortedSet
.
headSet
(
"1"
);
try
{
ss
=
sortedSet
.
subSet
(
null
,
BigInteger
.
TEN
);
ss
=
sortedSet
.
subSet
(
BigInteger
.
ZERO
,
null
);
ss
=
sortedSet
.
subSet
(
null
,
null
);
throwException
(
"testSubSet"
,
"Must throw NullPointerException for null element"
);
}
catch
(
NullPointerException
npe
)
{
// Do nothing
}
try
{
Object
obj1
=
new
Object
();
Object
obj2
=
new
Object
();
ss
=
sortedSet
.
subSet
(
obj1
,
BigInteger
.
TEN
);
ss
=
sortedSet
.
subSet
(
BigInteger
.
ZERO
,
obj2
);
ss
=
sortedSet
.
subSet
(
obj1
,
obj2
);
throwException
(
"testSubSet"
,
"Must throw ClassCastException for parameter which is "
+
"not Comparable."
);
}
catch
(
ClassCastException
cce
)
{
// Do nothing.
}
try
{
ss
=
sortedSet
.
subSet
(
BigInteger
.
ZERO
,
BigInteger
.
ZERO
);
ss
=
sortedSet
.
subSet
(
BigInteger
.
TEN
,
BigInteger
.
ZERO
);
throwException
(
"testSubSet"
,
"Must throw IllegalArgumentException when fromElement is "
+
"not less then then toElement."
);
}
catch
(
IllegalArgumentException
iae
)
{
// Do nothing.
}
ss
=
sortedSet
.
subSet
(
BigInteger
.
ZERO
,
BigInteger
.
TEN
);
if
(!
isEmptySortedSet
(
ss
))
{
throw
new
Exception
(
"Returned value is not empty sorted set."
);
}
}
/**
* Tests the tailSet() method.
*/
private
void
testTailSet
()
throws
Exception
{
SortedSet
sortedSet
=
Collections
.
emptySortedSet
();
SortedSet
ss
;
try
{
ss
=
sortedSet
.
tailSet
(
null
);
throwException
(
"testTailSet"
,
"Must throw NullPointerException for null element"
);
}
catch
(
NullPointerException
npe
)
{
// Do nothing
}
try
{
SortedSet
ss2
=
sortedSet
.
tailSet
(
new
Object
());
throwException
(
"testTailSet"
,
"Must throw ClassCastException for non-Comparable element"
);
}
catch
(
ClassCastException
cce
)
{
// Do nothing.
}
ss
=
sortedSet
.
tailSet
(
"1"
);
if
((
ss
==
null
)
||
!
isEmptySortedSet
(
ss
))
{
throwException
(
"testTailSet"
,
"Returned value is null or not an EmptySortedSet."
);
}
}
/**
* Tests that the array has a size of 0.
*/
private
void
testToArray
()
throws
Exception
{
SortedSet
sortedSet
=
Collections
.
emptySortedSet
();
Object
[]
emptySortedSetArray
=
sortedSet
.
toArray
();
if
((
emptySortedSetArray
==
null
)
||
(
emptySortedSetArray
.
length
>
0
))
{
throwException
(
"testToArray"
,
"Returned null array or array with length > 0."
);
}
String
[]
strings
=
new
String
[
2
];
strings
[
0
]
=
"1"
;
strings
[
1
]
=
"2"
;
emptySortedSetArray
=
sortedSet
.
toArray
(
strings
);
if
((
emptySortedSetArray
==
null
)
||
(
emptySortedSetArray
[
0
]
!=
null
))
{
throwException
(
"testToArray"
,
"Returned null array or array with length > 0."
);
}
}
}
test/java/util/Currency/CurrencyTest.java
浏览文件 @
83d20ffd
...
...
@@ -128,18 +128,20 @@ public class CurrencyTest {
checkCountryCurrency
(
country1
[
i
],
currency1
[
i
]);
}
// check currency changes
String
[]
switchOverCtry
=
{
"DE"
,
"FR"
,
"ES"
,
"IT"
,
"NL"
,
"BE"
,
"TR"
,
"RO"
,
"AZ"
,
"MZ"
,
"GH"
,
"VE"
};
String
[]
switchOverOld
=
{
"DEM"
,
"FRF"
,
"ESP"
,
"ITL"
,
"NLG"
,
"BEF"
,
"TRL"
,
"ROL"
,
"AZM"
,
"MZM"
,
"GHC"
,
"VEB"
};
String
[]
switchOverNew
=
{
"EUR"
,
"EUR"
,
"EUR"
,
"EUR"
,
"EUR"
,
"EUR"
,
"TRY"
,
"RON"
,
"AZN"
,
"MZN"
,
"GHS"
,
"VEF"
};
String
[]
switchOverTZ
=
{
"Europe/Paris"
,
"Europe/Paris"
,
"Europe/Paris"
,
"Europe/Paris"
,
"Europe/Paris"
,
"Europe/Paris"
,
"Asia/Istanbul"
,
"Europe/Bucharest"
,
"Asia/Baku"
,
"Africa/Maputo"
,
"Africa/Accra"
,
"America/Caracas"
};
int
[]
switchOverYear
=
{
2002
,
2002
,
2002
,
2002
,
2002
,
2002
,
2005
,
2005
,
2006
,
2006
,
2007
,
2008
};
int
[]
switchOverMonth
=
{
Calendar
.
JANUARY
,
Calendar
.
JANUARY
,
Calendar
.
JANUARY
,
Calendar
.
JANUARY
,
Calendar
.
JANUARY
,
Calendar
.
JANUARY
,
Calendar
.
JANUARY
,
Calendar
.
JULY
,
Calendar
.
JANUARY
,
Calendar
.
JULY
,
Calendar
.
JULY
,
Calendar
.
JANUARY
};
int
[]
switchOverDay
=
{
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
};
/*
* check currency changes
* In current implementation, there is no data of old currency and transition date at jdk/src/share/classes/java/util/CurrencyData.properties.
* So, all the switch data arrays are empty. In the future, if data of old currency and transition date are necessary for any country, the
* arrays here can be updated so that the program can check the currency switch.
*/
String
[]
switchOverCtry
=
{};
String
[]
switchOverOld
=
{};
String
[]
switchOverNew
=
{};
String
[]
switchOverTZ
=
{};
int
[]
switchOverYear
=
{};
int
[]
switchOverMonth
=
{};
int
[]
switchOverDay
=
{};
for
(
int
i
=
0
;
i
<
switchOverCtry
.
length
;
i
++)
{
TimeZone
.
setDefault
(
TimeZone
.
getTimeZone
(
switchOverTZ
[
i
]));
Calendar
date
=
new
GregorianCalendar
(
switchOverYear
[
i
],
switchOverMonth
[
i
],
switchOverDay
[
i
]);
...
...
test/java/util/Currency/ValidateISO4217.java
浏览文件 @
83d20ffd
...
...
@@ -92,7 +92,7 @@ public class ValidateISO4217 {
/* Codes that are obsolete, do not have related country */
static
final
String
otherCodes
=
"ADP-AFA-ATS-AYM-
BEF-BGL-BOV-BYB-CLF-CUC-CYP-DEM-EEK-ESP-FIM-FRF-GRD-GWP-IEP-ITL-LUF-MGF-MTL-MXV-NLG-PTE-RUR-SDD-SIT-SKK-SRG-TMM-TPE-TRL-VEF-USN-USS
-XAG-XAU-XBA-XBB-XBC-XBD-XDR-XFO-XFU-XPD-XPT-XSU-XTS-XUA-XXX-YUM-ZWD-ZWN-ZWR"
;
"ADP-AFA-ATS-AYM-
AZM-BEF-BGL-BOV-BYB-CLF-CUC-CYP-DEM-EEK-ESP-FIM-FRF-GHC-GRD-GWP-IEP-ITL-LUF-MGF-MTL-MXV-MZM-NLG-PTE-ROL-RUR-SDD-SIT-SKK-SRG-TMM-TPE-TRL-VEF-USN-USS-VEB
-XAG-XAU-XBA-XBB-XBC-XBD-XDR-XFO-XFU-XPD-XPT-XSU-XTS-XUA-XXX-YUM-ZWD-ZWN-ZWR"
;
static
boolean
err
=
false
;
...
...
test/java/util/Currency/tablea1.txt
浏览文件 @
83d20ffd
...
...
@@ -23,7 +23,7 @@ AW AWG 533 2
AU AUD 36 2
AT EUR 978 2
# MA 129
AZ AZ
M 31 2 2005-12-31-20-00-00 AZ
N 944 2
AZ AZN 944 2
BS BSD 44 2
BH BHD 48 3
BD BDT 50 2
...
...
@@ -96,7 +96,7 @@ GA XAF 950 0
GM GMD 270 2
GE GEL 981 2
DE EUR 978 2
GH GH
C 288 2 2007-07-01-00-00-00 GH
S 936 2
GH GHS 936 2
GI GIP 292 2
GR EUR 978 2
GL DKK 208 2
...
...
@@ -166,7 +166,7 @@ MN MNT 496 2
MS XCD 951 2
MA MAD 504 2
# MA 130
MZ MZ
M 508 2 2006-06-30-22-00-00 MZ
N 943 2
MZ MZN 943 2
MM MMK 104 2
# MA 134
ME EUR 978 2
...
...
@@ -200,7 +200,7 @@ PT EUR 978 2
PR USD 840 2
QA QAR 634 2
RE EUR 978 2
RO RO
L 946 2 2005-06-30-21-00-00 RO
N 946 2
RO RON 946 2
RU RUB 643 2
RW RWF 646 0
SH SHP 654 2
...
...
@@ -266,7 +266,7 @@ UM USD 840 2
UY UYU 858 2
UZ UZS 860 2
VU VUV 548 0
VE VE
B 862 2 2008-01-01-04-00-00 VE
F 937 2
VE VEF 937 2
VN VND 704 2
VG USD 840 2
VI USD 840 2
...
...
test/javax/xml/crypto/dsig/GenerationTests.java
浏览文件 @
83d20ffd
/*
* Copyright (c) 2005, 20
09
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2005, 20
11
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -23,7 +23,7 @@
/**
* @test
* @bug 4635230 6283345 6303830 6824440 6867348
* @bug 4635230 6283345 6303830 6824440 6867348
7094155
* @summary Basic unit tests for generating XML Signatures with JSR 105
* @compile -XDignore.symbol.file KeySelectors.java SignatureValidator.java
* X509KeySelector.java GenerationTests.java
...
...
@@ -134,6 +134,7 @@ public class GenerationTests {
test_create_signature_enveloping_sha512_rsa_sha384
();
test_create_signature_enveloping_sha512_rsa_sha512
();
test_create_signature_reference_dependency
();
test_create_signature_with_attr_in_no_namespace
();
}
private
static
void
setup
()
throws
Exception
{
...
...
@@ -443,6 +444,52 @@ public class GenerationTests {
sig
.
sign
(
dsc
);
// dumpDocument(doc, new PrintWriter(System.out));
DOMValidateContext
dvc
=
new
DOMValidateContext
(
kvks
,
doc
.
getDocumentElement
());
XMLSignature
sig2
=
fac
.
unmarshalXMLSignature
(
dvc
);
if
(
sig
.
equals
(
sig2
)
==
false
)
{
throw
new
Exception
(
"Unmarshalled signature is not equal to generated signature"
);
}
if
(
sig2
.
validate
(
dvc
)
==
false
)
{
throw
new
Exception
(
"Validation of generated signature failed"
);
}
System
.
out
.
println
();
}
static
void
test_create_signature_with_attr_in_no_namespace
()
throws
Exception
{
System
.
out
.
println
(
"* Generating signature-with-attr-in-no-namespace.xml"
);
// create references
List
<
Reference
>
refs
=
Collections
.
singletonList
(
fac
.
newReference
(
"#unknown"
,
sha1
));
// create SignedInfo
SignedInfo
si
=
fac
.
newSignedInfo
(
withoutComments
,
rsaSha1
,
refs
);
// create object-1
Document
doc
=
db
.
newDocument
();
Element
nc
=
doc
.
createElementNS
(
null
,
"NonCommentandus"
);
// add attribute with no namespace
nc
.
setAttribute
(
"Id"
,
"unknown"
);
XMLObject
obj
=
fac
.
newXMLObject
(
Collections
.
singletonList
(
new
DOMStructure
(
nc
)),
"object-1"
,
null
,
null
);
// create XMLSignature
XMLSignature
sig
=
fac
.
newXMLSignature
(
si
,
rsa
,
Collections
.
singletonList
(
obj
),
"signature"
,
null
);
DOMSignContext
dsc
=
new
DOMSignContext
(
getPrivateKey
(
"RSA"
),
doc
);
sig
.
sign
(
dsc
);
// dumpDocument(doc, new PrintWriter(System.out));
DOMValidateContext
dvc
=
new
DOMValidateContext
...
...
test/sun/nio/cs/TestStringCoding.java
浏览文件 @
83d20ffd
...
...
@@ -24,7 +24,7 @@
*/
/* @test
@bug 6636323 6636319 7040220
@bug 6636323 6636319 7040220
7096080
@summary Test if StringCoding and NIO result have the same de/encoding result
* @run main/othervm/timeout=2000 TestStringCoding
*/
...
...
@@ -111,7 +111,8 @@ public class TestStringCoding {
//encode unmappable surrogates
if
(
enc
instanceof
sun
.
nio
.
cs
.
ArrayEncoder
&&
cs
.
contains
(
Charset
.
forName
(
"ASCII"
)))
{
if
(
cs
.
name
().
equals
(
"UTF-8"
))
// utf8 handles surrogates
if
(
cs
.
name
().
equals
(
"UTF-8"
)
||
// utf8 handles surrogates
cs
.
name
().
equals
(
"CESU-8"
))
// utf8 handles surrogates
return
;
enc
.
replaceWith
(
new
byte
[]
{
(
byte
)
'A'
});
sun
.
nio
.
cs
.
ArrayEncoder
cae
=
(
sun
.
nio
.
cs
.
ArrayEncoder
)
enc
;
...
...
@@ -136,7 +137,6 @@ public class TestStringCoding {
cs
.
name
())))
throw
new
RuntimeException
(
"encode3(surrogates) failed -> "
+
cs
.
name
());
ba
=
new
byte
[
str
.
length
()
-
1
];
n
=
cae
.
encode
(
str
.
toCharArray
(),
0
,
str
.
length
(),
ba
);
if
(
n
!=
7
||
!
"abABABc"
.
equals
(
new
String
(
ba
,
0
,
n
,
...
...
test/sun/nio/cs/TestStringCodingUTF8.java
浏览文件 @
83d20ffd
...
...
@@ -33,14 +33,16 @@ import java.nio.charset.*;
public
class
TestStringCodingUTF8
{
public
static
void
main
(
String
[]
args
)
throws
Throwable
{
test
();
test
(
"UTF-8"
);
test
(
"CESU-8"
);
// security manager on
System
.
setSecurityManager
(
new
PermissiveSecurityManger
());
test
();
test
(
"UTF-8"
);
test
(
"CESU-8"
);
}
static
void
test
()
throws
Throwable
{
Charset
cs
=
Charset
.
forName
(
"UTF-8"
);
static
void
test
(
String
csn
)
throws
Throwable
{
Charset
cs
=
Charset
.
forName
(
csn
);
char
[]
bmp
=
new
char
[
0x10000
];
for
(
int
i
=
0
;
i
<
0x10000
;
i
++)
{
bmp
[
i
]
=
(
char
)
i
;
...
...
test/sun/nio/cs/TestUTF8.java
浏览文件 @
83d20ffd
...
...
@@ -23,7 +23,7 @@
/*
* @test
* @bug 4486841 7040220
* @bug 4486841 7040220
7096080
* @summary Test UTF-8 charset
*/
...
...
@@ -156,15 +156,22 @@ public class TestUTF8 {
return
3
;
}
static
int
to4ByteUTF8
(
int
uc
,
byte
[]
bb
,
int
pos
)
{
bb
[
pos
++]
=
(
byte
)(
0xf0
|
((
uc
>>
18
)));
bb
[
pos
++]
=
(
byte
)(
0x80
|
((
uc
>>
12
)
&
0x3f
));
bb
[
pos
++]
=
(
byte
)(
0x80
|
((
uc
>>
6
)
&
0x3f
));
bb
[
pos
++]
=
(
byte
)(
0x80
|
(
uc
&
0x3f
));
return
4
;
}
static
void
checkRoundtrip
(
String
csn
)
throws
Exception
{
System
.
out
.
printf
(
" Check roundtrip <%s>..."
,
csn
);
char
[]
cc
=
getUTFChars
();
byte
[]
bb
=
encode
(
cc
,
csn
,
false
);
char
[]
ccO
=
decode
(
bb
,
csn
,
false
);
if
(!
Arrays
.
equals
(
cc
,
ccO
))
{
if
(!
Arrays
.
equals
(
cc
,
ccO
))
System
.
out
.
printf
(
" non-direct failed"
);
}
bb
=
encode
(
cc
,
csn
,
true
);
ccO
=
decode
(
bb
,
csn
,
true
);
if
(!
Arrays
.
equals
(
cc
,
ccO
))
{
...
...
@@ -180,19 +187,24 @@ public class TestUTF8 {
System
.
out
.
println
();
}
static
void
check
6
ByteSurrs
(
String
csn
)
throws
Exception
{
System
.
out
.
printf
(
" Check
6
-byte Surrogates <%s>...%n"
,
csn
);
byte
[]
bb
=
new
byte
[(
0x110000
-
0x10000
)
*
6
];
static
void
check
4
ByteSurrs
(
String
csn
)
throws
Exception
{
System
.
out
.
printf
(
" Check
4
-byte Surrogates <%s>...%n"
,
csn
);
byte
[]
bb
=
new
byte
[(
0x110000
-
0x10000
)
*
4
];
char
[]
cc
=
new
char
[(
0x110000
-
0x10000
)
*
2
];
int
bpos
=
0
;
int
cpos
=
0
;
for
(
int
i
=
0x10000
;
i
<
0x110000
;
i
++)
{
Character
.
toChars
(
i
,
cc
,
cpos
);
bpos
+=
to3ByteUTF8
(
cc
[
cpos
],
bb
,
bpos
);
bpos
+=
to3ByteUTF8
(
cc
[
cpos
+
1
],
bb
,
bpos
);
bpos
+=
to4ByteUTF8
(
i
,
bb
,
bpos
);
cpos
+=
2
;
}
checkSurrs
(
csn
,
bb
,
cc
);
}
static
void
checkSurrs
(
String
csn
,
byte
[]
bb
,
char
[]
cc
)
throws
Exception
{
char
[]
ccO
=
decode
(
bb
,
csn
,
false
);
if
(!
Arrays
.
equals
(
cc
,
ccO
))
{
System
.
out
.
printf
(
" decoding failed%n"
);
...
...
@@ -201,14 +213,30 @@ public class TestUTF8 {
if
(!
Arrays
.
equals
(
cc
,
ccO
))
{
System
.
out
.
printf
(
" decoding(direct) failed%n"
);
}
// new String(bb, csn).getBytes(csn) will not return
// the 6 bytes surrogates as in bb, so only test
// toCharArray() here.
if
(!
Arrays
.
equals
(
cc
,
new
String
(
bb
,
csn
).
toCharArray
()))
{
System
.
out
.
printf
(
" String.toCharArray() failed"
);
}
if
(!
Arrays
.
equals
(
bb
,
new
String
(
cc
).
getBytes
(
csn
)))
{
System
.
out
.
printf
(
" String.getBytes() failed"
);
}
}
static
void
check6ByteSurrs
(
String
csn
)
throws
Exception
{
System
.
out
.
printf
(
" Check 6-byte Surrogates <%s>...%n"
,
csn
);
byte
[]
bb
=
new
byte
[(
0x110000
-
0x10000
)
*
6
];
char
[]
cc
=
new
char
[(
0x110000
-
0x10000
)
*
2
];
int
bpos
=
0
;
int
cpos
=
0
;
for
(
int
i
=
0x10000
;
i
<
0x110000
;
i
++)
{
Character
.
toChars
(
i
,
cc
,
cpos
);
bpos
+=
to3ByteUTF8
(
cc
[
cpos
],
bb
,
bpos
);
bpos
+=
to3ByteUTF8
(
cc
[
cpos
+
1
],
bb
,
bpos
);
cpos
+=
2
;
}
checkSurrs
(
csn
,
bb
,
cc
);
}
static
void
compare
(
String
csn1
,
String
csn2
)
throws
Exception
{
System
.
out
.
printf
(
" Diff <%s> <%s>...%n"
,
csn1
,
csn2
);
char
[]
cc
=
getUTFChars
();
...
...
@@ -266,6 +294,10 @@ public class TestUTF8 {
{
1
,
(
byte
)
0xFF
,
(
byte
)
0xFF
,
(
byte
)
0xFF
},
// all ones
{
1
,
(
byte
)
0xE0
,
(
byte
)
0xC0
,
(
byte
)
0x80
},
// invalid second byte
{
1
,
(
byte
)
0xE0
,
(
byte
)
0x80
,
(
byte
)
0xC0
},
// invalid first byte
{
1
,
(
byte
)
0xE0
,
(
byte
)
0x41
,},
// invalid second byte & 2 bytes
{
3
,
(
byte
)
0xED
,
(
byte
)
0xAE
,
(
byte
)
0x80
},
// 3 bytes surrogate
{
3
,
(
byte
)
0xED
,
(
byte
)
0xB0
,
(
byte
)
0x80
},
// 3 bytes surrogate
// Four-byte sequences
{
1
,
(
byte
)
0xF0
,
(
byte
)
0x80
,
(
byte
)
0x80
,
(
byte
)
0x80
},
// U+0000 zero-padded
...
...
@@ -276,8 +308,13 @@ public class TestUTF8 {
{
1
,
(
byte
)
0xFF
,
(
byte
)
0xFF
,
(
byte
)
0xFF
,
(
byte
)
0xFF
},
// all ones
{
1
,
(
byte
)
0xF0
,
(
byte
)
0x80
,
(
byte
)
0x80
,
(
byte
)
0x80
},
// invalid second byte
{
1
,
(
byte
)
0xF0
,
(
byte
)
0xC0
,
(
byte
)
0x80
,
(
byte
)
0x80
},
// invalid second byte
{
1
,
(
byte
)
0xF0
,
(
byte
)
41
},
// invalid second byte
// & only 2 bytes
{
2
,
(
byte
)
0xF0
,
(
byte
)
0x90
,
(
byte
)
0xC0
,
(
byte
)
0x80
},
// invalid third byte
{
3
,
(
byte
)
0xF0
,
(
byte
)
0x90
,
(
byte
)
0x80
,
(
byte
)
0xC0
},
// invalid third byte
{
3
,
(
byte
)
0xF0
,
(
byte
)
0x90
,
(
byte
)
0x80
,
(
byte
)
0xC0
},
// invalid forth byte
{
2
,
(
byte
)
0xF0
,
(
byte
)
0x90
,
(
byte
)
0x41
},
// invalid third byte
// & 3 bytes input
{
1
,
(
byte
)
0xF1
,
(
byte
)
0xC0
,
(
byte
)
0x80
,
(
byte
)
0x80
},
// invalid second byte
{
2
,
(
byte
)
0xF1
,
(
byte
)
0x80
,
(
byte
)
0xC0
,
(
byte
)
0x80
},
// invalid third byte
...
...
@@ -287,30 +324,113 @@ public class TestUTF8 {
{
1
,
(
byte
)
0xF5
,
(
byte
)
0x80
,
(
byte
)
0x80
,
(
byte
)
0xC0
},
// out-range 4-byte
// Five-byte sequences
{
5
,
(
byte
)
0xF8
,
(
byte
)
0x80
,
(
byte
)
0x80
,
(
byte
)
0x80
,
(
byte
)
0x80
},
// invalid first byte
{
5
,
(
byte
)
0xF8
,
(
byte
)
0x80
,
(
byte
)
0x80
,
(
byte
)
0x80
,
(
byte
)
0x80
},
// U+0000 zero-padded
{
5
,
(
byte
)
0xF8
,
(
byte
)
0x80
,
(
byte
)
0x80
,
(
byte
)
0x81
,
(
byte
)
0xBF
},
// U+007F zero-padded
{
5
,
(
byte
)
0xF8
,
(
byte
)
0x80
,
(
byte
)
0x80
,
(
byte
)
0x9F
,
(
byte
)
0xBF
},
// U+07FF zero-padded
{
5
,
(
byte
)
0xF8
,
(
byte
)
0x80
,
(
byte
)
0x8F
,
(
byte
)
0xBF
,
(
byte
)
0xBF
},
// U+FFFF zero-padded
{
1
,
(
byte
)
0xF8
,
(
byte
)
0x80
,
(
byte
)
0x80
,
(
byte
)
0x80
,
(
byte
)
0x80
},
// invalid first byte
{
1
,
(
byte
)
0xF8
,
(
byte
)
0x80
,
(
byte
)
0x80
,
(
byte
)
0x80
,
(
byte
)
0x80
},
// U+0000 zero-padded
{
1
,
(
byte
)
0xF8
,
(
byte
)
0x80
,
(
byte
)
0x80
,
(
byte
)
0x81
,
(
byte
)
0xBF
},
// U+007F zero-padded
{
1
,
(
byte
)
0xF8
,
(
byte
)
0x80
,
(
byte
)
0x80
,
(
byte
)
0x9F
,
(
byte
)
0xBF
},
// U+07FF zero-padded
{
1
,
(
byte
)
0xF8
,
(
byte
)
0x80
,
(
byte
)
0x8F
,
(
byte
)
0xBF
,
(
byte
)
0xBF
},
// U+FFFF zero-padded
{
1
,
(
byte
)
0xF8
,
(
byte
)
0xC0
,
(
byte
)
0x80
,
(
byte
)
0x80
,
(
byte
)
0x80
},
{
2
,
(
byte
)
0xF8
,
(
byte
)
0x80
,
(
byte
)
0xC0
,
(
byte
)
0x80
,
(
byte
)
0x80
},
{
3
,
(
byte
)
0xF8
,
(
byte
)
0x80
,
(
byte
)
0x80
,
(
byte
)
0xC1
,
(
byte
)
0xBF
},
{
4
,
(
byte
)
0xF8
,
(
byte
)
0x80
,
(
byte
)
0x80
,
(
byte
)
0x9F
,
(
byte
)
0xC0
},
{
1
,
(
byte
)
0xF8
,
(
byte
)
0x80
,
(
byte
)
0xC0
,
(
byte
)
0x80
,
(
byte
)
0x80
},
{
1
,
(
byte
)
0xF8
,
(
byte
)
0x80
,
(
byte
)
0x80
,
(
byte
)
0xC1
,
(
byte
)
0xBF
},
{
1
,
(
byte
)
0xF8
,
(
byte
)
0x80
,
(
byte
)
0x80
,
(
byte
)
0x9F
,
(
byte
)
0xC0
},
// Six-byte sequences
{
6
,
(
byte
)
0xFC
,
(
byte
)
0x80
,
(
byte
)
0x80
,
(
byte
)
0x80
,
(
byte
)
0x80
,
(
byte
)
0x80
},
// U+0000 zero-padded
{
6
,
(
byte
)
0xFC
,
(
byte
)
0x80
,
(
byte
)
0x80
,
(
byte
)
0x80
,
(
byte
)
0x81
,
(
byte
)
0xBF
},
// U+007F zero-padded
{
6
,
(
byte
)
0xFC
,
(
byte
)
0x80
,
(
byte
)
0x80
,
(
byte
)
0x80
,
(
byte
)
0x9F
,
(
byte
)
0xBF
},
// U+07FF zero-padded
{
6
,
(
byte
)
0xFC
,
(
byte
)
0x80
,
(
byte
)
0x80
,
(
byte
)
0x8F
,
(
byte
)
0xBF
,
(
byte
)
0xBF
},
// U+FFFF zero-padded
{
1
,
(
byte
)
0xFC
,
(
byte
)
0x80
,
(
byte
)
0x80
,
(
byte
)
0x80
,
(
byte
)
0x80
,
(
byte
)
0x80
},
// U+0000 zero-padded
{
1
,
(
byte
)
0xFC
,
(
byte
)
0x80
,
(
byte
)
0x80
,
(
byte
)
0x80
,
(
byte
)
0x81
,
(
byte
)
0xBF
},
// U+007F zero-padded
{
1
,
(
byte
)
0xFC
,
(
byte
)
0x80
,
(
byte
)
0x80
,
(
byte
)
0x80
,
(
byte
)
0x9F
,
(
byte
)
0xBF
},
// U+07FF zero-padded
{
1
,
(
byte
)
0xFC
,
(
byte
)
0x80
,
(
byte
)
0x80
,
(
byte
)
0x8F
,
(
byte
)
0xBF
,
(
byte
)
0xBF
},
// U+FFFF zero-padded
{
1
,
(
byte
)
0xF8
,
(
byte
)
0xC0
,
(
byte
)
0x80
,
(
byte
)
0x80
,
(
byte
)
0x80
,
(
byte
)
0x80
},
{
2
,
(
byte
)
0xF8
,
(
byte
)
0x80
,
(
byte
)
0xC0
,
(
byte
)
0x80
,
(
byte
)
0x80
,
(
byte
)
0x80
},
{
3
,
(
byte
)
0xF8
,
(
byte
)
0x80
,
(
byte
)
0x80
,
(
byte
)
0xC1
,
(
byte
)
0xBF
,
(
byte
)
0x80
},
{
4
,
(
byte
)
0xF8
,
(
byte
)
0x80
,
(
byte
)
0x80
,
(
byte
)
0x9F
,
(
byte
)
0xC0
,
(
byte
)
0x80
},
{
5
,
(
byte
)
0xF8
,
(
byte
)
0x80
,
(
byte
)
0x80
,
(
byte
)
0x9F
,
(
byte
)
0x80
,
(
byte
)
0xC0
},
{
1
,
(
byte
)
0xF8
,
(
byte
)
0x80
,
(
byte
)
0xC0
,
(
byte
)
0x80
,
(
byte
)
0x80
,
(
byte
)
0x80
},
{
1
,
(
byte
)
0xF8
,
(
byte
)
0x80
,
(
byte
)
0x80
,
(
byte
)
0xC1
,
(
byte
)
0xBF
,
(
byte
)
0x80
},
{
1
,
(
byte
)
0xF8
,
(
byte
)
0x80
,
(
byte
)
0x80
,
(
byte
)
0x9F
,
(
byte
)
0xC0
,
(
byte
)
0x80
},
{
1
,
(
byte
)
0xF8
,
(
byte
)
0x80
,
(
byte
)
0x80
,
(
byte
)
0x9F
,
(
byte
)
0x80
,
(
byte
)
0xC0
},
};
static
void
checkMalformed
(
String
csn
)
throws
Exception
{
// The first byte is the length of malformed bytes
static
byte
[][]
malformed_cesu8
=
{
// One-byte sequences:
{
1
,
(
byte
)
0xFF
},
{
1
,
(
byte
)
0xC0
},
{
1
,
(
byte
)
0x80
},
{
1
,
(
byte
)
0xFF
,
(
byte
)
0xFF
},
// all ones
{
1
,
(
byte
)
0xA0
,
(
byte
)
0x80
},
// 101x first byte first nibble
// Two-byte sequences:
{
1
,
(
byte
)
0xC0
,
(
byte
)
0x80
},
// invalid first byte
{
1
,
(
byte
)
0xC1
,
(
byte
)
0xBF
},
// invalid first byte
{
1
,
(
byte
)
0xC2
,
(
byte
)
0x00
},
// invalid second byte
{
1
,
(
byte
)
0xC2
,
(
byte
)
0xC0
},
// invalid second byte
{
1
,
(
byte
)
0xD0
,
(
byte
)
0x00
},
// invalid second byte
{
1
,
(
byte
)
0xD0
,
(
byte
)
0xC0
},
// invalid second byte
{
1
,
(
byte
)
0xDF
,
(
byte
)
0x00
},
// invalid second byte
{
1
,
(
byte
)
0xDF
,
(
byte
)
0xC0
},
// invalid second byte
// Three-byte sequences
{
1
,
(
byte
)
0xE0
,
(
byte
)
0x80
,
(
byte
)
0x80
},
// 111x first byte first nibble
{
1
,
(
byte
)
0xE0
,
(
byte
)
0x80
,
(
byte
)
0x80
},
// U+0000 zero-padded
{
1
,
(
byte
)
0xE0
,
(
byte
)
0x81
,
(
byte
)
0xBF
},
// U+007F zero-padded
{
1
,
(
byte
)
0xE0
,
(
byte
)
0x9F
,
(
byte
)
0xBF
},
// U+07FF zero-padded
{
1
,
(
byte
)
0xE0
,
(
byte
)
0xC0
,
(
byte
)
0xBF
},
// invalid second byte
{
2
,
(
byte
)
0xE0
,
(
byte
)
0xA0
,
(
byte
)
0x7F
},
// invalid third byte
{
2
,
(
byte
)
0xE0
,
(
byte
)
0xA0
,
(
byte
)
0xC0
},
// invalid third byte
{
1
,
(
byte
)
0xFF
,
(
byte
)
0xFF
,
(
byte
)
0xFF
},
// all ones
{
1
,
(
byte
)
0xE0
,
(
byte
)
0xC0
,
(
byte
)
0x80
},
// invalid second byte
{
1
,
(
byte
)
0xE0
,
(
byte
)
0x80
,
(
byte
)
0xC0
},
// invalid first byte
{
1
,
(
byte
)
0xE0
,
(
byte
)
0x41
,},
// invalid second byte & 2 bytes
// CESU-8 does not have 4, 5, 6 bytes sequenc
// Four-byte sequences
{
1
,
(
byte
)
0xF0
,
(
byte
)
0x80
,
(
byte
)
0x80
,
(
byte
)
0x80
},
// U+0000 zero-padded
{
1
,
(
byte
)
0xF0
,
(
byte
)
0x80
,
(
byte
)
0x81
,
(
byte
)
0xBF
},
// U+007F zero-padded
{
1
,
(
byte
)
0xF0
,
(
byte
)
0x80
,
(
byte
)
0x9F
,
(
byte
)
0xBF
},
// U+007F zero-padded
{
1
,
(
byte
)
0xF0
,
(
byte
)
0x8F
,
(
byte
)
0xBF
,
(
byte
)
0xBF
},
// U+07FF zero-padded
{
1
,
(
byte
)
0xFF
,
(
byte
)
0xFF
,
(
byte
)
0xFF
,
(
byte
)
0xFF
},
// all ones
{
1
,
(
byte
)
0xF0
,
(
byte
)
0x80
,
(
byte
)
0x80
,
(
byte
)
0x80
},
// invalid second byte
{
1
,
(
byte
)
0xF0
,
(
byte
)
0xC0
,
(
byte
)
0x80
,
(
byte
)
0x80
},
// invalid second byte
{
1
,
(
byte
)
0xF0
,
(
byte
)
41
},
// invalid second byte
// & only 2 bytes
{
1
,
(
byte
)
0xF0
,
(
byte
)
0x90
,
(
byte
)
0xC0
,
(
byte
)
0x80
},
// invalid third byte
{
1
,
(
byte
)
0xF0
,
(
byte
)
0x90
,
(
byte
)
0x80
,
(
byte
)
0xC0
},
// invalid forth byte
{
1
,
(
byte
)
0xF0
,
(
byte
)
0x90
,
(
byte
)
0x41
},
// invalid third byte
// & 3 bytes input
{
1
,
(
byte
)
0xF1
,
(
byte
)
0xC0
,
(
byte
)
0x80
,
(
byte
)
0x80
},
// invalid second byte
{
1
,
(
byte
)
0xF1
,
(
byte
)
0x80
,
(
byte
)
0xC0
,
(
byte
)
0x80
},
// invalid third byte
{
1
,
(
byte
)
0xF1
,
(
byte
)
0x80
,
(
byte
)
0x80
,
(
byte
)
0xC0
},
// invalid forth byte
{
1
,
(
byte
)
0xF4
,
(
byte
)
0x90
,
(
byte
)
0x80
,
(
byte
)
0xC0
},
// out-range 4-byte
{
1
,
(
byte
)
0xF4
,
(
byte
)
0xC0
,
(
byte
)
0x80
,
(
byte
)
0xC0
},
// out-range 4-byte
{
1
,
(
byte
)
0xF5
,
(
byte
)
0x80
,
(
byte
)
0x80
,
(
byte
)
0xC0
},
// out-range 4-byte
// Five-byte sequences
{
1
,
(
byte
)
0xF8
,
(
byte
)
0x80
,
(
byte
)
0x80
,
(
byte
)
0x80
,
(
byte
)
0x80
},
// invalid first byte
{
1
,
(
byte
)
0xF8
,
(
byte
)
0x80
,
(
byte
)
0x80
,
(
byte
)
0x80
,
(
byte
)
0x80
},
// U+0000 zero-padded
{
1
,
(
byte
)
0xF8
,
(
byte
)
0x80
,
(
byte
)
0x80
,
(
byte
)
0x81
,
(
byte
)
0xBF
},
// U+007F zero-padded
{
1
,
(
byte
)
0xF8
,
(
byte
)
0x80
,
(
byte
)
0x80
,
(
byte
)
0x9F
,
(
byte
)
0xBF
},
// U+07FF zero-padded
{
1
,
(
byte
)
0xF8
,
(
byte
)
0x80
,
(
byte
)
0x8F
,
(
byte
)
0xBF
,
(
byte
)
0xBF
},
// U+FFFF zero-padded
{
1
,
(
byte
)
0xF8
,
(
byte
)
0xC0
,
(
byte
)
0x80
,
(
byte
)
0x80
,
(
byte
)
0x80
},
{
1
,
(
byte
)
0xF8
,
(
byte
)
0x80
,
(
byte
)
0xC0
,
(
byte
)
0x80
,
(
byte
)
0x80
},
{
1
,
(
byte
)
0xF8
,
(
byte
)
0x80
,
(
byte
)
0x80
,
(
byte
)
0xC1
,
(
byte
)
0xBF
},
{
1
,
(
byte
)
0xF8
,
(
byte
)
0x80
,
(
byte
)
0x80
,
(
byte
)
0x9F
,
(
byte
)
0xC0
},
// Six-byte sequences
{
1
,
(
byte
)
0xFC
,
(
byte
)
0x80
,
(
byte
)
0x80
,
(
byte
)
0x80
,
(
byte
)
0x80
,
(
byte
)
0x80
},
// U+0000 zero-padded
{
1
,
(
byte
)
0xFC
,
(
byte
)
0x80
,
(
byte
)
0x80
,
(
byte
)
0x80
,
(
byte
)
0x81
,
(
byte
)
0xBF
},
// U+007F zero-padded
{
1
,
(
byte
)
0xFC
,
(
byte
)
0x80
,
(
byte
)
0x80
,
(
byte
)
0x80
,
(
byte
)
0x9F
,
(
byte
)
0xBF
},
// U+07FF zero-padded
{
1
,
(
byte
)
0xFC
,
(
byte
)
0x80
,
(
byte
)
0x80
,
(
byte
)
0x8F
,
(
byte
)
0xBF
,
(
byte
)
0xBF
},
// U+FFFF zero-padded
{
1
,
(
byte
)
0xF8
,
(
byte
)
0xC0
,
(
byte
)
0x80
,
(
byte
)
0x80
,
(
byte
)
0x80
,
(
byte
)
0x80
},
{
1
,
(
byte
)
0xF8
,
(
byte
)
0x80
,
(
byte
)
0xC0
,
(
byte
)
0x80
,
(
byte
)
0x80
,
(
byte
)
0x80
},
{
1
,
(
byte
)
0xF8
,
(
byte
)
0x80
,
(
byte
)
0x80
,
(
byte
)
0xC1
,
(
byte
)
0xBF
,
(
byte
)
0x80
},
{
1
,
(
byte
)
0xF8
,
(
byte
)
0x80
,
(
byte
)
0x80
,
(
byte
)
0x9F
,
(
byte
)
0xC0
,
(
byte
)
0x80
},
{
1
,
(
byte
)
0xF8
,
(
byte
)
0x80
,
(
byte
)
0x80
,
(
byte
)
0x9F
,
(
byte
)
0x80
,
(
byte
)
0xC0
},
};
static
void
checkMalformed
(
String
csn
,
byte
[][]
malformed
)
throws
Exception
{
boolean
failed
=
false
;
System
.
out
.
printf
(
" Check malformed <%s>...%n"
,
csn
);
Charset
cs
=
Charset
.
forName
(
csn
);
...
...
@@ -430,9 +550,12 @@ public class TestUTF8 {
public
static
void
main
(
String
[]
args
)
throws
Exception
{
checkRoundtrip
(
"UTF-8"
);
check6ByteSurrs
(
"UTF-8"
);
//compare("UTF-8", "UTF-8-OLD");
checkMalformed
(
"UTF-8"
);
check4ByteSurrs
(
"UTF-8"
);
checkMalformed
(
"UTF-8"
,
malformed
);
checkUnderOverflow
(
"UTF-8"
);
checkRoundtrip
(
"CESU-8"
);
check6ByteSurrs
(
"CESU-8"
);
checkMalformed
(
"CESU-8"
,
malformed_cesu8
);
}
}
test/sun/security/pkcs11/Provider/Absolute.java
浏览文件 @
83d20ffd
...
...
@@ -27,7 +27,6 @@
*/
import
java.security.*
;
import
java.lang.reflect.*
;
import
sun.security.pkcs11.*
;
public
class
Absolute
{
...
...
test/sun/security/pkcs11/fips/CipherTest.java
浏览文件 @
83d20ffd
...
...
@@ -394,52 +394,47 @@ public class CipherTest {
public
static
void
main
(
PeerFactory
peerFactory
,
KeyStore
keyStore
,
String
[]
args
)
throws
Exception
{
SSLContext
reservedSSLContext
=
SSLContext
.
getDefault
();
try
{
long
time
=
System
.
currentTimeMillis
();
String
relPath
;
if
((
args
!=
null
)
&&
(
args
.
length
>
0
)
&&
args
[
0
].
equals
(
"sh"
))
{
relPath
=
pathToStoresSH
;
}
else
{
relPath
=
pathToStores
;
}
PATH
=
new
File
(
System
.
getProperty
(
"test.src"
,
"."
),
relPath
);
CipherTest
.
peerFactory
=
peerFactory
;
System
.
out
.
print
(
"Initializing test '"
+
peerFactory
.
getName
()
+
"'..."
);
// secureRandom = new SecureRandom();
// secureRandom.nextInt();
// trustStore = readKeyStore(trustStoreFile);
CipherTest
.
keyStore
=
keyStore
;
// keyStore = readKeyStore(keyStoreFile);
KeyManagerFactory
keyFactory
=
KeyManagerFactory
.
getInstance
(
KeyManagerFactory
.
getDefaultAlgorithm
());
keyFactory
.
init
(
keyStore
,
"test12"
.
toCharArray
());
keyManager
=
(
X509ExtendedKeyManager
)
keyFactory
.
getKeyManagers
()[
0
];
TrustManagerFactory
tmf
=
TrustManagerFactory
.
getInstance
(
TrustManagerFactory
.
getDefaultAlgorithm
());
tmf
.
init
(
keyStore
);
trustManager
=
(
X509TrustManager
)
tmf
.
getTrustManagers
()[
0
];
// trustManager = new AlwaysTrustManager();
SSLContext
context
=
SSLContext
.
getInstance
(
"TLS"
);
context
.
init
(
new
KeyManager
[]
{
keyManager
},
new
TrustManager
[]
{
trustManager
},
null
);
SSLContext
.
setDefault
(
context
);
CipherTest
cipherTest
=
new
CipherTest
(
peerFactory
);
Thread
serverThread
=
new
Thread
(
peerFactory
.
newServer
(
cipherTest
),
"Server"
);
serverThread
.
setDaemon
(
true
);
serverThread
.
start
();
System
.
out
.
println
(
"Done"
);
cipherTest
.
run
();
time
=
System
.
currentTimeMillis
()
-
time
;
System
.
out
.
println
(
"Done. ("
+
time
+
" ms)"
);
}
finally
{
SSLContext
.
setDefault
(
reservedSSLContext
);
long
time
=
System
.
currentTimeMillis
();
String
relPath
;
if
((
args
!=
null
)
&&
(
args
.
length
>
0
)
&&
args
[
0
].
equals
(
"sh"
))
{
relPath
=
pathToStoresSH
;
}
else
{
relPath
=
pathToStores
;
}
PATH
=
new
File
(
System
.
getProperty
(
"test.src"
,
"."
),
relPath
);
CipherTest
.
peerFactory
=
peerFactory
;
System
.
out
.
print
(
"Initializing test '"
+
peerFactory
.
getName
()
+
"'..."
);
// secureRandom = new SecureRandom();
// secureRandom.nextInt();
// trustStore = readKeyStore(trustStoreFile);
CipherTest
.
keyStore
=
keyStore
;
// keyStore = readKeyStore(keyStoreFile);
KeyManagerFactory
keyFactory
=
KeyManagerFactory
.
getInstance
(
KeyManagerFactory
.
getDefaultAlgorithm
());
keyFactory
.
init
(
keyStore
,
"test12"
.
toCharArray
());
keyManager
=
(
X509ExtendedKeyManager
)
keyFactory
.
getKeyManagers
()[
0
];
TrustManagerFactory
tmf
=
TrustManagerFactory
.
getInstance
(
TrustManagerFactory
.
getDefaultAlgorithm
());
tmf
.
init
(
keyStore
);
trustManager
=
(
X509TrustManager
)
tmf
.
getTrustManagers
()[
0
];
// trustManager = new AlwaysTrustManager();
SSLContext
context
=
SSLContext
.
getInstance
(
"TLS"
);
context
.
init
(
new
KeyManager
[]
{
keyManager
},
new
TrustManager
[]
{
trustManager
},
null
);
SSLContext
.
setDefault
(
context
);
CipherTest
cipherTest
=
new
CipherTest
(
peerFactory
);
Thread
serverThread
=
new
Thread
(
peerFactory
.
newServer
(
cipherTest
),
"Server"
);
serverThread
.
setDaemon
(
true
);
serverThread
.
start
();
System
.
out
.
println
(
"Done"
);
cipherTest
.
run
();
time
=
System
.
currentTimeMillis
()
-
time
;
System
.
out
.
println
(
"Done. ("
+
time
+
" ms)"
);
}
static
abstract
class
PeerFactory
{
...
...
test/sun/security/pkcs11/fips/ClientJSSEServerJSSE.java
浏览文件 @
83d20ffd
...
...
@@ -26,9 +26,9 @@
* @bug 6313675 6323647
* @summary Verify that all ciphersuites work in FIPS mode
* @library ..
* @run main/othervm ClientJSSEServerJSSE
* @ignore JSSE supported cipher suites are changed with CR 6916074,
* need to update this test case in JDK 7 soon
* @run main/othervm ClientJSSEServerJSSE
* @author Andreas Sterbenz
*/
...
...
test/sun/security/ssl/com/sun/net/ssl/internal/ssl/GenSSLConfigs/main.java
浏览文件 @
83d20ffd
/*
* @test
* @build TestThread Traffic Handler ServerHandler ServerThread ClientThread
* @run main/othervm/timeout=140 main
*
* SunJSSE does not support dynamic system properties, no way to re-use
* system properties in samevm/agentvm mode.
* @run main/othervm/timeout=140 -Djsse.enableCBCProtection=false main
* @summary Make sure that different configurations of SSL sockets work
*/
...
...
test/sun/security/ssl/javax/net/ssl/NewAPIs/SSLEngine/CheckStatus.java
浏览文件 @
83d20ffd
/*
* Copyright (c) 2003, 201
0
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2003, 201
1
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -29,6 +29,8 @@
* This is a simple hack to test a bunch of conditions and check
* their return codes.
*
* @run main/othervm -Djsse.enableCBCProtection=false CheckStatus
*
* @author Brad Wetmore
*/
...
...
test/sun/security/ssl/javax/net/ssl/NewAPIs/SSLEngine/LargeBufs.java
浏览文件 @
83d20ffd
/*
* Copyright (c) 2004, 20
06
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2004, 20
11
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -30,6 +30,8 @@
* This is to test larger buffer arrays, and make sure the maximum
* is being passed.
*
* @run main/othervm -Djsse.enableCBCProtection=false LargeBufs
*
* @author Brad R. Wetmore
*/
...
...
test/sun/security/ssl/javax/net/ssl/NewAPIs/SSLEngine/LargePacket.java
浏览文件 @
83d20ffd
/*
* Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2006,
2011,
Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -27,10 +27,7 @@
* @bug 6388456
* @summary Need adjustable TLS max record size for interoperability
* with non-compliant
* @run main/othervm LargePacket
*
* SunJSSE does not support dynamic system properties, no way to re-use
* system properties in samevm/agentvm mode.
* @run main/othervm -Djsse.enableCBCProtection=false LargePacket
*
* @author Xuelei Fan
*/
...
...
test/sun/security/ssl/templates/SSLSocketSSLEngineTemplate.java
0 → 100644
浏览文件 @
83d20ffd
/*
* Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @bug 7105780
* @summary Add SSLSocket client/SSLEngine server to templates directory.
*
* SunJSSE does not support dynamic system properties, no way to re-use
* system properties in samevm/agentvm mode.
*
* @run main/othervm SSLSocketSSLEngineTemplate
*/
/**
* A SSLSocket/SSLEngine interop test case. This is not the way to
* code SSLEngine-based servers, but works for what we need to do here,
* which is to make sure that SSLEngine/SSLSockets can talk to each other.
* SSLEngines can use direct or indirect buffers, and different code
* is used to get at the buffer contents internally, so we test that here.
*
* The test creates one SSLSocket (client) and one SSLEngine (server).
* The SSLSocket talks to a raw ServerSocket, and the server code
* does the translation between byte [] and ByteBuffers that the SSLEngine
* can use. The "transport" layer consists of a Socket Input/OutputStream
* and two byte buffers for the SSLEngines: think of them
* as directly connected pipes.
*
* Again, this is a *very* simple example: real code will be much more
* involved. For example, different threading and I/O models could be
* used, transport mechanisms could close unexpectedly, and so on.
*
* When this application runs, notice that several messages
* (wrap/unwrap) pass before any application data is consumed or
* produced. (For more information, please see the SSL/TLS
* specifications.) There may several steps for a successful handshake,
* so it's typical to see the following series of operations:
*
* client server message
* ====== ====== =======
* write() ... ClientHello
* ... unwrap() ClientHello
* ... wrap() ServerHello/Certificate
* read() ... ServerHello/Certificate
* write() ... ClientKeyExchange
* write() ... ChangeCipherSpec
* write() ... Finished
* ... unwrap() ClientKeyExchange
* ... unwrap() ChangeCipherSpec
* ... unwrap() Finished
* ... wrap() ChangeCipherSpec
* ... wrap() Finished
* read() ... ChangeCipherSpec
* read() ... Finished
*/
import
javax.net.ssl.*
;
import
javax.net.ssl.SSLEngineResult.*
;
import
java.io.*
;
import
java.net.*
;
import
java.security.*
;
import
java.nio.*
;
public
class
SSLSocketSSLEngineTemplate
{
/*
* Enables logging of the SSL/TLS operations.
*/
private
static
boolean
logging
=
true
;
/*
* Enables the JSSE system debugging system property:
*
* -Djavax.net.debug=all
*
* This gives a lot of low-level information about operations underway,
* including specific handshake messages, and might be best examined
* after gaining some familiarity with this application.
*/
private
static
boolean
debug
=
false
;
private
SSLContext
sslc
;
private
SSLEngine
serverEngine
;
// server-side SSLEngine
private
SSLSocket
sslSocket
;
// client-side socket
private
ServerSocket
serverSocket
;
// server-side Socket, generates the...
private
Socket
socket
;
// server-side socket that will read
private
final
byte
[]
serverMsg
=
"Hi there Client, I'm a Server."
.
getBytes
();
private
final
byte
[]
clientMsg
=
"Hello Server, I'm a Client! Pleased to meet you!"
.
getBytes
();
private
ByteBuffer
serverOut
;
// write side of serverEngine
private
ByteBuffer
serverIn
;
// read side of serverEngine
private
volatile
Exception
clientException
;
private
volatile
Exception
serverException
;
/*
* For data transport, this example uses local ByteBuffers.
*/
private
ByteBuffer
cTOs
;
// "reliable" transport client->server
private
ByteBuffer
sTOc
;
// "reliable" transport server->client
/*
* The following is to set up the keystores/trust material.
*/
private
static
final
String
pathToStores
=
"../etc/"
;
private
static
final
String
keyStoreFile
=
"keystore"
;
private
static
final
String
trustStoreFile
=
"truststore"
;
private
static
final
String
passwd
=
"passphrase"
;
private
static
String
keyFilename
=
System
.
getProperty
(
"test.src"
,
"."
)
+
"/"
+
pathToStores
+
"/"
+
keyStoreFile
;
private
static
String
trustFilename
=
System
.
getProperty
(
"test.src"
,
"."
)
+
"/"
+
pathToStores
+
"/"
+
trustStoreFile
;
/*
* Main entry point for this test.
*/
public
static
void
main
(
String
args
[])
throws
Exception
{
if
(
debug
)
{
System
.
setProperty
(
"javax.net.debug"
,
"all"
);
}
String
[]
protocols
=
new
String
[]
{
"SSLv3"
,
"TLSv1"
,
"TLSv1.1"
,
"TLSv1.2"
};
for
(
String
protocol
:
protocols
)
{
log
(
"Testing "
+
protocol
);
/*
* Run the tests with direct and indirect buffers.
*/
SSLSocketSSLEngineTemplate
test
=
new
SSLSocketSSLEngineTemplate
(
protocol
);
test
.
runTest
(
true
);
test
.
runTest
(
false
);
}
System
.
out
.
println
(
"Test Passed."
);
}
/*
* Create an initialized SSLContext to use for these tests.
*/
public
SSLSocketSSLEngineTemplate
(
String
protocol
)
throws
Exception
{
KeyStore
ks
=
KeyStore
.
getInstance
(
"JKS"
);
KeyStore
ts
=
KeyStore
.
getInstance
(
"JKS"
);
char
[]
passphrase
=
"passphrase"
.
toCharArray
();
ks
.
load
(
new
FileInputStream
(
keyFilename
),
passphrase
);
ts
.
load
(
new
FileInputStream
(
trustFilename
),
passphrase
);
KeyManagerFactory
kmf
=
KeyManagerFactory
.
getInstance
(
"SunX509"
);
kmf
.
init
(
ks
,
passphrase
);
TrustManagerFactory
tmf
=
TrustManagerFactory
.
getInstance
(
"SunX509"
);
tmf
.
init
(
ts
);
SSLContext
sslCtx
=
SSLContext
.
getInstance
(
protocol
);
sslCtx
.
init
(
kmf
.
getKeyManagers
(),
tmf
.
getTrustManagers
(),
null
);
sslc
=
sslCtx
;
}
/*
* Run the test.
*
* Sit in a tight loop, with the server engine calling wrap/unwrap
* regardless of whether data is available or not. We do this until
* we get the application data. Then we shutdown and go to the next one.
*
* The main loop handles all of the I/O phases of the SSLEngine's
* lifetime:
*
* initial handshaking
* application data transfer
* engine closing
*
* One could easily separate these phases into separate
* sections of code.
*/
private
void
runTest
(
boolean
direct
)
throws
Exception
{
boolean
serverClose
=
direct
;
serverSocket
=
new
ServerSocket
(
0
);
int
port
=
serverSocket
.
getLocalPort
();
Thread
thread
=
createClientThread
(
port
,
serverClose
);
socket
=
serverSocket
.
accept
();
socket
.
setSoTimeout
(
500
);
serverSocket
.
close
();
createSSLEngine
();
createBuffers
(
direct
);
try
{
boolean
closed
=
false
;
InputStream
is
=
socket
.
getInputStream
();
OutputStream
os
=
socket
.
getOutputStream
();
SSLEngineResult
serverResult
;
// results from last operation
/*
* Examining the SSLEngineResults could be much more involved,
* and may alter the overall flow of the application.
*
* For example, if we received a BUFFER_OVERFLOW when trying
* to write to the output pipe, we could reallocate a larger
* pipe, but instead we wait for the peer to drain it.
*/
byte
[]
inbound
=
new
byte
[
8192
];
byte
[]
outbound
=
new
byte
[
8192
];
while
(!
isEngineClosed
(
serverEngine
))
{
int
len
=
0
;
// Inbound data
log
(
"================"
);
// Read from the Client side.
try
{
len
=
is
.
read
(
inbound
);
if
(
len
==
-
1
)
{
throw
new
Exception
(
"Unexpected EOF"
);
}
cTOs
.
put
(
inbound
,
0
,
len
);
}
catch
(
SocketTimeoutException
ste
)
{
// swallow. Nothing yet, probably waiting on us.
}
cTOs
.
flip
();
serverResult
=
serverEngine
.
unwrap
(
cTOs
,
serverIn
);
log
(
"server unwrap: "
,
serverResult
);
runDelegatedTasks
(
serverResult
,
serverEngine
);
cTOs
.
compact
();
// Outbound data
log
(
"----"
);
serverResult
=
serverEngine
.
wrap
(
serverOut
,
sTOc
);
log
(
"server wrap: "
,
serverResult
);
runDelegatedTasks
(
serverResult
,
serverEngine
);
sTOc
.
flip
();
if
((
len
=
sTOc
.
remaining
())
!=
0
)
{
sTOc
.
get
(
outbound
,
0
,
len
);
os
.
write
(
outbound
,
0
,
len
);
// Give the other side a chance to process
}
sTOc
.
compact
();
if
(!
closed
&&
(
serverOut
.
remaining
()
==
0
))
{
closed
=
true
;
/*
* We'll alternate initiatating the shutdown.
* When the server initiates, it will take one more
* loop, but tests the orderly shutdown.
*/
if
(
serverClose
)
{
serverEngine
.
closeOutbound
();
}
serverIn
.
flip
();
/*
* A sanity check to ensure we got what was sent.
*/
if
(
serverIn
.
remaining
()
!=
clientMsg
.
length
)
{
throw
new
Exception
(
"Client: Data length error"
);
}
for
(
int
i
=
0
;
i
<
clientMsg
.
length
;
i
++)
{
if
(
clientMsg
[
i
]
!=
serverIn
.
get
())
{
throw
new
Exception
(
"Client: Data content error"
);
}
}
serverIn
.
compact
();
}
}
return
;
}
catch
(
Exception
e
)
{
serverException
=
e
;
}
finally
{
socket
.
close
();
// Wait for the client to join up with us.
thread
.
join
();
if
(
serverException
!=
null
)
{
throw
serverException
;
}
if
(
clientException
!=
null
)
{
throw
clientException
;
}
}
}
/*
* Create a client thread which does simple SSLSocket operations.
* We'll write and read one data packet.
*/
private
Thread
createClientThread
(
final
int
port
,
final
boolean
serverClose
)
throws
Exception
{
Thread
t
=
new
Thread
(
"ClientThread"
)
{
@Override
public
void
run
()
{
try
{
Thread
.
sleep
(
1000
);
// Give server time to finish setup.
sslSocket
=
(
SSLSocket
)
sslc
.
getSocketFactory
().
createSocket
(
"localhost"
,
port
);
OutputStream
os
=
sslSocket
.
getOutputStream
();
InputStream
is
=
sslSocket
.
getInputStream
();
// write(byte[]) goes in one shot.
os
.
write
(
clientMsg
);
byte
[]
inbound
=
new
byte
[
2048
];
int
pos
=
0
;
int
len
;
done:
while
((
len
=
is
.
read
(
inbound
,
pos
,
2048
-
pos
))
!=
-
1
)
{
pos
+=
len
;
// Let the client do the closing.
if
((
pos
==
serverMsg
.
length
)
&&
!
serverClose
)
{
sslSocket
.
close
();
break
done
;
}
}
if
(
pos
!=
serverMsg
.
length
)
{
throw
new
Exception
(
"Client: Data length error"
);
}
for
(
int
i
=
0
;
i
<
serverMsg
.
length
;
i
++)
{
if
(
inbound
[
i
]
!=
serverMsg
[
i
])
{
throw
new
Exception
(
"Client: Data content error"
);
}
}
}
catch
(
Exception
e
)
{
clientException
=
e
;
}
}
};
t
.
start
();
return
t
;
}
/*
* Using the SSLContext created during object creation,
* create/configure the SSLEngines we'll use for this test.
*/
private
void
createSSLEngine
()
throws
Exception
{
/*
* Configure the serverEngine to act as a server in the SSL/TLS
* handshake.
*/
serverEngine
=
sslc
.
createSSLEngine
();
serverEngine
.
setUseClientMode
(
false
);
serverEngine
.
getNeedClientAuth
();
}
/*
* Create and size the buffers appropriately.
*/
private
void
createBuffers
(
boolean
direct
)
{
SSLSession
session
=
serverEngine
.
getSession
();
int
appBufferMax
=
session
.
getApplicationBufferSize
();
int
netBufferMax
=
session
.
getPacketBufferSize
();
/*
* We'll make the input buffers a bit bigger than the max needed
* size, so that unwrap()s following a successful data transfer
* won't generate BUFFER_OVERFLOWS.
*
* We'll use a mix of direct and indirect ByteBuffers for
* tutorial purposes only. In reality, only use direct
* ByteBuffers when they give a clear performance enhancement.
*/
if
(
direct
)
{
serverIn
=
ByteBuffer
.
allocateDirect
(
appBufferMax
+
50
);
cTOs
=
ByteBuffer
.
allocateDirect
(
netBufferMax
);
sTOc
=
ByteBuffer
.
allocateDirect
(
netBufferMax
);
}
else
{
serverIn
=
ByteBuffer
.
allocate
(
appBufferMax
+
50
);
cTOs
=
ByteBuffer
.
allocate
(
netBufferMax
);
sTOc
=
ByteBuffer
.
allocate
(
netBufferMax
);
}
serverOut
=
ByteBuffer
.
wrap
(
serverMsg
);
}
/*
* If the result indicates that we have outstanding tasks to do,
* go ahead and run them in this thread.
*/
private
static
void
runDelegatedTasks
(
SSLEngineResult
result
,
SSLEngine
engine
)
throws
Exception
{
if
(
result
.
getHandshakeStatus
()
==
HandshakeStatus
.
NEED_TASK
)
{
Runnable
runnable
;
while
((
runnable
=
engine
.
getDelegatedTask
())
!=
null
)
{
log
(
"\trunning delegated task..."
);
runnable
.
run
();
}
HandshakeStatus
hsStatus
=
engine
.
getHandshakeStatus
();
if
(
hsStatus
==
HandshakeStatus
.
NEED_TASK
)
{
throw
new
Exception
(
"handshake shouldn't need additional tasks"
);
}
log
(
"\tnew HandshakeStatus: "
+
hsStatus
);
}
}
private
static
boolean
isEngineClosed
(
SSLEngine
engine
)
{
return
(
engine
.
isOutboundDone
()
&&
engine
.
isInboundDone
());
}
/*
* Logging code
*/
private
static
boolean
resultOnce
=
true
;
private
static
void
log
(
String
str
,
SSLEngineResult
result
)
{
if
(!
logging
)
{
return
;
}
if
(
resultOnce
)
{
resultOnce
=
false
;
System
.
out
.
println
(
"The format of the SSLEngineResult is: \n"
+
"\t\"getStatus() / getHandshakeStatus()\" +\n"
+
"\t\"bytesConsumed() / bytesProduced()\"\n"
);
}
HandshakeStatus
hsStatus
=
result
.
getHandshakeStatus
();
log
(
str
+
result
.
getStatus
()
+
"/"
+
hsStatus
+
", "
+
result
.
bytesConsumed
()
+
"/"
+
result
.
bytesProduced
()
+
" bytes"
);
if
(
hsStatus
==
HandshakeStatus
.
FINISHED
)
{
log
(
"\t...ready for application data"
);
}
}
private
static
void
log
(
String
str
)
{
if
(
logging
)
{
System
.
out
.
println
(
str
);
}
}
}
test/sun/text/resources/Collator/Bug6755060.java
0 → 100644
浏览文件 @
83d20ffd
/*
* Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @bug 6755060
* @summary updating collation tables for thai to make it consistent with CLDR 1.9
*/
import
java.text.*
;
import
java.util.*
;
public
class
Bug6755060
{
/********************************************************
*********************************************************/
public
static
void
main
(
String
[]
args
)
{
Locale
reservedLocale
=
Locale
.
getDefault
();
try
{
int
errors
=
0
;
Locale
loc
=
new
Locale
(
"th"
,
"TH"
);
// Thai
Locale
.
setDefault
(
loc
);
Collator
col
=
Collator
.
getInstance
();
/*
* The original data "data" are the data to be sorted provided by the submitter of the CR.
* It's in correct order in accord with thai collation in CLDR 1.9. If we use old Java without this fix,
* the output order will be incorrect. Correct order will be turned into incorrect order.
* If fix is there, "data" after sorting will be unchanged, same as "sortedData". If fix is lost (regression),
* "data" after sorting will be changed, not as "sortedData".(not correct anymore)
* The submitter of the CR also gives a expected "sortedData" in the CR, but it's in accord with collation in CLDR 1.4.
* His data to be sorted are actually well sorted in accord with CLDR 1.9.
*/
String
[]
data
=
{
"\u0e01"
,
"\u0e01\u0e2f"
,
"\u0e01\u0e46"
,
"\u0e01\u0e4f"
,
"\u0e01\u0e5a"
,
"\u0e01\u0e5b"
,
"\u0e01\u0e4e"
,
"\u0e01\u0e4c"
,
"\u0e01\u0e48"
,
"\u0e01\u0e01"
,
"\u0e01\u0e4b\u0e01"
,
"\u0e01\u0e4d"
,
"\u0e01\u0e30"
,
"\u0e01\u0e31\u0e01"
,
"\u0e01\u0e32"
,
"\u0e01\u0e33"
,
"\u0e01\u0e34"
,
"\u0e01\u0e35"
,
"\u0e01\u0e36"
,
"\u0e01\u0e37"
,
"\u0e01\u0e38"
,
"\u0e01\u0e39"
,
"\u0e40\u0e01"
,
"\u0e40\u0e01\u0e48"
,
"\u0e40\u0e01\u0e49"
,
"\u0e40\u0e01\u0e4b"
,
"\u0e41\u0e01"
,
"\u0e42\u0e01"
,
"\u0e43\u0e01"
,
"\u0e44\u0e01"
,
"\u0e01\u0e3a"
,
"\u0e24\u0e32"
,
"\u0e24\u0e45"
,
"\u0e40\u0e25"
,
"\u0e44\u0e26"
};
String
[]
sortedData
=
{
"\u0e01"
,
"\u0e01\u0e2f"
,
"\u0e01\u0e46"
,
"\u0e01\u0e4f"
,
"\u0e01\u0e5a"
,
"\u0e01\u0e5b"
,
"\u0e01\u0e4e"
,
"\u0e01\u0e4c"
,
"\u0e01\u0e48"
,
"\u0e01\u0e01"
,
"\u0e01\u0e4b\u0e01"
,
"\u0e01\u0e4d"
,
"\u0e01\u0e30"
,
"\u0e01\u0e31\u0e01"
,
"\u0e01\u0e32"
,
"\u0e01\u0e33"
,
"\u0e01\u0e34"
,
"\u0e01\u0e35"
,
"\u0e01\u0e36"
,
"\u0e01\u0e37"
,
"\u0e01\u0e38"
,
"\u0e01\u0e39"
,
"\u0e40\u0e01"
,
"\u0e40\u0e01\u0e48"
,
"\u0e40\u0e01\u0e49"
,
"\u0e40\u0e01\u0e4b"
,
"\u0e41\u0e01"
,
"\u0e42\u0e01"
,
"\u0e43\u0e01"
,
"\u0e44\u0e01"
,
"\u0e01\u0e3a"
,
"\u0e24\u0e32"
,
"\u0e24\u0e45"
,
"\u0e40\u0e25"
,
"\u0e44\u0e26"
};
Arrays
.
sort
(
data
,
col
);
System
.
out
.
println
(
"Using "
+
loc
.
getDisplayName
());
for
(
int
i
=
0
;
i
<
data
.
length
;
i
++)
{
System
.
out
.
println
(
data
[
i
]
+
" : "
+
sortedData
[
i
]);
if
(
sortedData
[
i
].
compareTo
(
data
[
i
])
!=
0
)
{
errors
++;
}
}
//end for
if
(
errors
>
0
){
StringBuffer
expected
=
new
StringBuffer
(),
actual
=
new
StringBuffer
();
expected
.
append
(
sortedData
[
0
]);
actual
.
append
(
data
[
0
]);
for
(
int
i
=
1
;
i
<
data
.
length
;
i
++)
{
expected
.
append
(
","
);
expected
.
append
(
sortedData
[
i
]);
actual
.
append
(
","
);
actual
.
append
(
data
[
i
]);
}
String
errmsg
=
"Error is found in collation testing in Thai\n"
+
"exepected order is: "
+
expected
.
toString
()
+
"\n"
+
"actual order is: "
+
actual
.
toString
()
+
"\n"
;
throw
new
RuntimeException
(
errmsg
);
}
}
finally
{
// restore the reserved locale
Locale
.
setDefault
(
reservedLocale
);
}
}
//end main
}
//end class CollatorTest
test/sun/text/resources/LocaleData
浏览文件 @
83d20ffd
...
...
@@ -7006,3 +7006,7 @@ CurrencyNames/zh_CN/zwl=\u6d25\u5df4\u5e03\u97e6\u5143 (2009)
CurrencyNames/zh_TW/cuc=\u53e4\u5df4\u53ef\u8f49\u63db\u62ab\u7d22
CurrencyNames/zh_TW/tmt=\u571f\u5eab\u66fc\u65b0\u99ac\u7d0d\u7279
CurrencyNames/zh_TW/zwl=\u8f9b\u5df4\u5a01\u5143 (2009)
# bug 7101495
CalendarData/lv/firstDayOfWeek=2
CalendarData/lv/minimalDaysInFirstWeek=4
test/sun/text/resources/LocaleDataTest.java
浏览文件 @
83d20ffd
...
...
@@ -33,7 +33,7 @@
* 6379214 6485516 6486607 4225362 4494727 6533691 6531591 6531593 6570259
* 6509039 6609737 6610748 6645271 6507067 6873931 6450945 6645268 6646611
* 6645405 6650730 6910489 6573250 6870908 6585666 6716626 6914413 6916787
* 6919624 6998391 7019267 7020960 7025837 7020583 7036905 7066203
* 6919624 6998391 7019267 7020960 7025837 7020583 7036905 7066203
7101495
* @summary Verify locale data
*
*/
...
...
test/sun/tools/jinfo/Basic.sh
浏览文件 @
83d20ffd
...
...
@@ -44,7 +44,19 @@ set +e
failed
=
0
if
[
$isWindows
=
false
]
;
then
runSA
=
true
if
[
$isLinux
=
true
]
;
then
# Some Linux systems disable non-child ptrace (see 7050524)
ptrace_scope
=
`
/sbin/sysctl
-n
kernel.yama.ptrace_scope
`
if
[
$?
=
0
]
;
then
if
[
$ptrace_scope
=
1
]
;
then
runSA
=
false
fi
fi
fi
if
[
$runSA
=
true
]
;
then
# -sysprops option
${
JINFO
}
-J-XX
:+UsePerfData
-sysprops
$appJavaPid
if
[
$?
!=
0
]
;
then
failed
=
1
;
fi
...
...
test/sun/tools/jstatd/jstatdExternalRegistry.sh
浏览文件 @
83d20ffd
...
...
@@ -22,7 +22,7 @@
#
# @test
# @bug 4990825
# @bug 4990825
7092186
# @run shell/timeout=90 jstatdExternalRegistry.sh
# @summary Test functionality of 'jstatd -p<port>&' with an external RMI registry
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录