From owner-svn-src-head@freebsd.org Tue Jul 28 18:41:30 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id DCB2A9AD8F3; Tue, 28 Jul 2015 18:41:30 +0000 (UTC) (envelope-from bdrewery@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id CBC911164; Tue, 28 Jul 2015 18:41:30 +0000 (UTC) (envelope-from bdrewery@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.14.9/8.14.9) with ESMTP id t6SIfUuJ068941; Tue, 28 Jul 2015 18:41:30 GMT (envelope-from bdrewery@FreeBSD.org) Received: (from bdrewery@localhost) by repo.freebsd.org (8.14.9/8.14.9/Submit) id t6SIfTMb068730; Tue, 28 Jul 2015 18:41:29 GMT (envelope-from bdrewery@FreeBSD.org) Message-Id: <201507281841.t6SIfTMb068730@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: bdrewery set sender to bdrewery@FreeBSD.org using -f From: Bryan Drewery Date: Tue, 28 Jul 2015 18:41:29 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r285972 - in head: contrib/libarchive/libarchive contrib/libarchive/libarchive/test lib/libarchive/test X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 28 Jul 2015 18:41:31 -0000 Author: bdrewery Date: Tue Jul 28 18:41:28 2015 New Revision: 285972 URL: https://svnweb.freebsd.org/changeset/base/285972 Log: MFV r285970: Apply upstream changeset bf4f6ec64e: Fix issue 356: properly skip a sparse file entry in a tar file. PR: 201506 MFC after: 3 days Relnotes: yes Added: head/contrib/libarchive/libarchive/test/test_read_format_gtar_sparse_skip_entry.c - copied, changed from r285970, vendor/libarchive/dist/libarchive/test/test_read_format_gtar_sparse_skip_entry.c head/contrib/libarchive/libarchive/test/test_read_format_gtar_sparse_skip_entry.tar.Z.uu - copied unchanged from r285970, vendor/libarchive/dist/libarchive/test/test_read_format_gtar_sparse_skip_entry.tar.Z.uu Modified: head/contrib/libarchive/libarchive/archive_read_support_format_tar.c head/lib/libarchive/test/Makefile Directory Properties: head/contrib/libarchive/ (props changed) head/contrib/libarchive/libarchive/ (props changed) Modified: head/contrib/libarchive/libarchive/archive_read_support_format_tar.c ============================================================================== --- head/contrib/libarchive/libarchive/archive_read_support_format_tar.c Tue Jul 28 18:37:23 2015 (r285971) +++ head/contrib/libarchive/libarchive/archive_read_support_format_tar.c Tue Jul 28 18:41:28 2015 (r285972) @@ -585,13 +585,23 @@ static int archive_read_format_tar_skip(struct archive_read *a) { int64_t bytes_skipped; + int64_t request; + struct sparse_block *p; struct tar* tar; tar = (struct tar *)(a->format->data); - bytes_skipped = __archive_read_consume(a, - tar->entry_bytes_remaining + tar->entry_padding + - tar->entry_bytes_unconsumed); + /* Do not consume the hole of a sparse file. */ + request = 0; + for (p = tar->sparse_list; p != NULL; p = p->next) { + if (!p->hole) + request += p->remaining; + } + if (request > tar->entry_bytes_remaining) + request = tar->entry_bytes_remaining; + request += tar->entry_padding + tar->entry_bytes_unconsumed; + + bytes_skipped = __archive_read_consume(a, request); if (bytes_skipped < 0) return (ARCHIVE_FATAL); Copied and modified: head/contrib/libarchive/libarchive/test/test_read_format_gtar_sparse_skip_entry.c (from r285970, vendor/libarchive/dist/libarchive/test/test_read_format_gtar_sparse_skip_entry.c) ============================================================================== --- vendor/libarchive/dist/libarchive/test/test_read_format_gtar_sparse_skip_entry.c Tue Jul 28 17:48:34 2015 (r285970, copy source) +++ head/contrib/libarchive/libarchive/test/test_read_format_gtar_sparse_skip_entry.c Tue Jul 28 18:41:28 2015 (r285972) @@ -30,14 +30,22 @@ __FBSDID("$FreeBSD"); */ DEFINE_TEST(test_read_format_gtar_sparse_skip_entry) { +#ifndef __FreeBSD__ /* Backport test. */ const char *refname = "test_read_format_gtar_sparse_skip_entry.tar.Z.uu"; +#else + const char *refname = "test_read_format_gtar_sparse_skip_entry.tar.Z"; +#endif struct archive *a; struct archive_entry *ae; const void *p; size_t s; int64_t o; +#ifndef __FreeBSD__ /* Backport test. */ copy_reference_file(refname); +#else + extract_reference_file(refname); +#endif assert((a = archive_read_new()) != NULL); assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a)); assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a)); @@ -48,17 +56,21 @@ DEFINE_TEST(test_read_format_gtar_sparse assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); assertEqualString("a", archive_entry_pathname(ae)); assertEqualInt(10737418244, archive_entry_size(ae)); +#ifndef __FreeBSD__ /* Backport test. */ assertEqualInt(archive_entry_is_encrypted(ae), 0); assertEqualIntA(a, archive_read_has_encrypted_entries(a), ARCHIVE_READ_FORMAT_ENCRYPTION_UNSUPPORTED); +#endif /* Verify regular second file. */ assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); assertEqualString("b", archive_entry_pathname(ae)); assertEqualInt(4, archive_entry_size(ae)); +#ifndef __FreeBSD__ /* Backport test. */ assertEqualInt(archive_entry_is_encrypted(ae), 0); assertEqualIntA(a, archive_read_has_encrypted_entries(a), ARCHIVE_READ_FORMAT_ENCRYPTION_UNSUPPORTED); +#endif /* End of archive. */ @@ -87,9 +99,11 @@ DEFINE_TEST(test_read_format_gtar_sparse assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); assertEqualString("a", archive_entry_pathname(ae)); assertEqualInt(10737418244, archive_entry_size(ae)); +#ifndef __FreeBSD__ /* Backport test. */ assertEqualInt(archive_entry_is_encrypted(ae), 0); assertEqualIntA(a, archive_read_has_encrypted_entries(a), ARCHIVE_READ_FORMAT_ENCRYPTION_UNSUPPORTED); +#endif assertEqualInt(0, archive_read_data_block(a, &p, &s, &o)); assertEqualInt(4096, s); assertEqualInt(0, o); @@ -99,9 +113,11 @@ DEFINE_TEST(test_read_format_gtar_sparse assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); assertEqualString("b", archive_entry_pathname(ae)); assertEqualInt(4, archive_entry_size(ae)); +#ifndef __FreeBSD__ /* Backport test. */ assertEqualInt(archive_entry_is_encrypted(ae), 0); assertEqualIntA(a, archive_read_has_encrypted_entries(a), ARCHIVE_READ_FORMAT_ENCRYPTION_UNSUPPORTED); +#endif /* End of archive. */ Copied: head/contrib/libarchive/libarchive/test/test_read_format_gtar_sparse_skip_entry.tar.Z.uu (from r285970, vendor/libarchive/dist/libarchive/test/test_read_format_gtar_sparse_skip_entry.tar.Z.uu) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/contrib/libarchive/libarchive/test/test_read_format_gtar_sparse_skip_entry.tar.Z.uu Tue Jul 28 18:41:28 2015 (r285972, copy of r285970, vendor/libarchive/dist/libarchive/test/test_read_format_gtar_sparse_skip_entry.tar.Z.uu) @@ -0,0 +1,15 @@ +begin 644 - +M'YV04,+@05(F#)DRBD:;,V!@T8-6)NE&'#10T<-#;>R(%CAEV28_3R9?LW\(P8-F[`<#%C +M)@T<->#6>`PBC.2^E07;J#'#Q>J-F5DJ<`GBB),J+N;`<3JGC(LV8=2\D<-V +M]DO;N'7S]MTFC9OA/6#,CE'[=N[=$V +M9]RY=212"9YD1EOO*&`DE!&*>645%9IY9589JGE +MEEQVZ>678(8IYIADEFGFF6BFJ>::;+;IYIMPQBGGG'36:>>=>.:IYYY\]NGG +MGX`&*NB@A!9JJ)YB](D@1PZ>U&B#*468484RT11###7<8!8(&-)4PX=^DN@4 +B5%*E6.J*746JTHN'2LFDDZW&*NNLM-9JZZVXYJKKKKR&!0`` +` +end Modified: head/lib/libarchive/test/Makefile ============================================================================== --- head/lib/libarchive/test/Makefile Tue Jul 28 18:37:23 2015 (r285971) +++ head/lib/libarchive/test/Makefile Tue Jul 28 18:41:28 2015 (r285972) @@ -120,6 +120,7 @@ TESTS= \ test_read_format_gtar_gz.c \ test_read_format_gtar_lzma.c \ test_read_format_gtar_sparse.c \ + test_read_format_gtar_sparse_skip_entry.c \ test_read_format_iso_Z.c \ test_read_format_iso_multi_extent.c \ test_read_format_iso_xorriso.c \