>Number: 153154 >Category: bin >Synopsis: [patch][libarchive] fix error handling in mtree parsing code >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Tue Dec 14 19:40:04 UTC 2010 >Closed-Date: >Last-Modified: >Originator: Mark Johnston >Release: STABLE-8 >Organization: >Environment: FreeBSD mark-laptop-bsd.mark-home 8.2-PRERELEASE FreeBSD 8.2-PRERELEASE #7 r+46c51f0-dirty: Tue Dec 7 11:17:13 EST 2010 m...@mark-laptop-bsd.mark-home:/usr/obj/usr/home/mark/src/freebsd_git/src/sys/IPFW_GENERIC i386 >Description: When parsing an mtree file, libarchive expects to find a type for each file it encounters. If the type is not set, libarchive complains that the type keyword is missing _and_ that the mtree specification and the actual file type don't match. In the case that the type specification is omitted, I think that libarchive should only report the first error. >How-To-Repeat: $ ls bar.c foo.c tar.mtree $ cat tar.mtree #mtree foo.c bar.c $ tar -cvf out.tar @tar.mtree tar: Error reading archive tar.mtree: Missing type keyword in mtree specificationmtree specification has different type for foo.c tar: Error exit delayed from previous errors. $ echo $? 1 >Fix: I attached a patch which has libarchive verify that MTREE_HAS_TYPE is set before potentially reporting that "mtree specification has a different type for ...".
After the patch: $ tar -cvf out.tar @tar.mtree tar: Error reading archive tar.mtree: Missing type keyword in mtree specification tar: Error exit delayed from previous errors. Patch attached with submission follows: diff --git a/lib/libarchive/archive_read_support_format_mtree.c b/lib/libarchive/archive_read_support_format_mtree.c index 8643bb8..c98b04d 100644 --- a/lib/libarchive/archive_read_support_format_mtree.c +++ b/lib/libarchive/archive_read_support_format_mtree.c @@ -641,7 +641,7 @@ parse_file(struct archive_read *a, struct archive_entry *entry, archive_entry_filetype(entry) != AE_IFIFO) mismatched_type = 1; - if (mismatched_type) { + if (mismatched_type && (parsed_kws & MTREE_HAS_TYPE)) { if ((parsed_kws & MTREE_HAS_OPTIONAL) == 0) { archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC, >Release-Note: >Audit-Trail: >Unformatted: _______________________________________________ freebsd-bugs@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-bugs To unsubscribe, send any mail to "freebsd-bugs-unsubscr...@freebsd.org"