Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 29 Dec 2009 05:30:23 +0000 (UTC)
From:      Tim Kientzle <kientzle@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r201157 - head/lib/libarchive
Message-ID:  <200912290530.nBT5UNwM011932@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: kientzle
Date: Tue Dec 29 05:30:23 2009
New Revision: 201157
URL: http://svn.freebsd.org/changeset/base/201157

Log:
  Catch decompression failures earlier.  In particular, this gives
  immediate feedback if we fail to fork an external decompression program.

Modified:
  head/lib/libarchive/archive_read.c

Modified: head/lib/libarchive/archive_read.c
==============================================================================
--- head/lib/libarchive/archive_read.c	Tue Dec 29 05:28:28 2009	(r201156)
+++ head/lib/libarchive/archive_read.c	Tue Dec 29 05:30:23 2009	(r201157)
@@ -354,6 +354,7 @@ build_stream(struct archive_read *a)
 	int number_bidders, i, bid, best_bid;
 	struct archive_read_filter_bidder *bidder, *best_bidder;
 	struct archive_read_filter *filter;
+	ssize_t avail;
 	int r;
 
 	for (;;) {
@@ -392,6 +393,13 @@ build_stream(struct archive_read *a)
 			free(filter);
 			return (r);
 		}
+		/* Verify the filter by asking it for some data. */
+		__archive_read_filter_ahead(filter, 1, &avail);
+		if (avail < 0) {
+			/* If the read failed, bail out now. */
+			free(filter);
+			return (avail);
+		}
 		a->filter = filter;
 	}
 }



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