Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell11
提交
d6afa61b
D
dragonwell11
项目概览
openanolis
/
dragonwell11
通知
7
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
dragonwell11
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
d6afa61b
编写于
7月 05, 2017
作者:
D
duke
浏览文件
操作
浏览文件
下载
差异文件
Merge
上级
5b4fce0a
15b8f906
变更
82
展开全部
隐藏空白更改
内联
并排
Showing
82 changed file
with
3430 addition
and
376 deletion
+3430
-376
.hgtags-top-repo
.hgtags-top-repo
+1
-0
hotspot/.hgtags
hotspot/.hgtags
+1
-0
jdk/.hgtags
jdk/.hgtags
+1
-0
jdk/make/java/nio/FILES_java.gmk
jdk/make/java/nio/FILES_java.gmk
+1
-0
jdk/make/sun/net/Makefile
jdk/make/sun/net/Makefile
+1
-0
jdk/src/share/classes/com/sun/net/ssl/HttpsURLConnection.java
...src/share/classes/com/sun/net/ssl/HttpsURLConnection.java
+7
-1
jdk/src/share/classes/com/sun/org/apache/xml/internal/security/utils/IdResolver.java
...un/org/apache/xml/internal/security/utils/IdResolver.java
+2
-0
jdk/src/share/classes/java/awt/AWTKeyStroke.java
jdk/src/share/classes/java/awt/AWTKeyStroke.java
+38
-13
jdk/src/share/classes/java/io/InputStream.java
jdk/src/share/classes/java/io/InputStream.java
+6
-10
jdk/src/share/classes/java/lang/ref/Reference.java
jdk/src/share/classes/java/lang/ref/Reference.java
+19
-12
jdk/src/share/classes/java/net/InetAddress.java
jdk/src/share/classes/java/net/InetAddress.java
+5
-3
jdk/src/share/classes/java/net/ServerSocket.java
jdk/src/share/classes/java/net/ServerSocket.java
+3
-4
jdk/src/share/classes/java/nio/charset/Charset.java
jdk/src/share/classes/java/nio/charset/Charset.java
+1
-1
jdk/src/share/classes/java/nio/file/Files.java
jdk/src/share/classes/java/nio/file/Files.java
+12
-6
jdk/src/share/classes/java/security/Security.java
jdk/src/share/classes/java/security/Security.java
+1
-1
jdk/src/share/classes/java/text/BreakIterator.java
jdk/src/share/classes/java/text/BreakIterator.java
+8
-8
jdk/src/share/classes/java/util/Collections.java
jdk/src/share/classes/java/util/Collections.java
+96
-0
jdk/src/share/classes/javax/net/ssl/HttpsURLConnection.java
jdk/src/share/classes/javax/net/ssl/HttpsURLConnection.java
+8
-1
jdk/src/share/classes/javax/net/ssl/SSLEngine.java
jdk/src/share/classes/javax/net/ssl/SSLEngine.java
+2
-2
jdk/src/share/classes/javax/swing/JTable.java
jdk/src/share/classes/javax/swing/JTable.java
+2
-0
jdk/src/share/classes/javax/swing/JTree.java
jdk/src/share/classes/javax/swing/JTree.java
+3
-1
jdk/src/share/classes/javax/swing/text/DefaultCaret.java
jdk/src/share/classes/javax/swing/text/DefaultCaret.java
+1
-1
jdk/src/share/classes/javax/swing/text/html/HTMLDocument.java
...src/share/classes/javax/swing/text/html/HTMLDocument.java
+6
-1
jdk/src/share/classes/sun/awt/image/OffScreenImageSource.java
...src/share/classes/sun/awt/image/OffScreenImageSource.java
+2
-2
jdk/src/share/classes/sun/net/ResourceManager.java
jdk/src/share/classes/sun/net/ResourceManager.java
+5
-4
jdk/src/share/classes/sun/nio/ch/Util.java
jdk/src/share/classes/sun/nio/ch/Util.java
+8
-8
jdk/src/share/classes/sun/nio/cs/CESU_8.java
jdk/src/share/classes/sun/nio/cs/CESU_8.java
+604
-0
jdk/src/share/classes/sun/nio/cs/UTF_8.java
jdk/src/share/classes/sun/nio/cs/UTF_8.java
+123
-62
jdk/src/share/classes/sun/nio/cs/standard-charsets
jdk/src/share/classes/sun/nio/cs/standard-charsets
+4
-0
jdk/src/share/classes/sun/print/PSPrinterJob.java
jdk/src/share/classes/sun/print/PSPrinterJob.java
+37
-6
jdk/src/share/classes/sun/rmi/registry/RegistryImpl.java
jdk/src/share/classes/sun/rmi/registry/RegistryImpl.java
+79
-4
jdk/src/share/classes/sun/rmi/server/LoaderHandler.java
jdk/src/share/classes/sun/rmi/server/LoaderHandler.java
+3
-3
jdk/src/share/classes/sun/rmi/server/UnicastServerRef.java
jdk/src/share/classes/sun/rmi/server/UnicastServerRef.java
+6
-0
jdk/src/share/classes/sun/security/ssl/AppOutputStream.java
jdk/src/share/classes/sun/security/ssl/AppOutputStream.java
+28
-2
jdk/src/share/classes/sun/security/ssl/CipherBox.java
jdk/src/share/classes/sun/security/ssl/CipherBox.java
+15
-0
jdk/src/share/classes/sun/security/ssl/CipherSuite.java
jdk/src/share/classes/sun/security/ssl/CipherSuite.java
+11
-2
jdk/src/share/classes/sun/security/ssl/EngineOutputRecord.java
...rc/share/classes/sun/security/ssl/EngineOutputRecord.java
+44
-3
jdk/src/share/classes/sun/security/ssl/MAC.java
jdk/src/share/classes/sun/security/ssl/MAC.java
+6
-6
jdk/src/share/classes/sun/security/ssl/Record.java
jdk/src/share/classes/sun/security/ssl/Record.java
+18
-1
jdk/src/share/classes/sun/security/ssl/SSLEngineImpl.java
jdk/src/share/classes/sun/security/ssl/SSLEngineImpl.java
+34
-0
jdk/src/share/classes/sun/security/ssl/SSLSocketImpl.java
jdk/src/share/classes/sun/security/ssl/SSLSocketImpl.java
+35
-0
jdk/src/share/classes/sun/swing/SwingUtilities2.java
jdk/src/share/classes/sun/swing/SwingUtilities2.java
+44
-33
jdk/src/share/classes/sun/util/xml/XMLUtils.java
jdk/src/share/classes/sun/util/xml/XMLUtils.java
+2
-2
jdk/src/share/demo/jfc/TransparentRuler/README.txt
jdk/src/share/demo/jfc/TransparentRuler/README.txt
+1
-5
jdk/src/share/javavm/export/jvm.h
jdk/src/share/javavm/export/jvm.h
+2
-1
jdk/src/share/native/com/sun/java/util/jar/pack/unpack.cpp
jdk/src/share/native/com/sun/java/util/jar/pack/unpack.cpp
+5
-0
jdk/src/share/native/com/sun/java/util/jar/pack/utils.cpp
jdk/src/share/native/com/sun/java/util/jar/pack/utils.cpp
+2
-2
jdk/src/share/native/com/sun/java/util/jar/pack/utils.h
jdk/src/share/native/com/sun/java/util/jar/pack/utils.h
+2
-2
jdk/src/share/native/common/jdk_util.c
jdk/src/share/native/common/jdk_util.c
+1
-1
jdk/src/share/native/sun/java2d/loops/TransformHelper.c
jdk/src/share/native/sun/java2d/loops/TransformHelper.c
+41
-16
jdk/src/solaris/classes/sun/awt/X11/XComponentPeer.java
jdk/src/solaris/classes/sun/awt/X11/XComponentPeer.java
+12
-4
jdk/src/solaris/classes/sun/awt/X11/generator/WrapperGenerator.java
...laris/classes/sun/awt/X11/generator/WrapperGenerator.java
+9
-9
jdk/src/solaris/classes/sun/print/UnixPrintJob.java
jdk/src/solaris/classes/sun/print/UnixPrintJob.java
+35
-6
jdk/src/solaris/native/sun/awt/splashscreen/splashscreen_config.h
...solaris/native/sun/awt/splashscreen/splashscreen_config.h
+1
-1
jdk/src/windows/classes/java/lang/ProcessImpl.java
jdk/src/windows/classes/java/lang/ProcessImpl.java
+3
-2
jdk/src/windows/classes/sun/nio/fs/WindowsDirectoryStream.java
...rc/windows/classes/sun/nio/fs/WindowsDirectoryStream.java
+17
-12
jdk/src/windows/classes/sun/nio/fs/WindowsPathParser.java
jdk/src/windows/classes/sun/nio/fs/WindowsPathParser.java
+9
-3
jdk/src/windows/native/sun/windows/awt_Window.cpp
jdk/src/windows/native/sun/windows/awt_Window.cpp
+2
-2
jdk/test/ProblemList.txt
jdk/test/ProblemList.txt
+0
-3
jdk/test/java/lang/ref/ReferenceEnqueue.java
jdk/test/java/lang/ref/ReferenceEnqueue.java
+79
-0
jdk/test/java/lang/ref/ReferenceEnqueuePending.java
jdk/test/java/lang/ref/ReferenceEnqueuePending.java
+201
-0
jdk/test/java/nio/charset/coders/Errors.java
jdk/test/java/nio/charset/coders/Errors.java
+1
-3
jdk/test/java/util/Collections/EmptySortedSet.java
jdk/test/java/util/Collections/EmptySortedSet.java
+351
-0
jdk/test/javax/swing/JEditorPane/4492274/bug4492274.java
jdk/test/javax/swing/JEditorPane/4492274/bug4492274.java
+111
-0
jdk/test/javax/swing/JEditorPane/4492274/test.html
jdk/test/javax/swing/JEditorPane/4492274/test.html
+7
-0
jdk/test/javax/swing/JSlider/6348946/bug6348946.java
jdk/test/javax/swing/JSlider/6348946/bug6348946.java
+172
-0
jdk/test/javax/swing/JTextArea/7049024/bug7049024.java
jdk/test/javax/swing/JTextArea/7049024/bug7049024.java
+134
-0
jdk/test/javax/swing/ToolTipManager/Test6256140.java
jdk/test/javax/swing/ToolTipManager/Test6256140.java
+143
-0
jdk/test/javax/xml/crypto/dsig/GenerationTests.java
jdk/test/javax/xml/crypto/dsig/GenerationTests.java
+49
-2
jdk/test/sun/nio/cs/TestStringCoding.java
jdk/test/sun/nio/cs/TestStringCoding.java
+3
-3
jdk/test/sun/nio/cs/TestStringCodingUTF8.java
jdk/test/sun/nio/cs/TestStringCodingUTF8.java
+6
-4
jdk/test/sun/nio/cs/TestUTF8.java
jdk/test/sun/nio/cs/TestUTF8.java
+155
-32
jdk/test/sun/security/pkcs11/Provider/Absolute.java
jdk/test/sun/security/pkcs11/Provider/Absolute.java
+0
-1
jdk/test/sun/security/pkcs11/fips/CipherTest.java
jdk/test/sun/security/pkcs11/fips/CipherTest.java
+40
-45
jdk/test/sun/security/pkcs11/fips/ClientJSSEServerJSSE.java
jdk/test/sun/security/pkcs11/fips/ClientJSSEServerJSSE.java
+1
-1
jdk/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
jdk/test/sun/security/ssl/javax/net/ssl/NewAPIs/SSLEngine/CheckStatus.java
...rity/ssl/javax/net/ssl/NewAPIs/SSLEngine/CheckStatus.java
+3
-1
jdk/test/sun/security/ssl/javax/net/ssl/NewAPIs/SSLEngine/LargeBufs.java
...curity/ssl/javax/net/ssl/NewAPIs/SSLEngine/LargeBufs.java
+3
-1
jdk/test/sun/security/ssl/javax/net/ssl/NewAPIs/SSLEngine/LargePacket.java
...rity/ssl/javax/net/ssl/NewAPIs/SSLEngine/LargePacket.java
+2
-5
jdk/test/sun/security/ssl/templates/SSLSocketSSLEngineTemplate.java
...un/security/ssl/templates/SSLSocketSSLEngineTemplate.java
+479
-0
jdk/test/sun/tools/jinfo/Basic.sh
jdk/test/sun/tools/jinfo/Basic.sh
+13
-1
jdk/test/sun/tools/jstatd/jstatdExternalRegistry.sh
jdk/test/sun/tools/jstatd/jstatdExternalRegistry.sh
+1
-1
未找到文件。
.hgtags-top-repo
浏览文件 @
d6afa61b
...
...
@@ -134,3 +134,4 @@ fb1bc13260d76447e269e843859eb593fe2a8ab2 jdk8-b08
a6c4c248e8fa350c35014fa94bab5ac1a1ac3299 jdk8-b10
1defbc57940a56f0aa41e9dee87b71e8c8b71103 jdk8-b11
8e2104d565baee473895d5eba20e39f85ab4bf9f jdk8-b12
26fb81a1e9ceb9baffba216acd9ded62e9e9d5ab jdk8-b13
hotspot/.hgtags
浏览文件 @
d6afa61b
...
...
@@ -197,3 +197,4 @@ d815de2e85e511b7deab2a83cf80c0224d011da9 jdk8-b10
6534482ff68ad79066dfe15dfb6d8905f09681bd hs23-b04
1d3900713a67a0a39faf4e12c9c158d55aebef87 jdk8-b12
3e609627e780736f372eb14d29bb9b5e53b21fbf hs23-b05
b92ca8e229d29004f840c67e620833d23a346761 jdk8-b13
jdk/.hgtags
浏览文件 @
d6afa61b
...
...
@@ -134,3 +134,4 @@ f1ec21b8142168ff40f3278d2f6b5fe4bd5f3b26 jdk8-b09
4788745572ef2bde34924ef34e7e4d55ba07e979 jdk8-b10
7ab0d613cd1a271a9763ffb894dc1f0a5b95a7e4 jdk8-b11
09fd2067f715e4505c44b01c301258a4e8f8964e jdk8-b12
4cb2e8679b27432854690cb688ea06d3b2d8e008 jdk8-b13
jdk/make/java/nio/FILES_java.gmk
浏览文件 @
d6afa61b
...
...
@@ -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 \
...
...
jdk/make/sun/net/Makefile
浏览文件 @
d6afa61b
...
...
@@ -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
...
...
jdk/src/share/classes/com/sun/net/ssl/HttpsURLConnection.java
浏览文件 @
d6afa61b
/*
* 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
;
}
...
...
jdk/src/share/classes/com/sun/org/apache/xml/internal/security/utils/IdResolver.java
浏览文件 @
d6afa61b
...
...
@@ -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
();
...
...
jdk/src/share/classes/java/awt/AWTKeyStroke.java
浏览文件 @
d6afa61b
/*
* 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
;
}
...
...
jdk/src/share/classes/java/io/InputStream.java
浏览文件 @
d6afa61b
...
...
@@ -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
;
}
...
...
jdk/src/share/classes/java/lang/ref/Reference.java
浏览文件 @
d6afa61b
...
...
@@ -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
);
}
}
...
...
jdk/src/share/classes/java/net/InetAddress.java
浏览文件 @
d6afa61b
...
...
@@ -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
()))
{
...
...
jdk/src/share/classes/java/net/ServerSocket.java
浏览文件 @
d6afa61b
...
...
@@ -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
;
}
});
...
...
jdk/src/share/classes/java/nio/charset/Charset.java
浏览文件 @
d6afa61b
...
...
@@ -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
)
{
...
...
jdk/src/share/classes/java/nio/file/Files.java
浏览文件 @
d6afa61b
...
...
@@ -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
);
}
/**
...
...
jdk/src/share/classes/java/security/Security.java
浏览文件 @
d6afa61b
...
...
@@ -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
;
...
...
jdk/src/share/classes/java/text/BreakIterator.java
浏览文件 @
d6afa61b
...
...
@@ -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
...
...
jdk/src/share/classes/java/util/Collections.java
浏览文件 @
d6afa61b
...
...
@@ -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.
*
...
...
jdk/src/share/classes/javax/net/ssl/HttpsURLConnection.java
浏览文件 @
d6afa61b
/*
* 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
;
}
...
...
jdk/src/share/classes/javax/net/ssl/SSLEngine.java
浏览文件 @
d6afa61b
/*
* 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
...
...
jdk/src/share/classes/javax/swing/JTable.java
浏览文件 @
d6afa61b
...
...
@@ -1828,6 +1828,8 @@ public class JTable extends JComponent implements TableModelListener, Scrollable
* table. While the {@code autoCreateRowSorter} property remains
* {@code true}, every time the model is changed, a new {@code
* TableRowSorter} is created and set as the table's row sorter.
* The default value for the {@code autoCreateRowSorter}
* property is {@code false}.
*
* @param autoCreateRowSorter whether or not a {@code RowSorter}
* should be automatically created
...
...
jdk/src/share/classes/javax/swing/JTree.java
浏览文件 @
d6afa61b
...
...
@@ -1838,7 +1838,9 @@ public class JTree extends JComponent implements Scrollable, Accessible
* nodes, or <code>null</code> if nothing is currently selected
*/
public
TreePath
[]
getSelectionPaths
()
{
return
getSelectionModel
().
getSelectionPaths
();
TreePath
[]
selectionPaths
=
getSelectionModel
().
getSelectionPaths
();
return
(
selectionPaths
!=
null
&&
selectionPaths
.
length
>
0
)
?
selectionPaths
:
null
;
}
/**
...
...
jdk/src/share/classes/javax/swing/text/DefaultCaret.java
浏览文件 @
d6afa61b
...
...
@@ -1326,7 +1326,7 @@ public class DefaultCaret extends Rectangle implements Caret, FocusListener, Mou
if
(
!
SwingUtilities2
.
canCurrentEventAccessSystemClipboard
()
)
{
return
;
}
if
(
this
.
dot
!=
this
.
mark
&&
component
!=
null
)
{
if
(
this
.
dot
!=
this
.
mark
&&
component
!=
null
&&
component
.
hasFocus
()
)
{
Clipboard
clip
=
getSystemSelection
();
if
(
clip
!=
null
)
{
String
selectedText
;
...
...
jdk/src/share/classes/javax/swing/text/html/HTMLDocument.java
浏览文件 @
d6afa61b
...
...
@@ -1181,7 +1181,12 @@ public class HTMLDocument extends DefaultStyledDocument {
public
void
insertAfterStart
(
Element
elem
,
String
htmlText
)
throws
BadLocationException
,
IOException
{
verifyParser
();
if
(
elem
!=
null
&&
elem
.
isLeaf
())
{
if
(
elem
==
null
||
htmlText
==
null
)
{
return
;
}
if
(
elem
.
isLeaf
())
{
throw
new
IllegalArgumentException
(
"Can not insert HTML after start of a leaf"
);
}
...
...
jdk/src/share/classes/sun/awt/image/OffScreenImageSource.java
浏览文件 @
d6afa61b
/*
* Copyright (c) 1995, 20
03
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1995, 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
...
...
@@ -185,7 +185,7 @@ public class OffScreenImageSource implements ImageProducer {
theConsumer
.
setDimensions
(
image
.
getWidth
(),
image
.
getHeight
());
theConsumer
.
setProperties
(
properties
);
sendPixels
();
theConsumer
.
imageComplete
(
ImageConsumer
.
S
INGLEFRAM
EDONE
);
theConsumer
.
imageComplete
(
ImageConsumer
.
S
TATICIMAG
EDONE
);
}
catch
(
NullPointerException
e
)
{
if
(
theConsumer
!=
null
)
{
theConsumer
.
imageComplete
(
ImageConsumer
.
IMAGEERROR
);
...
...
jdk/src/share/classes/sun/net/ResourceManager.java
浏览文件 @
d6afa61b
...
...
@@ -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
;
...
...
jdk/src/share/classes/sun/nio/ch/Util.java
浏览文件 @
d6afa61b
...
...
@@ -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
|
...
...
jdk/src/share/classes/sun/nio/cs/CESU_8.java
0 → 100644
浏览文件 @
d6afa61b
此差异已折叠。
点击以展开。
jdk/src/share/classes/sun/nio/cs/UTF_8.java
浏览文件 @
d6afa61b
...
...
@@ -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
)
{
...
...
jdk/src/share/classes/sun/nio/cs/standard-charsets
浏览文件 @
d6afa61b
...
...
@@ -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
...
...
jdk/src/share/classes/sun/print/PSPrinterJob.java
浏览文件 @
d6afa61b
...
...
@@ -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
;
}
...
...
jdk/src/share/classes/sun/rmi/registry/RegistryImpl.java
浏览文件 @
d6afa61b
...
...
@@ -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
});
}
}
jdk/src/share/classes/sun/rmi/server/LoaderHandler.java
浏览文件 @
d6afa61b
...
...
@@ -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
];
...
...
jdk/src/share/classes/sun/rmi/server/UnicastServerRef.java
浏览文件 @
d6afa61b
...
...
@@ -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"
,
...
...
jdk/src/share/classes/sun/security/ssl/AppOutputStream.java
浏览文件 @
d6afa61b
/*
* 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
)
{
...
...
jdk/src/share/classes/sun/security/ssl/CipherBox.java
浏览文件 @
d6afa61b
...
...
@@ -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
;
}
}
jdk/src/share/classes/sun/security/ssl/CipherSuite.java
浏览文件 @
d6afa61b
...
...
@@ -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
;
...
...
jdk/src/share/classes/sun/security/ssl/EngineOutputRecord.java
浏览文件 @
d6afa61b
/*
* 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.
*/
...
...
jdk/src/share/classes/sun/security/ssl/MAC.java
浏览文件 @
d6afa61b
/*
* 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
...
...
jdk/src/share/classes/sun/security/ssl/Record.java
浏览文件 @
d6afa61b
/*
* 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.
*
...
...
jdk/src/share/classes/sun/security/ssl/SSLEngineImpl.java
浏览文件 @
d6afa61b
...
...
@@ -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.
*/
...
...
jdk/src/share/classes/sun/security/ssl/SSLSocketImpl.java
浏览文件 @
d6afa61b
...
...
@@ -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
;
}
/*
...
...
jdk/src/share/classes/sun/swing/SwingUtilities2.java
浏览文件 @
d6afa61b
...
...
@@ -524,55 +524,66 @@ public class SwingUtilities2 {
}
// If we get here we're not printing
AATextInfo
info
=
drawTextAntialiased
(
c
);
if
(
info
!=
null
&&
(
g
instanceof
Graphics2D
))
{
if
(
g
instanceof
Graphics2D
)
{
AATextInfo
info
=
drawTextAntialiased
(
c
);
Graphics2D
g2
=
(
Graphics2D
)
g
;
Object
oldContrast
=
null
;
Object
oldAAValue
=
g2
.
getRenderingHint
(
KEY_TEXT_ANTIALIASING
);
if
(
info
.
aaHint
!=
oldAAValue
)
{
g2
.
setRenderingHint
(
KEY_TEXT_ANTIALIASING
,
info
.
aaHint
);
}
else
{
oldAAValue
=
null
;
}
if
(
info
.
lcdContrastHint
!=
null
)
{
oldContrast
=
g2
.
getRenderingHint
(
KEY_TEXT_LCD_CONTRAST
);
if
(
info
.
lcdContrastHint
.
equals
(
oldContrast
))
{
oldContrast
=
null
;
}
else
{
g2
.
setRenderingHint
(
KEY_TEXT_LCD_CONTRAST
,
info
.
lcdContrastHint
);
}
}
boolean
needsTextLayout
=
((
c
!=
null
)
&&
(
c
.
getClientProperty
(
TextAttribute
.
NUMERIC_SHAPING
)
!=
null
));
if
(
needsTextLayout
)
{
synchronized
(
charsBufferLock
)
{
int
length
=
syncCharsBuffer
(
text
);
needsTextLayout
=
isComplexLayout
(
charsBuffer
,
0
,
length
);
}
}
if
(
needsTextLayout
)
{
TextLayout
layout
=
createTextLayout
(
c
,
text
,
g2
.
getFont
(),
if
(
info
!=
null
)
{
Object
oldContrast
=
null
;
Object
oldAAValue
=
g2
.
getRenderingHint
(
KEY_TEXT_ANTIALIASING
);
if
(
info
.
aaHint
!=
oldAAValue
)
{
g2
.
setRenderingHint
(
KEY_TEXT_ANTIALIASING
,
info
.
aaHint
);
}
else
{
oldAAValue
=
null
;
}
if
(
info
.
lcdContrastHint
!=
null
)
{
oldContrast
=
g2
.
getRenderingHint
(
KEY_TEXT_LCD_CONTRAST
);
if
(
info
.
lcdContrastHint
.
equals
(
oldContrast
))
{
oldContrast
=
null
;
}
else
{
g2
.
setRenderingHint
(
KEY_TEXT_LCD_CONTRAST
,
info
.
lcdContrastHint
);
}
}
if
(
needsTextLayout
)
{
TextLayout
layout
=
createTextLayout
(
c
,
text
,
g2
.
getFont
(),
g2
.
getFontRenderContext
());
layout
.
draw
(
g2
,
x
,
y
);
}
else
{
g
.
drawString
(
text
,
x
,
y
);
}
layout
.
draw
(
g2
,
x
,
y
);
}
else
{
g
.
drawString
(
text
,
x
,
y
);
}
if
(
oldAAValue
!=
null
)
{
g2
.
setRenderingHint
(
KEY_TEXT_ANTIALIASING
,
oldAAValue
);
if
(
oldAAValue
!=
null
)
{
g2
.
setRenderingHint
(
KEY_TEXT_ANTIALIASING
,
oldAAValue
);
}
if
(
oldContrast
!=
null
)
{
g2
.
setRenderingHint
(
KEY_TEXT_LCD_CONTRAST
,
oldContrast
);
}
return
;
}
if
(
oldContrast
!=
null
)
{
g2
.
setRenderingHint
(
KEY_TEXT_LCD_CONTRAST
,
oldContrast
);
if
(
needsTextLayout
){
TextLayout
layout
=
createTextLayout
(
c
,
text
,
g2
.
getFont
(),
g2
.
getFontRenderContext
());
layout
.
draw
(
g2
,
x
,
y
);
return
;
}
}
else
{
g
.
drawString
(
text
,
x
,
y
);
}
}
g
.
drawString
(
text
,
x
,
y
);
}
/**
* Draws the string at the specified location underlining the specified
...
...
jdk/src/share/classes/sun/util/xml/XMLUtils.java
浏览文件 @
d6afa61b
/*
* 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
(
...
...
jdk/src/share/demo/jfc/TransparentRuler/README.txt
浏览文件 @
d6afa61b
To run the Ruler demo:
java -jar Ruler.jar
java -jar
Transparent
Ruler.jar
These instructions assume that this installation's version of the java
command is in your path. If it isn't, then you should either
specify the complete path to the java command or update your
PATH environment variable as described in the installation
instructions for the Java(TM) SE Development Kit.
KNOWN ISSUES:
Context menu is clipped with the window shape. The issues are:
CR 7027486 JPopupMenu doesn't take window shape into account
jdk/src/share/javavm/export/jvm.h
浏览文件 @
d6afa61b
...
...
@@ -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
;
...
...
jdk/src/share/native/com/sun/java/util/jar/pack/unpack.cpp
浏览文件 @
d6afa61b
...
...
@@ -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
...
...
jdk/src/share/native/com/sun/java/util/jar/pack/utils.cpp
浏览文件 @
d6afa61b
/*
* 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
{
...
...
jdk/src/share/native/com/sun/java/util/jar/pack/utils.h
浏览文件 @
d6afa61b
/*
* 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
)
{
...
...
jdk/src/share/native/common/jdk_util.c
浏览文件 @
d6afa61b
...
...
@@ -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
;
}
jdk/src/share/native/sun/java2d/loops/TransformHelper.c
浏览文件 @
d6afa61b
/*
* 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
...
...
jdk/src/solaris/classes/sun/awt/X11/XComponentPeer.java
浏览文件 @
d6afa61b
...
...
@@ -466,12 +466,16 @@ public class XComponentPeer extends XWindow implements ComponentPeer, DropTarget
if
(
true
)
{
switch
(
e
.
getID
())
{
case
PaintEvent
.
UPDATE
:
log
.
finer
(
"XCP coalescePaintEvent : UPDATE : add : x = "
+
if
(
log
.
isLoggable
(
PlatformLogger
.
FINER
))
{
log
.
finer
(
"XCP coalescePaintEvent : UPDATE : add : x = "
+
r
.
x
+
", y = "
+
r
.
y
+
", width = "
+
r
.
width
+
",height = "
+
r
.
height
);
}
return
;
case
PaintEvent
.
PAINT
:
log
.
finer
(
"XCP coalescePaintEvent : PAINT : add : x = "
+
if
(
log
.
isLoggable
(
PlatformLogger
.
FINER
))
{
log
.
finer
(
"XCP coalescePaintEvent : PAINT : add : x = "
+
r
.
x
+
", y = "
+
r
.
y
+
", width = "
+
r
.
width
+
",height = "
+
r
.
height
);
}
return
;
}
}
...
...
@@ -1248,7 +1252,9 @@ public class XComponentPeer extends XWindow implements ComponentPeer, DropTarget
* ButtonPress, ButtonRelease, KeyPress, KeyRelease, EnterNotify, LeaveNotify, MotionNotify
*/
protected
boolean
isEventDisabled
(
XEvent
e
)
{
enableLog
.
finest
(
"Component is {1}, checking for disabled event {0}"
,
e
,
(
isEnabled
()?
"enabled"
:
"disable"
));
if
(
enableLog
.
isLoggable
(
PlatformLogger
.
FINEST
))
{
enableLog
.
finest
(
"Component is {1}, checking for disabled event {0}"
,
e
,
(
isEnabled
()?
"enabled"
:
"disable"
));
}
if
(!
isEnabled
())
{
switch
(
e
.
get_type
())
{
case
XConstants
.
ButtonPress
:
...
...
@@ -1258,7 +1264,9 @@ public class XComponentPeer extends XWindow implements ComponentPeer, DropTarget
case
XConstants
.
EnterNotify
:
case
XConstants
.
LeaveNotify
:
case
XConstants
.
MotionNotify
:
enableLog
.
finer
(
"Event {0} is disable"
,
e
);
if
(
enableLog
.
isLoggable
(
PlatformLogger
.
FINER
))
{
enableLog
.
finer
(
"Event {0} is disable"
,
e
);
}
return
true
;
}
}
...
...
jdk/src/solaris/classes/sun/awt/X11/generator/WrapperGenerator.java
浏览文件 @
d6afa61b
...
...
@@ -678,7 +678,7 @@ public class WrapperGenerator {
public
void
writeToString
(
StructType
stp
,
PrintWriter
pw
)
{
int
type
;
pw
.
println
(
"\n\n\tString getName() {\n\t\treturn \""
+
stp
.
getName
()+
"\"; \n\t}"
);
pw
.
println
(
"\n\n\tString getFieldsAsString() {\n\t\tString
ret=\"\"
;\n"
);
pw
.
println
(
"\n\n\tString getFieldsAsString() {\n\t\tString
Builder ret = new StringBuilder("
+
stp
.
getNumFields
()
*
40
+
")
;\n"
);
for
(
Enumeration
e
=
stp
.
getMembers
()
;
e
.
hasMoreElements
()
;)
{
AtomicType
tp
=
(
AtomicType
)
e
.
nextElement
();
...
...
@@ -688,24 +688,24 @@ public class WrapperGenerator {
if
((
name
!=
null
)
&&
(
name
.
length
()
>
0
))
{
if
(
type
==
AtomicType
.
TYPE_ATOM
)
{
pw
.
println
(
"\t\tret
+= \"\"+\""
+
name
+
" = \" + XAtom.get(get_"
+
name
+
"()) +\", \"
;"
);
pw
.
println
(
"\t\tret
.append(\""
+
name
+
" = \" ).append( XAtom.get(get_"
+
name
+
"()) ).append(\", \")
;"
);
}
else
if
(
name
.
equals
(
"type"
))
{
pw
.
println
(
"\t\tret
+= \"\"+\"type = \" + XlibWrapper.eventToString[get_type()] +\", \"
;"
);
pw
.
println
(
"\t\tret
.append(\"type = \").append( XlibWrapper.eventToString[get_type()] ).append(\", \")
;"
);
}
else
if
(
name
.
equals
(
"window"
)){
pw
.
println
(
"\t\tret
+= \"\"+\"window = \" + getWindow(get_window()) + \", \"
;"
);
pw
.
println
(
"\t\tret
.append(\"window = \" ).append( getWindow(get_window()) ).append(\", \")
;"
);
}
else
if
(
type
==
AtomicType
.
TYPE_ARRAY
)
{
pw
.
print
(
"\t\tret
+= \"{\"
"
);
pw
.
print
(
"\t\tret
.append(\"{\")
"
);
for
(
int
i
=
0
;
i
<
tp
.
getArrayLength
();
i
++)
{
pw
.
print
(
"
+ get_"
+
name
+
"("
+
i
+
") + \" \"
"
);
pw
.
print
(
"
\n\t\t.append( get_"
+
name
+
"("
+
i
+
") ).append(\" \")
"
);
}
pw
.
println
(
"
+ \"}\"
;"
);
pw
.
println
(
"
.append( \"}\")
;"
);
}
else
{
pw
.
println
(
"\t\tret
+= \"\"+\""
+
name
+
" = \" + get_"
+
name
+
"() +\", \"
;"
);
pw
.
println
(
"\t\tret
.append(\""
+
name
+
" = \").append( get_"
+
name
+
"() ).append(\", \")
;"
);
}
}
}
pw
.
println
(
"\t\treturn ret;\n\t}\n\n"
);
pw
.
println
(
"\t\treturn ret
.toString()
;\n\t}\n\n"
);
}
public
void
writeStubs
(
StructType
stp
,
PrintWriter
pw
)
{
...
...
jdk/src/solaris/classes/sun/print/UnixPrintJob.java
浏览文件 @
d6afa61b
...
...
@@ -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
;
...
...
jdk/src/solaris/native/sun/awt/splashscreen/splashscreen_config.h
浏览文件 @
d6afa61b
...
...
@@ -32,7 +32,7 @@
#include <X11/Xutil.h>
#include <X11/extensions/shape.h>
#include <sys/types.h>
#include <
sys/
unistd.h>
#include <unistd.h>
#include <pthread.h>
#include <signal.h>
#include <inttypes.h>
...
...
jdk/src/windows/classes/java/lang/ProcessImpl.java
浏览文件 @
d6afa61b
...
...
@@ -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
(
...
...
jdk/src/windows/classes/sun/nio/fs/WindowsDirectoryStream.java
浏览文件 @
d6afa61b
...
...
@@ -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)
...
...
jdk/src/windows/classes/sun/nio/fs/WindowsPathParser.java
浏览文件 @
d6afa61b
...
...
@@ -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
;
}
...
...
jdk/src/windows/native/sun/windows/awt_Window.cpp
浏览文件 @
d6afa61b
...
...
@@ -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
);
...
...
jdk/test/ProblemList.txt
浏览文件 @
d6afa61b
...
...
@@ -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
...
...
jdk/test/java/lang/ref/ReferenceEnqueue.java
0 → 100644
浏览文件 @
d6afa61b
/*
* 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"
);
}
}
}
}
jdk/test/java/lang/ref/ReferenceEnqueuePending.java
0 → 100644
浏览文件 @
d6afa61b
/* 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
jdk/test/java/nio/charset/coders/Errors.java
浏览文件 @
d6afa61b
...
...
@@ -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"
));
...
...
jdk/test/java/util/Collections/EmptySortedSet.java
0 → 100644
浏览文件 @
d6afa61b
/*
* 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."
);
}
}
}
jdk/test/javax/swing/JEditorPane/4492274/bug4492274.java
0 → 100644
浏览文件 @
d6afa61b
/*
* Copyright (c) 2007, 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 4492274
* @summary Tests if JEditorPane.getPage() correctly returns anchor reference.
* @author Denis Sharypov
*/
import
sun.awt.SunToolkit
;
import
javax.swing.*
;
import
javax.swing.text.html.HTMLEditorKit
;
import
java.awt.*
;
import
java.io.File
;
import
java.net.URL
;
public
class
bug4492274
{
private
static
URL
page
;
private
static
JEditorPane
jep
;
public
static
void
main
(
String
args
[])
throws
Exception
{
SunToolkit
toolkit
=
(
SunToolkit
)
Toolkit
.
getDefaultToolkit
();
SwingUtilities
.
invokeAndWait
(
new
Runnable
()
{
@Override
public
void
run
()
{
createAndShowGUI
();
}
});
toolkit
.
realSync
();
SwingUtilities
.
invokeAndWait
(
new
Runnable
()
{
@Override
public
void
run
()
{
try
{
page
=
new
URL
(
page
,
"#linkname"
);
jep
.
setPage
(
page
);
}
catch
(
Exception
e
)
{
throw
new
RuntimeException
(
e
);
}
}
});
toolkit
.
realSync
();
if
(
getPageAnchor
()
==
null
)
{
throw
new
RuntimeException
(
"JEditorPane.getPage() returns null anchor reference"
);
}
}
private
static
String
getPageAnchor
()
throws
Exception
{
final
String
[]
result
=
new
String
[
1
];
SwingUtilities
.
invokeAndWait
(
new
Runnable
()
{
@Override
public
void
run
()
{
result
[
0
]
=
jep
.
getPage
().
getRef
();
}
});
return
result
[
0
];
}
private
static
void
createAndShowGUI
()
{
try
{
File
file
=
new
File
(
System
.
getProperty
(
"test.src"
,
"."
),
"test.html"
);
page
=
file
.
toURI
().
toURL
();
JFrame
f
=
new
JFrame
();
jep
=
new
JEditorPane
();
jep
.
setEditorKit
(
new
HTMLEditorKit
());
jep
.
setEditable
(
false
);
jep
.
setPage
(
page
);
JScrollPane
sp
=
new
JScrollPane
(
jep
);
f
.
getContentPane
().
add
(
sp
);
f
.
setSize
(
500
,
500
);
f
.
setVisible
(
true
);
}
catch
(
Exception
e
)
{
throw
new
RuntimeException
(
e
);
}
}
}
jdk/test/javax/swing/JEditorPane/4492274/test.html
0 → 100644
浏览文件 @
d6afa61b
<html>
<body>
<a
name=
"top"
>
top
</a>
<img
src=
a.jpg
width=
500
height=
1000
>
<a
name=
"linkname"
>
bottom
</a>
</body>
</html>
jdk/test/javax/swing/JSlider/6348946/bug6348946.java
0 → 100644
浏览文件 @
d6afa61b
/*
* Copyright (c) 2007, 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 6348946
* @summary Tests that JSlider's thumb moves in the right direction
* when it is used as a JTable cell editor.
* @author Mikhail Lapshin
*/
import
sun.awt.SunToolkit
;
import
java.awt.*
;
import
java.awt.event.InputEvent
;
import
javax.swing.*
;
import
javax.swing.event.*
;
import
javax.swing.table.*
;
public
class
bug6348946
{
private
static
JFrame
frame
;
private
static
JPanel
panel
;
private
static
volatile
boolean
passed
=
false
;
public
static
void
main
(
String
[]
args
)
throws
Exception
{
String
lf
=
"javax.swing.plaf.metal.MetalLookAndFeel"
;
UIManager
.
setLookAndFeel
(
lf
);
SunToolkit
toolkit
=
(
SunToolkit
)
Toolkit
.
getDefaultToolkit
();
try
{
SwingUtilities
.
invokeAndWait
(
new
Runnable
()
{
public
void
run
()
{
setupUI
();
}
});
toolkit
.
realSync
();
clickOnSlider
();
toolkit
.
realSync
();
checkResult
();
}
finally
{
stopEDT
();
}
}
private
static
void
setupUI
()
{
frame
=
new
JFrame
();
panel
=
new
JPanel
();
panel
.
setLayout
(
new
BorderLayout
());
panel
.
add
(
new
ParameterTable
(),
BorderLayout
.
CENTER
);
frame
.
getContentPane
().
add
(
panel
);
frame
.
pack
();
frame
.
setLocationRelativeTo
(
null
);
frame
.
setVisible
(
true
);
}
private
static
void
clickOnSlider
()
throws
Exception
{
Robot
robot
=
new
Robot
();
robot
.
setAutoDelay
(
10
);
Rectangle
rect
=
getPanelRectangle
();
double
clickX
=
rect
.
getX
()
+
rect
.
getWidth
()
/
4
;
double
clickY
=
rect
.
getY
()
+
rect
.
getHeight
()
/
2
;
robot
.
mouseMove
((
int
)
clickX
,
(
int
)
clickY
);
robot
.
mousePress
(
InputEvent
.
BUTTON1_MASK
);
robot
.
mouseRelease
(
InputEvent
.
BUTTON1_MASK
);
}
private
static
void
checkResult
(){
if
(
passed
)
{
System
.
out
.
println
(
"Test passed"
);
}
else
{
throw
new
RuntimeException
(
"The thumb moved "
+
"to the right instead of the left!"
);
}
}
private
static
void
stopEDT
()
{
SwingUtilities
.
invokeLater
(
new
Runnable
()
{
public
void
run
()
{
frame
.
dispose
();
}
});
}
private
static
class
ParameterTable
extends
JTable
{
public
ParameterTable
()
{
super
(
new
Object
[][]{{
5
}},
new
String
[]{
"Value"
});
getColumnModel
().
getColumn
(
0
).
setCellRenderer
(
new
Renderer
());
getColumnModel
().
getColumn
(
0
).
setCellEditor
(
new
Editor
());
}
}
private
static
class
Renderer
implements
TableCellRenderer
{
private
JSlider
slider
=
new
JSlider
(
0
,
10
);
public
Component
getTableCellRendererComponent
(
JTable
table
,
Object
value
,
boolean
isSelected
,
boolean
hasFocus
,
int
row
,
int
col
)
{
int
val
=
(
Integer
)
value
;
slider
.
setValue
(
val
);
return
slider
;
}
}
private
static
class
Editor
extends
AbstractCellEditor
implements
TableCellEditor
{
private
JSlider
slider
=
new
JSlider
(
0
,
10
);
public
Component
getTableCellEditorComponent
(
JTable
table
,
Object
value
,
boolean
isSelected
,
int
row
,
int
col
)
{
int
val
=
(
Integer
)
value
;
slider
.
setValue
(
val
);
return
slider
;
}
public
Editor
()
{
slider
.
addChangeListener
(
new
ChangeListener
()
{
public
void
stateChanged
(
ChangeEvent
e
)
{
if
(!
slider
.
getValueIsAdjusting
())
{
passed
=
slider
.
getValue
()
<=
5
;
}
}
});
}
public
Object
getCellEditorValue
()
{
return
slider
.
getValue
();
}
}
private
static
Rectangle
getPanelRectangle
()
throws
Exception
{
final
Rectangle
[]
result
=
new
Rectangle
[
1
];
SwingUtilities
.
invokeAndWait
(
new
Runnable
()
{
@Override
public
void
run
()
{
result
[
0
]
=
new
Rectangle
(
panel
.
getLocationOnScreen
(),
panel
.
getSize
());
}
});
return
result
[
0
];
}
}
jdk/test/javax/swing/JTextArea/7049024/bug7049024.java
0 → 100644
浏览文件 @
d6afa61b
/*
* 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.
*/
/*
* Portions Copyright (c) 2011 IBM Corporation
*/
/* @test
* @bug 7049024
* @summary DnD fails with JTextArea and JTextField
* @author Sean Chou
*/
import
sun.awt.SunToolkit
;
import
javax.swing.*
;
import
javax.swing.text.DefaultCaret
;
import
java.awt.*
;
import
java.awt.datatransfer.Clipboard
;
import
java.awt.datatransfer.DataFlavor
;
public
class
bug7049024
{
public
static
Clipboard
clipboard
=
null
;
public
static
JTextField
textField
=
null
;
// This button is used to move focus away from textField.
public
static
JButton
button
=
null
;
public
static
JFrame
frame
=
null
;
public
static
DefaultCaret
caret
=
null
;
public
static
void
main
(
String
[]
args
)
throws
Exception
{
SunToolkit
toolkit
=
(
SunToolkit
)
Toolkit
.
getDefaultToolkit
();
SwingUtilities
.
invokeAndWait
(
new
Runnable
()
{
@Override
public
void
run
()
{
frame
=
new
JFrame
(
"Test"
);
textField
=
new
JTextField
(
"test selection for textfield"
);
button
=
new
JButton
(
"To compete the focus"
);
frame
.
setLayout
(
new
FlowLayout
());
frame
.
getContentPane
().
add
(
textField
);
frame
.
getContentPane
().
add
(
button
);
frame
.
pack
();
frame
.
setDefaultCloseOperation
(
JFrame
.
EXIT_ON_CLOSE
);
frame
.
setVisible
(
true
);
}
});
toolkit
.
realSync
();
clipboard
=
textField
.
getToolkit
().
getSystemSelection
();
if
(
null
==
clipboard
)
{
return
;
}
SwingUtilities
.
invokeAndWait
(
new
Runnable
()
{
@Override
public
void
run
()
{
textField
.
requestFocusInWindow
();
}
});
toolkit
.
realSync
();
SwingUtilities
.
invokeAndWait
(
new
Runnable
()
{
@Override
public
void
run
()
{
caret
=
(
DefaultCaret
)
textField
.
getCaret
();
caret
.
setDot
(
2
);
caret
.
moveDot
(
4
);
}
});
toolkit
.
realSync
();
String
oldSelection
=
(
String
)
clipboard
.
getData
(
DataFlavor
.
stringFlavor
);
System
.
out
.
println
(
"oldSelection is "
+
oldSelection
);
SwingUtilities
.
invokeAndWait
(
new
Runnable
()
{
@Override
public
void
run
()
{
button
.
requestFocusInWindow
();
}
});
toolkit
.
realSync
();
// So JTextField loses the focus.
SwingUtilities
.
invokeAndWait
(
new
Runnable
()
{
@Override
public
void
run
()
{
caret
.
setDot
(
4
);
caret
.
moveDot
(
6
);
}
});
toolkit
.
realSync
();
String
newSelection
=
(
String
)
clipboard
.
getData
(
DataFlavor
.
stringFlavor
);
System
.
out
.
println
(
"newSelection is "
+
newSelection
);
boolean
passed
=
newSelection
.
equals
(
oldSelection
);
SwingUtilities
.
invokeAndWait
(
new
Runnable
()
{
@Override
public
void
run
()
{
frame
.
dispose
();
}
});
if
(!
passed
)
{
throw
new
RuntimeException
(
"The test for bug 7049024 failed"
);
}
}
}
jdk/test/javax/swing/ToolTipManager/Test6256140.java
0 → 100644
浏览文件 @
d6afa61b
/*
* Copyright (c) 2007, 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 6256140
* @summary Esc key doesn't restore old value in JFormattedtextField when ToolTip is set
* @author Alexander Potochkin
* @run main Test6256140
*/
import
sun.awt.SunToolkit
;
import
javax.swing.*
;
import
java.awt.*
;
import
java.awt.event.KeyEvent
;
public
class
Test6256140
{
private
static
volatile
JFormattedTextField
ft
;
private
final
static
String
initialText
=
"value"
;
private
final
static
JLabel
toolTipLabel
=
new
JLabel
(
"tip"
);
public
static
void
main
(
String
[]
args
)
throws
Exception
{
Robot
robot
=
new
Robot
();
robot
.
setAutoDelay
(
10
);
SunToolkit
toolkit
=
(
SunToolkit
)
Toolkit
.
getDefaultToolkit
();
SwingUtilities
.
invokeAndWait
(
new
Runnable
()
{
public
void
run
()
{
createAndShowGUI
();
}
});
toolkit
.
realSync
();
Point
point
=
ft
.
getLocationOnScreen
();
robot
.
mouseMove
(
point
.
x
,
point
.
y
);
robot
.
mouseMove
(
point
.
x
+
3
,
point
.
y
+
3
);
robot
.
keyPress
(
KeyEvent
.
VK_A
);
robot
.
keyRelease
(
KeyEvent
.
VK_A
);
toolkit
.
realSync
();
if
(!
isTooltipShowning
())
{
throw
new
RuntimeException
(
"Tooltip is not shown"
);
}
robot
.
keyPress
(
KeyEvent
.
VK_ESCAPE
);
robot
.
keyRelease
(
KeyEvent
.
VK_ESCAPE
);
toolkit
.
realSync
();
if
(
isTooltipShowning
())
{
throw
new
RuntimeException
(
"Tooltip must be hidden now"
);
}
if
(
isTextEqual
())
{
throw
new
RuntimeException
(
"FormattedTextField must *not* cancel the updated value this time"
);
}
robot
.
keyPress
(
KeyEvent
.
VK_ESCAPE
);
robot
.
keyRelease
(
KeyEvent
.
VK_ESCAPE
);
toolkit
.
realSync
();
if
(!
isTextEqual
())
{
throw
new
RuntimeException
(
"FormattedTextField must cancel the updated value"
);
}
}
private
static
boolean
isTooltipShowning
()
throws
Exception
{
final
boolean
[]
result
=
new
boolean
[
1
];
SwingUtilities
.
invokeAndWait
(
new
Runnable
()
{
@Override
public
void
run
()
{
result
[
0
]
=
toolTipLabel
.
isShowing
();
}
});
return
result
[
0
];
}
private
static
boolean
isTextEqual
()
throws
Exception
{
final
boolean
[]
result
=
new
boolean
[
1
];
SwingUtilities
.
invokeAndWait
(
new
Runnable
()
{
@Override
public
void
run
()
{
result
[
0
]
=
initialText
.
equals
(
ft
.
getText
());
}
});
return
result
[
0
];
}
private
static
void
createAndShowGUI
()
{
ToolTipManager
.
sharedInstance
().
setDismissDelay
(
Integer
.
MAX_VALUE
);
ToolTipManager
.
sharedInstance
().
setInitialDelay
(
0
);
final
JFrame
frame
=
new
JFrame
();
frame
.
setDefaultCloseOperation
(
JFrame
.
EXIT_ON_CLOSE
);
frame
.
setLayout
(
new
FlowLayout
());
ft
=
new
JFormattedTextField
()
{
public
JToolTip
createToolTip
()
{
JToolTip
toolTip
=
super
.
createToolTip
();
toolTip
.
setLayout
(
new
BorderLayout
());
toolTip
.
add
(
toolTipLabel
);
return
toolTip
;
}
};
ft
.
setToolTipText
(
" "
);
ft
.
setValue
(
initialText
);
frame
.
add
(
ft
);
frame
.
pack
();
frame
.
setLocationRelativeTo
(
null
);
frame
.
setVisible
(
true
);
ft
.
requestFocus
();
}
}
jdk/test/javax/xml/crypto/dsig/GenerationTests.java
浏览文件 @
d6afa61b
/*
* 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
...
...
jdk/test/sun/nio/cs/TestStringCoding.java
浏览文件 @
d6afa61b
...
...
@@ -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
,
...
...
jdk/test/sun/nio/cs/TestStringCodingUTF8.java
浏览文件 @
d6afa61b
...
...
@@ -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
;
...
...
jdk/test/sun/nio/cs/TestUTF8.java
浏览文件 @
d6afa61b
...
...
@@ -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
);
}
}
jdk/test/sun/security/pkcs11/Provider/Absolute.java
浏览文件 @
d6afa61b
...
...
@@ -27,7 +27,6 @@
*/
import
java.security.*
;
import
java.lang.reflect.*
;
import
sun.security.pkcs11.*
;
public
class
Absolute
{
...
...
jdk/test/sun/security/pkcs11/fips/CipherTest.java
浏览文件 @
d6afa61b
...
...
@@ -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
{
...
...
jdk/test/sun/security/pkcs11/fips/ClientJSSEServerJSSE.java
浏览文件 @
d6afa61b
...
...
@@ -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
*/
...
...
jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/GenSSLConfigs/main.java
浏览文件 @
d6afa61b
/*
* @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
*/
...
...
jdk/test/sun/security/ssl/javax/net/ssl/NewAPIs/SSLEngine/CheckStatus.java
浏览文件 @
d6afa61b
/*
* 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
*/
...
...
jdk/test/sun/security/ssl/javax/net/ssl/NewAPIs/SSLEngine/LargeBufs.java
浏览文件 @
d6afa61b
/*
* 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
*/
...
...
jdk/test/sun/security/ssl/javax/net/ssl/NewAPIs/SSLEngine/LargePacket.java
浏览文件 @
d6afa61b
/*
* 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
*/
...
...
jdk/test/sun/security/ssl/templates/SSLSocketSSLEngineTemplate.java
0 → 100644
浏览文件 @
d6afa61b
/*
* 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
);
}
}
}
jdk/test/sun/tools/jinfo/Basic.sh
浏览文件 @
d6afa61b
...
...
@@ -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
...
...
jdk/test/sun/tools/jstatd/jstatdExternalRegistry.sh
浏览文件 @
d6afa61b
此差异已折叠。
点击以展开。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录