Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_jdk
提交
abcef7b4
D
dragonwell8_jdk
项目概览
openanolis
/
dragonwell8_jdk
通知
4
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
dragonwell8_jdk
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
abcef7b4
编写于
2月 21, 2011
作者:
L
lana
浏览文件
操作
浏览文件
下载
差异文件
Merge
上级
28fb7917
04621cb7
变更
51
隐藏空白更改
内联
并排
Showing
51 changed file
with
1561 addition
and
442 deletion
+1561
-442
make/java/security/Makefile
make/java/security/Makefile
+10
-3
src/share/classes/java/io/Console.java
src/share/classes/java/io/Console.java
+16
-4
src/share/classes/java/lang/System.java
src/share/classes/java/lang/System.java
+18
-14
src/share/classes/java/lang/Thread.java
src/share/classes/java/lang/Thread.java
+9
-35
src/share/classes/java/util/Hashtable.java
src/share/classes/java/util/Hashtable.java
+28
-16
src/share/classes/java/util/Vector.java
src/share/classes/java/util/Vector.java
+14
-6
src/share/classes/java/util/jar/JarFile.java
src/share/classes/java/util/jar/JarFile.java
+192
-3
src/share/classes/java/util/jar/JarVerifier.java
src/share/classes/java/util/jar/JarVerifier.java
+432
-3
src/share/classes/java/util/jar/JavaUtilJarAccessImpl.java
src/share/classes/java/util/jar/JavaUtilJarAccessImpl.java
+29
-1
src/share/classes/javax/script/ScriptEngineFactory.java
src/share/classes/javax/script/ScriptEngineFactory.java
+11
-11
src/share/classes/javax/sql/rowset/serial/SerialClob.java
src/share/classes/javax/sql/rowset/serial/SerialClob.java
+36
-27
src/share/classes/javax/sql/rowset/spi/SyncFactory.java
src/share/classes/javax/sql/rowset/spi/SyncFactory.java
+14
-4
src/share/classes/sun/misc/JarIndex.java
src/share/classes/sun/misc/JarIndex.java
+13
-0
src/share/classes/sun/misc/JavaUtilJarAccess.java
src/share/classes/sun/misc/JavaUtilJarAccess.java
+12
-1
src/share/classes/sun/net/www/protocol/jar/URLJarFile.java
src/share/classes/sun/net/www/protocol/jar/URLJarFile.java
+15
-27
src/share/classes/sun/nio/ch/FileChannelImpl.java
src/share/classes/sun/nio/ch/FileChannelImpl.java
+4
-1
src/share/classes/sun/security/jgss/wrapper/SunNativeProvider.java
.../classes/sun/security/jgss/wrapper/SunNativeProvider.java
+1
-0
src/share/classes/sun/security/provider/certpath/PKIXCertPathValidator.java
...sun/security/provider/certpath/PKIXCertPathValidator.java
+0
-7
src/share/classes/sun/security/util/SignatureFileVerifier.java
...hare/classes/sun/security/util/SignatureFileVerifier.java
+11
-6
src/share/classes/sun/tools/jps/Jps.java
src/share/classes/sun/tools/jps/Jps.java
+46
-30
src/share/demo/nio/zipfs/src/com/sun/nio/zipfs/ZipFileSystemProvider.java
...io/zipfs/src/com/sun/nio/zipfs/ZipFileSystemProvider.java
+43
-21
src/solaris/classes/sun/nio/fs/UnixChannelFactory.java
src/solaris/classes/sun/nio/fs/UnixChannelFactory.java
+1
-1
test/ProblemList.txt
test/ProblemList.txt
+11
-14
test/demo/zipfs/ZipFSTester.java
test/demo/zipfs/ZipFSTester.java
+12
-0
test/demo/zipfs/basic.sh
test/demo/zipfs/basic.sh
+1
-1
test/java/lang/Thread/StopBeforeStart.java
test/java/lang/Thread/StopBeforeStart.java
+0
-132
test/java/nio/channels/FileChannel/Position.java
test/java/nio/channels/FileChannel/Position.java
+42
-33
test/java/nio/file/Files/walkFileTree/PrintFileTree.java
test/java/nio/file/Files/walkFileTree/PrintFileTree.java
+7
-5
test/java/util/Hashtable/SerializationDeadlock.java
test/java/util/Hashtable/SerializationDeadlock.java
+156
-0
test/java/util/Hashtable/SimpleSerialization.java
test/java/util/Hashtable/SimpleSerialization.java
+86
-0
test/java/util/Vector/SerializationDeadlock.java
test/java/util/Vector/SerializationDeadlock.java
+157
-0
test/java/util/Vector/SimpleSerialization.java
test/java/util/Vector/SimpleSerialization.java
+87
-0
test/java/util/concurrent/BlockingQueue/CancelledProducerConsumerLoops.java
...current/BlockingQueue/CancelledProducerConsumerLoops.java
+2
-2
test/sun/security/krb5/auto/BadKdc1.java
test/sun/security/krb5/auto/BadKdc1.java
+2
-2
test/sun/security/krb5/auto/BadKdc2.java
test/sun/security/krb5/auto/BadKdc2.java
+2
-2
test/sun/security/krb5/auto/BadKdc3.java
test/sun/security/krb5/auto/BadKdc3.java
+2
-2
test/sun/security/krb5/auto/BadKdc4.java
test/sun/security/krb5/auto/BadKdc4.java
+2
-2
test/sun/security/krb5/auto/CleanState.java
test/sun/security/krb5/auto/CleanState.java
+2
-1
test/sun/security/krb5/auto/CrossRealm.java
test/sun/security/krb5/auto/CrossRealm.java
+2
-1
test/sun/security/krb5/auto/HttpNegotiateServer.java
test/sun/security/krb5/auto/HttpNegotiateServer.java
+2
-1
test/sun/security/krb5/auto/IgnoreChannelBinding.java
test/sun/security/krb5/auto/IgnoreChannelBinding.java
+2
-1
test/sun/security/krb5/auto/KerberosHashEqualsTest.java
test/sun/security/krb5/auto/KerberosHashEqualsTest.java
+2
-1
test/sun/security/krb5/auto/LifeTimeInSeconds.java
test/sun/security/krb5/auto/LifeTimeInSeconds.java
+2
-1
test/sun/security/krb5/auto/LoginModuleOptions.java
test/sun/security/krb5/auto/LoginModuleOptions.java
+2
-1
test/sun/security/krb5/auto/MaxRetries.java
test/sun/security/krb5/auto/MaxRetries.java
+2
-2
test/sun/security/krb5/auto/MoreKvno.java
test/sun/security/krb5/auto/MoreKvno.java
+2
-1
test/sun/security/krb5/auto/NewSalt.java
test/sun/security/krb5/auto/NewSalt.java
+2
-2
test/sun/security/krb5/auto/NonMutualSpnego.java
test/sun/security/krb5/auto/NonMutualSpnego.java
+2
-1
test/sun/security/krb5/auto/SSL.java
test/sun/security/krb5/auto/SSL.java
+11
-11
test/sun/security/krb5/auto/SpnegoReqFlags.java
test/sun/security/krb5/auto/SpnegoReqFlags.java
+2
-1
test/sun/security/krb5/auto/Test5653.java
test/sun/security/krb5/auto/Test5653.java
+2
-1
未找到文件。
make/java/security/Makefile
浏览文件 @
abcef7b4
#
# 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
...
...
@@ -65,6 +65,8 @@ CACERTS_BUILD = $(LIBDIR)/security/cacerts
ifndef
OPENJDK
BLACKLIST_SRC
=
$(CLOSED_SHARE_SRC)
/lib/security/blacklist
BLACKLIST_BUILD
=
$(LIBDIR)
/security/blacklist
TRUSTEDLIBS_SRC
=
$(CLOSED_SHARE_SRC)
/lib/security/trusted.libraries
TRUSTEDLIBS_BUILD
=
$(LIBDIR)
/security/trusted.libraries
endif
FILES_class
=
$
(
FILES_java:%.java
=
$(CLASSBINDIR)
/%.class
)
...
...
@@ -77,7 +79,7 @@ include $(BUILDDIR)/common/Rules.gmk
ifdef
OPENJDK
build
:
properties policy cacerts
else
build
:
properties policy cacerts blacklist
build
:
properties policy cacerts blacklist
trustedlibs
endif
install
:
all
...
...
@@ -90,6 +92,8 @@ cacerts: classes $(CACERTS_BUILD)
blacklist
:
classes $(BLACKLIST_BUILD)
trustedlibs
:
classes $(TRUSTEDLIBS_BUILD)
$(PROPS_BUILD)
:
$(PROPS_SRC)
$
(
install-file
)
...
...
@@ -102,9 +106,12 @@ $(CACERTS_BUILD): $(CACERTS_SRC)
$(BLACKLIST_BUILD)
:
$(BLACKLIST_SRC)
$
(
install-file
)
$(TRUSTEDLIBS_BUILD)
:
$(TRUSTEDLIBS_SRC)
$
(
install-file
)
clean clobber
::
.delete.classlist
$(RM)
-r
$(CLASSBINDIR)
/java/security
$(RM)
$(PROPS_BUILD)
$(POLICY_BUILD)
$(CACERTS_BUILD)
$(BLACKLIST_BUILD)
$(RM)
$(PROPS_BUILD)
$(POLICY_BUILD)
$(CACERTS_BUILD)
$(BLACKLIST_BUILD)
$(TRUSTEDLIBS_BUILD)
# Additional Rule for building sun.security.util
$(CLASSBINDIR)/%.class
:
$(SHARE_SRC)/sun/%.java
...
...
src/share/classes/java/io/Console.java
浏览文件 @
abcef7b4
...
...
@@ -308,17 +308,29 @@ public final class Console implements Flushable
char
[]
passwd
=
null
;
synchronized
(
writeLock
)
{
synchronized
(
readLock
)
{
if
(
fmt
.
length
()
!=
0
)
pw
.
format
(
fmt
,
args
);
try
{
echoOff
=
echo
(
false
);
passwd
=
readline
(
true
);
}
catch
(
IOException
x
)
{
throw
new
IOError
(
x
);
}
IOError
ioe
=
null
;
try
{
if
(
fmt
.
length
()
!=
0
)
pw
.
format
(
fmt
,
args
);
passwd
=
readline
(
true
);
}
catch
(
IOException
x
)
{
ioe
=
new
IOError
(
x
);
}
finally
{
try
{
echoOff
=
echo
(
true
);
}
catch
(
IOException
xx
)
{}
}
catch
(
IOException
x
)
{
if
(
ioe
==
null
)
ioe
=
new
IOError
(
x
);
else
ioe
.
addSuppressed
(
x
);
}
if
(
ioe
!=
null
)
throw
ioe
;
}
pw
.
println
();
}
...
...
src/share/classes/java/lang/System.java
浏览文件 @
abcef7b4
...
...
@@ -1102,6 +1102,18 @@ public final class System {
* Initialize the system class. Called after thread initialization.
*/
private
static
void
initializeSystemClass
()
{
// VM might invoke JNU_NewStringPlatform() to set those encoding
// sensitive properties (user.home, user.name, boot.class.path, etc.)
// during "props" initialization, in which it may need access, via
// System.getProperty(), to the related system encoding property that
// have been initialized (put into "props") at early stage of the
// initialization. So make sure the "props" is available at the
// very beginning of the initialization and all system properties to
// be put into it directly.
props
=
new
Properties
();
initProperties
(
props
);
// initialized by the VM
// There are certain system configurations that may be controlled by
// VM options such as the maximum amount of direct memory and
// Integer cache size used to support the object identity semantics
...
...
@@ -1112,7 +1124,12 @@ public final class System {
//
// See java.lang.Integer.IntegerCache and the
// sun.misc.VM.saveAndRemoveProperties method for example.
props
=
initSystemProperties
();
//
// Save a private copy of the system properties object that
// can only be accessed by the internal implementation. Remove
// certain system properties that are not intended for public access.
sun
.
misc
.
VM
.
saveAndRemoveProperties
(
props
);
lineSeparator
=
props
.
getProperty
(
"line.separator"
);
sun
.
misc
.
Version
.
init
();
...
...
@@ -1123,7 +1140,6 @@ public final class System {
setIn0
(
new
BufferedInputStream
(
fdIn
));
setOut0
(
new
PrintStream
(
new
BufferedOutputStream
(
fdOut
,
128
),
true
));
setErr0
(
new
PrintStream
(
new
BufferedOutputStream
(
fdErr
,
128
),
true
));
// Load the zip library now in order to keep java.util.zip.ZipFile
// from trying to use itself to load this library later.
loadLibrary
(
"zip"
);
...
...
@@ -1151,18 +1167,6 @@ public final class System {
setJavaLangAccess
();
}
private
static
Properties
initSystemProperties
()
{
Properties
props
=
new
Properties
();
initProperties
(
props
);
// initialized by the VM
// Save a private copy of the system properties object that
// can only be accessed by the internal implementation. Remove
// certain system properties that are not intended for public access.
sun
.
misc
.
VM
.
saveAndRemoveProperties
(
props
);
return
props
;
}
private
static
void
setJavaLangAccess
()
{
// Allow privileged classes outside of java.lang
sun
.
misc
.
SharedSecrets
.
setJavaLangAccess
(
new
sun
.
misc
.
JavaLangAccess
(){
...
...
src/share/classes/java/lang/Thread.java
浏览文件 @
abcef7b4
...
...
@@ -254,12 +254,6 @@ class Thread implements Runnable {
*/
public
final
static
int
MAX_PRIORITY
=
10
;
/* If stop was called before start */
private
boolean
stopBeforeStart
;
/* Remembered Throwable from stop before start */
private
Throwable
throwableFromStop
;
/**
* Returns a reference to the currently executing thread object.
*
...
...
@@ -706,10 +700,6 @@ class Thread implements Runnable {
it will be passed up the call stack */
}
}
if
(
stopBeforeStart
)
{
stop0
(
throwableFromStop
);
}
}
private
native
void
start0
();
...
...
@@ -820,12 +810,7 @@ class Thread implements Runnable {
*/
@Deprecated
public
final
void
stop
()
{
// If the thread is already dead, return.
// A zero status value corresponds to "NEW".
if
((
threadStatus
!=
0
)
&&
!
isAlive
())
{
return
;
}
stop1
(
new
ThreadDeath
());
stop
(
new
ThreadDeath
());
}
/**
...
...
@@ -879,36 +864,25 @@ class Thread implements Runnable {
*/
@Deprecated
public
final
synchronized
void
stop
(
Throwable
obj
)
{
stop1
(
obj
);
}
if
(
obj
==
null
)
throw
new
NullPointerException
();
/**
* Common impl for stop() and stop(Throwable).
*/
private
final
synchronized
void
stop1
(
Throwable
th
)
{
SecurityManager
security
=
System
.
getSecurityManager
();
if
(
security
!=
null
)
{
checkAccess
();
if
((
this
!=
Thread
.
currentThread
())
||
(!(
th
instanceof
ThreadDeath
)))
{
(!(
obj
instanceof
ThreadDeath
)))
{
security
.
checkPermission
(
SecurityConstants
.
STOP_THREAD_PERMISSION
);
}
}
// A zero status value corresponds to "NEW"
// A zero status value corresponds to "NEW", it can't change to
// not-NEW because we hold the lock.
if
(
threadStatus
!=
0
)
{
resume
();
// Wake up thread if it was suspended; no-op otherwise
stop0
(
th
);
}
else
{
// Must do the null arg check that the VM would do with stop0
if
(
th
==
null
)
{
throw
new
NullPointerException
();
}
// Remember this stop attempt for if/when start is used
stopBeforeStart
=
true
;
throwableFromStop
=
th
;
}
// The VM can handle all thread states
stop0
(
obj
);
}
/**
...
...
src/share/classes/java/util/Hashtable.java
浏览文件 @
abcef7b4
...
...
@@ -845,24 +845,36 @@ public class Hashtable<K,V>
* for each key-value mapping represented by the Hashtable
* The key-value mappings are emitted in no particular order.
*/
private
synchronized
void
writeObject
(
java
.
io
.
ObjectOutputStream
s
)
throws
IOException
{
// Write out the length, threshold, loadfactor
s
.
defaultWriteObject
();
// Write out length, count of elements and then the key/value objects
s
.
writeInt
(
table
.
length
);
s
.
writeInt
(
count
);
for
(
int
index
=
table
.
length
-
1
;
index
>=
0
;
index
--)
{
Entry
entry
=
table
[
index
];
while
(
entry
!=
null
)
{
s
.
writeObject
(
entry
.
key
);
s
.
writeObject
(
entry
.
value
);
entry
=
entry
.
next
;
private
void
writeObject
(
java
.
io
.
ObjectOutputStream
s
)
throws
IOException
{
Entry
<
Object
,
Object
>
entryStack
=
null
;
synchronized
(
this
)
{
// Write out the length, threshold, loadfactor
s
.
defaultWriteObject
();
// Write out length, count of elements
s
.
writeInt
(
table
.
length
);
s
.
writeInt
(
count
);
// Stack copies of the entries in the table
for
(
int
index
=
0
;
index
<
table
.
length
;
index
++)
{
Entry
entry
=
table
[
index
];
while
(
entry
!=
null
)
{
entryStack
=
new
Entry
<>(
0
,
entry
.
key
,
entry
.
value
,
entryStack
);
entry
=
entry
.
next
;
}
}
}
// Write out the key/value objects from the stacked entries
while
(
entryStack
!=
null
)
{
s
.
writeObject
(
entryStack
.
key
);
s
.
writeObject
(
entryStack
.
value
);
entryStack
=
entryStack
.
next
;
}
}
/**
...
...
src/share/classes/java/util/Vector.java
浏览文件 @
abcef7b4
...
...
@@ -1050,13 +1050,21 @@ public class Vector<E>
/**
* Save the state of the {@code Vector} instance to a stream (that
* is, serialize it). This method is present merely for synchronization.
* It just calls the default writeObject method.
* is, serialize it).
* This method performs synchronization to ensure the consistency
* of the serialized data.
*/
private
synchronized
void
writeObject
(
java
.
io
.
ObjectOutputStream
s
)
throws
java
.
io
.
IOException
{
s
.
defaultWriteObject
();
private
void
writeObject
(
java
.
io
.
ObjectOutputStream
s
)
throws
java
.
io
.
IOException
{
final
java
.
io
.
ObjectOutputStream
.
PutField
fields
=
s
.
putFields
();
final
Object
[]
data
;
synchronized
(
this
)
{
fields
.
put
(
"capacityIncrement"
,
capacityIncrement
);
fields
.
put
(
"elementCount"
,
elementCount
);
data
=
elementData
.
clone
();
}
fields
.
put
(
"elementData"
,
data
);
s
.
writeFields
();
}
/**
...
...
src/share/classes/java/util/jar/JarFile.java
浏览文件 @
abcef7b4
/*
* Copyright (c) 1997, 20
09
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1997, 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
...
...
@@ -27,11 +27,13 @@ package java.util.jar;
import
java.io.*
;
import
java.lang.ref.SoftReference
;
import
java.net.URL
;
import
java.util.*
;
import
java.util.zip.*
;
import
java.security.CodeSigner
;
import
java.security.cert.Certificate
;
import
java.security.AccessController
;
import
java.security.CodeSource
;
import
sun.security.action.GetPropertyAction
;
import
sun.security.util.ManifestEntryVerifier
;
import
sun.misc.SharedSecrets
;
...
...
@@ -262,7 +264,7 @@ class JarFile extends ZipFile {
throw
new
RuntimeException
(
e
);
}
if
(
certs
==
null
&&
jv
!=
null
)
{
certs
=
jv
.
getCerts
(
getName
()
);
certs
=
jv
.
getCerts
(
JarFile
.
this
,
this
);
}
return
certs
==
null
?
null
:
certs
.
clone
();
}
...
...
@@ -273,7 +275,7 @@ class JarFile extends ZipFile {
throw
new
RuntimeException
(
e
);
}
if
(
signers
==
null
&&
jv
!=
null
)
{
signers
=
jv
.
getCodeSigners
(
getName
()
);
signers
=
jv
.
getCodeSigners
(
JarFile
.
this
,
this
);
}
return
signers
==
null
?
null
:
signers
.
clone
();
}
...
...
@@ -544,4 +546,191 @@ class JarFile extends ZipFile {
}
return
false
;
}
private
synchronized
void
ensureInitialization
()
{
try
{
maybeInstantiateVerifier
();
}
catch
(
IOException
e
)
{
throw
new
RuntimeException
(
e
);
}
if
(
jv
!=
null
&&
!
jvInitialized
)
{
initializeVerifier
();
jvInitialized
=
true
;
}
}
JarEntry
newEntry
(
ZipEntry
ze
)
{
return
new
JarFileEntry
(
ze
);
}
Enumeration
<
String
>
entryNames
(
CodeSource
[]
cs
)
{
ensureInitialization
();
if
(
jv
!=
null
)
{
return
jv
.
entryNames
(
this
,
cs
);
}
/*
* JAR file has no signed content. Is there a non-signing
* code source?
*/
boolean
includeUnsigned
=
false
;
for
(
int
i
=
0
;
i
<
cs
.
length
;
i
++)
{
if
(
cs
[
i
].
getCodeSigners
()
==
null
)
{
includeUnsigned
=
true
;
break
;
}
}
if
(
includeUnsigned
)
{
return
unsignedEntryNames
();
}
else
{
return
new
Enumeration
<
String
>()
{
public
boolean
hasMoreElements
()
{
return
false
;
}
public
String
nextElement
()
{
throw
new
NoSuchElementException
();
}
};
}
}
/**
* Returns an enumeration of the zip file entries
* excluding internal JAR mechanism entries and including
* signed entries missing from the ZIP directory.
*/
Enumeration
<
JarEntry
>
entries2
()
{
ensureInitialization
();
if
(
jv
!=
null
)
{
return
jv
.
entries2
(
this
,
super
.
entries
());
}
// screen out entries which are never signed
final
Enumeration
enum_
=
super
.
entries
();
return
new
Enumeration
<
JarEntry
>()
{
ZipEntry
entry
;
public
boolean
hasMoreElements
()
{
if
(
entry
!=
null
)
{
return
true
;
}
while
(
enum_
.
hasMoreElements
())
{
ZipEntry
ze
=
(
ZipEntry
)
enum_
.
nextElement
();
if
(
JarVerifier
.
isSigningRelated
(
ze
.
getName
()))
{
continue
;
}
entry
=
ze
;
return
true
;
}
return
false
;
}
public
JarFileEntry
nextElement
()
{
if
(
hasMoreElements
())
{
ZipEntry
ze
=
entry
;
entry
=
null
;
return
new
JarFileEntry
(
ze
);
}
throw
new
NoSuchElementException
();
}
};
}
CodeSource
[]
getCodeSources
(
URL
url
)
{
ensureInitialization
();
if
(
jv
!=
null
)
{
return
jv
.
getCodeSources
(
this
,
url
);
}
/*
* JAR file has no signed content. Is there a non-signing
* code source?
*/
Enumeration
unsigned
=
unsignedEntryNames
();
if
(
unsigned
.
hasMoreElements
())
{
return
new
CodeSource
[]{
JarVerifier
.
getUnsignedCS
(
url
)};
}
else
{
return
null
;
}
}
private
Enumeration
<
String
>
unsignedEntryNames
()
{
final
Enumeration
entries
=
entries
();
return
new
Enumeration
<
String
>()
{
String
name
;
/*
* Grab entries from ZIP directory but screen out
* metadata.
*/
public
boolean
hasMoreElements
()
{
if
(
name
!=
null
)
{
return
true
;
}
while
(
entries
.
hasMoreElements
())
{
String
value
;
ZipEntry
e
=
(
ZipEntry
)
entries
.
nextElement
();
value
=
e
.
getName
();
if
(
e
.
isDirectory
()
||
JarVerifier
.
isSigningRelated
(
value
))
{
continue
;
}
name
=
value
;
return
true
;
}
return
false
;
}
public
String
nextElement
()
{
if
(
hasMoreElements
())
{
String
value
=
name
;
name
=
null
;
return
value
;
}
throw
new
NoSuchElementException
();
}
};
}
CodeSource
getCodeSource
(
URL
url
,
String
name
)
{
ensureInitialization
();
if
(
jv
!=
null
)
{
if
(
jv
.
eagerValidation
)
{
CodeSource
cs
=
null
;
JarEntry
je
=
getJarEntry
(
name
);
if
(
je
!=
null
)
{
cs
=
jv
.
getCodeSource
(
url
,
this
,
je
);
}
else
{
cs
=
jv
.
getCodeSource
(
url
,
name
);
}
return
cs
;
}
else
{
return
jv
.
getCodeSource
(
url
,
name
);
}
}
return
JarVerifier
.
getUnsignedCS
(
url
);
}
void
setEagerValidation
(
boolean
eager
)
{
try
{
maybeInstantiateVerifier
();
}
catch
(
IOException
e
)
{
throw
new
RuntimeException
(
e
);
}
if
(
jv
!=
null
)
{
jv
.
setEagerValidation
(
eager
);
}
}
List
getManifestDigests
()
{
ensureInitialization
();
if
(
jv
!=
null
)
{
return
jv
.
getManifestDigests
();
}
return
new
ArrayList
();
}
}
src/share/classes/java/util/jar/JarVerifier.java
浏览文件 @
abcef7b4
/*
* Copyright (c) 1997, 201
0
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1997, 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
...
...
@@ -26,9 +26,11 @@
package
java.util.jar
;
import
java.io.*
;
import
java.net.URL
;
import
java.util.*
;
import
java.security.*
;
import
java.security.cert.CertificateException
;
import
java.util.zip.ZipEntry
;
import
sun.security.util.ManifestDigester
;
import
sun.security.util.ManifestEntryVerifier
;
...
...
@@ -81,6 +83,15 @@ class JarVerifier {
/** the bytes for the manDig object */
byte
manifestRawBytes
[]
=
null
;
/** controls eager signature validation */
boolean
eagerValidation
;
/** makes code source singleton instances unique to us */
private
Object
csdomain
=
new
Object
();
/** collect -DIGEST-MANIFEST values for blacklist */
private
List
manifestDigests
;
public
JarVerifier
(
byte
rawBytes
[])
{
manifestRawBytes
=
rawBytes
;
sigFileSigners
=
new
Hashtable
();
...
...
@@ -88,6 +99,7 @@ class JarVerifier {
sigFileData
=
new
Hashtable
(
11
);
pendingBlocks
=
new
ArrayList
();
baos
=
new
ByteArrayOutputStream
();
manifestDigests
=
new
ArrayList
();
}
/**
...
...
@@ -247,7 +259,7 @@ class JarVerifier {
}
sfv
.
setSignatureFile
(
bytes
);
sfv
.
process
(
sigFileSigners
);
sfv
.
process
(
sigFileSigners
,
manifestDigests
);
}
}
return
;
...
...
@@ -290,7 +302,7 @@ class JarVerifier {
sfv
.
setSignatureFile
(
bytes
);
}
}
sfv
.
process
(
sigFileSigners
);
sfv
.
process
(
sigFileSigners
,
manifestDigests
);
}
catch
(
IOException
ioe
)
{
// e.g. sun.security.pkcs.ParsingException
...
...
@@ -312,12 +324,18 @@ class JarVerifier {
/**
* Return an array of java.security.cert.Certificate objects for
* the given file in the jar.
* @deprecated
*/
public
java
.
security
.
cert
.
Certificate
[]
getCerts
(
String
name
)
{
return
mapSignersToCertArray
(
getCodeSigners
(
name
));
}
public
java
.
security
.
cert
.
Certificate
[]
getCerts
(
JarFile
jar
,
JarEntry
entry
)
{
return
mapSignersToCertArray
(
getCodeSigners
(
jar
,
entry
));
}
/**
* return an array of CodeSigner objects for
* the given file in the jar. this array is not cloned.
...
...
@@ -328,6 +346,28 @@ class JarVerifier {
return
(
CodeSigner
[])
verifiedSigners
.
get
(
name
);
}
public
CodeSigner
[]
getCodeSigners
(
JarFile
jar
,
JarEntry
entry
)
{
String
name
=
entry
.
getName
();
if
(
eagerValidation
&&
sigFileSigners
.
get
(
name
)
!=
null
)
{
/*
* Force a read of the entry data to generate the
* verification hash.
*/
try
{
InputStream
s
=
jar
.
getInputStream
(
entry
);
byte
[]
buffer
=
new
byte
[
1024
];
int
n
=
buffer
.
length
;
while
(
n
!=
-
1
)
{
n
=
s
.
read
(
buffer
,
0
,
buffer
.
length
);
}
s
.
close
();
}
catch
(
IOException
e
)
{
}
}
return
getCodeSigners
(
name
);
}
/*
* Convert an array of signers into an array of concatenated certificate
* arrays.
...
...
@@ -444,4 +484,393 @@ class JarVerifier {
}
}
// Extended JavaUtilJarAccess CodeSource API Support
private
Map
urlToCodeSourceMap
=
new
HashMap
();
private
Map
signerToCodeSource
=
new
HashMap
();
private
URL
lastURL
;
private
Map
lastURLMap
;
/*
* Create a unique mapping from codeSigner cache entries to CodeSource.
* In theory, multiple URLs origins could map to a single locally cached
* and shared JAR file although in practice there will be a single URL in use.
*/
private
synchronized
CodeSource
mapSignersToCodeSource
(
URL
url
,
CodeSigner
[]
signers
)
{
Map
map
;
if
(
url
==
lastURL
)
{
map
=
lastURLMap
;
}
else
{
map
=
(
Map
)
urlToCodeSourceMap
.
get
(
url
);
if
(
map
==
null
)
{
map
=
new
HashMap
();
urlToCodeSourceMap
.
put
(
url
,
map
);
}
lastURLMap
=
map
;
lastURL
=
url
;
}
CodeSource
cs
=
(
CodeSource
)
map
.
get
(
signers
);
if
(
cs
==
null
)
{
cs
=
new
VerifierCodeSource
(
csdomain
,
url
,
signers
);
signerToCodeSource
.
put
(
signers
,
cs
);
}
return
cs
;
}
private
CodeSource
[]
mapSignersToCodeSources
(
URL
url
,
List
signers
,
boolean
unsigned
)
{
List
sources
=
new
ArrayList
();
for
(
int
i
=
0
;
i
<
signers
.
size
();
i
++)
{
sources
.
add
(
mapSignersToCodeSource
(
url
,
(
CodeSigner
[])
signers
.
get
(
i
)));
}
if
(
unsigned
)
{
sources
.
add
(
mapSignersToCodeSource
(
url
,
null
));
}
return
(
CodeSource
[])
sources
.
toArray
(
new
CodeSource
[
sources
.
size
()]);
}
private
CodeSigner
[]
emptySigner
=
new
CodeSigner
[
0
];
/*
* Match CodeSource to a CodeSigner[] in the signer cache.
*/
private
CodeSigner
[]
findMatchingSigners
(
CodeSource
cs
)
{
if
(
cs
instanceof
VerifierCodeSource
)
{
VerifierCodeSource
vcs
=
(
VerifierCodeSource
)
cs
;
if
(
vcs
.
isSameDomain
(
csdomain
))
{
return
((
VerifierCodeSource
)
cs
).
getPrivateSigners
();
}
}
/*
* In practice signers should always be optimized above
* but this handles a CodeSource of any type, just in case.
*/
CodeSource
[]
sources
=
mapSignersToCodeSources
(
cs
.
getLocation
(),
getJarCodeSigners
(),
true
);
List
sourceList
=
new
ArrayList
();
for
(
int
i
=
0
;
i
<
sources
.
length
;
i
++)
{
sourceList
.
add
(
sources
[
i
]);
}
int
j
=
sourceList
.
indexOf
(
cs
);
if
(
j
!=
-
1
)
{
CodeSigner
[]
match
;
match
=
((
VerifierCodeSource
)
sourceList
.
get
(
j
)).
getPrivateSigners
();
if
(
match
==
null
)
{
match
=
emptySigner
;
}
return
match
;
}
return
null
;
}
/*
* Instances of this class hold uncopied references to internal
* signing data that can be compared by object reference identity.
*/
private
static
class
VerifierCodeSource
extends
CodeSource
{
URL
vlocation
;
CodeSigner
[]
vsigners
;
java
.
security
.
cert
.
Certificate
[]
vcerts
;
Object
csdomain
;
VerifierCodeSource
(
Object
csdomain
,
URL
location
,
CodeSigner
[]
signers
)
{
super
(
location
,
signers
);
this
.
csdomain
=
csdomain
;
vlocation
=
location
;
vsigners
=
signers
;
// from signerCache
}
VerifierCodeSource
(
Object
csdomain
,
URL
location
,
java
.
security
.
cert
.
Certificate
[]
certs
)
{
super
(
location
,
certs
);
this
.
csdomain
=
csdomain
;
vlocation
=
location
;
vcerts
=
certs
;
// from signerCache
}
/*
* All VerifierCodeSource instances are constructed based on
* singleton signerCache or signerCacheCert entries for each unique signer.
* No CodeSigner<->Certificate[] conversion is required.
* We use these assumptions to optimize equality comparisons.
*/
public
boolean
equals
(
Object
obj
)
{
if
(
obj
==
this
)
{
return
true
;
}
if
(
obj
instanceof
VerifierCodeSource
)
{
VerifierCodeSource
that
=
(
VerifierCodeSource
)
obj
;
/*
* Only compare against other per-signer singletons constructed
* on behalf of the same JarFile instance. Otherwise, compare
* things the slower way.
*/
if
(
isSameDomain
(
that
.
csdomain
))
{
if
(
that
.
vsigners
!=
this
.
vsigners
||
that
.
vcerts
!=
this
.
vcerts
)
{
return
false
;
}
if
(
that
.
vlocation
!=
null
)
{
return
that
.
vlocation
.
equals
(
this
.
vlocation
);
}
else
if
(
this
.
vlocation
!=
null
)
{
return
this
.
vlocation
.
equals
(
that
.
vlocation
);
}
else
{
// both null
return
true
;
}
}
}
return
super
.
equals
(
obj
);
}
boolean
isSameDomain
(
Object
csdomain
)
{
return
this
.
csdomain
==
csdomain
;
}
private
CodeSigner
[]
getPrivateSigners
()
{
return
vsigners
;
}
private
java
.
security
.
cert
.
Certificate
[]
getPrivateCertificates
()
{
return
vcerts
;
}
}
private
Map
signerMap
;
private
synchronized
Map
signerMap
()
{
if
(
signerMap
==
null
)
{
/*
* Snapshot signer state so it doesn't change on us. We care
* only about the asserted signatures. Verification of
* signature validity happens via the JarEntry apis.
*/
signerMap
=
new
HashMap
(
verifiedSigners
.
size
()
+
sigFileSigners
.
size
());
signerMap
.
putAll
(
verifiedSigners
);
signerMap
.
putAll
(
sigFileSigners
);
}
return
signerMap
;
}
public
synchronized
Enumeration
<
String
>
entryNames
(
JarFile
jar
,
final
CodeSource
[]
cs
)
{
final
Map
map
=
signerMap
();
final
Iterator
itor
=
map
.
entrySet
().
iterator
();
boolean
matchUnsigned
=
false
;
/*
* Grab a single copy of the CodeSigner arrays. Check
* to see if we can optimize CodeSigner equality test.
*/
List
req
=
new
ArrayList
(
cs
.
length
);
for
(
int
i
=
0
;
i
<
cs
.
length
;
i
++)
{
CodeSigner
[]
match
=
findMatchingSigners
(
cs
[
i
]);
if
(
match
!=
null
)
{
if
(
match
.
length
>
0
)
{
req
.
add
(
match
);
}
else
{
matchUnsigned
=
true
;
}
}
}
final
List
signersReq
=
req
;
final
Enumeration
enum2
=
(
matchUnsigned
)
?
unsignedEntryNames
(
jar
)
:
emptyEnumeration
;
return
new
Enumeration
<
String
>()
{
String
name
;
public
boolean
hasMoreElements
()
{
if
(
name
!=
null
)
{
return
true
;
}
while
(
itor
.
hasNext
())
{
Map
.
Entry
e
=
(
Map
.
Entry
)
itor
.
next
();
if
(
signersReq
.
contains
((
CodeSigner
[])
e
.
getValue
()))
{
name
=
(
String
)
e
.
getKey
();
return
true
;
}
}
while
(
enum2
.
hasMoreElements
())
{
name
=
(
String
)
enum2
.
nextElement
();
return
true
;
}
return
false
;
}
public
String
nextElement
()
{
if
(
hasMoreElements
())
{
String
value
=
name
;
name
=
null
;
return
value
;
}
throw
new
NoSuchElementException
();
}
};
}
/*
* Like entries() but screens out internal JAR mechanism entries
* and includes signed entries with no ZIP data.
*/
public
Enumeration
<
JarEntry
>
entries2
(
final
JarFile
jar
,
Enumeration
e
)
{
final
Map
map
=
new
HashMap
();
map
.
putAll
(
signerMap
());
final
Enumeration
enum_
=
e
;
return
new
Enumeration
<
JarEntry
>()
{
Enumeration
signers
=
null
;
JarEntry
entry
;
public
boolean
hasMoreElements
()
{
if
(
entry
!=
null
)
{
return
true
;
}
while
(
enum_
.
hasMoreElements
())
{
ZipEntry
ze
=
(
ZipEntry
)
enum_
.
nextElement
();
if
(
JarVerifier
.
isSigningRelated
(
ze
.
getName
()))
{
continue
;
}
entry
=
jar
.
newEntry
(
ze
);
return
true
;
}
if
(
signers
==
null
)
{
signers
=
Collections
.
enumeration
(
map
.
keySet
());
}
while
(
signers
.
hasMoreElements
())
{
String
name
=
(
String
)
signers
.
nextElement
();
entry
=
jar
.
newEntry
(
new
ZipEntry
(
name
));
return
true
;
}
// Any map entries left?
return
false
;
}
public
JarEntry
nextElement
()
{
if
(
hasMoreElements
())
{
JarEntry
je
=
entry
;
map
.
remove
(
je
.
getName
());
entry
=
null
;
return
je
;
}
throw
new
NoSuchElementException
();
}
};
}
private
Enumeration
emptyEnumeration
=
new
Enumeration
<
String
>()
{
public
boolean
hasMoreElements
()
{
return
false
;
}
public
String
nextElement
()
{
throw
new
NoSuchElementException
();
}
};
// true if file is part of the signature mechanism itself
static
boolean
isSigningRelated
(
String
name
)
{
name
=
name
.
toUpperCase
(
Locale
.
ENGLISH
);
if
(!
name
.
startsWith
(
"META-INF/"
))
{
return
false
;
}
name
=
name
.
substring
(
9
);
if
(
name
.
indexOf
(
'/'
)
!=
-
1
)
{
return
false
;
}
if
(
name
.
endsWith
(
".DSA"
)
||
name
.
endsWith
(
".RSA"
)
||
name
.
endsWith
(
".SF"
)
||
name
.
endsWith
(
".EC"
)
||
name
.
startsWith
(
"SIG-"
)
||
name
.
equals
(
"MANIFEST.MF"
))
{
return
true
;
}
return
false
;
}
private
Enumeration
<
String
>
unsignedEntryNames
(
JarFile
jar
)
{
final
Map
map
=
signerMap
();
final
Enumeration
entries
=
jar
.
entries
();
return
new
Enumeration
<
String
>()
{
String
name
;
/*
* Grab entries from ZIP directory but screen out
* metadata.
*/
public
boolean
hasMoreElements
()
{
if
(
name
!=
null
)
{
return
true
;
}
while
(
entries
.
hasMoreElements
())
{
String
value
;
ZipEntry
e
=
(
ZipEntry
)
entries
.
nextElement
();
value
=
e
.
getName
();
if
(
e
.
isDirectory
()
||
isSigningRelated
(
value
))
{
continue
;
}
if
(
map
.
get
(
value
)
==
null
)
{
name
=
value
;
return
true
;
}
}
return
false
;
}
public
String
nextElement
()
{
if
(
hasMoreElements
())
{
String
value
=
name
;
name
=
null
;
return
value
;
}
throw
new
NoSuchElementException
();
}
};
}
private
List
jarCodeSigners
;
private
synchronized
List
getJarCodeSigners
()
{
CodeSigner
[]
signers
;
if
(
jarCodeSigners
==
null
)
{
HashSet
set
=
new
HashSet
();
set
.
addAll
(
signerMap
().
values
());
jarCodeSigners
=
new
ArrayList
();
jarCodeSigners
.
addAll
(
set
);
}
return
jarCodeSigners
;
}
public
synchronized
CodeSource
[]
getCodeSources
(
JarFile
jar
,
URL
url
)
{
boolean
hasUnsigned
=
unsignedEntryNames
(
jar
).
hasMoreElements
();
return
mapSignersToCodeSources
(
url
,
getJarCodeSigners
(),
hasUnsigned
);
}
public
CodeSource
getCodeSource
(
URL
url
,
String
name
)
{
CodeSigner
[]
signers
;
signers
=
(
CodeSigner
[])
signerMap
().
get
(
name
);
return
mapSignersToCodeSource
(
url
,
signers
);
}
public
CodeSource
getCodeSource
(
URL
url
,
JarFile
jar
,
JarEntry
je
)
{
CodeSigner
[]
signers
;
return
mapSignersToCodeSource
(
url
,
getCodeSigners
(
jar
,
je
));
}
public
void
setEagerValidation
(
boolean
eager
)
{
eagerValidation
=
eager
;
}
public
synchronized
List
getManifestDigests
()
{
return
Collections
.
unmodifiableList
(
manifestDigests
);
}
static
CodeSource
getUnsignedCS
(
URL
url
)
{
return
new
VerifierCodeSource
(
null
,
url
,
(
java
.
security
.
cert
.
Certificate
[])
null
);
}
}
src/share/classes/java/util/jar/JavaUtilJarAccessImpl.java
浏览文件 @
abcef7b4
/*
* Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2002,
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
...
...
@@ -26,10 +26,38 @@
package
java.util.jar
;
import
java.io.IOException
;
import
java.net.URL
;
import
java.security.CodeSource
;
import
java.util.Enumeration
;
import
java.util.List
;
import
sun.misc.JavaUtilJarAccess
;
class
JavaUtilJarAccessImpl
implements
JavaUtilJarAccess
{
public
boolean
jarFileHasClassPathAttribute
(
JarFile
jar
)
throws
IOException
{
return
jar
.
hasClassPathAttribute
();
}
public
CodeSource
[]
getCodeSources
(
JarFile
jar
,
URL
url
)
{
return
jar
.
getCodeSources
(
url
);
}
public
CodeSource
getCodeSource
(
JarFile
jar
,
URL
url
,
String
name
)
{
return
jar
.
getCodeSource
(
url
,
name
);
}
public
Enumeration
<
String
>
entryNames
(
JarFile
jar
,
CodeSource
[]
cs
)
{
return
jar
.
entryNames
(
cs
);
}
public
Enumeration
<
JarEntry
>
entries2
(
JarFile
jar
)
{
return
jar
.
entries2
();
}
public
void
setEagerValidation
(
JarFile
jar
,
boolean
eager
)
{
jar
.
setEagerValidation
(
eager
);
}
public
List
getManifestDigests
(
JarFile
jar
)
{
return
jar
.
getManifestDigests
();
}
}
src/share/classes/javax/script/ScriptEngineFactory.java
浏览文件 @
abcef7b4
...
...
@@ -115,20 +115,19 @@ public interface ScriptEngineFactory {
* with respect to concurrent execution of scripts and maintenance of state is also defined.
* These values for the <code><b>THREADING</b></code> key are:<br><br>
* <ul>
* <
p
><code>null</code> - The engine implementation is not thread safe, and cannot
* <
li
><code>null</code> - The engine implementation is not thread safe, and cannot
* be used to execute scripts concurrently on multiple threads.
* <
p
><code>"MULTITHREADED"</code> - The engine implementation is internally
* <
li
><code>"MULTITHREADED"</code> - The engine implementation is internally
* thread-safe and scripts may execute concurrently although effects of script execution
* on one thread may be visible to scripts on other threads.
* <
p
><code>"THREAD-ISOLATED"</code> - The implementation satisfies the requirements
* <
li
><code>"THREAD-ISOLATED"</code> - The implementation satisfies the requirements
* of "MULTITHREADED", and also, the engine maintains independent values
* for symbols in scripts executing on different threads.
* <
p
><code>"STATELESS"</code> - The implementation satisfies the requirements of
* <code>"THREAD-ISOLATED"</code>. In addition, script executions do not alter the
* <
li
><code>"STATELESS"</code> - The implementation satisfies the requirements of
* <
li><
code>"THREAD-ISOLATED"</code>. In addition, script executions do not alter the
* mappings in the <code>Bindings</code> which is the engine scope of the
* <code>ScriptEngine</code>. In particular, the keys in the <code>Bindings</code>
* and their associated values are the same before and after the execution of the script.
* </li>
* </ul>
* <br><br>
* Implementations may define implementation-specific keys.
...
...
@@ -145,22 +144,23 @@ public interface ScriptEngineFactory {
* of the supported scripting language. For instance, an implementaton for a Javascript
* engine might be;
* <p>
* <code><pre>
* <pre>
* <code>
* public String getMethodCallSyntax(String obj,
* String m, String... args) {
* String ret = obj;
* ret += "." + m + "(";
* for (int i = 0; i < args.length; i++) {
* ret += args[i];
* if (i == args.length - 1) {
* ret += ")";
* } else {
* if (i < args.length - 1) {
* ret += ",";
* }
* }
* ret += ")";
* return ret;
* }
*</pre></code>
*</code>
*</pre>
* <p>
*
* @param obj The name representing the object whose method is to be invoked. The
...
...
src/share/classes/javax/sql/rowset/serial/SerialClob.java
浏览文件 @
abcef7b4
...
...
@@ -57,10 +57,10 @@ public class SerialClob implements Clob, Serializable, Cloneable {
private
char
buf
[];
/**
* Internal Clob representation if SerialClob is intialized with a
* Clob
* Internal Clob representation if SerialClob is in
i
tialized with a
* Clob
. Null if SerialClob is initialized with a char[].
*/
private
Clob
clob
;
private
final
Clob
clob
;
/**
* The length in characters of this <code>SerialClob</code> object's
...
...
@@ -71,12 +71,12 @@ public class SerialClob implements Clob, Serializable, Cloneable {
private
long
len
;
/**
* The original length in characters of t
gu
s <code>SerialClob</code>
* objects internal array of characters.
* The original length in characters of t
hi
s <code>SerialClob</code>
* object
'
s internal array of characters.
*
* @serial
*/
private
long
origLen
;
private
final
long
origLen
;
/**
* Constructs a <code>SerialClob</code> object that is a serialized version of
...
...
@@ -104,6 +104,7 @@ public class SerialClob implements Clob, Serializable, Cloneable {
buf
[
i
]
=
ch
[
i
];
}
origLen
=
len
;
clob
=
null
;
}
/**
...
...
@@ -117,19 +118,19 @@ public class SerialClob implements Clob, Serializable, Cloneable {
* the database. Otherwise, the new <code>SerialClob</code> object
* object will contain no data.
* <p>
* Note: The <code>Clob</code> object supplied to this constructor
canno
t
* return
<code>null</code> for
the <code>Clob.getCharacterStream()</code>
* Note: The <code>Clob</code> object supplied to this constructor
mus
t
* return
non-null for both
the <code>Clob.getCharacterStream()</code>
* and <code>Clob.getAsciiStream</code> methods. This <code>SerialClob</code>
* constructor cannot
serialize a <code>Clob</code> object in this instance
* constructor cannot serialize a <code>Clob</code> object in this instance
* and will throw an <code>SQLException</code> object.
*
* @param clob the <code>Clob</code> object from which this
* <code>SerialClob</code> object is to be constructed; cannot be null
* @throws SerialException if an error occurs during serialization
* @throws SQLException if a SQL error occurs in capturing the CLOB;
* if the <code>Clob</code> object is a null; or if
both
the
* if the <code>Clob</code> object is a null; or if
either of
the
* <code>Clob.getCharacterStream()</code> and <code>Clob.getAsciiStream()</code>
* methods on the <code>Clob</code> return a null
* methods on the <code>Clob</code> return
s
a null
* @see java.sql.Clob
*/
public
SerialClob
(
Clob
clob
)
throws
SerialException
,
SQLException
{
...
...
@@ -144,19 +145,27 @@ public class SerialClob implements Clob, Serializable, Cloneable {
int
read
=
0
;
int
offset
=
0
;
BufferedReader
reader
;
if
(
(((
reader
=
new
BufferedReader
(
clob
.
getCharacterStream
()))
==
null
))
&&
(
clob
.
getAsciiStream
()
==
null
))
{
throw
new
SQLException
(
"Invalid Clob object. Calls to getCharacterStream "
+
"and getAsciiStream return null which cannot be serialized."
);
}
try
(
Reader
charStream
=
clob
.
getCharacterStream
())
{
if
(
charStream
==
null
)
{
throw
new
SQLException
(
"Invalid Clob object. The call to getCharacterStream "
+
"returned null which cannot be serialized."
);
}
try
{
do
{
read
=
reader
.
read
(
buf
,
offset
,
(
int
)(
len
-
offset
));
offset
+=
read
;
}
while
(
read
>
0
);
// Note: get an ASCII stream in order to null-check it,
// even though we don't do anything with it.
try
(
InputStream
asciiStream
=
clob
.
getAsciiStream
())
{
if
(
asciiStream
==
null
)
{
throw
new
SQLException
(
"Invalid Clob object. The call to getAsciiStream "
+
"returned null which cannot be serialized."
);
}
}
try
(
Reader
reader
=
new
BufferedReader
(
charStream
))
{
do
{
read
=
reader
.
read
(
buf
,
offset
,
(
int
)(
len
-
offset
));
offset
+=
read
;
}
while
(
read
>
0
);
}
}
catch
(
java
.
io
.
IOException
ex
)
{
throw
new
SerialException
(
"SerialClob: "
+
ex
.
getMessage
());
}
...
...
@@ -207,13 +216,13 @@ public class SerialClob implements Clob, Serializable, Cloneable {
* used to create this <code>SerialClob</code> object
*/
public
java
.
io
.
InputStream
getAsciiStream
()
throws
SerialException
,
SQLException
{
if
(
this
.
clob
!=
null
)
{
return
this
.
clob
.
getAsciiStream
();
}
else
{
throw
new
SerialException
(
"Unsupported operation. SerialClob cannot "
+
if
(
this
.
clob
!=
null
)
{
return
this
.
clob
.
getAsciiStream
();
}
else
{
throw
new
SerialException
(
"Unsupported operation. SerialClob cannot "
+
"return a the CLOB value as an ascii stream, unless instantiated "
+
"with a fully implemented Clob object."
);
}
}
}
/**
...
...
src/share/classes/javax/sql/rowset/spi/SyncFactory.java
浏览文件 @
abcef7b4
...
...
@@ -32,6 +32,7 @@ import java.sql.*;
import
javax.sql.*
;
import
java.io.FileInputStream
;
import
java.io.InputStream
;
import
java.io.IOException
;
import
java.io.FileNotFoundException
;
...
...
@@ -366,7 +367,9 @@ public class SyncFactory {
// Load user's implementation of SyncProvider
// here. -Drowset.properties=/abc/def/pqr.txt
ROWSET_PROPERTIES
=
strRowsetProperties
;
properties
.
load
(
new
FileInputStream
(
ROWSET_PROPERTIES
));
try
(
FileInputStream
fis
=
new
FileInputStream
(
ROWSET_PROPERTIES
))
{
properties
.
load
(
fis
);
}
parseProperties
(
properties
);
}
...
...
@@ -376,12 +379,19 @@ public class SyncFactory {
ROWSET_PROPERTIES
=
"javax"
+
strFileSep
+
"sql"
+
strFileSep
+
"rowset"
+
strFileSep
+
"rowset.properties"
;
// properties.load(
// ClassLoader.getSystemResourceAsStream(ROWSET_PROPERTIES));
ClassLoader
cl
=
Thread
.
currentThread
().
getContextClassLoader
();
properties
.
load
(
cl
.
getResourceAsStream
(
ROWSET_PROPERTIES
));
try
(
InputStream
stream
=
(
cl
==
null
)
?
ClassLoader
.
getSystemResourceAsStream
(
ROWSET_PROPERTIES
)
:
cl
.
getResourceAsStream
(
ROWSET_PROPERTIES
))
{
if
(
stream
==
null
)
{
throw
new
SyncFactoryException
(
"Resource "
+
ROWSET_PROPERTIES
+
" not found"
);
}
properties
.
load
(
stream
);
}
parseProperties
(
properties
);
// removed else, has properties should sum together
...
...
src/share/classes/sun/misc/JarIndex.java
浏览文件 @
abcef7b4
...
...
@@ -103,6 +103,19 @@ public class JarIndex {
parseJars
(
files
);
}
/**
* Returns the jar index, or <code>null</code> if none.
*
* This single parameter version of the method is retained
* for binary compatibility with earlier releases.
*
* @param jar the JAR file to get the index from.
* @exception IOException if an I/O error has occurred.
*/
public
static
JarIndex
getJarIndex
(
JarFile
jar
)
throws
IOException
{
return
getJarIndex
(
jar
,
null
);
}
/**
* Returns the jar index, or <code>null</code> if none.
*
...
...
src/share/classes/sun/misc/JavaUtilJarAccess.java
浏览文件 @
abcef7b4
/*
* Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2002,
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
...
...
@@ -26,8 +26,19 @@
package
sun.misc
;
import
java.io.IOException
;
import
java.net.URL
;
import
java.security.CodeSource
;
import
java.util.Enumeration
;
import
java.util.List
;
import
java.util.jar.JarEntry
;
import
java.util.jar.JarFile
;
public
interface
JavaUtilJarAccess
{
public
boolean
jarFileHasClassPathAttribute
(
JarFile
jar
)
throws
IOException
;
public
CodeSource
[]
getCodeSources
(
JarFile
jar
,
URL
url
);
public
CodeSource
getCodeSource
(
JarFile
jar
,
URL
url
,
String
name
);
public
Enumeration
<
String
>
entryNames
(
JarFile
jar
,
CodeSource
[]
cs
);
public
Enumeration
<
JarEntry
>
entries2
(
JarFile
jar
);
public
void
setEagerValidation
(
JarFile
jar
,
boolean
eager
);
public
List
getManifestDigests
(
JarFile
jar
);
}
src/share/classes/sun/net/www/protocol/jar/URLJarFile.java
浏览文件 @
abcef7b4
...
...
@@ -27,6 +27,9 @@ package sun.net.www.protocol.jar;
import
java.io.*
;
import
java.net.*
;
import
java.nio.file.Files
;
import
java.nio.file.Path
;
import
java.nio.file.StandardCopyOption
;
import
java.util.*
;
import
java.util.jar.*
;
import
java.util.zip.ZipFile
;
...
...
@@ -208,38 +211,23 @@ public class URLJarFile extends JarFile {
JarFile
result
=
null
;
/* get the stream before asserting privileges */
final
InputStream
in
=
url
.
openConnection
().
getInputStream
();
try
{
try
(
final
InputStream
in
=
url
.
openConnection
().
getInputStream
())
{
result
=
AccessController
.
doPrivileged
(
new
PrivilegedExceptionAction
<
JarFile
>()
{
public
JarFile
run
()
throws
IOException
{
OutputStream
out
=
null
;
File
tmpFile
=
null
;
Path
tmpFile
=
Files
.
createTempFile
(
"jar_cache"
,
null
);
try
{
tmpFile
=
File
.
createTempFile
(
"jar_cache"
,
null
);
tmpFile
.
deleteOnExit
();
out
=
new
FileOutputStream
(
tmpFile
);
int
read
=
0
;
byte
[]
buf
=
new
byte
[
BUF_SIZE
];
while
((
read
=
in
.
read
(
buf
))
!=
-
1
)
{
out
.
write
(
buf
,
0
,
read
);
}
out
.
close
();
out
=
null
;
return
new
URLJarFile
(
tmpFile
,
closeController
);
}
catch
(
IOException
e
)
{
if
(
tmpFile
!=
null
)
{
tmpFile
.
delete
();
}
throw
e
;
}
finally
{
if
(
in
!=
null
)
{
in
.
close
();
}
if
(
out
!=
null
)
{
out
.
close
();
Files
.
copy
(
in
,
tmpFile
,
StandardCopyOption
.
REPLACE_EXISTING
);
JarFile
jarFile
=
new
URLJarFile
(
tmpFile
.
toFile
(),
closeController
);
tmpFile
.
toFile
().
deleteOnExit
();
return
jarFile
;
}
catch
(
Throwable
thr
)
{
try
{
Files
.
delete
(
tmpFile
);
}
catch
(
IOException
ioe
)
{
thr
.
addSuppressed
(
ioe
);
}
throw
thr
;
}
}
});
...
...
src/share/classes/sun/nio/ch/FileChannelImpl.java
浏览文件 @
abcef7b4
...
...
@@ -51,6 +51,7 @@ public class FileChannelImpl
// File access mode (immutable)
private
final
boolean
writable
;
private
final
boolean
readable
;
private
final
boolean
append
;
// Required to prevent finalization of creating stream (immutable)
private
final
Object
parent
;
...
...
@@ -67,6 +68,7 @@ public class FileChannelImpl
this
.
fd
=
fd
;
this
.
readable
=
readable
;
this
.
writable
=
writable
;
this
.
append
=
append
;
this
.
parent
=
parent
;
this
.
nd
=
new
FileDispatcherImpl
(
append
);
}
...
...
@@ -242,7 +244,8 @@ public class FileChannelImpl
if
(!
isOpen
())
return
0
;
do
{
p
=
position0
(
fd
,
-
1
);
// in append-mode then position is advanced to end before writing
p
=
(
append
)
?
nd
.
size
(
fd
)
:
position0
(
fd
,
-
1
);
}
while
((
p
==
IOStatus
.
INTERRUPTED
)
&&
isOpen
());
return
IOStatus
.
normalize
(
p
);
}
finally
{
...
...
src/share/classes/sun/security/jgss/wrapper/SunNativeProvider.java
浏览文件 @
abcef7b4
...
...
@@ -87,6 +87,7 @@ public final class SunNativeProvider extends Provider {
gssLibs
=
new
String
[]{
"libgssapi.so"
,
"libgssapi_krb5.so"
,
"libgssapi_krb5.so.2"
,
};
}
}
else
{
...
...
src/share/classes/sun/security/provider/certpath/PKIXCertPathValidator.java
浏览文件 @
abcef7b4
...
...
@@ -231,13 +231,6 @@ public class PKIXCertPathValidator extends CertPathValidatorSpi {
AdaptableX509CertSelector
issuerSelector
=
new
AdaptableX509CertSelector
();
// check trusted certificate's key usage
boolean
[]
usages
=
trustedCert
.
getKeyUsage
();
if
(
usages
!=
null
)
{
usages
[
5
]
=
true
;
// keyCertSign
issuerSelector
.
setKeyUsage
(
usages
);
}
// check trusted certificate's subject
issuerSelector
.
setSubject
(
firstCert
.
getIssuerX500Principal
());
...
...
src/share/classes/sun/security/util/SignatureFileVerifier.java
浏览文件 @
abcef7b4
/*
* Copyright (c) 1997, 201
0
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1997, 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
...
...
@@ -181,7 +181,8 @@ public class SignatureFileVerifier {
*
*
*/
public
void
process
(
Hashtable
<
String
,
CodeSigner
[]>
signers
)
public
void
process
(
Hashtable
<
String
,
CodeSigner
[]>
signers
,
List
manifestDigests
)
throws
IOException
,
SignatureException
,
NoSuchAlgorithmException
,
JarException
,
CertificateException
{
...
...
@@ -190,14 +191,15 @@ public class SignatureFileVerifier {
Object
obj
=
null
;
try
{
obj
=
Providers
.
startJarVerification
();
processImpl
(
signers
);
processImpl
(
signers
,
manifestDigests
);
}
finally
{
Providers
.
stopJarVerification
(
obj
);
}
}
private
void
processImpl
(
Hashtable
<
String
,
CodeSigner
[]>
signers
)
private
void
processImpl
(
Hashtable
<
String
,
CodeSigner
[]>
signers
,
List
manifestDigests
)
throws
IOException
,
SignatureException
,
NoSuchAlgorithmException
,
JarException
,
CertificateException
{
...
...
@@ -232,7 +234,7 @@ public class SignatureFileVerifier {
sf
.
getEntries
().
entrySet
().
iterator
();
// see if we can verify the whole manifest first
boolean
manifestSigned
=
verifyManifestHash
(
sf
,
md
,
decoder
);
boolean
manifestSigned
=
verifyManifestHash
(
sf
,
md
,
decoder
,
manifestDigests
);
// verify manifest main attributes
if
(!
manifestSigned
&&
!
verifyManifestMainAttrs
(
sf
,
md
,
decoder
))
{
...
...
@@ -275,7 +277,8 @@ public class SignatureFileVerifier {
*/
private
boolean
verifyManifestHash
(
Manifest
sf
,
ManifestDigester
md
,
BASE64Decoder
decoder
)
BASE64Decoder
decoder
,
List
manifestDigests
)
throws
IOException
{
Attributes
mattr
=
sf
.
getMainAttributes
();
...
...
@@ -290,6 +293,8 @@ public class SignatureFileVerifier {
// 16 is length of "-Digest-Manifest"
String
algorithm
=
key
.
substring
(
0
,
key
.
length
()-
16
);
manifestDigests
.
add
(
key
);
manifestDigests
.
add
(
se
.
getValue
());
MessageDigest
digest
=
getDigest
(
algorithm
);
if
(
digest
!=
null
)
{
byte
[]
computedHash
=
md
.
manifestDigest
(
digest
);
...
...
src/share/classes/sun/tools/jps/Jps.java
浏览文件 @
abcef7b4
/*
* 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
...
...
@@ -77,9 +77,52 @@ public class Jps {
MonitoredVm
vm
=
null
;
String
vmidString
=
"//"
+
lvmid
+
"?mode=r"
;
String
errorString
=
null
;
try
{
// Note: The VM associated with the current VM id may
// no longer be running so these queries may fail. We
// already added the VM id to the output stream above.
// If one of the queries fails, then we try to add a
// reasonable message to indicate that the requested
// info is not available.
errorString
=
" -- process information unavailable"
;
VmIdentifier
id
=
new
VmIdentifier
(
vmidString
);
vm
=
monitoredHost
.
getMonitoredVm
(
id
,
0
);
errorString
=
" -- main class information unavailable"
;
output
.
append
(
" "
+
MonitoredVmUtil
.
mainClass
(
vm
,
arguments
.
showLongPaths
()));
if
(
arguments
.
showMainArgs
())
{
errorString
=
" -- main args information unavailable"
;
String
mainArgs
=
MonitoredVmUtil
.
mainArgs
(
vm
);
if
(
mainArgs
!=
null
&&
mainArgs
.
length
()
>
0
)
{
output
.
append
(
" "
+
mainArgs
);
}
}
if
(
arguments
.
showVmArgs
())
{
errorString
=
" -- jvm args information unavailable"
;
String
jvmArgs
=
MonitoredVmUtil
.
jvmArgs
(
vm
);
if
(
jvmArgs
!=
null
&&
jvmArgs
.
length
()
>
0
)
{
output
.
append
(
" "
+
jvmArgs
);
}
}
if
(
arguments
.
showVmFlags
())
{
errorString
=
" -- jvm flags information unavailable"
;
String
jvmFlags
=
MonitoredVmUtil
.
jvmFlags
(
vm
);
if
(
jvmFlags
!=
null
&&
jvmFlags
.
length
()
>
0
)
{
output
.
append
(
" "
+
jvmFlags
);
}
}
errorString
=
" -- detach failed"
;
monitoredHost
.
detach
(
vm
);
System
.
out
.
println
(
output
);
errorString
=
null
;
}
catch
(
URISyntaxException
e
)
{
// unexpected as vmidString is based on a validated hostid
lastError
=
e
;
...
...
@@ -87,7 +130,7 @@ public class Jps {
}
catch
(
Exception
e
)
{
lastError
=
e
;
}
finally
{
if
(
vm
=
=
null
)
{
if
(
errorString
!
=
null
)
{
/*
* we ignore most exceptions, as there are race
* conditions where a JVM in 'jvms' may terminate
...
...
@@ -95,7 +138,7 @@ public class Jps {
* Other errors, such as access and I/O exceptions
* should stop us from iterating over the complete set.
*/
output
.
append
(
" -- process information unavailable"
);
output
.
append
(
errorString
);
if
(
arguments
.
isDebug
())
{
if
((
lastError
!=
null
)
&&
(
lastError
.
getMessage
()
!=
null
))
{
...
...
@@ -110,33 +153,6 @@ public class Jps {
continue
;
}
}
output
.
append
(
" "
);
output
.
append
(
MonitoredVmUtil
.
mainClass
(
vm
,
arguments
.
showLongPaths
()));
if
(
arguments
.
showMainArgs
())
{
String
mainArgs
=
MonitoredVmUtil
.
mainArgs
(
vm
);
if
(
mainArgs
!=
null
&&
mainArgs
.
length
()
>
0
)
{
output
.
append
(
" "
).
append
(
mainArgs
);
}
}
if
(
arguments
.
showVmArgs
())
{
String
jvmArgs
=
MonitoredVmUtil
.
jvmArgs
(
vm
);
if
(
jvmArgs
!=
null
&&
jvmArgs
.
length
()
>
0
)
{
output
.
append
(
" "
).
append
(
jvmArgs
);
}
}
if
(
arguments
.
showVmFlags
())
{
String
jvmFlags
=
MonitoredVmUtil
.
jvmFlags
(
vm
);
if
(
jvmFlags
!=
null
&&
jvmFlags
.
length
()
>
0
)
{
output
.
append
(
" "
).
append
(
jvmFlags
);
}
}
System
.
out
.
println
(
output
);
monitoredHost
.
detach
(
vm
);
}
}
catch
(
MonitorException
e
)
{
if
(
e
.
getMessage
()
!=
null
)
{
...
...
src/share/demo/nio/zipfs/src/com/sun/nio/zipfs/ZipFileSystemProvider.java
浏览文件 @
abcef7b4
...
...
@@ -42,6 +42,7 @@ import java.net.URISyntaxException;
import
java.util.HashMap
;
import
java.util.Map
;
import
java.util.Set
;
import
java.util.zip.ZipError
;
import
java.util.concurrent.ExecutorService
;
/*
...
...
@@ -78,42 +79,63 @@ public class ZipFileSystemProvider extends FileSystemProvider {
}
}
@Override
public
FileSystem
newFileSystem
(
URI
uri
,
Map
<
String
,
?>
env
)
throws
IOException
{
return
newFileSystem
(
uriToPath
(
uri
),
env
,
true
);
}
@Override
public
FileSystem
newFileSystem
(
Path
path
,
Map
<
String
,
?>
env
)
throws
IOException
{
if
(!
path
.
toUri
().
getScheme
().
equalsIgnoreCase
(
"file"
))
{
throw
new
UnsupportedOperationException
();
private
boolean
ensureFile
(
Path
path
)
{
try
{
BasicFileAttributes
attrs
=
Files
.
readAttributes
(
path
,
BasicFileAttributes
.
class
);
if
(!
attrs
.
isRegularFile
())
throw
new
UnsupportedOperationException
();
return
true
;
}
catch
(
IOException
ioe
)
{
return
false
;
}
return
newFileSystem
(
path
,
env
,
false
);
}
private
FileSystem
newFileSystem
(
Path
path
,
Map
<
String
,
?>
env
,
boolean
checkIfFSExists
)
@Override
public
FileSystem
newFileSystem
(
URI
uri
,
Map
<
String
,
?>
env
)
throws
IOException
{
Path
path
=
uriToPath
(
uri
);
synchronized
(
filesystems
)
{
Path
realPath
=
null
;
if
(
checkIfFSExists
&&
Files
.
exists
(
path
))
{
if
(
ensureFile
(
path
))
{
realPath
=
path
.
toRealPath
(
true
);
if
(
filesystems
.
containsKey
(
realPath
))
throw
new
FileSystemAlreadyExistsException
();
}
ZipFileSystem
zipfs
=
new
ZipFileSystem
(
this
,
path
,
env
);
if
(
realPath
==
null
)
realPath
=
path
.
toRealPath
(
true
);
if
(!
filesystems
.
containsKey
(
realPath
))
filesystems
.
put
(
realPath
,
zipfs
);
ZipFileSystem
zipfs
=
null
;
try
{
zipfs
=
new
ZipFileSystem
(
this
,
path
,
env
);
}
catch
(
ZipError
ze
)
{
String
pname
=
path
.
toString
();
if
(
pname
.
endsWith
(
".zip"
)
||
pname
.
endsWith
(
".jar"
))
throw
ze
;
// assume NOT a zip/jar file
throw
new
UnsupportedOperationException
();
}
filesystems
.
put
(
realPath
,
zipfs
);
return
zipfs
;
}
}
@Override
public
FileSystem
newFileSystem
(
Path
path
,
Map
<
String
,
?>
env
)
throws
IOException
{
if
(
path
.
getFileSystem
()
!=
FileSystems
.
getDefault
())
{
throw
new
UnsupportedOperationException
();
}
ensureFile
(
path
);
try
{
return
new
ZipFileSystem
(
this
,
path
,
env
);
}
catch
(
ZipError
ze
)
{
String
pname
=
path
.
toString
();
if
(
pname
.
endsWith
(
".zip"
)
||
pname
.
endsWith
(
".jar"
))
throw
ze
;
throw
new
UnsupportedOperationException
();
}
}
@Override
public
Path
getPath
(
URI
uri
)
{
...
...
src/solaris/classes/sun/nio/fs/UnixChannelFactory.java
浏览文件 @
abcef7b4
...
...
@@ -136,7 +136,7 @@ class UnixChannelFactory {
throw
new
IllegalArgumentException
(
"APPEND + TRUNCATE_EXISTING not allowed"
);
FileDescriptor
fdObj
=
open
(
dfd
,
path
,
pathForPermissionCheck
,
flags
,
mode
);
return
FileChannelImpl
.
open
(
fdObj
,
flags
.
read
,
flags
.
write
,
null
);
return
FileChannelImpl
.
open
(
fdObj
,
flags
.
read
,
flags
.
write
,
flags
.
append
,
null
);
}
/**
...
...
test/ProblemList.txt
浏览文件 @
abcef7b4
...
...
@@ -41,14 +41,14 @@
#
# Shell tests are othervm by default.
#
# List items are testnames followed by labels, all MUST BE commented
# List items are testnames followed by labels, all MUST BE commented
# as to why they are here and use a label:
# generic-all Problems on all platforms
# generic-ARCH Where ARCH is one of: sparc, sparcv9, x64, i586, etc.
# OSNAME-all Where OSNAME is one of: solaris, linux, windows
# OSNAME-ARCH Specific on to one OSNAME and ARCH, e.g. solaris-x64
# OSNAME-REV Specific on to one OSNAME and REV, e.g. solaris-5.8
#
#
# More than one label is allowed but must be on the same line.
#
#############################################################################
...
...
@@ -234,7 +234,7 @@ javax/management/remote/mandatory/threads/ExecutorTest.java generic-all
# Linux 32bit Fedora 9, IllegalStateException
javax/management/monitor/RuntimeExceptionTest.java generic-all
# Problems with rmi connection, othervm
# Problems with rmi connection, othervm
javax/management/remote/mandatory/subjectDelegation/SubjectDelegation2Test.java generic-all
# Fails with port already in use
...
...
@@ -411,7 +411,7 @@ com/sun/nio/sctp/SctpChannel/SocketOptionTests.java
com/sun/nio/sctp/SctpChannel/Send.java generic-all
com/sun/nio/sctp/SctpChannel/Shutdown.java generic-all
# Fails on OpenSolaris, IllegalStateException: Cannot add or remove addresses
# Fails on OpenSolaris, IllegalStateException: Cannot add or remove addresses
# from a channel that is bound to the wildcard address
com/sun/nio/sctp/SctpChannel/Bind.java generic-all
...
...
@@ -456,10 +456,10 @@ java/rmi/transport/pinLastArguments/PinLastArguments.java generic-all
java/rmi/server/RemoteServer/AddrInUse.java generic-all
# Connection error on Windows i586 -server
# Also connection errors in othervm on Solaris 10 sparc, same port???
# Also connection errors in othervm on Solaris 10 sparc, same port???
sun/rmi/transport/tcp/DeadCachedConnection.java generic-all
# Connection errors in othervm on Solaris 10 sparc, same port???
# Connection errors in othervm on Solaris 10 sparc, same port???
java/rmi/activation/Activatable/checkActivateRef/CheckActivateRef.java generic-all
java/rmi/activation/Activatable/checkAnnotations/CheckAnnotations.java generic-all
java/rmi/activation/Activatable/checkImplClassLoader/CheckImplClassLoader.java generic-all
...
...
@@ -532,7 +532,7 @@ sun/security/pkcs11/ec/TestKeyFactory.java solaris-i586
java/security/Security/SynchronizedAccess.java generic-all
# Failing on Solaris X64 (-d64 -server) with:
# GSSException: Failure unspecified at GSS-API level
# GSSException: Failure unspecified at GSS-API level
# (Mechanism level: Specified version of key is not available (44))
sun/security/krb5/auto/BasicKrb5Test.java generic-all
...
...
@@ -546,14 +546,14 @@ sun/security/tools/keytool/standard.sh generic-all
sun/security/krb5/auto/HttpNegotiateServer.java generic-all
# Fails on almost all platforms
# java.lang.UnsupportedClassVersionError: SerialTest :
# java.lang.UnsupportedClassVersionError: SerialTest :
# Unsupported major.minor version 51.0
# at java.lang.ClassLoader.defineClass1(Native Method)
sun/security/util/Oid/S11N.sh generic-all
# Fails on Fedora 9 32bit
# GSSException: Failure unspecified at GSS-API level (Mechanism level:
# Invalid argument (400) - Cannot find key of appropriate type to decrypt
# GSSException: Failure unspecified at GSS-API level (Mechanism level:
# Invalid argument (400) - Cannot find key of appropriate type to decrypt
# AP REP - DES CBC mode with MD5)
# at sun.security.jgss.krb5.Krb5Context.acceptSecContext(Krb5Context.java:778)
sun/security/krb5/auto/NonMutualSpnego.java generic-all
...
...
@@ -673,7 +673,7 @@ sun/security/rsa/TestSignatures.java solaris-all
# Timeout on solaris-sparc and i586 and x64, -client and -server
sun/security/ssl/com/sun/net/ssl/internal/ssl/InputRecord/InterruptedIO.java solaris-all
# Do not seem to run on windows machines? dll missing?
# Do not seem to run on windows machines? dll missing?
sun/security/tools/jarsigner/emptymanifest.sh windows-all
# Files does not exist or no encoding? solaris-sparcv9
...
...
@@ -734,8 +734,5 @@ java/util/concurrent/FutureTask/BlockingTaskExecutor.java generic-all
# Problems on windows, jmap.exe hangs? (these run jmap), fails on Solaris 10 x86
java/util/concurrent/locks/Lock/TimedAcquireLeak.java generic-all
# Fails on solaris-sparc -server (Set not equal to copy. 1)
java/util/EnumSet/EnumSetBash.java solaris-sparc
############################################################################
test/demo/zipfs/ZipFSTester.java
浏览文件 @
abcef7b4
...
...
@@ -105,6 +105,18 @@ public class ZipFSTester {
os
.
write
(
bits
);
os
.
close
();
try
{
provider
.
newFileSystem
(
new
File
(
System
.
getProperty
(
"test.src"
,
"."
)).
toPath
(),
new
HashMap
<
String
,
Object
>());
throw
new
RuntimeException
(
"newFileSystem() opens a directory as zipfs"
);
}
catch
(
UnsupportedOperationException
uoe
)
{}
try
{
provider
.
newFileSystem
(
src
,
new
HashMap
<
String
,
Object
>());
throw
new
RuntimeException
(
"newFileSystem() opens a non-zip file as zipfs"
);
}
catch
(
UnsupportedOperationException
uoe
)
{}
// copyin
Path
dst
=
getPathWithParents
(
fs
,
tmpName
);
Files
.
copy
(
src
,
dst
);
...
...
test/demo/zipfs/basic.sh
浏览文件 @
abcef7b4
...
...
@@ -21,7 +21,7 @@
# questions.
#
# @test
# @bug 6990846 7009092 7009085 7015391 7014948 7005986 7017840
# @bug 6990846 7009092 7009085 7015391 7014948 7005986 7017840
7007596
# @summary Test ZipFileSystem demo
# @build Basic PathOps ZipFSTester
# @run shell basic.sh
...
...
test/java/lang/Thread/StopBeforeStart.java
已删除
100644 → 0
浏览文件 @
28fb7917
/*
* Copyright (c) 2005, 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 4519200
* @summary Confirm a Thread.stop before start complies with the spec
* @author Pete Soper
*
* Confirm that a thread that had its stop method invoked before start
* does properly terminate with expected exception behavior. NOTE that
* arbitrary application threads could return from their run methods faster
* than the VM can throw an async exception.
*/
public
class
StopBeforeStart
{
private
static
final
int
JOIN_TIMEOUT
=
10000
;
private
class
MyThrowable
extends
Throwable
{
}
private
class
Catcher
implements
Thread
.
UncaughtExceptionHandler
{
private
boolean
nullaryStop
;
private
Throwable
theThrowable
;
private
Throwable
expectedThrowable
;
private
boolean
exceptionThrown
;
Catcher
(
boolean
nullaryStop
)
{
this
.
nullaryStop
=
nullaryStop
;
if
(!
nullaryStop
)
{
expectedThrowable
=
new
MyThrowable
();
}
}
public
void
uncaughtException
(
Thread
t
,
Throwable
th
)
{
exceptionThrown
=
true
;
theThrowable
=
th
;
}
void
check
(
String
label
)
throws
Throwable
{
if
(!
exceptionThrown
)
{
throw
new
RuntimeException
(
label
+
" test:"
+
" missing uncaught exception"
);
}
if
(
nullaryStop
)
{
if
(!
(
theThrowable
instanceof
ThreadDeath
))
{
throw
new
RuntimeException
(
label
+
" test:"
+
" expected ThreadDeath in uncaught handler"
);
}
}
else
if
(
theThrowable
!=
expectedThrowable
)
{
throw
new
RuntimeException
(
label
+
" test:"
+
" wrong Throwable in uncaught handler"
);
}
}
}
private
class
MyRunnable
implements
Runnable
{
public
void
run
()
{
while
(
true
)
;
}
}
private
class
MyThread
extends
Thread
{
public
void
run
()
{
while
(
true
)
;
}
}
public
static
void
main
(
String
args
[])
throws
Throwable
{
(
new
StopBeforeStart
()).
doit
();
System
.
out
.
println
(
"Test passed"
);
}
private
void
doit
()
throws
Throwable
{
runit
(
false
,
new
Thread
(
new
MyRunnable
()),
"Thread"
);
runit
(
true
,
new
Thread
(
new
MyRunnable
()),
"Thread"
);
runit
(
false
,
new
MyThread
(),
"Runnable"
);
runit
(
true
,
new
MyThread
(),
"Runnable"
);
}
private
void
runit
(
boolean
nullaryStop
,
Thread
thread
,
String
type
)
throws
Throwable
{
Catcher
c
=
new
Catcher
(
nullaryStop
);
thread
.
setUncaughtExceptionHandler
(
c
);
if
(
nullaryStop
)
{
thread
.
stop
();
}
else
{
thread
.
stop
(
c
.
expectedThrowable
);
}
thread
.
start
();
thread
.
join
(
JOIN_TIMEOUT
);
if
(
thread
.
getState
()
!=
Thread
.
State
.
TERMINATED
)
{
thread
.
stop
();
// Under high load this could be a false positive
throw
new
RuntimeException
(
type
+
" test:"
+
" app thread did not terminate"
);
}
c
.
check
(
type
);
}
}
test/java/nio/channels/FileChannel/Position.java
浏览文件 @
abcef7b4
...
...
@@ -22,13 +22,16 @@
*/
/* @test
* @bug 4429043 6526860
* @summary Test position method of FileChannel
*/
import
java.io.*
;
import
java.nio.MappedByteBuffer
;
import
java.nio.channels.*
;
import
java.nio.ByteBuffer
;
import
java.nio.channels.FileChannel
;
import
java.nio.file.*
;
import
static
java
.
nio
.
file
.
StandardOpenOption
.*;
import
java.nio.charset.Charset
;
import
java.util.Random
;
...
...
@@ -38,32 +41,42 @@ import java.util.Random;
public
class
Position
{
private
static
PrintStream
err
=
System
.
err
;
private
static
final
Charset
ISO8859_1
=
Charset
.
forName
(
"8859_1"
)
;
private
static
Random
generator
=
new
Random
();
private
static
int
CHARS_PER_LINE
=
File
.
separatorChar
==
'/'
?
5
:
6
;
private
static
File
blah
;
private
static
final
Random
generator
=
new
Random
();
public
static
void
main
(
String
[]
args
)
throws
Exception
{
blah
=
File
.
createTempFile
(
"blah"
,
null
);
blah
.
deleteOnExit
();
Path
blah
=
Files
.
createTempFile
(
"blah"
,
null
);
blah
.
toFile
().
deleteOnExit
();
initTestFile
(
blah
);
FileInputStream
fis
=
new
FileInputStream
(
blah
);
FileChannel
c
=
fis
.
getChannel
();
for
(
int
i
=
0
;
i
<
10
;
i
++)
{
try
(
FileChannel
fc
=
(
generator
.
nextBoolean
())
?
FileChannel
.
open
(
blah
,
READ
)
:
new
FileInputStream
(
blah
.
toFile
()).
getChannel
())
{
for
(
int
j
=
0
;
j
<
100
;
j
++)
{
long
newPos
=
generator
.
nextInt
(
1000
);
fc
.
position
(
newPos
);
if
(
fc
.
position
()
!=
newPos
)
throw
new
RuntimeException
(
"Position failed"
);
}
}
}
for
(
int
i
=
0
;
i
<
100
;
i
++)
{
long
newPos
=
generator
.
nextInt
(
1000
);
c
.
position
(
newPos
);
if
(
c
.
position
()
!=
newPos
)
throw
new
RuntimeException
(
"Position failed"
);
for
(
int
i
=
0
;
i
<
10
;
i
++)
{
try
(
FileChannel
fc
=
(
generator
.
nextBoolean
())
?
FileChannel
.
open
(
blah
,
APPEND
)
:
new
FileOutputStream
(
blah
.
toFile
(),
true
).
getChannel
())
{
for
(
int
j
=
0
;
j
<
10
;
j
++)
{
if
(
fc
.
position
()
!=
fc
.
size
())
throw
new
RuntimeException
(
"Position expected to be size"
);
byte
[]
buf
=
new
byte
[
generator
.
nextInt
(
100
)];
fc
.
write
(
ByteBuffer
.
wrap
(
buf
));
}
}
}
c
.
close
();
fis
.
close
();
blah
.
delete
();
Files
.
delete
(
blah
);
}
/**
...
...
@@ -78,19 +91,15 @@ public class Position {
* 3999
*
*/
private
static
void
initTestFile
(
File
blah
)
throws
Exception
{
FileOutputStream
fos
=
new
FileOutputStream
(
blah
);
BufferedWriter
awriter
=
new
BufferedWriter
(
new
OutputStreamWriter
(
fos
,
"8859_1"
));
for
(
int
i
=
0
;
i
<
4000
;
i
++)
{
String
number
=
new
Integer
(
i
).
toString
();
for
(
int
h
=
0
;
h
<
4
-
number
.
length
();
h
++)
awriter
.
write
(
"0"
);
awriter
.
write
(
""
+
i
);
awriter
.
newLine
();
private
static
void
initTestFile
(
Path
blah
)
throws
IOException
{
try
(
BufferedWriter
awriter
=
Files
.
newBufferedWriter
(
blah
,
ISO8859_1
))
{
for
(
int
i
=
0
;
i
<
4000
;
i
++)
{
String
number
=
new
Integer
(
i
).
toString
();
for
(
int
h
=
0
;
h
<
4
-
number
.
length
();
h
++)
awriter
.
write
(
"0"
);
awriter
.
write
(
""
+
i
);
awriter
.
newLine
();
}
}
awriter
.
flush
();
awriter
.
close
();
}
}
test/java/nio/file/Files/walkFileTree/PrintFileTree.java
浏览文件 @
abcef7b4
...
...
@@ -54,6 +54,7 @@ public class PrintFileTree {
if
(
followLinks
)
options
.
add
(
FileVisitOption
.
FOLLOW_LINKS
);
final
boolean
follow
=
followLinks
;
final
boolean
reportCycles
=
printCycles
;
Files
.
walkFileTree
(
dir
,
options
,
Integer
.
MAX_VALUE
,
new
FileVisitor
<
Path
>()
{
@Override
...
...
@@ -63,8 +64,7 @@ public class PrintFileTree {
}
@Override
public
FileVisitResult
visitFile
(
Path
file
,
BasicFileAttributes
attrs
)
{
if
(!
attrs
.
isDirectory
()
||
reportCycles
)
System
.
out
.
println
(
file
);
System
.
out
.
println
(
file
);
return
FileVisitResult
.
CONTINUE
;
}
@Override
...
...
@@ -79,11 +79,13 @@ public class PrintFileTree {
public
FileVisitResult
visitFileFailed
(
Path
file
,
IOException
exc
)
throws
IOException
{
if
(
reportCycles
&&
(
exc
instanceof
FileSystemLoopException
))
{
System
.
out
.
println
(
file
);
if
(
follow
&&
(
exc
instanceof
FileSystemLoopException
))
{
if
(
reportCycles
)
System
.
out
.
println
(
file
);
return
FileVisitResult
.
CONTINUE
;
}
else
{
throw
exc
;
}
throw
exc
;
}
});
}
...
...
test/java/util/Hashtable/SerializationDeadlock.java
0 → 100644
浏览文件 @
abcef7b4
/*
* Copyright (c) 2010, 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) 2010, 2011 IBM Corporation
*/
/*
* @test
* @bug 6927486
* @summary Serializing Hashtable objects which refer to each other should not be able to deadlock.
* @author Neil Richards <neil.richards@ngmr.net>, <neil_richards@uk.ibm.com>
*/
import
java.io.ByteArrayOutputStream
;
import
java.io.IOException
;
import
java.io.ObjectOutputStream
;
import
java.io.PrintWriter
;
import
java.io.Serializable
;
import
java.io.StringWriter
;
import
java.util.ArrayList
;
import
java.util.Hashtable
;
import
java.util.List
;
import
java.util.concurrent.CyclicBarrier
;
public
class
SerializationDeadlock
{
public
static
void
main
(
final
String
[]
args
)
throws
Exception
{
// Test for Hashtable serialization deadlock
final
Hashtable
<
Object
,
Object
>
h1
=
new
Hashtable
<>();
final
Hashtable
<
Object
,
Object
>
h2
=
new
Hashtable
<>();
final
TestBarrier
testStart
=
new
TestBarrier
(
3
);
// Populate the hashtables so that they refer to each other
h1
.
put
(
testStart
,
h2
);
h2
.
put
(
testStart
,
h1
);
final
CyclicBarrier
testEnd
=
new
CyclicBarrier
(
3
);
final
TestThread
t1
=
new
TestThread
(
h1
,
testEnd
);
final
TestThread
t2
=
new
TestThread
(
h2
,
testEnd
);
t1
.
start
();
t2
.
start
();
// Wait for both test threads to have initiated serialization
// of the 'testStart' object (and hence of both 'h1' and 'h2')
testStart
.
await
();
// Wait for both test threads to successfully finish serialization
// of 'h1' and 'h2'.
System
.
out
.
println
(
"Waiting for Hashtable serialization to complete ..."
);
System
.
out
.
println
(
"(This test will hang if serialization deadlocks)"
);
testEnd
.
await
();
System
.
out
.
println
(
"Test PASSED: serialization completed successfully"
);
TestThread
.
handleExceptions
();
}
static
final
class
TestBarrier
extends
CyclicBarrier
implements
Serializable
{
public
TestBarrier
(
final
int
count
)
{
super
(
count
);
}
private
void
writeObject
(
final
ObjectOutputStream
oos
)
throws
IOException
{
oos
.
defaultWriteObject
();
// Wait until all test threads have started serializing data
try
{
await
();
}
catch
(
final
Exception
e
)
{
throw
new
IOException
(
"Test ERROR: Unexpected exception caught"
,
e
);
}
}
}
static
final
class
TestThread
extends
Thread
{
private
static
final
List
<
Exception
>
exceptions
=
new
ArrayList
<>();
private
final
Hashtable
<
Object
,
Object
>
hashtable
;
private
final
CyclicBarrier
testEnd
;
public
TestThread
(
final
Hashtable
<
Object
,
Object
>
hashtable
,
final
CyclicBarrier
testEnd
)
{
this
.
hashtable
=
hashtable
;
this
.
testEnd
=
testEnd
;
setDaemon
(
true
);
}
public
void
run
()
{
try
{
final
ByteArrayOutputStream
baos
=
new
ByteArrayOutputStream
();
final
ObjectOutputStream
oos
=
new
ObjectOutputStream
(
baos
);
oos
.
writeObject
(
hashtable
);
oos
.
close
();
}
catch
(
final
IOException
ioe
)
{
addException
(
ioe
);
}
finally
{
try
{
testEnd
.
await
();
}
catch
(
Exception
e
)
{
addException
(
e
);
}
}
}
private
static
synchronized
void
addException
(
final
Exception
exception
)
{
exceptions
.
add
(
exception
);
}
public
static
synchronized
void
handleExceptions
()
{
if
(
false
==
exceptions
.
isEmpty
())
{
throw
new
RuntimeException
(
getErrorText
(
exceptions
));
}
}
private
static
String
getErrorText
(
final
List
<
Exception
>
exceptions
)
{
final
StringWriter
sw
=
new
StringWriter
();
final
PrintWriter
pw
=
new
PrintWriter
(
sw
);
pw
.
println
(
"Test ERROR: Unexpected exceptions thrown on test threads:"
);
for
(
Exception
exception
:
exceptions
)
{
pw
.
print
(
"\t"
);
pw
.
println
(
exception
);
for
(
StackTraceElement
element
:
exception
.
getStackTrace
())
{
pw
.
print
(
"\t\tat "
);
pw
.
println
(
element
);
}
}
pw
.
close
();
return
sw
.
toString
();
}
}
}
test/java/util/Hashtable/SimpleSerialization.java
0 → 100644
浏览文件 @
abcef7b4
/*
* Copyright (c) 2010, 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) 2010, 2011 IBM Corporation
*/
/*
* @test
* @bug 6927486
* @summary A serialized Hashtable can be de-serialized properly.
* @author Neil Richards <neil.richards@ngmr.net>, <neil_richards@uk.ibm.com>
*/
import
java.io.ByteArrayInputStream
;
import
java.io.ByteArrayOutputStream
;
import
java.io.IOException
;
import
java.io.ObjectInputStream
;
import
java.io.ObjectOutputStream
;
import
java.io.PrintWriter
;
import
java.io.StringWriter
;
import
java.util.Hashtable
;
public
class
SimpleSerialization
{
public
static
void
main
(
final
String
[]
args
)
throws
Exception
{
Hashtable
<
String
,
String
>
h1
=
new
Hashtable
<>();
h1
.
put
(
"key"
,
"value"
);
final
ByteArrayOutputStream
baos
=
new
ByteArrayOutputStream
();
final
ObjectOutputStream
oos
=
new
ObjectOutputStream
(
baos
);
oos
.
writeObject
(
h1
);
oos
.
close
();
final
byte
[]
data
=
baos
.
toByteArray
();
final
ByteArrayInputStream
bais
=
new
ByteArrayInputStream
(
data
);
final
ObjectInputStream
ois
=
new
ObjectInputStream
(
bais
);
final
Object
deserializedObject
=
ois
.
readObject
();
ois
.
close
();
if
(
false
==
h1
.
equals
(
deserializedObject
))
{
throw
new
RuntimeException
(
getFailureText
(
h1
,
deserializedObject
));
}
}
private
static
String
getFailureText
(
final
Object
orig
,
final
Object
copy
)
{
final
StringWriter
sw
=
new
StringWriter
();
final
PrintWriter
pw
=
new
PrintWriter
(
sw
);
pw
.
println
(
"Test FAILED: Deserialized object is not equal to the original object"
);
pw
.
print
(
"\tOriginal: "
);
printObject
(
pw
,
orig
).
println
();
pw
.
print
(
"\tCopy: "
);
printObject
(
pw
,
copy
).
println
();
pw
.
close
();
return
sw
.
toString
();
}
private
static
PrintWriter
printObject
(
final
PrintWriter
pw
,
final
Object
o
)
{
pw
.
printf
(
"%s@%08x"
,
o
.
getClass
().
getName
(),
System
.
identityHashCode
(
o
));
return
pw
;
}
}
test/java/util/Vector/SerializationDeadlock.java
0 → 100644
浏览文件 @
abcef7b4
/*
* Copyright (c) 2010, 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) 2010, 2011 IBM Corporation
*/
/*
* @test
* @bug 6934356
* @summary Serializing Vector objects which refer to each other should not be able to deadlock.
* @author Neil Richards <neil.richards@ngmr.net>, <neil_richards@uk.ibm.com>
*/
import
java.io.ByteArrayOutputStream
;
import
java.io.IOException
;
import
java.io.ObjectOutputStream
;
import
java.io.PrintWriter
;
import
java.io.Serializable
;
import
java.io.StringWriter
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.Vector
;
import
java.util.concurrent.CyclicBarrier
;
public
class
SerializationDeadlock
{
public
static
void
main
(
final
String
[]
args
)
throws
Exception
{
// Test for Vector serialization deadlock
final
Vector
<
Object
>
v1
=
new
Vector
<>();
final
Vector
<
Object
>
v2
=
new
Vector
<>();
final
TestBarrier
testStart
=
new
TestBarrier
(
3
);
// Populate the vectors so that they refer to each other
v1
.
add
(
testStart
);
v1
.
add
(
v2
);
v2
.
add
(
testStart
);
v2
.
add
(
v1
);
final
CyclicBarrier
testEnd
=
new
CyclicBarrier
(
3
);
final
TestThread
t1
=
new
TestThread
(
v1
,
testEnd
);
final
TestThread
t2
=
new
TestThread
(
v2
,
testEnd
);
t1
.
start
();
t2
.
start
();
// Wait for both test threads to have initiated serialization
// of the 'testStart' object (and hence of both 'v1' and 'v2')
testStart
.
await
();
// Wait for both test threads to successfully finish serialization
// of 'v1' and 'v2'.
System
.
out
.
println
(
"Waiting for Vector serialization to complete ..."
);
System
.
out
.
println
(
"(This test will hang if serialization deadlocks)"
);
testEnd
.
await
();
System
.
out
.
println
(
"Test PASSED: serialization completed successfully"
);
TestThread
.
handleExceptions
();
}
static
final
class
TestBarrier
extends
CyclicBarrier
implements
Serializable
{
public
TestBarrier
(
final
int
count
)
{
super
(
count
);
}
private
void
writeObject
(
final
ObjectOutputStream
oos
)
throws
IOException
{
oos
.
defaultWriteObject
();
// Wait until all test threads have started serializing data
try
{
await
();
}
catch
(
final
Exception
e
)
{
throw
new
IOException
(
"Test ERROR: Unexpected exception caught"
,
e
);
}
}
}
static
final
class
TestThread
extends
Thread
{
private
static
final
List
<
Exception
>
exceptions
=
new
ArrayList
<>();
private
final
Vector
vector
;
private
final
CyclicBarrier
testEnd
;
public
TestThread
(
final
Vector
vector
,
final
CyclicBarrier
testEnd
)
{
this
.
vector
=
vector
;
this
.
testEnd
=
testEnd
;
setDaemon
(
true
);
}
public
void
run
()
{
try
{
final
ByteArrayOutputStream
baos
=
new
ByteArrayOutputStream
();
final
ObjectOutputStream
oos
=
new
ObjectOutputStream
(
baos
);
oos
.
writeObject
(
vector
);
oos
.
close
();
}
catch
(
final
IOException
ioe
)
{
addException
(
ioe
);
}
finally
{
try
{
testEnd
.
await
();
}
catch
(
Exception
e
)
{
addException
(
e
);
}
}
}
private
static
synchronized
void
addException
(
final
Exception
exception
)
{
exceptions
.
add
(
exception
);
}
public
static
synchronized
void
handleExceptions
()
{
if
(
false
==
exceptions
.
isEmpty
())
{
throw
new
RuntimeException
(
getErrorText
(
exceptions
));
}
}
private
static
String
getErrorText
(
final
List
<
Exception
>
exceptions
)
{
final
StringWriter
sw
=
new
StringWriter
();
final
PrintWriter
pw
=
new
PrintWriter
(
sw
);
pw
.
println
(
"Test ERROR: Unexpected exceptions thrown on test threads:"
);
for
(
Exception
exception
:
exceptions
)
{
pw
.
print
(
"\t"
);
pw
.
println
(
exception
);
for
(
StackTraceElement
element
:
exception
.
getStackTrace
())
{
pw
.
print
(
"\t\tat "
);
pw
.
println
(
element
);
}
}
pw
.
close
();
return
sw
.
toString
();
}
}
}
test/java/util/Vector/SimpleSerialization.java
0 → 100644
浏览文件 @
abcef7b4
/*
* Copyright (c) 2010, 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) 2010, 2011 IBM Corporation
*/
/*
* @test
* @bug 6934356
* @summary A serialized Vector can be successfully de-serialized.
* @author Neil Richards <neil.richards@ngmr.net>, <neil_richards@uk.ibm.com>
*/
import
java.io.ByteArrayInputStream
;
import
java.io.ByteArrayOutputStream
;
import
java.io.IOException
;
import
java.io.ObjectInputStream
;
import
java.io.ObjectOutputStream
;
import
java.io.PrintWriter
;
import
java.io.StringWriter
;
import
java.util.Vector
;
public
class
SimpleSerialization
{
public
static
void
main
(
final
String
[]
args
)
throws
Exception
{
final
Vector
<
String
>
v1
=
new
Vector
<>();
v1
.
add
(
"entry1"
);
v1
.
add
(
"entry2"
);
final
ByteArrayOutputStream
baos
=
new
ByteArrayOutputStream
();
final
ObjectOutputStream
oos
=
new
ObjectOutputStream
(
baos
);
oos
.
writeObject
(
v1
);
oos
.
close
();
final
byte
[]
data
=
baos
.
toByteArray
();
final
ByteArrayInputStream
bais
=
new
ByteArrayInputStream
(
data
);
final
ObjectInputStream
ois
=
new
ObjectInputStream
(
bais
);
final
Object
deserializedObject
=
ois
.
readObject
();
ois
.
close
();
if
(
false
==
v1
.
equals
(
deserializedObject
))
{
throw
new
RuntimeException
(
getFailureText
(
v1
,
deserializedObject
));
}
}
private
static
String
getFailureText
(
final
Object
orig
,
final
Object
copy
)
{
final
StringWriter
sw
=
new
StringWriter
();
final
PrintWriter
pw
=
new
PrintWriter
(
sw
);
pw
.
println
(
"Test FAILED: Deserialized object is not equal to the original object"
);
pw
.
print
(
"\tOriginal: "
);
printObject
(
pw
,
orig
).
println
();
pw
.
print
(
"\tCopy: "
);
printObject
(
pw
,
copy
).
println
();
pw
.
close
();
return
sw
.
toString
();
}
private
static
PrintWriter
printObject
(
final
PrintWriter
pw
,
final
Object
o
)
{
pw
.
printf
(
"%s@%08x"
,
o
.
getClass
().
getName
(),
System
.
identityHashCode
(
o
));
return
pw
;
}
}
test/java/util/concurrent/BlockingQueue/CancelledProducerConsumerLoops.java
浏览文件 @
abcef7b4
...
...
@@ -124,11 +124,11 @@ public class CancelledProducerConsumerLoops {
oneRun
(
new
ArrayBlockingQueue
<
Integer
>(
CAPACITY
),
pairs
,
iters
);
oneRun
(
new
LinkedBlockingQueue
<
Integer
>(
CAPACITY
),
pairs
,
iters
);
oneRun
(
new
LinkedBlockingDeque
<
Integer
>(
CAPACITY
),
pairs
,
iters
);
oneRun
(
new
LinkedTransferQueue
<
Integer
>(),
pairs
,
iters
);
oneRun
(
new
SynchronousQueue
<
Integer
>(),
pairs
,
iters
/
8
);
/*
PriorityBlockingQueue is unbounded
/*
unbounded queue implementations are prone to OOME
oneRun(new PriorityBlockingQueue<Integer>(iters / 2 * pairs), pairs, iters / 4);
oneRun(new LinkedTransferQueue<Integer>(), pairs, iters);
*/
}
...
...
test/sun/security/krb5/auto/BadKdc1.java
浏览文件 @
abcef7b4
/*
* Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2009,
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
...
...
@@ -24,7 +24,7 @@
/*
* @test
* @bug 6843127
* @run main/timeout=300 BadKdc1
* @run main/
othervm/
timeout=300 BadKdc1
* @summary krb5 should not try to access unavailable kdc too often
*/
...
...
test/sun/security/krb5/auto/BadKdc2.java
浏览文件 @
abcef7b4
/*
* Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2009,
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
...
...
@@ -24,7 +24,7 @@
/*
* @test
* @bug 6843127
* @run main/timeout=300 BadKdc2
* @run main/
othervm/
timeout=300 BadKdc2
* @summary krb5 should not try to access unavailable kdc too often
*/
...
...
test/sun/security/krb5/auto/BadKdc3.java
浏览文件 @
abcef7b4
/*
* Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2009,
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
...
...
@@ -24,7 +24,7 @@
/*
* @test
* @bug 6843127
* @run main/timeout=300 BadKdc3
* @run main/
othervm/
timeout=300 BadKdc3
* @summary krb5 should not try to access unavailable kdc too often
*/
...
...
test/sun/security/krb5/auto/BadKdc4.java
浏览文件 @
abcef7b4
/*
* Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2009,
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
...
...
@@ -24,7 +24,7 @@
/*
* @test
* @bug 6843127
* @run main/timeout=300 BadKdc4
* @run main/
othervm/
timeout=300 BadKdc4
* @summary krb5 should not try to access unavailable kdc too often
*/
...
...
test/sun/security/krb5/auto/CleanState.java
浏览文件 @
abcef7b4
/*
* Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2008,
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
...
...
@@ -24,6 +24,7 @@
/*
* @test
* @bug 6716534
* @run main/othervm CleanState
* @summary Krb5LoginModule has not cleaned temp info between authentication attempts
*/
import
com.sun.security.auth.module.Krb5LoginModule
;
...
...
test/sun/security/krb5/auto/CrossRealm.java
浏览文件 @
abcef7b4
/*
* Copyright (c) 2008, 20
09
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2008, 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
...
...
@@ -24,6 +24,7 @@
/*
* @test
* @bug 6706974
* @run main/othervm CrossRealm
* @summary Add krb5 test infrastructure
*/
import
java.io.File
;
...
...
test/sun/security/krb5/auto/HttpNegotiateServer.java
浏览文件 @
abcef7b4
/*
* Copyright (c) 2009, 201
0
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2009, 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
...
...
@@ -24,6 +24,7 @@
/*
* @test
* @bug 6578647 6829283
* @run main/othervm HttpNegotiateServer
* @summary Undefined requesting URL in java.net.Authenticator.getPasswordAuthentication()
* @summary HTTP/Negotiate: Authenticator triggered again when user cancels the first one
*/
...
...
test/sun/security/krb5/auto/IgnoreChannelBinding.java
浏览文件 @
abcef7b4
/*
* Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2009,
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
...
...
@@ -24,6 +24,7 @@
/*
* @test
* @bug 6851973
* @run main/othervm IgnoreChannelBinding
* @summary ignore incoming channel binding if acceptor does not set one
*/
...
...
test/sun/security/krb5/auto/KerberosHashEqualsTest.java
浏览文件 @
abcef7b4
/*
* Copyright (c) 2005, 20
08
, 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
...
...
@@ -24,6 +24,7 @@
/*
* @test
* @bug 4641821
* @run main/othervm KerberosHashEqualsTest
* @summary hashCode() and equals() for KerberosKey and KerberosTicket
*/
...
...
test/sun/security/krb5/auto/LifeTimeInSeconds.java
浏览文件 @
abcef7b4
/*
* Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2009,
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
...
...
@@ -24,6 +24,7 @@
/*
* @test
* @bug 6857802
* @run main/othervm LifeTimeInSeconds
* @summary GSS getRemainingInitLifetime method returns milliseconds not seconds
*/
import
org.ietf.jgss.GSSCredential
;
...
...
test/sun/security/krb5/auto/LoginModuleOptions.java
浏览文件 @
abcef7b4
/*
* Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2008,
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
...
...
@@ -24,6 +24,7 @@
/*
* @test
* @bug 6765491
* @run main/othervm LoginModuleOptions
* @summary Krb5LoginModule a little too restrictive, and the doc is not clear.
*/
import
com.sun.security.auth.module.Krb5LoginModule
;
...
...
test/sun/security/krb5/auto/MaxRetries.java
浏览文件 @
abcef7b4
/*
* Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2010,
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
...
...
@@ -24,7 +24,7 @@
/*
* @test
* @bug 6844193
* @run main/timeout=300 MaxRetries
* @run main/
othervm/
timeout=300 MaxRetries
* @summary support max_retries in krb5.conf
*/
...
...
test/sun/security/krb5/auto/MoreKvno.java
浏览文件 @
abcef7b4
/*
* Copyright (c) 2009, 201
0
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2009, 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
...
...
@@ -25,6 +25,7 @@
* @test
* @bug 6893158
* @bug 6907425
* @run main/othervm MoreKvno
* @summary AP_REQ check should use key version number
*/
...
...
test/sun/security/krb5/auto/NewSalt.java
浏览文件 @
abcef7b4
/*
* Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2010,
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
...
...
@@ -25,7 +25,7 @@
* @test
* @bug 6960894
* @summary Better AS-REQ creation and processing
* @run main NewSalt
* @run main
/othervm
NewSalt
* @run main/othervm -Dnopreauth NewSalt
* @run main/othervm -Donlyonepreauth NewSalt
*/
...
...
test/sun/security/krb5/auto/NonMutualSpnego.java
浏览文件 @
abcef7b4
/*
* Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2008,
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
...
...
@@ -24,6 +24,7 @@
/*
* @test
* @bug 6733095
* @run main/othervm NonMutualSpnego
* @summary Failure when SPNEGO request non-Mutual
*/
...
...
test/sun/security/krb5/auto/SSL.java
浏览文件 @
abcef7b4
/*
* Copyright (c) 2009, 201
0
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2009, 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
...
...
@@ -25,16 +25,16 @@
* @test
* @bug 6894643 6913636
* @summary Test JSSE Kerberos ciphersuite
* @run main SSL TLS_KRB5_WITH_RC4_128_SHA
* @run main SSL TLS_KRB5_WITH_RC4_128_MD5
* @run main SSL TLS_KRB5_WITH_3DES_EDE_CBC_SHA
* @run main SSL TLS_KRB5_WITH_3DES_EDE_CBC_MD5
* @run main SSL TLS_KRB5_WITH_DES_CBC_SHA
* @run main SSL TLS_KRB5_WITH_DES_CBC_MD5
* @run main SSL TLS_KRB5_EXPORT_WITH_RC4_40_SHA
* @run main SSL TLS_KRB5_EXPORT_WITH_RC4_40_MD5
* @run main SSL TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA
* @run main SSL TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5
* @run main
/othervm
SSL TLS_KRB5_WITH_RC4_128_SHA
* @run main
/othervm
SSL TLS_KRB5_WITH_RC4_128_MD5
* @run main
/othervm
SSL TLS_KRB5_WITH_3DES_EDE_CBC_SHA
* @run main
/othervm
SSL TLS_KRB5_WITH_3DES_EDE_CBC_MD5
* @run main
/othervm
SSL TLS_KRB5_WITH_DES_CBC_SHA
* @run main
/othervm
SSL TLS_KRB5_WITH_DES_CBC_MD5
* @run main
/othervm
SSL TLS_KRB5_EXPORT_WITH_RC4_40_SHA
* @run main
/othervm
SSL TLS_KRB5_EXPORT_WITH_RC4_40_MD5
* @run main
/othervm
SSL TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA
* @run main
/othervm
SSL TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5
*/
import
java.io.*
;
import
java.net.InetAddress
;
...
...
test/sun/security/krb5/auto/SpnegoReqFlags.java
浏览文件 @
abcef7b4
/*
* Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2009,
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
...
...
@@ -24,6 +24,7 @@
/*
* @test
* @bug 6815182
* @run main/othervm SpnegoReqFlags
* @summary GSSAPI/SPNEGO does not work with server using MIT Kerberos library
*/
...
...
test/sun/security/krb5/auto/Test5653.java
浏览文件 @
abcef7b4
/*
* Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2010,
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
...
...
@@ -24,6 +24,7 @@
/*
* @test
* @bug 6895424
* @run main/othervm Test5653
* @summary RFC 5653
*/
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录