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. 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: 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
Actually, I think the patch below is the proper way to handle this. Otherwise, things like an invalid type specifier (e.g. type=filee) result in the same problem as above. -Mark diff --git a/lib/libarchive/archive_read_support_format_mtree.c b/lib/libarchive/archive_read_support_format_mtree.c index 8643bb8..9295176 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 && r == ARCHIVE_OK) { if ((parsed_kws & MTREE_HAS_OPTIONAL) == 0) { archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
Responsible Changed From-To: freebsd-bugs->kientzle Over to maintainer.
For bugs matching the following criteria: Status: In Progress Changed: (is less than) 2014-06-01 Reset to default assignee and clear in-progress tags. Mail being skipped
Keyword: patch or patch-ready – in lieu of summary line prefix: [patch] * bulk change for the keyword * summary lines may be edited manually (not in bulk). Keyword descriptions and search interface: <https://bugs.freebsd.org/bugzilla/describekeywords.cgi>