Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_jdk
提交
121c32de
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看板
提交
121c32de
编写于
10月 18, 2010
作者:
A
alanb
浏览文件
操作
浏览文件
下载
差异文件
Merge
上级
5bc456a8
5e476a0e
变更
10
隐藏空白更改
内联
并排
Showing
10 changed file
with
295 addition
and
64 deletion
+295
-64
src/share/classes/com/sun/java/util/jar/pack/Attribute.java
src/share/classes/com/sun/java/util/jar/pack/Attribute.java
+2
-2
src/share/classes/com/sun/java/util/jar/pack/ClassReader.java
...share/classes/com/sun/java/util/jar/pack/ClassReader.java
+22
-3
src/share/classes/com/sun/java/util/jar/pack/Instruction.java
...share/classes/com/sun/java/util/jar/pack/Instruction.java
+19
-0
src/share/classes/com/sun/java/util/jar/pack/PackerImpl.java
src/share/classes/com/sun/java/util/jar/pack/PackerImpl.java
+21
-7
src/share/classes/com/sun/java/util/jar/pack/Utils.java
src/share/classes/com/sun/java/util/jar/pack/Utils.java
+0
-3
src/share/classes/com/sun/org/apache/xml/internal/security/utils/UnsyncByteArrayOutputStream.java
.../internal/security/utils/UnsyncByteArrayOutputStream.java
+53
-49
test/com/sun/org/apache/xml/internal/security/utils/UnsyncByteArrayOutputStream/BufferOverflowTest.java
...utils/UnsyncByteArrayOutputStream/BufferOverflowTest.java
+47
-0
test/tools/pack200/AttributeTests.java
test/tools/pack200/AttributeTests.java
+131
-0
test/tools/pack200/badattr.jar
test/tools/pack200/badattr.jar
+0
-0
test/tools/pack200/dyn.jar
test/tools/pack200/dyn.jar
+0
-0
未找到文件。
src/share/classes/com/sun/java/util/jar/pack/Attribute.java
浏览文件 @
121c32de
...
...
@@ -654,8 +654,8 @@ class Attribute implements Comparable, Constants {
String
layout
;
public
FormatException
(
String
message
,
int
ctype
,
String
name
,
String
layout
)
{
super
(
ATTR_CONTEXT_NAME
[
ctype
]+
"."
+
name
+(
message
==
null
?
""
:
(
": "
+
message
)));
super
(
ATTR_CONTEXT_NAME
[
ctype
]+
" attribute \""
+
name
+
"\""
+
(
message
==
null
?
""
:
(
": "
+
message
)));
this
.
ctype
=
ctype
;
this
.
name
=
name
;
this
.
layout
=
layout
;
...
...
src/share/classes/com/sun/java/util/jar/pack/ClassReader.java
浏览文件 @
121c32de
...
...
@@ -30,6 +30,7 @@ import java.util.*;
import
com.sun.java.util.jar.pack.Package.Class
;
import
com.sun.java.util.jar.pack.Package.InnerClass
;
import
com.sun.java.util.jar.pack.ConstantPool.*
;
import
com.sun.tools.classfile.AttributeException
;
/**
* Reader for a class file that is being incorporated into a package.
...
...
@@ -246,7 +247,9 @@ class ClassReader implements Constants {
fixups
[
fptr
++]
=
in
.
readUnsignedShort
();
break
;
default
:
throw
new
IOException
(
"Bad constant pool tag "
+
tag
);
throw
new
ClassFormatException
(
"Bad constant pool tag "
+
tag
+
" in File: "
+
cls
.
file
.
nameString
+
" at pos: "
+
inPos
);
}
}
...
...
@@ -403,7 +406,7 @@ class ClassReader implements Constants {
skip
(
length
,
"unknown "
+
name
+
" attribute in "
+
h
);
continue
;
}
else
{
String
message
=
"
unknown in "
+
h
;
String
message
=
"
is unknown attribute in class "
+
h
;
throw
new
Attribute
.
FormatException
(
message
,
ctype
,
name
,
unknownAttrCommand
);
}
...
...
@@ -415,7 +418,12 @@ class ClassReader implements Constants {
if
(
a
.
name
()
==
"Code"
)
{
Class
.
Method
m
=
(
Class
.
Method
)
h
;
m
.
code
=
new
Code
(
m
);
readCode
(
m
.
code
);
try
{
readCode
(
m
.
code
);
}
catch
(
Instruction
.
FormatException
iie
)
{
String
message
=
iie
.
getMessage
()
+
" in "
+
h
;
throw
new
ClassReader
.
ClassFormatException
(
message
);
}
}
else
{
assert
(
h
==
cls
);
readInnerClasses
(
cls
);
...
...
@@ -427,6 +435,10 @@ class ClassReader implements Constants {
in
.
readFully
(
bytes
);
a
=
a
.
addContent
(
bytes
);
}
if
(
a
.
size
()
==
0
&&
!
a
.
layout
().
isEmpty
())
{
throw
new
ClassFormatException
(
name
+
": attribute length cannot be zero, in "
+
h
);
}
h
.
addAttribute
(
a
);
if
(
verbose
>
2
)
Utils
.
log
.
fine
(
"read "
+
a
);
...
...
@@ -438,6 +450,7 @@ class ClassReader implements Constants {
code
.
max_locals
=
readUnsignedShort
();
code
.
bytes
=
new
byte
[
readInt
()];
in
.
readFully
(
code
.
bytes
);
Instruction
.
opcodeChecker
(
code
.
bytes
);
int
nh
=
readUnsignedShort
();
code
.
setHandlerCount
(
nh
);
for
(
int
i
=
0
;
i
<
nh
;
i
++)
{
...
...
@@ -463,4 +476,10 @@ class ClassReader implements Constants {
cls
.
innerClasses
=
ics
;
// set directly; do not use setInnerClasses.
// (Later, ics may be transferred to the pkg.)
}
class
ClassFormatException
extends
IOException
{
public
ClassFormatException
(
String
message
)
{
super
(
message
);
}
}
}
src/share/classes/com/sun/java/util/jar/pack/Instruction.java
浏览文件 @
121c32de
...
...
@@ -25,6 +25,8 @@
package
com.sun.java.util.jar.pack
;
import
java.io.IOException
;
/**
* A parsed bytecode instruction.
* Provides accessors to various relevant bits.
...
...
@@ -628,4 +630,21 @@ class Instruction implements Constants {
}
}
}
public
static
void
opcodeChecker
(
byte
[]
code
)
throws
FormatException
{
Instruction
i
=
at
(
code
,
0
);
while
(
i
!=
null
)
{
int
opcode
=
i
.
getBC
();
if
(
opcode
==
_xxxunusedxxx
||
opcode
<
_nop
||
opcode
>
_jsr_w
)
{
String
message
=
"illegal opcode: "
+
opcode
+
" "
+
i
;
throw
new
FormatException
(
message
);
}
i
=
i
.
next
();
}
}
static
class
FormatException
extends
IOException
{
FormatException
(
String
message
)
{
super
(
message
);
}
}
}
src/share/classes/com/sun/java/util/jar/pack/PackerImpl.java
浏览文件 @
121c32de
...
...
@@ -496,15 +496,29 @@ public class PackerImpl extends TLGlobals implements Pack200.Packer {
reader
.
unknownAttrCommand
=
unknownAttrCommand
;
try
{
reader
.
read
();
}
catch
(
Attribute
.
FormatException
ee
)
{
// He passed up the category to us in layout.
if
(
ee
.
layout
.
equals
(
Pack200
.
Packer
.
PASS
))
{
Utils
.
log
.
warning
(
"Passing class file uncompressed due to unrecognized attribute: "
+
fname
);
Utils
.
log
.
info
(
ee
.
toString
());
return
null
;
}
catch
(
IOException
ioe
)
{
String
message
=
"Passing class file uncompressed due to"
;
if
(
ioe
instanceof
Attribute
.
FormatException
)
{
Attribute
.
FormatException
ee
=
(
Attribute
.
FormatException
)
ioe
;
// He passed up the category to us in layout.
if
(
ee
.
layout
.
equals
(
Pack200
.
Packer
.
PASS
))
{
Utils
.
log
.
info
(
ee
.
toString
());
Utils
.
log
.
warning
(
message
+
" unrecognized attribute: "
+
fname
);
return
null
;
}
}
else
if
(
ioe
instanceof
ClassReader
.
ClassFormatException
)
{
ClassReader
.
ClassFormatException
ce
=
(
ClassReader
.
ClassFormatException
)
ioe
;
// %% TODO: Do we invent a new property for this or reuse %%
if
(
unknownAttrCommand
.
equals
(
Pack200
.
Packer
.
PASS
))
{
Utils
.
log
.
info
(
ce
.
toString
());
Utils
.
log
.
warning
(
message
+
" unknown class format: "
+
fname
);
return
null
;
}
}
// Otherwise, it must be an error.
throw
e
e
;
throw
io
e
;
}
pkg
.
addClass
(
cls
);
return
cls
.
file
;
...
...
src/share/classes/com/sun/java/util/jar/pack/Utils.java
浏览文件 @
121c32de
...
...
@@ -182,11 +182,8 @@ class Utils {
}
public
void
warning
(
String
msg
,
Object
param
)
{
int
verbose
=
currentPropMap
().
getInteger
(
DEBUG_VERBOSE
);
if
(
verbose
>
0
)
{
getLogger
().
warning
(
msg
,
param
);
}
}
public
void
warning
(
String
msg
)
{
warning
(
msg
,
null
);
...
...
src/share/classes/com/sun/org/apache/xml/internal/security/utils/UnsyncByteArrayOutputStream.java
浏览文件 @
121c32de
...
...
@@ -3,7 +3,7 @@
* DO NOT REMOVE OR ALTER!
*/
/*
* Copyright
1999-2005
The Apache Software Foundation.
* Copyright
1999-2010
The Apache Software Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
...
...
@@ -23,66 +23,70 @@ package com.sun.org.apache.xml.internal.security.utils;
import
java.io.OutputStream
;
/**
* A simple Unsynced ByteArryOutputStream
* A simple Unsynced ByteArr
a
yOutputStream
* @author raul
*
*/
public
class
UnsyncByteArrayOutputStream
extends
OutputStream
{
private
static
ThreadLocal
bufCahce
=
new
ThreadLocal
()
{
private
static
final
int
INITIAL_SIZE
=
8192
;
private
static
ThreadLocal
bufCache
=
new
ThreadLocal
()
{
protected
synchronized
Object
initialValue
()
{
return
new
byte
[
8
*
1024
];
return
new
byte
[
INITIAL_SIZE
];
}
};
byte
[]
buf
;
int
size
=
8
*
1024
;
//buf.length;
int
pos
=
0
;
public
UnsyncByteArrayOutputStream
()
{
buf
=(
byte
[])
bufCahce
.
get
();
}
/** @inheritDoc */
public
void
write
(
byte
[]
arg0
)
{
int
newPos
=
pos
+
arg0
.
length
;
if
(
newPos
>
size
)
{
expandSize
();
}
System
.
arraycopy
(
arg0
,
0
,
buf
,
pos
,
arg0
.
length
);
pos
=
newPos
;
}
/** @inheritDoc */
public
void
write
(
byte
[]
arg0
,
int
arg1
,
int
arg2
)
{
int
newPos
=
pos
+
arg2
;
if
(
newPos
>
size
)
{
expandSize
();
}
System
.
arraycopy
(
arg0
,
arg1
,
buf
,
pos
,
arg2
);
pos
=
newPos
;
}
/** @inheritDoc */
public
void
write
(
int
arg0
)
{
if
(
pos
>=
size
)
{
expandSize
();
}
buf
[
pos
++]=(
byte
)
arg0
;
private
byte
[]
buf
;
private
int
size
=
INITIAL_SIZE
;
private
int
pos
=
0
;
public
UnsyncByteArrayOutputStream
()
{
buf
=
(
byte
[])
bufCache
.
get
();
}
public
void
write
(
byte
[]
arg0
)
{
int
newPos
=
pos
+
arg0
.
length
;
if
(
newPos
>
size
)
{
expandSize
(
newPos
);
}
/** @inheritDoc */
public
byte
[]
toByteArray
()
{
byte
result
[]=
new
byte
[
pos
];
System
.
arraycopy
(
buf
,
0
,
result
,
0
,
pos
);
return
result
;
System
.
arraycopy
(
arg0
,
0
,
buf
,
pos
,
arg0
.
length
);
pos
=
newPos
;
}
public
void
write
(
byte
[]
arg0
,
int
arg1
,
int
arg2
)
{
int
newPos
=
pos
+
arg2
;
if
(
newPos
>
size
)
{
expandSize
(
newPos
);
}
System
.
arraycopy
(
arg0
,
arg1
,
buf
,
pos
,
arg2
);
pos
=
newPos
;
}
/** @inheritDoc */
public
void
reset
()
{
pos
=
0
;
public
void
write
(
int
arg0
)
{
int
newPos
=
pos
+
1
;
if
(
newPos
>
size
)
{
expandSize
(
newPos
);
}
buf
[
pos
++]
=
(
byte
)
arg0
;
}
public
byte
[]
toByteArray
()
{
byte
result
[]
=
new
byte
[
pos
];
System
.
arraycopy
(
buf
,
0
,
result
,
0
,
pos
);
return
result
;
}
/** @inheritDoc */
void
expandSize
()
{
int
newSize
=
size
<<
2
;
byte
newBuf
[]=
new
byte
[
newSize
];
System
.
arraycopy
(
buf
,
0
,
newBuf
,
0
,
pos
);
buf
=
newBuf
;
size
=
newSize
;
public
void
reset
()
{
pos
=
0
;
}
private
void
expandSize
(
int
newPos
)
{
int
newSize
=
size
;
while
(
newPos
>
newSize
)
{
newSize
=
newSize
<<
2
;
}
byte
newBuf
[]
=
new
byte
[
newSize
];
System
.
arraycopy
(
buf
,
0
,
newBuf
,
0
,
pos
);
buf
=
newBuf
;
size
=
newSize
;
}
}
test/com/sun/org/apache/xml/internal/security/utils/UnsyncByteArrayOutputStream/BufferOverflowTest.java
0 → 100644
浏览文件 @
121c32de
/*
* Copyright (c) 2010, 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 %I% %E%
* @bug 6954275
* @summary Check that UnsyncByteArrayOutputStream does not
* throw ArrayIndexOutOfBoundsException
* @compile -XDignore.symbol.file BufferOverflowTest.java
* @run main BufferOverflowTest
*/
import
com.sun.org.apache.xml.internal.security.utils.UnsyncByteArrayOutputStream
;
public
class
BufferOverflowTest
{
public
static
void
main
(
String
[]
args
)
throws
Exception
{
try
{
UnsyncByteArrayOutputStream
out
=
new
UnsyncByteArrayOutputStream
();
out
.
write
(
new
byte
[(
8192
)
<<
2
+
1
]);
System
.
out
.
println
(
"PASSED"
);
}
catch
(
ArrayIndexOutOfBoundsException
e
)
{
System
.
err
.
println
(
"FAILED, got ArrayIndexOutOfBoundsException"
);
throw
new
Exception
(
e
);
}
}
}
test/tools/pack200/AttributeTests.java
0 → 100644
浏览文件 @
121c32de
/*
* Copyright (c) 2010, 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.
*/
import
java.io.File
;
import
java.io.IOException
;
import
java.util.ArrayList
;
import
java.util.Arrays
;
import
java.util.List
;
/*
* @test
* @bug 6982312
* @summary tests various classfile format and attribute handling by pack200
* @compile -XDignore.symbol.file Utils.java AttributeTests.java
* @run main AttributeTests
* @author ksrini
*/
public
class
AttributeTests
{
public
static
void
main
(
String
...
args
)
throws
Exception
{
test6982312
();
test6746111
();
}
/*
* This is an interim test, which ensures pack200 handles JSR-292 related
* classfile changes seamlessly, until all the classfile changes in jdk7
* and jdk8 are fully supported. At that time this test should be jettisoned,
* along with the associated jar file.
*
* The jar file contains sources and classes noting the classes were
* derived by using the javac from the lambda project,
* see http://openjdk.java.net/projects/lambda/.
* Therefore the classes contained in the jar cannot be compiled, using
* the standard jdk7's javac compiler.
*/
static
void
test6982312
()
throws
IOException
{
String
pack200Cmd
=
Utils
.
getPack200Cmd
();
File
dynJar
=
new
File
(
"."
,
"dyn.jar"
);
Utils
.
copyFile
(
new
File
(
Utils
.
TEST_SRC_DIR
,
"dyn.jar"
),
dynJar
);
File
testJar
=
new
File
(
"."
,
"test.jar"
);
List
<
String
>
cmds
=
new
ArrayList
<
String
>();
cmds
.
add
(
pack200Cmd
);
cmds
.
add
(
"--repack"
);
cmds
.
add
(
testJar
.
getAbsolutePath
());
cmds
.
add
(
dynJar
.
getAbsolutePath
());
Utils
.
runExec
(
cmds
);
/*
* compare the repacked jar bit-wise, as all the files
* should be transmitted "as-is".
*/
Utils
.
doCompareBitWise
(
dynJar
.
getAbsoluteFile
(),
testJar
.
getAbsoluteFile
());
testJar
.
delete
();
dynJar
.
delete
();
}
/*
* this test checks to see if we get the expected strings for output
*/
static
void
test6746111
()
throws
Exception
{
String
pack200Cmd
=
Utils
.
getPack200Cmd
();
File
badAttrJar
=
new
File
(
"."
,
"badattr.jar"
);
Utils
.
copyFile
(
new
File
(
Utils
.
TEST_SRC_DIR
,
"badattr.jar"
),
badAttrJar
);
File
testJar
=
new
File
(
"."
,
"test.jar"
);
List
<
String
>
cmds
=
new
ArrayList
<
String
>();
cmds
.
add
(
pack200Cmd
);
cmds
.
add
(
"--repack"
);
cmds
.
add
(
"-v"
);
cmds
.
add
(
testJar
.
getAbsolutePath
());
cmds
.
add
(
badAttrJar
.
getAbsolutePath
());
List
<
String
>
output
=
Utils
.
runExec
(
cmds
);
/*
* compare the repacked jar bit-wise, as all the files
* should be transmitted "as-is".
*/
Utils
.
doCompareBitWise
(
badAttrJar
.
getAbsoluteFile
(),
testJar
.
getAbsoluteFile
());
String
[]
expectedStrings
=
{
"WARNING: Passing class file uncompressed due to unrecognized"
+
" attribute: Foo.class"
,
"INFO: com.sun.java.util.jar.pack.Attribute$FormatException: "
+
"class attribute \"XourceFile\": is unknown attribute "
+
"in class Foo"
,
"INFO: com.sun.java.util.jar.pack.ClassReader$ClassFormatException: "
+
"AnnotationDefault: attribute length cannot be zero, in Test.message()"
,
"WARNING: Passing class file uncompressed due to unknown class format: Test.class"
};
List
<
String
>
notfoundList
=
new
ArrayList
<
String
>();
notfoundList
.
addAll
(
Arrays
.
asList
(
expectedStrings
));
// make sure the expected messages are emitted
for
(
String
x
:
output
)
{
findString
(
x
,
notfoundList
,
expectedStrings
);
}
if
(!
notfoundList
.
isEmpty
())
{
System
.
out
.
println
(
"Not found:"
);
for
(
String
x
:
notfoundList
)
{
System
.
out
.
println
(
x
);
}
throw
new
Exception
(
"Test fails: "
+
notfoundList
.
size
()
+
" expected strings not found"
);
}
testJar
.
delete
();
badAttrJar
.
delete
();
}
private
static
void
findString
(
String
outputStr
,
List
<
String
>
notfoundList
,
String
[]
expectedStrings
)
{
for
(
String
y
:
expectedStrings
)
{
if
(
outputStr
.
contains
(
y
))
{
notfoundList
.
remove
(
y
);
return
;
}
}
}
}
test/tools/pack200/badattr.jar
0 → 100644
浏览文件 @
121c32de
文件已添加
test/tools/pack200/dyn.jar
0 → 100644
浏览文件 @
121c32de
文件已添加
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录