Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 13 Sep 2017 21:56:49 +0000 (UTC)
From:      Marius Strobl <marius@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org
Subject:   svn commit: r323565 - stable/10/contrib/zlib
Message-ID:  <201709132156.v8DLun0k041671@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: marius
Date: Wed Sep 13 21:56:49 2017
New Revision: 323565
URL: https://svnweb.freebsd.org/changeset/base/323565

Log:
  MFC: r323382, MFV: r323381
  
  Permit a deflateParams() parameter change as soon as possible.
  
  This change fixes compression errors seen when the embedded Tomcat
  web server of a UniFi Controller zlib compresses responses. Given
  that Tomcat just uses Java/OpenJDK which in turn employs zlib for
  its compression/decompression support, this bug might very well
  affect other applications, too.
  
  PR:		222136
  Approved by:	re (gjb)

Modified:
  stable/10/contrib/zlib/deflate.c
  stable/10/contrib/zlib/zlib.h
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/contrib/zlib/deflate.c
==============================================================================
--- stable/10/contrib/zlib/deflate.c	Wed Sep 13 21:54:37 2017	(r323564)
+++ stable/10/contrib/zlib/deflate.c	Wed Sep 13 21:56:49 2017	(r323565)
@@ -494,7 +494,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);
 
@@ -587,12 +587,12 @@ 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)
             return err;
-        if (strm->avail_out == 0)
+        if (strm->avail_in || (s->strstart - s->block_start) + s->lookahead)
             return Z_BUF_ERROR;
     }
     if (s->level != level) {

Modified: stable/10/contrib/zlib/zlib.h
==============================================================================
--- stable/10/contrib/zlib/zlib.h	Wed Sep 13 21:54:37 2017	(r323564)
+++ stable/10/contrib/zlib/zlib.h	Wed Sep 13 21:56:49 2017	(r323565)
@@ -712,11 +712,12 @@ ZEXTERN int ZEXPORT deflateParams OF((z_streamp strm,
    used to switch between compression and straight copy of the input data, or
    to switch to a different kind of input data requiring a different strategy.
    If the compression approach (which is a function of the level) or the
-   strategy is changed, and if any input has been consumed in a previous
-   deflate() call, then the input available so far is compressed with the old
-   level and strategy using deflate(strm, Z_BLOCK).  There are three approaches
-   for the compression levels 0, 1..3, and 4..9 respectively.  The new level
-   and strategy will take effect at the next call of deflate().
+   strategy is changed, and if there have been any deflate() calls since the
+   state was initialized or reset, then the input available so far is
+   compressed with the old level and strategy using deflate(strm, Z_BLOCK).
+   There are three approaches for the compression levels 0, 1..3, and 4..9
+   respectively.  The new level and strategy will take effect at the next call
+   of deflate().
 
      If a deflate(strm, Z_BLOCK) is performed by deflateParams(), and it does
    not have enough output space to complete, then the parameter change will not



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201709132156.v8DLun0k041671>