From owner-freebsd-current@FreeBSD.ORG Fri Nov 13 23:28:11 2009 Return-Path: Delivered-To: freebsd-current@FreeBSD.ORG Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 5E400106566B; Fri, 13 Nov 2009 23:28:11 +0000 (UTC) (envelope-from delphij@delphij.net) Received: from tarsier.geekcn.org (delphij-pt.tunnel.tserv2.fmt.ipv6.he.net [IPv6:2001:470:1f03:2c9::2]) by mx1.freebsd.org (Postfix) with ESMTP id D1ED08FC18; Fri, 13 Nov 2009 23:28:07 +0000 (UTC) Received: from localhost (tarsier.geekcn.org [211.166.10.233]) by tarsier.geekcn.org (Postfix) with ESMTP id 6225055CD935; Sat, 14 Nov 2009 07:28:05 +0800 (CST) X-Virus-Scanned: amavisd-new at geekcn.org Received: from tarsier.geekcn.org ([211.166.10.233]) by localhost (mail.geekcn.org [211.166.10.233]) (amavisd-new, port 10024) with ESMTP id MMeUms+bFAv0; Sat, 14 Nov 2009 07:27:55 +0800 (CST) Received: from delta.delphij.net (drawbridge.ixsystems.net [206.40.55.65]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by tarsier.geekcn.org (Postfix) with ESMTPSA id A5A1155CD932; Sat, 14 Nov 2009 07:27:48 +0800 (CST) DomainKey-Signature: a=rsa-sha1; s=default; d=delphij.net; c=nofws; q=dns; h=message-id:date:from:reply-to:organization:user-agent: mime-version:to:cc:subject:references:in-reply-to: x-enigmail-version:openpgp:content-type; b=AEX5yI43W5i09Yyj3GIL7zjaegfB7b9VrIcQb7WOLRx8sqgDCYiIV1/h6U9Qm3kC0 d6xREvOzlahGD1B1MguQw== Message-ID: <4AFDEB70.5080807@delphij.net> Date: Fri, 13 Nov 2009 15:27:44 -0800 From: Xin LI Organization: The Geek China Organization User-Agent: Thunderbird 2.0.0.23 (X11/20091022) MIME-Version: 1.0 To: d@delphij.net References: <200911090237.nA92b2m7005471__19254.880565177$1257734275$gmane$org@svn.freebsd.org> <867htvhygy.fsf@gmail.com> <4AFDDEA1.70900@delphij.net> <4AFDE27F.1070406@delphij.net> In-Reply-To: <4AFDE27F.1070406@delphij.net> X-Enigmail-Version: 0.95.7 OpenPGP: id=18EDEBA0; url=http://www.delphij.net/delphij.asc Content-Type: multipart/mixed; boundary="------------020506000801030506030104" Cc: Anonymous , freebsd-current@FreeBSD.ORG, Xin LI , matthew green Subject: Re: svn commit: r199066 - head/usr.bin/gzip X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: d@delphij.net List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 13 Nov 2009 23:28:11 -0000 This is a multi-part message in MIME format. --------------020506000801030506030104 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Xin LI wrote: > Xin LI wrote: >> Anonymous wrote: >>> Xin LI writes: >>>> Author: delphij >>>> Date: Mon Nov 9 02:37:02 2009 >>>> New Revision: 199066 >>>> URL: http://svn.freebsd.org/changeset/base/199066 >>>> >>>> Log: >>>> Apply a NetBSD fix (revision 1.12) to handle multi-session bzip2 files >>>> as created by pbzip2. >>>> >>>> Submitted by: mrg (NetBSD.org) >>>> MFC after: 1 week >>>> >>>> Modified: >>>> head/usr.bin/gzip/unbzip2.c >>>> >>> $ touch blah >>> $ bzip2 blah >>> $ gzip -d blah.bz2 >>> gzip: read: No such file or directory >>> Exit 2 >>> Regression? Can you reproduce? >> Yes, this is a regression (confirmed that this behavior is different >> from bzip2 and a regression from 199065). Thanks for your report and >> I'll investigate what's happening. > > I think the attached patch should fixed this issue. Could you please test? The previous fix has introduced an issue that revealed another bug as well (gzip -d -c can't decompress large-ish input stream, i.e. something like bzip2 -c ObsoleteFiles.inc | gunzip -d -c). The proposed patch: * Set end_of_file flag if we hit a short read. This usually saves one read after the actual end of file. * Only bail out when BZ_OK and end_of_file and no output is given from decompression engine. This would fix the streaming issue. * Use maybe_errx() instead of maybe_err - We don't have a valid errno at hand at the point we have received BZ_OK, and make the information more meaningful. Cheers, - -- Xin LI http://www.delphij.net/ FreeBSD - The Power to Serve! Live free or die -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.13 (FreeBSD) iEYEARECAAYFAkr963AACgkQi+vbBBjt66CqEwCffIgM9W25Tjdu2zlNGfarpKyS oYwAoI+oVyjIdMdZo8VXN/TwfHhm0P2P =zSGu -----END PGP SIGNATURE----- --------------020506000801030506030104 Content-Type: text/plain; name="gzip.diff" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="gzip.diff" Index: unbzip2.c =================================================================== --- unbzip2.c (revision 199258) +++ unbzip2.c (working copy) @@ -71,7 +71,7 @@ n = read(in, inbuf, BUFLEN); if (n < 0) maybe_err("read"); - if (n == 0) + if (n < BUFLEN) end_of_file = 1; bzs.next_in = inbuf; bzs.avail_in = n; @@ -86,8 +86,9 @@ switch (ret) { case BZ_STREAM_END: case BZ_OK: - if (ret == BZ_OK && end_of_file) - maybe_err("read"); + if (ret == BZ_OK && end_of_file && + bzs.avail_out == BUFLEN) + maybe_errx("truncated file"); if (!tflag && bzs.avail_out != BUFLEN) { ssize_t n; --------------020506000801030506030104--