Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_jdk
提交
544d332e
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看板
提交
544d332e
编写于
6月 05, 2018
作者:
I
igerasim
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
8197925: Better stack walking
Reviewed-by: alanb, skoivu, rriggs, igerasim, rhalade, darcy
上级
27c7308e
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
56 addition
and
2 deletion
+56
-2
src/share/classes/java/io/ObjectStreamClass.java
src/share/classes/java/io/ObjectStreamClass.java
+56
-2
未找到文件。
src/share/classes/java/io/ObjectStreamClass.java
浏览文件 @
544d332e
/*
* Copyright (c) 1996, 201
3
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1996, 201
8
, 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
...
...
@@ -86,6 +86,18 @@ public class ObjectStreamClass implements Serializable {
private
static
final
ObjectStreamField
[]
serialPersistentFields
=
NO_FIELDS
;
/** true if deserialization constructor checking is disabled */
private
static
boolean
disableSerialConstructorChecks
=
AccessController
.
doPrivileged
(
new
PrivilegedAction
<
Boolean
>()
{
public
Boolean
run
()
{
String
prop
=
"jdk.disableSerialConstructorChecks"
;
return
"true"
.
equals
(
System
.
getProperty
(
prop
))
?
Boolean
.
TRUE
:
Boolean
.
FALSE
;
}
}
).
booleanValue
();
/** reflection factory for obtaining serialization constructors */
private
static
final
ReflectionFactory
reflFactory
=
AccessController
.
doPrivileged
(
...
...
@@ -1496,6 +1508,46 @@ public class ObjectStreamClass implements Serializable {
}
}
/**
* Given a class, determines whether its superclass has
* any constructors that are accessible from the class.
* This is a special purpose method intended to do access
* checking for a serializable class and its superclasses
* up to, but not including, the first non-serializable
* superclass. This also implies that the superclass is
* always non-null, because a serializable class must be a
* class (not an interface) and Object is not serializable.
*
* @param cl the class from which access is checked
* @return whether the superclass has a constructor accessible from cl
*/
private
static
boolean
superHasAccessibleConstructor
(
Class
<?>
cl
)
{
Class
<?>
superCl
=
cl
.
getSuperclass
();
assert
Serializable
.
class
.
isAssignableFrom
(
cl
);
assert
superCl
!=
null
;
if
(
packageEquals
(
cl
,
superCl
))
{
// accessible if any non-private constructor is found
for
(
Constructor
<?>
ctor
:
superCl
.
getDeclaredConstructors
())
{
if
((
ctor
.
getModifiers
()
&
Modifier
.
PRIVATE
)
==
0
)
{
return
true
;
}
}
return
false
;
}
else
{
// accessible if the parent is public and any constructor
// is protected or public
if
((
superCl
.
getModifiers
()
&
Modifier
.
PUBLIC
)
==
0
)
{
return
false
;
}
for
(
Constructor
<?>
ctor
:
superCl
.
getDeclaredConstructors
())
{
if
((
ctor
.
getModifiers
()
&
(
Modifier
.
PROTECTED
|
Modifier
.
PUBLIC
))
!=
0
)
{
return
true
;
}
}
return
false
;
}
}
/**
* Returns subclass-accessible no-arg constructor of first non-serializable
* superclass, or null if none found. Access checks are disabled on the
...
...
@@ -1504,7 +1556,9 @@ public class ObjectStreamClass implements Serializable {
private
static
Constructor
<?>
getSerializableConstructor
(
Class
<?>
cl
)
{
Class
<?>
initCl
=
cl
;
while
(
Serializable
.
class
.
isAssignableFrom
(
initCl
))
{
if
((
initCl
=
initCl
.
getSuperclass
())
==
null
)
{
Class
<?>
prev
=
initCl
;
if
((
initCl
=
initCl
.
getSuperclass
())
==
null
||
(!
disableSerialConstructorChecks
&&
!
superHasAccessibleConstructor
(
prev
)))
{
return
null
;
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录