Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_jdk
提交
e15211f7
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看板
提交
e15211f7
编写于
11月 27, 2017
作者:
C
coffeys
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
8189789: tomcat gzip-compressed response bodies appear to be broken in update 151
Reviewed-by: sherman, phh
上级
120f10b3
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
127 addition
and
13 deletion
+127
-13
src/share/native/java/util/zip/Deflater.c
src/share/native/java/util/zip/Deflater.c
+3
-8
src/share/native/java/util/zip/zlib/deflate.c
src/share/native/java/util/zip/zlib/deflate.c
+2
-4
src/share/native/java/util/zip/zlib/patches/ChangeLog_java
src/share/native/java/util/zip/zlib/patches/ChangeLog_java
+2
-0
test/java/util/zip/InflateIn_DeflateOut.java
test/java/util/zip/InflateIn_DeflateOut.java
+120
-1
未找到文件。
src/share/native/java/util/zip/Deflater.c
浏览文件 @
e15211f7
/*
* Copyright (c) 1997, 201
4
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1997, 201
7
, 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
...
...
@@ -164,17 +164,14 @@ Java_java_util_zip_Deflater_deflateBytes(JNIEnv *env, jobject this, jlong addr,
res
=
deflateParams
(
strm
,
level
,
strategy
);
(
*
env
)
->
ReleasePrimitiveArrayCritical
(
env
,
b
,
out_buf
,
0
);
(
*
env
)
->
ReleasePrimitiveArrayCritical
(
env
,
this_buf
,
in_buf
,
0
);
switch
(
res
)
{
case
Z_OK
:
(
*
env
)
->
SetBooleanField
(
env
,
this
,
setParamsID
,
JNI_FALSE
);
case
Z_BUF_ERROR
:
this_off
+=
this_len
-
strm
->
avail_in
;
(
*
env
)
->
SetIntField
(
env
,
this
,
offID
,
this_off
);
(
*
env
)
->
SetIntField
(
env
,
this
,
lenID
,
strm
->
avail_in
);
return
(
jint
)
(
len
-
strm
->
avail_out
);
case
Z_BUF_ERROR
:
(
*
env
)
->
SetBooleanField
(
env
,
this
,
setParamsID
,
JNI_FALSE
);
return
0
;
default:
JNU_ThrowInternalError
(
env
,
strm
->
msg
);
return
0
;
...
...
@@ -203,18 +200,16 @@ Java_java_util_zip_Deflater_deflateBytes(JNIEnv *env, jobject this, jlong addr,
res
=
deflate
(
strm
,
finish
?
Z_FINISH
:
flush
);
(
*
env
)
->
ReleasePrimitiveArrayCritical
(
env
,
b
,
out_buf
,
0
);
(
*
env
)
->
ReleasePrimitiveArrayCritical
(
env
,
this_buf
,
in_buf
,
0
);
switch
(
res
)
{
case
Z_STREAM_END
:
(
*
env
)
->
SetBooleanField
(
env
,
this
,
finishedID
,
JNI_TRUE
);
/* fall through */
case
Z_OK
:
case
Z_BUF_ERROR
:
this_off
+=
this_len
-
strm
->
avail_in
;
(
*
env
)
->
SetIntField
(
env
,
this
,
offID
,
this_off
);
(
*
env
)
->
SetIntField
(
env
,
this
,
lenID
,
strm
->
avail_in
);
return
len
-
strm
->
avail_out
;
case
Z_BUF_ERROR
:
return
0
;
default:
JNU_ThrowInternalError
(
env
,
strm
->
msg
);
return
0
;
...
...
src/share/native/java/util/zip/zlib/deflate.c
浏览文件 @
e15211f7
...
...
@@ -505,8 +505,6 @@ int ZEXPORT deflateResetKeep (strm)
s
->
pending
=
0
;
s
->
pending_out
=
s
->
pending_buf
;
s
->
high_water
=
0
;
/* reset to its inital value 0 */
if
(
s
->
wrap
<
0
)
{
s
->
wrap
=
-
s
->
wrap
;
/* was made negative by deflate(..., Z_FINISH); */
}
...
...
@@ -520,7 +518,7 @@ int ZEXPORT deflateResetKeep (strm)
s
->
wrap
==
2
?
crc32
(
0L
,
Z_NULL
,
0
)
:
#endif
adler32
(
0L
,
Z_NULL
,
0
);
s
->
last_flush
=
Z_NO_FLUSH
;
s
->
last_flush
=
-
2
;
_tr_init
(
s
);
...
...
@@ -613,7 +611,7 @@ int ZEXPORT deflateParams(strm, level, strategy)
func
=
configuration_table
[
s
->
level
].
func
;
if
((
strategy
!=
s
->
strategy
||
func
!=
configuration_table
[
level
].
func
)
&&
s
->
high_water
)
{
s
->
last_flush
!=
-
2
)
{
/* Flush the last buffer: */
int
err
=
deflate
(
strm
,
Z_BLOCK
);
if
(
err
==
Z_STREAM_ERROR
)
...
...
src/share/native/java/util/zip/zlib/patches/ChangeLog_java
浏览文件 @
e15211f7
...
...
@@ -78,6 +78,8 @@
(6) deflate.c #8184306
(7) deflate.c undo (6), replaced withe the official zlib repo fix see#305/#f969409
*** 503,512 ****
--- 503,514 ----
...
...
test/java/util/zip/InflateIn_DeflateOut.java
浏览文件 @
e15211f7
...
...
@@ -23,7 +23,7 @@
/**
* @test
* @bug 4206909 4813885
* @bug 4206909 4813885
8189789
* @summary Test basic functionality of DeflaterOutputStream/InflaterInputStream and GZIPOutputStream/GZIPInputStream, including flush
*/
...
...
@@ -146,6 +146,47 @@ public class InflateIn_DeflateOut {
check
(
Arrays
.
equals
(
data
,
buf
));
}
private
static
void
TestFlushableGZIPOutputStream
()
throws
Throwable
{
Random
random
=
new
Random
(
new
Date
().
getTime
());
ByteArrayOutputStream
byteOutStream
=
new
ByteArrayOutputStream
();
OutputStream
output
=
new
FlushableGZIPOutputStream
(
byteOutStream
);
byte
[]
data
=
new
byte
[
random
.
nextInt
(
1024
*
1024
)];
byte
[]
buf
=
new
byte
[
data
.
length
];
random
.
nextBytes
(
data
);
output
.
write
(
data
);
for
(
int
i
=
0
;
i
<
data
.
length
;
i
++)
{
output
.
write
(
data
[
i
]);
}
output
.
flush
();
for
(
int
i
=
0
;
i
<
data
.
length
;
i
++)
{
output
.
write
(
data
[
i
]);
}
output
.
write
(
data
);
output
.
close
();
ByteArrayInputStream
byteInStream
=
new
ByteArrayInputStream
(
byteOutStream
.
toByteArray
());
GZIPInputStream
gzis
=
new
GZIPInputStream
(
byteInStream
);
ByteArrayOutputStream
baos
=
new
ByteArrayOutputStream
();
int
numRead
;
byte
[]
b
=
new
byte
[
4
*
1024
];
try
{
while
((
numRead
=
gzis
.
read
(
buf
))
>=
0
)
{
baos
.
write
(
b
,
0
,
numRead
);
}
}
finally
{
baos
.
close
();
}
byte
[]
decompressedBytes
=
baos
.
toByteArray
();
check
(
decompressedBytes
.
length
==
data
.
length
*
4
);
}
private
static
void
check
(
InputStream
is
,
OutputStream
os
)
throws
Throwable
{
...
...
@@ -267,6 +308,7 @@ public class InflateIn_DeflateOut {
LineOrientedProtocol
();
GZWriteFlushRead
();
GZLineOrientedProtocol
();
TestFlushableGZIPOutputStream
();
}
//--------------------- Infrastructure ---------------------------
...
...
@@ -284,3 +326,80 @@ public class InflateIn_DeflateOut {
System
.
out
.
println
(
"\nPassed = "
+
passed
+
" failed = "
+
failed
);
if
(
failed
>
0
)
throw
new
AssertionError
(
"Some tests failed"
);}
}
class
FlushableGZIPOutputStream
extends
GZIPOutputStream
{
public
FlushableGZIPOutputStream
(
OutputStream
os
)
throws
IOException
{
super
(
os
);
}
private
static
final
byte
[]
EMPTYBYTEARRAY
=
new
byte
[
0
];
private
boolean
hasData
=
false
;
/**
* Here we make sure we have received data, so that the header has been for
* sure written to the output stream already.
*/
@Override
public
synchronized
void
write
(
byte
[]
bytes
,
int
i
,
int
i1
)
throws
IOException
{
super
.
write
(
bytes
,
i
,
i1
);
hasData
=
true
;
}
@Override
public
synchronized
void
write
(
int
i
)
throws
IOException
{
super
.
write
(
i
);
hasData
=
true
;
}
@Override
public
synchronized
void
write
(
byte
[]
bytes
)
throws
IOException
{
super
.
write
(
bytes
);
hasData
=
true
;
}
@Override
public
synchronized
void
flush
()
throws
IOException
{
if
(!
hasData
)
{
return
;
// do not allow the gzip header to be flushed on its own
}
// trick the deflater to flush
/**
* Now this is tricky: We force the Deflater to flush its data by
* switching compression level. As yet, a perplexingly simple workaround
* for
* http://developer.java.sun.com/developer/bugParade/bugs/4255743.html
*/
if
(!
def
.
finished
())
{
def
.
setInput
(
EMPTYBYTEARRAY
,
0
,
0
);
def
.
setLevel
(
Deflater
.
NO_COMPRESSION
);
deflate
();
def
.
setLevel
(
Deflater
.
DEFAULT_COMPRESSION
);
deflate
();
out
.
flush
();
}
hasData
=
false
;
// no more data to flush
}
/*
* Keep on calling deflate until it runs dry. The default implementation
* only does it once and can therefore hold onto data when they need to be
* flushed out.
*/
@Override
protected
void
deflate
()
throws
IOException
{
int
len
;
do
{
len
=
def
.
deflate
(
buf
,
0
,
buf
.
length
);
if
(
len
>
0
)
{
out
.
write
(
buf
,
0
,
len
);
}
}
while
(
len
!=
0
);
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录