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;
        }
 }
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to