mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-27 14:54:52 +02:00
8191918: tomcat gzip-compressed response bodies appear to be broken in update 151
Reviewed-by: psandoz
This commit is contained in:
parent
3e26f1114d
commit
fad5094503
4 changed files with 119 additions and 15 deletions
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1997, 2017, 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,19 +200,17 @@ 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:
|
||||
default:
|
||||
JNU_ThrowInternalError(env, strm->msg);
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -93,4 +93,6 @@
|
|||
s->status =
|
||||
#ifdef GZIP
|
||||
|
||||
(7) deflate.c undo (6), replaced withe the official zlib repo fix see#305/#f969409
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue