Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_jdk
提交
64489044
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看板
提交
64489044
编写于
10月 05, 2016
作者:
A
aghaisas
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
8158356: SIGSEGV when attempting to rotate BufferedImage using AffineTransform by NaN degrees
Reviewed-by: prr, flar
上级
b42b3ba7
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
184 addition
and
3 deletion
+184
-3
src/share/native/sun/awt/medialib/awt_ImagingLib.c
src/share/native/sun/awt/medialib/awt_ImagingLib.c
+23
-1
src/share/native/sun/awt/medialib/mlib_ImageScanPoly.c
src/share/native/sun/awt/medialib/mlib_ImageScanPoly.c
+17
-1
src/share/native/sun/awt/medialib/safe_math.h
src/share/native/sun/awt/medialib/safe_math.h
+6
-1
test/java/awt/geom/AffineTransform/InvalidTransformParameterTest.java
...t/geom/AffineTransform/InvalidTransformParameterTest.java
+138
-0
未找到文件。
src/share/native/sun/awt/medialib/awt_ImagingLib.c
浏览文件 @
64489044
/*
/*
* Copyright (c) 1997, 201
4
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1997, 201
6
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
*
* This code is free software; you can redistribute it and/or modify it
* This code is free software; you can redistribute it and/or modify it
...
@@ -772,6 +772,7 @@ Java_sun_awt_image_ImagingLib_transformBI(JNIEnv *env, jobject this,
...
@@ -772,6 +772,7 @@ Java_sun_awt_image_ImagingLib_transformBI(JNIEnv *env, jobject this,
mlib_image
*
src
;
mlib_image
*
src
;
mlib_image
*
dst
;
mlib_image
*
dst
;
int
i
;
int
i
;
int
j
=
0
;
int
retStatus
=
1
;
int
retStatus
=
1
;
mlib_status
status
;
mlib_status
status
;
double
*
matrix
;
double
*
matrix
;
...
@@ -824,6 +825,15 @@ Java_sun_awt_image_ImagingLib_transformBI(JNIEnv *env, jobject this,
...
@@ -824,6 +825,15 @@ Java_sun_awt_image_ImagingLib_transformBI(JNIEnv *env, jobject this,
return
0
;
return
0
;
}
}
/* Check for invalid double value in transformation matrix */
for
(
j
=
0
;
j
<
6
;
j
++
)
{
if
(
!
(
IS_FINITE
(
matrix
[
j
])))
{
(
*
env
)
->
ReleasePrimitiveArrayCritical
(
env
,
jmatrix
,
matrix
,
JNI_ABORT
);
return
0
;
}
}
if
(
s_printIt
)
{
if
(
s_printIt
)
{
printf
(
"matrix is %g %g %g %g %g %g
\n
"
,
matrix
[
0
],
matrix
[
1
],
printf
(
"matrix is %g %g %g %g %g %g
\n
"
,
matrix
[
0
],
matrix
[
1
],
matrix
[
2
],
matrix
[
3
],
matrix
[
4
],
matrix
[
5
]);
matrix
[
2
],
matrix
[
3
],
matrix
[
4
],
matrix
[
5
]);
...
@@ -980,6 +990,7 @@ Java_sun_awt_image_ImagingLib_transformRaster(JNIEnv *env, jobject this,
...
@@ -980,6 +990,7 @@ Java_sun_awt_image_ImagingLib_transformRaster(JNIEnv *env, jobject this,
mlib_image
*
src
;
mlib_image
*
src
;
mlib_image
*
dst
;
mlib_image
*
dst
;
int
i
;
int
i
;
int
j
=
0
;
int
retStatus
=
1
;
int
retStatus
=
1
;
mlib_status
status
;
mlib_status
status
;
double
*
matrix
;
double
*
matrix
;
...
@@ -1044,6 +1055,17 @@ Java_sun_awt_image_ImagingLib_transformRaster(JNIEnv *env, jobject this,
...
@@ -1044,6 +1055,17 @@ Java_sun_awt_image_ImagingLib_transformRaster(JNIEnv *env, jobject this,
return
0
;
return
0
;
}
}
/* Check for invalid double value in transformation matrix */
for
(
j
=
0
;
j
<
6
;
j
++
)
{
if
(
!
(
IS_FINITE
(
matrix
[
j
])))
{
(
*
env
)
->
ReleasePrimitiveArrayCritical
(
env
,
jmatrix
,
matrix
,
JNI_ABORT
);
free
(
srcRasterP
);
free
(
dstRasterP
);
return
0
;
}
}
if
(
s_printIt
)
{
if
(
s_printIt
)
{
printf
(
"matrix is %g %g %g %g %g %g
\n
"
,
matrix
[
0
],
matrix
[
1
],
printf
(
"matrix is %g %g %g %g %g %g
\n
"
,
matrix
[
0
],
matrix
[
1
],
matrix
[
2
],
matrix
[
3
],
matrix
[
4
],
matrix
[
5
]);
matrix
[
2
],
matrix
[
3
],
matrix
[
4
],
matrix
[
5
]);
...
...
src/share/native/sun/awt/medialib/mlib_ImageScanPoly.c
浏览文件 @
64489044
/*
/*
* Copyright (c) 1997, 20
03
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1997, 20
16
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
*
* This code is free software; you can redistribute it and/or modify it
* This code is free software; you can redistribute it and/or modify it
...
@@ -33,6 +33,8 @@
...
@@ -33,6 +33,8 @@
#include "mlib_image.h"
#include "mlib_image.h"
#include "mlib_SysMath.h"
#include "mlib_SysMath.h"
#include "mlib_ImageAffine.h"
#include "mlib_ImageAffine.h"
#include "safe_math.h"
/***************************************************************/
/***************************************************************/
mlib_status
mlib_AffineEdges
(
mlib_affine_param
*
param
,
mlib_status
mlib_AffineEdges
(
mlib_affine_param
*
param
,
...
@@ -83,6 +85,12 @@ mlib_status mlib_AffineEdges(mlib_affine_param *param,
...
@@ -83,6 +85,12 @@ mlib_status mlib_AffineEdges(mlib_affine_param *param,
dstYStride
=
mlib_ImageGetStride
(
dst
);
dstYStride
=
mlib_ImageGetStride
(
dst
);
paddings
=
mlib_ImageGetPaddings
(
src
);
paddings
=
mlib_ImageGetPaddings
(
src
);
/* All the transformation matrix parameters should be finite. if not, return failure */
if
(
!
(
IS_FINITE
(
a
)
&&
IS_FINITE
(
b
)
&&
IS_FINITE
(
c
)
&&
IS_FINITE
(
d
)
&&
IS_FINITE
(
tx
)
&&
IS_FINITE
(
ty
)))
{
return
MLIB_FAILURE
;
}
if
(
srcWidth
>=
(
1
<<
15
)
||
srcHeight
>=
(
1
<<
15
))
{
if
(
srcWidth
>=
(
1
<<
15
)
||
srcHeight
>=
(
1
<<
15
))
{
return
MLIB_FAILURE
;
return
MLIB_FAILURE
;
}
}
...
@@ -288,6 +296,10 @@ mlib_status mlib_AffineEdges(mlib_affine_param *param,
...
@@ -288,6 +296,10 @@ mlib_status mlib_AffineEdges(mlib_affine_param *param,
if
(
dY1
==
dY2
)
if
(
dY1
==
dY2
)
continue
;
continue
;
if
(
!
(
IS_FINITE
(
slope
)))
{
continue
;
}
if
(
dY1
<
0
.
0
)
if
(
dY1
<
0
.
0
)
y1
=
0
;
y1
=
0
;
else
{
else
{
...
@@ -328,6 +340,10 @@ mlib_status mlib_AffineEdges(mlib_affine_param *param,
...
@@ -328,6 +340,10 @@ mlib_status mlib_AffineEdges(mlib_affine_param *param,
if
(
dY1
==
dY2
)
if
(
dY1
==
dY2
)
continue
;
continue
;
if
(
!
(
IS_FINITE
(
slope
)))
{
continue
;
}
if
(
dY1
<
0
.
0
)
if
(
dY1
<
0
.
0
)
y1
=
0
;
y1
=
0
;
else
{
else
{
...
...
src/share/native/sun/awt/medialib/safe_math.h
浏览文件 @
64489044
/*
/*
* Copyright (c) 201
3
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 201
6
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
*
* This code is free software; you can redistribute it and/or modify it
* This code is free software; you can redistribute it and/or modify it
...
@@ -26,10 +26,15 @@
...
@@ -26,10 +26,15 @@
#ifndef __SAFE_MATH_H__
#ifndef __SAFE_MATH_H__
#define __SAFE_MATH_H__
#define __SAFE_MATH_H__
#include "mlib_types.h"
#define SAFE_TO_MULT(a, b) \
#define SAFE_TO_MULT(a, b) \
(((a) > 0) && ((b) >= 0) && ((0x7fffffff / (a)) > (b)))
(((a) > 0) && ((b) >= 0) && ((0x7fffffff / (a)) > (b)))
#define SAFE_TO_ADD(a, b) \
#define SAFE_TO_ADD(a, b) \
(((a) >= 0) && ((b) >= 0) && ((0x7fffffff - (a)) > (b)))
(((a) >= 0) && ((b) >= 0) && ((0x7fffffff - (a)) > (b)))
#define IS_FINITE(a) \
(((a) >= MLIB_D64_MIN) && ((a) <= MLIB_D64_MAX))
#endif // __SAFE_MATH_H__
#endif // __SAFE_MATH_H__
test/java/awt/geom/AffineTransform/InvalidTransformParameterTest.java
0 → 100644
浏览文件 @
64489044
/*
* Copyright (c) 2016, 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 8158356
* @summary Test AffineTransform transformations do not result in SIGSEGV
* if NaN or infinity parameter is passed as argument.
* @run main InvalidTransformParameterTest
*/
import
java.awt.geom.AffineTransform
;
import
java.awt.image.AffineTransformOp
;
import
java.awt.image.BufferedImage
;
import
java.awt.image.ImagingOpException
;
import
java.awt.Point
;
import
java.awt.image.DataBuffer
;
import
java.awt.image.DataBufferByte
;
import
java.awt.image.PixelInterleavedSampleModel
;
import
java.awt.image.Raster
;
import
java.awt.image.WritableRaster
;
import
java.awt.image.RasterOp
;
import
java.awt.image.SampleModel
;
public
class
InvalidTransformParameterTest
{
public
static
void
main
(
String
[]
args
)
{
int
count
=
0
;
final
int
testScenarios
=
12
;
double
NaNArg
=
0.0
/
0.0
;
double
positiveInfArg
=
1.0
/
0.0
;
double
negativeInfArg
=
-
1.0
/
0.0
;
BufferedImage
img
=
new
BufferedImage
(
5
,
5
,
BufferedImage
.
TYPE_INT_ARGB
);
AffineTransform
[]
inputTransforms
=
new
AffineTransform
[
testScenarios
];
for
(
int
i
=
0
;
i
<
inputTransforms
.
length
;
i
++)
{
inputTransforms
[
i
]
=
new
AffineTransform
();
}
inputTransforms
[
0
].
rotate
(
NaNArg
,
img
.
getWidth
()/
2
,
img
.
getHeight
()/
2
);
inputTransforms
[
1
].
translate
(
NaNArg
,
NaNArg
);
inputTransforms
[
2
].
scale
(
NaNArg
,
NaNArg
);
inputTransforms
[
3
].
shear
(
NaNArg
,
NaNArg
);
inputTransforms
[
4
].
rotate
(
positiveInfArg
,
img
.
getWidth
()/
2
,
img
.
getHeight
()/
2
);
inputTransforms
[
5
].
translate
(
positiveInfArg
,
positiveInfArg
);
inputTransforms
[
6
].
scale
(
positiveInfArg
,
positiveInfArg
);
inputTransforms
[
7
].
shear
(
positiveInfArg
,
positiveInfArg
);
inputTransforms
[
8
].
rotate
(
negativeInfArg
,
img
.
getWidth
()/
2
,
img
.
getHeight
()/
2
);
inputTransforms
[
9
].
translate
(
negativeInfArg
,
negativeInfArg
);
inputTransforms
[
10
].
scale
(
negativeInfArg
,
negativeInfArg
);
inputTransforms
[
11
].
shear
(
negativeInfArg
,
negativeInfArg
);
// Test BufferedImage AffineTransform ---------------------------------
for
(
int
i
=
0
;
i
<
inputTransforms
.
length
;
i
++)
{
try
{
testImageTransform
(
img
,
inputTransforms
[
i
]);
}
catch
(
ImagingOpException
ex
)
{
count
++;
}
}
if
(
count
!=
testScenarios
)
{
throw
new
RuntimeException
(
"Test failed. All test scenarios did not"
+
" result in exception as expected."
);
}
// Test Raster AffineTransform ---------------------------------
count
=
0
;
int
[]
bandOffsets
=
{
0
};
Point
location
=
new
Point
(
0
,
0
);
DataBuffer
db
=
new
DataBufferByte
(
10
*
10
);
SampleModel
sm
=
new
PixelInterleavedSampleModel
(
DataBuffer
.
TYPE_BYTE
,
10
,
10
,
1
,
10
,
bandOffsets
);
Raster
src
=
Raster
.
createRaster
(
sm
,
db
,
location
);
WritableRaster
dst
=
Raster
.
createWritableRaster
(
sm
,
db
,
location
);
for
(
int
i
=
0
;
i
<
inputTransforms
.
length
;
i
++)
{
try
{
testRasterTransform
(
src
,
dst
,
inputTransforms
[
i
]);
}
catch
(
ImagingOpException
ex
)
{
count
++;
}
}
if
(
count
!=
testScenarios
)
{
throw
new
RuntimeException
(
"Test failed. All test scenarios did not"
+
" result in exception as expected."
);
}
}
public
static
BufferedImage
testImageTransform
(
BufferedImage
image
,
AffineTransform
transform
)
{
AffineTransformOp
op
=
new
AffineTransformOp
(
transform
,
AffineTransformOp
.
TYPE_BILINEAR
);
BufferedImage
transformedImage
=
new
BufferedImage
(
image
.
getWidth
(),
image
.
getHeight
(),
image
.
getType
());
return
op
.
filter
(
image
,
transformedImage
);
}
public
static
Raster
testRasterTransform
(
Raster
src
,
WritableRaster
dst
,
AffineTransform
transform
)
{
AffineTransformOp
op
=
new
AffineTransformOp
(
transform
,
AffineTransformOp
.
TYPE_BILINEAR
);
return
op
.
filter
(
src
,
dst
);
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录