import zlib-1.2.11-16.2.el8_3
This commit is contained in:
parent
7ba98e15d7
commit
a5d1126d13
@ -0,0 +1,197 @@
|
|||||||
|
Subject: [PATCH] Fixed DFLTCC compression level switching issues
|
||||||
|
|
||||||
|
---
|
||||||
|
configure | 2 +-
|
||||||
|
contrib/s390/dfltcc.c | 52 ++++++++++++++++++++++++++++++-----
|
||||||
|
contrib/s390/dfltcc_deflate.h | 2 ++
|
||||||
|
deflate.c | 12 ++++----
|
||||||
|
test/infcover.c | 2 +-
|
||||||
|
5 files changed, 56 insertions(+), 14 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/configure b/configure
|
||||||
|
index bfe4386..6fa0474 100755
|
||||||
|
--- a/configure
|
||||||
|
+++ b/configure
|
||||||
|
@@ -838,7 +838,7 @@ cat > $test.c << EOF
|
||||||
|
#include <sys/sdt.h>
|
||||||
|
int main() { return 0; }
|
||||||
|
EOF
|
||||||
|
-if try ${CC} ${CFLAGS} $test.c; then
|
||||||
|
+ if try $CC -c $CFLAGS $test.c; then
|
||||||
|
echo "Checking for sys/sdt.h ... Yes." | tee -a configure.log
|
||||||
|
CFLAGS="$CFLAGS -DHAVE_SYS_SDT_H"
|
||||||
|
SFLAGS="$SFLAGS -DHAVE_SYS_SDT_H"
|
||||||
|
diff --git a/contrib/s390/dfltcc.c b/contrib/s390/dfltcc.c
|
||||||
|
index d88a0d6..94a196f 100644
|
||||||
|
--- a/contrib/s390/dfltcc.c
|
||||||
|
+++ b/contrib/s390/dfltcc.c
|
||||||
|
@@ -350,8 +350,12 @@ int ZLIB_INTERNAL dfltcc_deflate(strm, flush, result)
|
||||||
|
int soft_bcc;
|
||||||
|
int no_flush;
|
||||||
|
|
||||||
|
- if (!dfltcc_can_deflate(strm))
|
||||||
|
+ if (!dfltcc_can_deflate(strm)) {
|
||||||
|
+ /* Clear history. */
|
||||||
|
+ if (flush == Z_FULL_FLUSH)
|
||||||
|
+ param->hl = 0;
|
||||||
|
return 0;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
again:
|
||||||
|
masked_avail_in = 0;
|
||||||
|
@@ -376,7 +380,8 @@ again:
|
||||||
|
/* Clear history. */
|
||||||
|
if (flush == Z_FULL_FLUSH)
|
||||||
|
param->hl = 0;
|
||||||
|
- *result = need_more;
|
||||||
|
+ /* Trigger block post-processing if necessary. */
|
||||||
|
+ *result = no_flush ? need_more : block_done;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -403,13 +408,18 @@ again:
|
||||||
|
param->bcf = 0;
|
||||||
|
dfltcc_state->block_threshold =
|
||||||
|
strm->total_in + dfltcc_state->block_size;
|
||||||
|
- if (strm->avail_out == 0) {
|
||||||
|
- *result = need_more;
|
||||||
|
- return 1;
|
||||||
|
- }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
+ /* No space for compressed data. If we proceed, dfltcc_cmpr() will return
|
||||||
|
+ * DFLTCC_CC_OP1_TOO_SHORT without buffering header bits, but we will still
|
||||||
|
+ * set BCF=1, which is wrong. Avoid complications and return early.
|
||||||
|
+ */
|
||||||
|
+ if (strm->avail_out == 0) {
|
||||||
|
+ *result = need_more;
|
||||||
|
+ return 1;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
/* The caller gave us too much data. Pass only one block worth of
|
||||||
|
* uncompressed data to DFLTCC and mask the rest, so that on the next
|
||||||
|
* iteration we start a new block.
|
||||||
|
@@ -737,10 +747,15 @@ __attribute__((constructor)) local void init_globals(void)
|
||||||
|
* compiling with -m31, gcc defaults to ESA mode, however, since the kernel
|
||||||
|
* is 64-bit, it's always z/Architecture mode at runtime.
|
||||||
|
*/
|
||||||
|
- __asm__ volatile(".machinemode push\n"
|
||||||
|
+ __asm__ volatile(
|
||||||
|
+#ifndef __clang__
|
||||||
|
+ ".machinemode push\n"
|
||||||
|
".machinemode zarch\n"
|
||||||
|
+#endif
|
||||||
|
"stfle %[facilities]\n"
|
||||||
|
+#ifndef __clang__
|
||||||
|
".machinemode pop\n"
|
||||||
|
+#endif
|
||||||
|
: [facilities] "=Q" (cpu_facilities)
|
||||||
|
, [r0] "+r" (r0)
|
||||||
|
:
|
||||||
|
@@ -872,6 +887,28 @@ int ZLIB_INTERNAL dfltcc_deflate_params(strm, level, strategy, flush)
|
||||||
|
return Z_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
+int ZLIB_INTERNAL dfltcc_deflate_done(strm, flush)
|
||||||
|
+ z_streamp strm;
|
||||||
|
+ int flush;
|
||||||
|
+{
|
||||||
|
+ deflate_state FAR *state = (deflate_state FAR *)strm->state;
|
||||||
|
+ struct dfltcc_state FAR *dfltcc_state = GET_DFLTCC_STATE(state);
|
||||||
|
+ struct dfltcc_param_v0 FAR *param = &dfltcc_state->param;
|
||||||
|
+
|
||||||
|
+ /* When deflate(Z_FULL_FLUSH) is called with small avail_out, it might
|
||||||
|
+ * close the block without resetting the compression state. Detect this
|
||||||
|
+ * situation and return that deflation is not done.
|
||||||
|
+ */
|
||||||
|
+ if (flush == Z_FULL_FLUSH && strm->avail_out == 0)
|
||||||
|
+ return 0;
|
||||||
|
+
|
||||||
|
+ /* Return that deflation is not done if DFLTCC is used and either it
|
||||||
|
+ * buffered some data (Continuation Flag is set), or has not written EOBS
|
||||||
|
+ * yet (Block-Continuation Flag is set).
|
||||||
|
+ */
|
||||||
|
+ return !dfltcc_can_deflate(strm) || (!param->cf && !param->bcf);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
/*
|
||||||
|
Preloading history.
|
||||||
|
*/
|
||||||
|
@@ -925,6 +962,7 @@ int ZLIB_INTERNAL dfltcc_deflate_set_dictionary(strm, dictionary, dict_length)
|
||||||
|
|
||||||
|
append_history(param, state->window, dictionary, dict_length);
|
||||||
|
state->strstart = 1; /* Add FDICT to zlib header */
|
||||||
|
+ state->block_start = state->strstart; /* Make deflate_stored happy */
|
||||||
|
return Z_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
diff --git a/contrib/s390/dfltcc_deflate.h b/contrib/s390/dfltcc_deflate.h
|
||||||
|
index de36784..914daa4 100644
|
||||||
|
--- a/contrib/s390/dfltcc_deflate.h
|
||||||
|
+++ b/contrib/s390/dfltcc_deflate.h
|
||||||
|
@@ -11,6 +11,7 @@ int ZLIB_INTERNAL dfltcc_deflate_params OF((z_streamp strm,
|
||||||
|
int level,
|
||||||
|
int strategy,
|
||||||
|
int *flush));
|
||||||
|
+int ZLIB_INTERNAL dfltcc_deflate_done OF((z_streamp strm, int flush));
|
||||||
|
int ZLIB_INTERNAL dfltcc_deflate_set_dictionary OF((z_streamp strm,
|
||||||
|
const Bytef *dictionary,
|
||||||
|
uInt dict_length));
|
||||||
|
@@ -41,6 +42,7 @@ int ZLIB_INTERNAL dfltcc_deflate_get_dictionary OF((z_streamp strm,
|
||||||
|
if (err == Z_STREAM_ERROR) \
|
||||||
|
return err; \
|
||||||
|
} while (0)
|
||||||
|
+#define DEFLATE_DONE dfltcc_deflate_done
|
||||||
|
#define DEFLATE_BOUND_ADJUST_COMPLEN(strm, complen, source_len) \
|
||||||
|
do { \
|
||||||
|
if (dfltcc_can_deflate((strm))) \
|
||||||
|
diff --git a/deflate.c b/deflate.c
|
||||||
|
index d907a1b..085abbe 100644
|
||||||
|
--- a/deflate.c
|
||||||
|
+++ b/deflate.c
|
||||||
|
@@ -75,6 +75,7 @@ const char deflate_copyright[] =
|
||||||
|
#define DEFLATE_GET_DICTIONARY_HOOK(strm, dict, dict_len) do {} while (0)
|
||||||
|
#define DEFLATE_RESET_KEEP_HOOK(strm) do {} while (0)
|
||||||
|
#define DEFLATE_PARAMS_HOOK(strm, level, strategy, hook_flush) do {} while (0)
|
||||||
|
+#define DEFLATE_DONE(strm, flush) 1
|
||||||
|
#define DEFLATE_BOUND_ADJUST_COMPLEN(strm, complen, sourceLen) do {} while (0)
|
||||||
|
#define DEFLATE_NEED_CONSERVATIVE_BOUND(strm) 0
|
||||||
|
#define DEFLATE_HOOK(strm, flush, bstate) 0
|
||||||
|
@@ -605,14 +606,15 @@ int ZEXPORT deflateParams(strm, level, strategy)
|
||||||
|
DEFLATE_PARAMS_HOOK(strm, level, strategy, &hook_flush);
|
||||||
|
func = configuration_table[s->level].func;
|
||||||
|
|
||||||
|
- if ((strategy != s->strategy || func != configuration_table[level].func ||
|
||||||
|
- hook_flush != Z_NO_FLUSH) && s->last_flush != -2) {
|
||||||
|
+ if (((strategy != s->strategy || func != configuration_table[level].func) &&
|
||||||
|
+ s->last_flush != -2) || hook_flush != Z_NO_FLUSH) {
|
||||||
|
/* Flush the last buffer: */
|
||||||
|
- int err = deflate(strm, RANK(hook_flush) > RANK(Z_BLOCK) ?
|
||||||
|
- hook_flush : Z_BLOCK);
|
||||||
|
+ int flush = RANK(hook_flush) > RANK(Z_BLOCK) ? hook_flush : Z_BLOCK;
|
||||||
|
+ int err = deflate(strm, flush);
|
||||||
|
if (err == Z_STREAM_ERROR)
|
||||||
|
return err;
|
||||||
|
- if (strm->avail_in || (s->strstart - s->block_start) + s->lookahead)
|
||||||
|
+ if (strm->avail_in || (s->strstart - s->block_start) + s->lookahead ||
|
||||||
|
+ !DEFLATE_DONE(strm, flush))
|
||||||
|
return Z_BUF_ERROR;
|
||||||
|
}
|
||||||
|
if (s->level != level) {
|
||||||
|
diff --git a/test/infcover.c b/test/infcover.c
|
||||||
|
index a34cd17..a208219 100644
|
||||||
|
--- a/test/infcover.c
|
||||||
|
+++ b/test/infcover.c
|
||||||
|
@@ -373,7 +373,7 @@ local void cover_support(void)
|
||||||
|
mem_setup(&strm);
|
||||||
|
strm.avail_in = 0;
|
||||||
|
strm.next_in = Z_NULL;
|
||||||
|
- ret = inflateInit_(&strm, ZLIB_VERSION - 1, (int)sizeof(z_stream));
|
||||||
|
+ ret = inflateInit_(&strm, &ZLIB_VERSION[1], (int)sizeof(z_stream));
|
||||||
|
assert(ret == Z_VERSION_ERROR);
|
||||||
|
mem_done(&strm, "wrong version");
|
||||||
|
|
||||||
|
--
|
||||||
|
2.26.0
|
||||||
|
|
45
SOURCES/zlib-1.2.11-inflateSyncPoint-return-value-fix.patch
Normal file
45
SOURCES/zlib-1.2.11-inflateSyncPoint-return-value-fix.patch
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
Subject: [PATCH] Fixed inflateSyncPoint() bad return value on z15
|
||||||
|
|
||||||
|
---
|
||||||
|
contrib/s390/dfltcc.h | 4 ++++
|
||||||
|
inflate.c | 2 ++
|
||||||
|
2 files changed, 6 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/contrib/s390/dfltcc.h b/contrib/s390/dfltcc.h
|
||||||
|
index 574e84c..7960626 100644
|
||||||
|
--- a/contrib/s390/dfltcc.h
|
||||||
|
+++ b/contrib/s390/dfltcc.h
|
||||||
|
@@ -51,5 +51,9 @@ int ZLIB_INTERNAL dfltcc_inflate_disable OF((z_streamp strm));
|
||||||
|
do { \
|
||||||
|
if (dfltcc_was_inflate_used((strm))) return -(1L << 16); \
|
||||||
|
} while (0)
|
||||||
|
+#define INFLATE_SYNC_POINT_HOOK(strm) \
|
||||||
|
+ do { \
|
||||||
|
+ if (dfltcc_was_inflate_used((strm))) return Z_STREAM_ERROR; \
|
||||||
|
+ } while (0)
|
||||||
|
|
||||||
|
#endif
|
||||||
|
\ No newline at end of file
|
||||||
|
diff --git a/inflate.c b/inflate.c
|
||||||
|
index f77c2ae..596034c 100644
|
||||||
|
--- a/inflate.c
|
||||||
|
+++ b/inflate.c
|
||||||
|
@@ -100,6 +100,7 @@
|
||||||
|
#define INFLATE_NEED_CHECKSUM(strm) 1
|
||||||
|
#define INFLATE_NEED_UPDATEWINDOW(strm) 1
|
||||||
|
#define INFLATE_MARK_HOOK(strm) do {} while (0)
|
||||||
|
+#define INFLATE_SYNC_POINT_HOOK(strm) do {} while (0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef MAKEFIXED
|
||||||
|
@@ -1483,6 +1484,7 @@ z_streamp strm;
|
||||||
|
struct inflate_state FAR *state;
|
||||||
|
|
||||||
|
if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
|
||||||
|
+ INFLATE_SYNC_POINT_HOOK(strm);
|
||||||
|
state = (struct inflate_state FAR *)strm->state;
|
||||||
|
return state->mode == STORED && state->bits == 0;
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.26.0
|
||||||
|
|
@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
Name: zlib
|
Name: zlib
|
||||||
Version: 1.2.11
|
Version: 1.2.11
|
||||||
Release: 16%{?dist}
|
Release: 16.2%{?dist}
|
||||||
Summary: The compression and decompression library
|
Summary: The compression and decompression library
|
||||||
# /contrib/dotzlib/ have Boost license
|
# /contrib/dotzlib/ have Boost license
|
||||||
License: zlib and Boost
|
License: zlib and Boost
|
||||||
@ -26,6 +26,10 @@ Patch5: zlib-1.2.11-covscan-issues.patch
|
|||||||
Patch6: zlib-1.2.11-IBM-Z-hw-accelrated-deflate-fix.patch
|
Patch6: zlib-1.2.11-IBM-Z-hw-accelrated-deflate-fix.patch
|
||||||
# permit a deflateParams() parameter change
|
# permit a deflateParams() parameter change
|
||||||
Patch7: zlib-1.2.11-permit-deflateParams-change.patch
|
Patch7: zlib-1.2.11-permit-deflateParams-change.patch
|
||||||
|
# fixed DFLTCC compression level switching issues
|
||||||
|
Patch8: zlib-1.2.11-IBM-DFLTCC-compression-level-switching-issues.patch
|
||||||
|
# fixed inflateSyncPoint() bad return value on z15
|
||||||
|
Patch9: zlib-1.2.11-inflateSyncPoint-return-value-fix.patch
|
||||||
|
|
||||||
BuildRequires: automake, autoconf, libtool
|
BuildRequires: automake, autoconf, libtool
|
||||||
|
|
||||||
@ -86,6 +90,8 @@ developing applications which use minizip.
|
|||||||
%patch5 -p1
|
%patch5 -p1
|
||||||
%patch6 -p1
|
%patch6 -p1
|
||||||
%patch7 -p1
|
%patch7 -p1
|
||||||
|
%patch8 -p1
|
||||||
|
%patch9 -p1
|
||||||
|
|
||||||
iconv -f iso-8859-2 -t utf-8 < ChangeLog > ChangeLog.tmp
|
iconv -f iso-8859-2 -t utf-8 < ChangeLog > ChangeLog.tmp
|
||||||
mv ChangeLog.tmp ChangeLog
|
mv ChangeLog.tmp ChangeLog
|
||||||
@ -165,6 +171,12 @@ find $RPM_BUILD_ROOT -name '*.la' -delete
|
|||||||
|
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Wed Feb 24 2021 Ondrej Dubaj <odubaj@redhat.com> - 1.2.11-16.2
|
||||||
|
- Fixed inflateSyncPoint() bad return value on z15 (#1932270)
|
||||||
|
|
||||||
|
* Mon Jun 15 2020 Ondrej Dubaj <odubaj@redhat.com> - 1.2.11-16.1
|
||||||
|
- Fixed DFLTCC compression level switching issues (#1926104)
|
||||||
|
|
||||||
* Mon Jun 15 2020 Ondrej Dubaj <odubaj@redhat.com> - 1.2.11-16
|
* Mon Jun 15 2020 Ondrej Dubaj <odubaj@redhat.com> - 1.2.11-16
|
||||||
- Permit a deflateParams() parameter change
|
- Permit a deflateParams() parameter change
|
||||||
- Another fix for Z hardware-accelerated deflate for s390x architectures
|
- Another fix for Z hardware-accelerated deflate for s390x architectures
|
||||||
|
Loading…
Reference in New Issue
Block a user