Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_jdk
提交
d6986e1a
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看板
提交
d6986e1a
编写于
10月 14, 2010
作者:
K
ksrini
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
6982312: (pack200) pack200 fails with the jdk7 class files
Reviewed-by: jrose
上级
3d4830f9
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
131 addition
and
12 deletion
+131
-12
src/share/classes/com/sun/java/util/jar/pack/ClassReader.java
...share/classes/com/sun/java/util/jar/pack/ClassReader.java
+16
-2
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
test/tools/pack200/AttributeTests.java
test/tools/pack200/AttributeTests.java
+75
-0
test/tools/pack200/dyn.jar
test/tools/pack200/dyn.jar
+0
-0
未找到文件。
src/share/classes/com/sun/java/util/jar/pack/ClassReader.java
浏览文件 @
d6986e1a
...
...
@@ -246,7 +246,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
);
}
}
...
...
@@ -415,7 +417,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
);
...
...
@@ -438,6 +445,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 +471,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
浏览文件 @
d6986e1a
...
...
@@ -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
浏览文件 @
d6986e1a
...
...
@@ -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
浏览文件 @
d6986e1a
...
...
@@ -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
);
...
...
test/tools/pack200/AttributeTests.java
0 → 100644
浏览文件 @
d6986e1a
/*
* 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.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
();
}
/*
* 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
();
}
}
test/tools/pack200/dyn.jar
0 → 100644
浏览文件 @
d6986e1a
文件已添加
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录