Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_jdk
提交
7474dea2
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看板
提交
7474dea2
编写于
4月 06, 2020
作者:
A
andrew
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
8219597: (bf) Heap buffer state changes could provoke unexpected exceptions
Reviewed-by: mbalao
上级
42d4fd42
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
45 addition
and
31 deletion
+45
-31
src/share/classes/java/nio/Heap-X-Buffer.java.template
src/share/classes/java/nio/Heap-X-Buffer.java.template
+45
-31
未找到文件。
src/share/classes/java/nio/Heap-X-Buffer.java.template
浏览文件 @
7474dea2
...
...
@@ -95,11 +95,12 @@ class Heap$Type$Buffer$RW$
}
public
$
Type
$
Buffer
slice
()
{
int
rem
=
this
.
remaining
();
return
new
Heap
$
Type
$
Buffer
$
RW
$(
hb
,
-
1
,
0
,
this
.
remaining
()
,
this
.
remaining
()
,
rem
,
rem
,
this
.
position
()
+
offset
);
}
...
...
@@ -147,10 +148,11 @@ class Heap$Type$Buffer$RW$
public
$
Type
$
Buffer
get
($
type
$[]
dst
,
int
offset
,
int
length
)
{
checkBounds
(
offset
,
length
,
dst
.
length
);
if
(
length
>
remaining
())
int
pos
=
position
();
if
(
length
>
limit
()
-
pos
)
throw
new
BufferUnderflowException
();
System
.
arraycopy
(
hb
,
ix
(
pos
ition
()
),
dst
,
offset
,
length
);
position
(
pos
ition
()
+
length
);
System
.
arraycopy
(
hb
,
ix
(
pos
),
dst
,
offset
,
length
);
position
(
pos
+
length
);
return
this
;
}
...
...
@@ -185,10 +187,11 @@ class Heap$Type$Buffer$RW$
public
$
Type
$
Buffer
put
($
type
$[]
src
,
int
offset
,
int
length
)
{
#
if
[
rw
]
checkBounds
(
offset
,
length
,
src
.
length
);
if
(
length
>
remaining
())
int
pos
=
position
();
if
(
length
>
limit
()
-
pos
)
throw
new
BufferOverflowException
();
System
.
arraycopy
(
src
,
offset
,
hb
,
ix
(
pos
ition
()
),
length
);
position
(
pos
ition
()
+
length
);
System
.
arraycopy
(
src
,
offset
,
hb
,
ix
(
pos
),
length
);
position
(
pos
+
length
);
return
this
;
#
else
[
rw
]
throw
new
ReadOnlyBufferException
();
...
...
@@ -201,19 +204,22 @@ class Heap$Type$Buffer$RW$
if
(
src
==
this
)
throw
new
IllegalArgumentException
();
Heap
$
Type
$
Buffer
sb
=
(
Heap
$
Type
$
Buffer
)
src
;
int
n
=
sb
.
remaining
();
if
(
n
>
remaining
())
int
pos
=
position
();
int
sbpos
=
sb
.
position
();
int
n
=
sb
.
limit
()
-
sbpos
;
if
(
n
>
limit
()
-
pos
)
throw
new
BufferOverflowException
();
System
.
arraycopy
(
sb
.
hb
,
sb
.
ix
(
sb
.
position
()
),
hb
,
ix
(
pos
ition
()
),
n
);
sb
.
position
(
sb
.
position
()
+
n
);
position
(
pos
ition
()
+
n
);
System
.
arraycopy
(
sb
.
hb
,
sb
.
ix
(
sb
pos
),
hb
,
ix
(
pos
),
n
);
sb
.
position
(
sb
pos
+
n
);
position
(
pos
+
n
);
}
else
if
(
src
.
isDirect
())
{
int
n
=
src
.
remaining
();
if
(
n
>
remaining
())
int
pos
=
position
();
if
(
n
>
limit
()
-
pos
)
throw
new
BufferOverflowException
();
src
.
get
(
hb
,
ix
(
pos
ition
()
),
n
);
position
(
pos
ition
()
+
n
);
src
.
get
(
hb
,
ix
(
pos
),
n
);
position
(
pos
+
n
);
}
else
{
super
.
put
(
src
);
}
...
...
@@ -225,8 +231,10 @@ class Heap$Type$Buffer$RW$
public
$
Type
$
Buffer
compact
()
{
#
if
[
rw
]
System
.
arraycopy
(
hb
,
ix
(
position
()),
hb
,
ix
(
0
),
remaining
());
position
(
remaining
());
int
pos
=
position
();
int
rem
=
limit
()
-
pos
;
System
.
arraycopy
(
hb
,
ix
(
pos
),
hb
,
ix
(
0
),
rem
);
position
(
rem
);
limit
(
capacity
());
discardMark
();
return
this
;
...
...
@@ -284,8 +292,9 @@ class Heap$Type$Buffer$RW$
}
public
CharBuffer
asCharBuffer
()
{
int
size
=
this
.
remaining
()
>>
1
;
int
off
=
offset
+
position
();
int
pos
=
position
();
int
size
=
(
limit
()
-
pos
)
>>
1
;
int
off
=
offset
+
pos
;
return
(
bigEndian
?
(
CharBuffer
)(
new
ByteBufferAsCharBuffer
$
RW
$
B
(
this
,
-
1
,
...
...
@@ -335,8 +344,9 @@ class Heap$Type$Buffer$RW$
}
public
ShortBuffer
asShortBuffer
()
{
int
size
=
this
.
remaining
()
>>
1
;
int
off
=
offset
+
position
();
int
pos
=
position
();
int
size
=
(
limit
()
-
pos
)
>>
1
;
int
off
=
offset
+
pos
;
return
(
bigEndian
?
(
ShortBuffer
)(
new
ByteBufferAsShortBuffer
$
RW
$
B
(
this
,
-
1
,
...
...
@@ -386,8 +396,9 @@ class Heap$Type$Buffer$RW$
}
public
IntBuffer
asIntBuffer
()
{
int
size
=
this
.
remaining
()
>>
2
;
int
off
=
offset
+
position
();
int
pos
=
position
();
int
size
=
(
limit
()
-
pos
)
>>
2
;
int
off
=
offset
+
pos
;
return
(
bigEndian
?
(
IntBuffer
)(
new
ByteBufferAsIntBuffer
$
RW
$
B
(
this
,
-
1
,
...
...
@@ -437,8 +448,9 @@ class Heap$Type$Buffer$RW$
}
public
LongBuffer
asLongBuffer
()
{
int
size
=
this
.
remaining
()
>>
3
;
int
off
=
offset
+
position
();
int
pos
=
position
();
int
size
=
(
limit
()
-
pos
)
>>
3
;
int
off
=
offset
+
pos
;
return
(
bigEndian
?
(
LongBuffer
)(
new
ByteBufferAsLongBuffer
$
RW
$
B
(
this
,
-
1
,
...
...
@@ -488,8 +500,9 @@ class Heap$Type$Buffer$RW$
}
public
FloatBuffer
asFloatBuffer
()
{
int
size
=
this
.
remaining
()
>>
2
;
int
off
=
offset
+
position
();
int
pos
=
position
();
int
size
=
(
limit
()
-
pos
)
>>
2
;
int
off
=
offset
+
pos
;
return
(
bigEndian
?
(
FloatBuffer
)(
new
ByteBufferAsFloatBuffer
$
RW
$
B
(
this
,
-
1
,
...
...
@@ -539,8 +552,9 @@ class Heap$Type$Buffer$RW$
}
public
DoubleBuffer
asDoubleBuffer
()
{
int
size
=
this
.
remaining
()
>>
3
;
int
off
=
offset
+
position
();
int
pos
=
position
();
int
size
=
(
limit
()
-
pos
)
>>
3
;
int
off
=
offset
+
pos
;
return
(
bigEndian
?
(
DoubleBuffer
)(
new
ByteBufferAsDoubleBuffer
$
RW
$
B
(
this
,
-
1
,
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录