Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_jdk
提交
a5fd5646
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看板
提交
a5fd5646
编写于
2月 17, 2010
作者:
B
bae
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
6909597: Sun Java Runtime Environment JPEGImageReader stepX Integer Overflow Vulnerability
Reviewed-by: igor
上级
bf131af4
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
14 addition
and
3 deletion
+14
-3
src/share/native/sun/awt/image/jpeg/imageioJPEG.c
src/share/native/sun/awt/image/jpeg/imageioJPEG.c
+14
-3
未找到文件。
src/share/native/sun/awt/image/jpeg/imageioJPEG.c
浏览文件 @
a5fd5646
...
@@ -258,6 +258,7 @@ static void clearStreamBuffer(streamBufferPtr sb) {
...
@@ -258,6 +258,7 @@ static void clearStreamBuffer(streamBufferPtr sb) {
typedef
struct
pixelBufferStruct
{
typedef
struct
pixelBufferStruct
{
jobject
hpixelObject
;
// Usually a DataBuffer bank as a byte array
jobject
hpixelObject
;
// Usually a DataBuffer bank as a byte array
unsigned
int
byteBufferLength
;
union
pixptr
{
union
pixptr
{
INT32
*
ip
;
// Pinned buffer pointer, as 32-bit ints
INT32
*
ip
;
// Pinned buffer pointer, as 32-bit ints
unsigned
char
*
bp
;
// Pinned buffer pointer, as bytes
unsigned
char
*
bp
;
// Pinned buffer pointer, as bytes
...
@@ -270,6 +271,7 @@ typedef struct pixelBufferStruct {
...
@@ -270,6 +271,7 @@ typedef struct pixelBufferStruct {
*/
*/
static
void
initPixelBuffer
(
pixelBufferPtr
pb
)
{
static
void
initPixelBuffer
(
pixelBufferPtr
pb
)
{
pb
->
hpixelObject
=
NULL
;
pb
->
hpixelObject
=
NULL
;
pb
->
byteBufferLength
=
0
;
pb
->
buf
.
ip
=
NULL
;
pb
->
buf
.
ip
=
NULL
;
}
}
...
@@ -279,13 +281,13 @@ static void initPixelBuffer(pixelBufferPtr pb) {
...
@@ -279,13 +281,13 @@ static void initPixelBuffer(pixelBufferPtr pb) {
*/
*/
static
int
setPixelBuffer
(
JNIEnv
*
env
,
pixelBufferPtr
pb
,
jobject
obj
)
{
static
int
setPixelBuffer
(
JNIEnv
*
env
,
pixelBufferPtr
pb
,
jobject
obj
)
{
pb
->
hpixelObject
=
(
*
env
)
->
NewGlobalRef
(
env
,
obj
);
pb
->
hpixelObject
=
(
*
env
)
->
NewGlobalRef
(
env
,
obj
);
if
(
pb
->
hpixelObject
==
NULL
)
{
if
(
pb
->
hpixelObject
==
NULL
)
{
JNU_ThrowByName
(
env
,
JNU_ThrowByName
(
env
,
"java/lang/OutOfMemoryError"
,
"java/lang/OutOfMemoryError"
,
"Setting Pixel Buffer"
);
"Setting Pixel Buffer"
);
return
NOT_OK
;
return
NOT_OK
;
}
}
pb
->
byteBufferLength
=
(
*
env
)
->
GetArrayLength
(
env
,
pb
->
hpixelObject
);
return
OK
;
return
OK
;
}
}
...
@@ -302,6 +304,7 @@ static void resetPixelBuffer(JNIEnv *env, pixelBufferPtr pb) {
...
@@ -302,6 +304,7 @@ static void resetPixelBuffer(JNIEnv *env, pixelBufferPtr pb) {
unpinPixelBuffer
(
env
,
pb
);
unpinPixelBuffer
(
env
,
pb
);
(
*
env
)
->
DeleteGlobalRef
(
env
,
pb
->
hpixelObject
);
(
*
env
)
->
DeleteGlobalRef
(
env
,
pb
->
hpixelObject
);
pb
->
hpixelObject
=
NULL
;
pb
->
hpixelObject
=
NULL
;
pb
->
byteBufferLength
=
0
;
}
}
}
}
...
@@ -1828,6 +1831,7 @@ Java_com_sun_imageio_plugins_jpeg_JPEGImageReader_readImage
...
@@ -1828,6 +1831,7 @@ Java_com_sun_imageio_plugins_jpeg_JPEGImageReader_readImage
boolean
orderedBands
=
TRUE
;
boolean
orderedBands
=
TRUE
;
imageIODataPtr
data
=
(
imageIODataPtr
)
ptr
;
imageIODataPtr
data
=
(
imageIODataPtr
)
ptr
;
j_decompress_ptr
cinfo
;
j_decompress_ptr
cinfo
;
unsigned
int
numBytes
;
/* verify the inputs */
/* verify the inputs */
...
@@ -2027,15 +2031,22 @@ Java_com_sun_imageio_plugins_jpeg_JPEGImageReader_readImage
...
@@ -2027,15 +2031,22 @@ Java_com_sun_imageio_plugins_jpeg_JPEGImageReader_readImage
// scanline buffer into the raster.
// scanline buffer into the raster.
in
=
scanLinePtr
+
(
sourceXStart
*
cinfo
->
output_components
);
in
=
scanLinePtr
+
(
sourceXStart
*
cinfo
->
output_components
);
if
(
pixelLimit
>
in
)
{
if
(
pixelLimit
>
in
)
{
memcpy
(
out
,
in
,
pixelLimit
-
in
);
numBytes
=
pixelLimit
-
in
;
if
(
numBytes
>
data
->
pixelBuf
.
byteBufferLength
)
{
numBytes
=
data
->
pixelBuf
.
byteBufferLength
;
}
memcpy
(
out
,
in
,
numBytes
);
}
}
}
else
{
}
else
{
numBytes
=
numBands
;
for
(
in
=
scanLinePtr
+
sourceXStart
*
cinfo
->
output_components
;
for
(
in
=
scanLinePtr
+
sourceXStart
*
cinfo
->
output_components
;
in
<
pixelLimit
;
in
<
pixelLimit
&&
numBytes
<=
data
->
pixelBuf
.
byteBufferLength
;
in
+=
pixelStride
)
{
in
+=
pixelStride
)
{
for
(
i
=
0
;
i
<
numBands
;
i
++
)
{
for
(
i
=
0
;
i
<
numBands
;
i
++
)
{
*
out
++
=
*
(
in
+
bands
[
i
]);
*
out
++
=
*
(
in
+
bands
[
i
]);
}
}
numBytes
+=
numBands
;
}
}
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录