diff --git a/contrib/pgcrypto/pgp-compress.c b/contrib/pgcrypto/pgp-compress.c index 0505bdee923..4b1d2a1ff5f 100644 --- a/contrib/pgcrypto/pgp-compress.c +++ b/contrib/pgcrypto/pgp-compress.c @@ -114,13 +114,13 @@ compress_process(PushFilter *next, void *priv, const uint8 *data, int len) /* * process data */ - while (len > 0) + st->stream.next_in = unconstify(uint8 *, data); + st->stream.avail_in = len; + while (st->stream.avail_in > 0) { - st->stream.next_in = unconstify(uint8 *, data); - st->stream.avail_in = len; st->stream.next_out = st->buf; st->stream.avail_out = st->buf_len; - res = deflate(&st->stream, 0); + res = deflate(&st->stream, Z_NO_FLUSH); if (res != Z_OK) return PXE_PGP_COMPRESSION_ERROR; @@ -131,7 +131,6 @@ compress_process(PushFilter *next, void *priv, const uint8 *data, int len) if (res < 0) return res; } - len = st->stream.avail_in; } return 0; @@ -154,6 +153,7 @@ compress_flush(PushFilter *next, void *priv) zres = deflate(&st->stream, Z_FINISH); if (zres != Z_STREAM_END && zres != Z_OK) return PXE_PGP_COMPRESSION_ERROR; + n_out = st->buf_len - st->stream.avail_out; if (n_out > 0) {