Date: Mon, 4 Jan 2010 14:41:32 +0000 (UTC) From: "Bjoern A. Zeeb" <bz@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-6@freebsd.org Subject: svn commit: r201498 - stable/6/sys/opencrypto Message-ID: <201001041441.o04EfW6p087366@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: bz Date: Mon Jan 4 14:41:31 2010 New Revision: 201498 URL: http://svn.freebsd.org/changeset/base/201498 Log: MFC r199887: Z_PARTIAL_FLUSH is marked deprecated. Z_SYNC_FLUSH is the suggested replacement but only use it for inflate. For deflate use Z_FINISH as Z_SYNC_FLUSH adds a trailing marker in some cases that inflate(), despite the comment in zlib, does not seem to cope well with, resulting in errors when uncompressing exactly fills the output buffer without a Z_STREAM_END and a successive call returns an error. Modified: stable/6/sys/opencrypto/deflate.c Directory Properties: stable/6/sys/ (props changed) stable/6/sys/contrib/pf/ (props changed) stable/6/sys/dev/cxgb/ (props changed) Modified: stable/6/sys/opencrypto/deflate.c ============================================================================== --- stable/6/sys/opencrypto/deflate.c Mon Jan 4 14:35:36 2010 (r201497) +++ stable/6/sys/opencrypto/deflate.c Mon Jan 4 14:41:31 2010 (r201498) @@ -113,13 +113,17 @@ deflate_global(data, size, decomp, out) if (error != Z_OK) goto bad; for (;;) { - error = decomp ? inflate(&zbuf, Z_PARTIAL_FLUSH) : - deflate(&zbuf, Z_PARTIAL_FLUSH); + error = decomp ? inflate(&zbuf, Z_SYNC_FLUSH) : + deflate(&zbuf, Z_FINISH); if (error != Z_OK && error != Z_STREAM_END) goto bad; - else if (zbuf.avail_in == 0 && zbuf.avail_out != 0) - goto end; - else if (zbuf.avail_out == 0 && i < (ZBUF - 1)) { + if (decomp && zbuf.avail_in == 0 && error == Z_STREAM_END) { + /* Done. */ + break; + } else if (!decomp && error == Z_STREAM_END) { + /* Done. */ + break; + } else if (zbuf.avail_out == 0) { /* we need more output space, allocate size */ buf[i].out = malloc((u_long) size, M_CRYPTO_DATA, M_NOWAIT); @@ -130,11 +134,12 @@ deflate_global(data, size, decomp, out) buf[i].flag = 1; zbuf.avail_out = buf[i].size; i++; - } else + } else { + /* Unexpect result. */ goto bad; + } } -end: result = count = zbuf.total_out; *out = malloc((u_long) result, M_CRYPTO_DATA, M_NOWAIT);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201001041441.o04EfW6p087366>