Assure that deflateParams() will not switch functions mid-block.

This alters the specification in zlib.h, so that deflateParams()
will not change any parameters if there is not enough output space
in the event that a block is emitted in order to allow switching
the compression function.
This commit is contained in:
Mark Adler
2016-11-22 23:29:19 -08:00
parent 1101ea79c6
commit 7161ad76e2
2 changed files with 23 additions and 21 deletions

View File

@@ -517,7 +517,6 @@ int ZEXPORT deflateParams(strm, level, strategy)
{
deflate_state *s;
compress_func func;
int err = Z_OK;
if (deflateStateCheck(strm)) return Z_STREAM_ERROR;
s = strm->state;
@@ -534,9 +533,11 @@ int ZEXPORT deflateParams(strm, level, strategy)
if ((strategy != s->strategy || func != configuration_table[level].func)) {
/* Flush the last buffer: */
err = deflate(strm, Z_BLOCK);
if (err == Z_BUF_ERROR && s->pending == 0)
err = Z_OK;
int err = deflate(strm, Z_BLOCK);
if (err == Z_STREAM_ERROR)
return err;
if (strm->avail_out == 0)
return Z_BUF_ERROR;
}
if (s->level != level) {
s->level = level;
@@ -546,7 +547,7 @@ int ZEXPORT deflateParams(strm, level, strategy)
s->max_chain_length = configuration_table[level].max_chain;
}
s->strategy = strategy;
return err;
return Z_OK;
}
/* ========================================================================= */