git: 798b7b161a71 - releng/13.5 - libarchive: merge from vendor branch
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Fri, 08 Aug 2025 00:39:29 UTC
The branch releng/13.5 has been updated by gordon:
URL: https://cgit.FreeBSD.org/src/commit/?id=798b7b161a71282aff73d532ffe381b65dd04251
commit 798b7b161a71282aff73d532ffe381b65dd04251
Author: Martin Matuska <mm@FreeBSD.org>
AuthorDate: 2025-06-01 20:16:26 +0000
Commit: Gordon Tetlow <gordon@FreeBSD.org>
CommitDate: 2025-08-07 23:50:06 +0000
libarchive: merge from vendor branch
libarchive 3.8.1
New features:
#2088 7-zip reader: improve self-extracting archive detection
#2137 zip writer: added XZ, LZMA, ZSTD and BZIP2 support
#2403 zip writer: added LZMA + RISCV BCJ filter
#2601 bsdtar: support --mtime and --clamp-mtime
#2602 libarchive: mbedtls 3.x compatibility
Security fixes:
#2422 tar reader: Handle truncation in the middle of a GNU long linkname
(CVE-2024-57970)
#2532 tar reader: fix unchecked return value in list_item_verbose()
(CVE-2025-25724)
#2532 unzip: fix null pointer dereference (CVE-2025-1632)
#2568 warc: prevent signed integer overflow (CVE-2025-5916)
#2584 rar: do not skip past EOF while reading (CVE-2025-5918)
#2588 tar: fix overflow in build_ustar_entry (CVE-2025-5917)
#2598 rar: fix double free with over 4 billion nodes (CVE-2025-5914)
#2599 rar: fix heap-buffer-overflow (CVE-2025-5915)
Important bugfixes:
#2399 7-zip reader: add SPARC filter support for non-LZMA compressors
#2405 tar reader: ignore ustar size when pax size is present
#2435 tar writer: fix bug when -s/a/b/ used more than once with b flag
#2459 7-zip reader: add POWERPC filter support for non-LZMA compressors
#2519 libarchive: handle ARCHIVE_FILTER_LZOP in archive_read_append_filter
#2539 libarchive: add missing seeker function to archive_read_open_FILE()
#2544 gzip: allow setting the original filename for gzip compressed files
#2564 libarchive: improve lseek handling
#2582 rar: support large headers on 32 bit systems
#2587 bsdtar: don't hardlink negative inode files together
#2596 rar: support large headers on 32 bit systems
#2606 libarchive: support @-prefixed Unix epoch timestamps as date strings
#2634 tar: Support negative time values with pax
#2637 tar: Keep block alignment after pax error
#2642 libarchive: fix FILE_skip regression
#2643 tar: Handle extra bytes after sparse entries
#2649 compress: Prevent call stack overflow
#2651 iso9660: always check archive_string_ensure return value
CVE: CVE-2024-57970, CVE-2025-1632, CVE-2025-25724,
CVE-2025-5914, CVE-2025-5915, CVE-2025-5916,
CVE-2025-5917, CVE-2025-5918
PR: 286944 (exp-run on main, libarchive 3.8.0)
Approved by: so
Security: FreeBSD-SA-25:07.libarchive
(cherry picked from commit 2e113ef82465598b8c26e0ca415fbe90677fbd47)
(cherry picked from commit f47afeb2ce1eb04a787a4b8c1a6d7752940268da)
---
contrib/libarchive/COPYING | 2 +-
contrib/libarchive/NEWS | 8 +
contrib/libarchive/README.md | 9 +-
.../github_actions/install-macos-dependencies.sh | 19 +
contrib/libarchive/cpio/cpio.c | 2 +-
contrib/libarchive/cpio/test/test_format_newc.c | 12 +-
contrib/libarchive/cpio/test/test_option_a.c | 2 +-
contrib/libarchive/cpio/test/test_option_c.c | 8 +-
contrib/libarchive/libarchive/archive.h | 57 +-
contrib/libarchive/libarchive/archive_acl.c | 14 +-
.../libarchive/libarchive/archive_acl_private.h | 2 +-
contrib/libarchive/libarchive/archive_cmdline.c | 2 +-
.../libarchive/archive_cryptor_private.h | 8 +
contrib/libarchive/libarchive/archive_digest.c | 344 +-
.../libarchive/libarchive/archive_digest_private.h | 35 +-
.../libarchive/archive_disk_acl_freebsd.c | 4 +-
contrib/libarchive/libarchive/archive_entry.c | 54 +-
contrib/libarchive/libarchive/archive_entry.h | 84 +-
.../libarchive/archive_entry_link_resolver.c | 8 +
.../libarchive/libarchive/archive_entry_locale.h | 2 +-
.../libarchive/libarchive/archive_entry_private.h | 13 +-
.../libarchive/libarchive/archive_hmac_private.h | 2 +-
contrib/libarchive/libarchive/archive_match.c | 102 +-
contrib/libarchive/libarchive/archive_options.c | 4 +-
.../libarchive/archive_options_private.h | 4 +-
contrib/libarchive/libarchive/archive_pack_dev.h | 2 +-
.../{archive_getdate.c => archive_parse_date.c} | 65 +-
contrib/libarchive/libarchive/archive_platform.h | 5 +
.../libarchive/libarchive/archive_platform_acl.h | 2 +-
.../libarchive/libarchive/archive_platform_xattr.h | 2 +-
contrib/libarchive/libarchive/archive_ppmd7.c | 11 +-
contrib/libarchive/libarchive/archive_ppmd8.c | 15 +-
.../libarchive/libarchive/archive_ppmd_private.h | 18 +-
.../libarchive/libarchive/archive_random_private.h | 2 +-
contrib/libarchive/libarchive/archive_rb.h | 2 +-
contrib/libarchive/libarchive/archive_read.c | 6 -
.../libarchive/archive_read_append_filter.c | 4 +
.../libarchive/archive_read_disk_entry_from_file.c | 2 +-
.../libarchive/archive_read_disk_posix.c | 9 +-
.../libarchive/archive_read_disk_private.h | 7 +-
.../libarchive/libarchive/archive_read_format.3 | 15 +
.../libarchive/libarchive/archive_read_open_fd.c | 42 +-
.../libarchive/libarchive/archive_read_open_file.c | 121 +-
.../libarchive/archive_read_open_filename.c | 61 +-
.../archive_read_support_filter_by_code.c | 14 -
.../archive_read_support_filter_compress.c | 3 +-
.../libarchive/archive_read_support_filter_lz4.c | 1 -
.../libarchive/archive_read_support_format_7zip.c | 445 +-
.../archive_read_support_format_by_code.c | 15 -
.../libarchive/archive_read_support_format_cab.c | 7 +-
.../libarchive/archive_read_support_format_cpio.c | 22 +-
.../archive_read_support_format_iso9660.c | 4 +-
.../libarchive/archive_read_support_format_lha.c | 73 +-
.../libarchive/archive_read_support_format_rar.c | 184 +-
.../libarchive/archive_read_support_format_rar5.c | 101 +-
.../libarchive/archive_read_support_format_tar.c | 409 +-
.../libarchive/archive_read_support_format_warc.c | 7 +-
.../libarchive/archive_read_support_format_xar.c | 355 +-
.../libarchive/archive_read_support_format_zip.c | 33 +-
contrib/libarchive/libarchive/archive_string.c | 141 +-
.../libarchive/archive_string_composition.h | 3 +-
.../libarchive/libarchive/archive_string_sprintf.c | 11 +-
contrib/libarchive/libarchive/archive_time.c | 163 +
.../{archive_getdate.h => archive_time_private.h} | 26 +-
contrib/libarchive/libarchive/archive_util.c | 76 +-
.../libarchive/archive_version_details.c | 405 +-
contrib/libarchive/libarchive/archive_write.c | 2 +-
.../archive_write_add_filter_b64encode.c | 2 +-
.../libarchive/archive_write_add_filter_gzip.c | 19 +-
.../libarchive/archive_write_add_filter_uuencode.c | 2 +-
.../libarchive/archive_write_disk_posix.c | 15 +-
.../libarchive/archive_write_open_filename.c | 8 +-
.../libarchive/archive_write_set_format_7zip.c | 298 +-
.../libarchive/archive_write_set_format_gnutar.c | 16 +-
.../libarchive/archive_write_set_format_iso9660.c | 25 +-
.../libarchive/archive_write_set_format_mtree.c | 123 +-
.../libarchive/archive_write_set_format_pax.c | 6 +-
.../libarchive/archive_write_set_format_xar.c | 692 +-
.../libarchive/archive_write_set_format_zip.c | 986 +-
.../libarchive/archive_write_set_options.3 | 43 +-
contrib/libarchive/libarchive/libarchive-formats.5 | 20 +-
.../libarchive/libarchive/test/read_open_memory.c | 2 +-
.../libarchive/test/test_7zip_filename_encoding.c | 200 +-
contrib/libarchive/libarchive/test/test_acl_pax.c | 8 +-
.../libarchive/test/test_acl_platform_nfs4.c | 10 +-
.../libarchive/test/test_acl_platform_posix1e.c | 3 +-
.../libarchive/libarchive/test/test_acl_posix1e.c | 8 +-
contrib/libarchive/libarchive/test/test_acl_text.c | 2 +-
.../libarchive/test/test_archive_match_time.c | 71 +-
...archive_getdate.c => test_archive_parse_date.c} | 21 +-
.../test/test_archive_string_conversion.c | 4 +-
.../libarchive/test/test_compat_gtar_large.c | 224 +
.../libarchive/test/test_compat_solaris_tar_acl.c | 4 +-
.../libarchive/test/test_compat_star_acl.c | 6 +-
contrib/libarchive/libarchive/test/test_entry.c | 2 +-
.../libarchive/libarchive/test/test_open_file.c | 9 +-
.../test/test_read_disk_directory_traversals.c | 2 +-
.../libarchive/test/test_read_format_7zip.c | 315 +-
.../test_read_format_7zip_deflate_powerpc.7z.uu | 55 +
.../test_read_format_7zip_extract_second.7z.uu | 22 +-
.../test/test_read_format_7zip_lzma2_powerpc.7z.uu | 48 +
.../test/test_read_format_7zip_lzma2_riscv.7z.uu | 49 +
.../test/test_read_format_7zip_lzma2_sparc.7z.uu | 51 +
.../test/test_read_format_7zip_sfx_elf.elf.uu | 9442 ++++++++++++++++++++
.../test_read_format_7zip_sfx_modified_pe.exe.uu | 109 +
.../test/test_read_format_7zip_sfx_pe.exe.uu | 4751 ++++++++++
.../test/test_read_format_7zip_zstd_sparc.7z.uu | 59 +
.../test/test_read_format_gtar_redundant_L.c | 40 +
.../test_read_format_gtar_redundant_L.tar.Z.uu | 16 +
.../libarchive/test/test_read_format_gtar_sparse.c | 8 +-
.../test/test_read_format_gtar_sparse_length.c | 53 +
.../test_read_format_gtar_sparse_length.tar.Z.uu | 12 +
...est_read_format_gtar_sparse_skip_entry.tar.Z.uu | 18 +-
.../libarchive/test/test_read_format_rar.c | 74 +-
.../libarchive/test/test_read_format_rar5.c | 29 +-
.../test/test_read_format_rar5_unicode.rar.uu | 18 +-
.../test/test_read_format_rar_encryption.c | 4 +-
.../test/test_read_format_rar_endarc_huge.rar.uu | 4 +
.../test/test_read_format_rar_newsub_huge.rar.uu | 5 +
.../test/test_read_format_rar_overflow.c | 48 +
.../test/test_read_format_rar_overflow.rar.uu | 11 +
.../test/test_read_format_rar_symlink_huge.rar.uu | 5 +
.../test_read_format_tar_empty_with_gnulabel.c | 2 +-
.../test/test_read_format_tar_mac_metadata.c | 85 +
.../test_read_format_tar_mac_metadata_1.tar.uu | 231 +
.../test/test_read_format_tar_pax_g_large.c | 53 +
.../test/test_read_format_tar_pax_g_large.tar.uu | 49 +
.../test/test_read_format_tar_pax_negative_time.c | 68 +
.../test_read_format_tar_pax_negative_time.tar.uu | 60 +
.../libarchive/test/test_read_format_warc.c | 24 +
.../test/test_read_format_warc_incomplete.warc.uu | 10 +
.../libarchive/test/test_read_format_zip.c | 5 +-
.../test/test_read_pax_empty_val_no_nl.c | 65 +
.../test/test_read_pax_empty_val_no_nl.tar.uu | 60 +
.../libarchive/test/test_read_position.c | 2 +-
.../libarchive/libarchive/test/test_sparse_basic.c | 8 +-
.../libarchive/libarchive/test/test_tar_large.c | 2 +-
.../libarchive/test/test_write_disk_perms.c | 8 +-
.../test/test_write_disk_secure_noabsolutepaths.c | 4 +-
.../libarchive/test/test_write_filter_gzip.c | 5 +-
.../libarchive/test/test_write_format_7zip.c | 6 +
.../libarchive/test/test_write_format_7zip_large.c | 6 +
.../libarchive/test/test_write_format_gnutar.c | 29 +-
.../test/test_write_format_mtree_preset_digests.c | 2107 +++++
.../libarchive/test/test_write_format_tar_sparse.c | 4 +-
.../libarchive/test/test_write_format_xar.c | 39 +
.../test/test_write_format_zip64_stream.c | 192 +-
.../test/test_write_format_zip_compression_bzip2.c | 362 +
.../test_write_format_zip_compression_lzmaxz.c | 425 +
.../test/test_write_format_zip_compression_store.c | 277 +-
.../test/test_write_format_zip_compression_zstd.c | 366 +
.../test/test_write_format_zip_entry_size_unset.c | 150 +-
.../libarchive/test/test_write_format_zip_file.c | 164 +-
.../test/test_write_format_zip_file_zip64.c | 192 +-
.../libarchive/test/test_write_format_zip_large.c | 35 +-
.../libarchive/test/test_write_format_zip_stream.c | 156 +-
contrib/libarchive/libarchive_fe/passphrase.c | 10 +-
contrib/libarchive/tar/bsdtar.1 | 74 +-
contrib/libarchive/tar/bsdtar.c | 35 +-
contrib/libarchive/tar/bsdtar.h | 12 +-
contrib/libarchive/tar/cmdline.c | 2 +
contrib/libarchive/tar/subst.c | 1 +
contrib/libarchive/tar/test/test_list_item.c | 63 +
contrib/libarchive/tar/test/test_list_item.tar.uu | 169 +
contrib/libarchive/tar/test/test_option_C_mtree.c | 4 +-
.../{test_option_P.c => test_option_P_upper.c} | 0
.../libarchive/tar/test/test_option_ignore_zeros.c | 4 +-
contrib/libarchive/tar/test/test_option_mtime.c | 82 +
contrib/libarchive/tar/test/test_option_s.c | 14 +-
contrib/libarchive/tar/test/test_stdio.c | 48 +-
contrib/libarchive/tar/util.c | 57 +-
contrib/libarchive/tar/write.c | 4 +
contrib/libarchive/test_utils/test_common.h | 2 +-
contrib/libarchive/test_utils/test_main.c | 192 +-
contrib/libarchive/test_utils/test_utils.c | 48 +
contrib/libarchive/test_utils/test_utils.h | 11 +-
contrib/libarchive/unzip/bsdunzip.c | 21 +-
contrib/libarchive/unzip/la_getline.h | 16 +
lib/libarchive/Makefile | 3 +-
lib/libarchive/tests/Makefile | 35 +-
usr.bin/tar/tests/Makefile | 5 +-
181 files changed, 25587 insertions(+), 2345 deletions(-)
diff --git a/contrib/libarchive/COPYING b/contrib/libarchive/COPYING
index 1b9723574a7b..9d0bcf81ff61 100644
--- a/contrib/libarchive/COPYING
+++ b/contrib/libarchive/COPYING
@@ -20,7 +20,7 @@ the actual statements in the files are controlling.
libarchive/mtree.5
* The following source files are in the public domain:
- libarchive/archive_getdate.c
+ libarchive/archive_parse_date.c
* The following source files are triple-licensed with the ability to choose
from CC0 1.0 Universal, OpenSSL or Apache 2.0 licenses:
diff --git a/contrib/libarchive/NEWS b/contrib/libarchive/NEWS
index 6af50e4e4033..caca7d5cbdb9 100644
--- a/contrib/libarchive/NEWS
+++ b/contrib/libarchive/NEWS
@@ -1,3 +1,11 @@
+Jun 01, 2026: libarchive 3.8.1 released
+
+May 20, 2025: libarchive 3.8.0 released
+
+Mar 30, 2025: libarchive 3.7.9 released
+
+Mar 20, 2025: libarchive 3.7.8 released
+
Oct 13, 2024: libarchive 3.7.7 released
Sep 23, 2024: libarchive 3.7.6 released
diff --git a/contrib/libarchive/README.md b/contrib/libarchive/README.md
index 933de6986425..0d63357292ec 100644
--- a/contrib/libarchive/README.md
+++ b/contrib/libarchive/README.md
@@ -85,13 +85,14 @@ Currently, the library automatically detects and reads the following formats:
* PWB binary cpio
* ISO9660 CD-ROM images (with optional Rockridge or Joliet extensions)
* ZIP archives (with uncompressed or "deflate" compressed entries, including support for encrypted Zip archives)
- * ZIPX archives (with support for bzip2, ppmd8, lzma and xz compressed entries)
+ * ZIPX archives (with support for bzip2, zstd, ppmd8, lzma and xz compressed entries)
* GNU and BSD 'ar' archives
* 'mtree' format
* 7-Zip archives (including archives that use zstandard compression)
* Microsoft CAB format
* LHA and LZH archives
* RAR and RAR 5.0 archives (with some limitations due to RAR's proprietary status)
+ * WARC archives
* XAR archives
The library also detects and handles any of the following before evaluating the archive:
@@ -120,15 +121,18 @@ The library can create archives in any of the following formats:
* PWB binary cpio
* shar archives
* ZIP archives (with uncompressed or "deflate" compressed entries)
+ * ZIPX archives (with bzip2, zstd, lzma or xz compressed entries)
* GNU and BSD 'ar' archives
* 'mtree' format
* ISO9660 format
- * 7-Zip archives
+ * 7-Zip archives (including archives that use zstandard compression)
+ * WARC archives
* XAR archives
When creating archives, the result can be filtered with any of the following:
* uuencode
+ * base64
* gzip compression
* bzip2 compression
* compress/LZW compression
@@ -241,4 +245,3 @@ questions we are asked about libarchive:
appropriate. It has many advantages over other tar formats
(including the legacy GNU tar format) and is widely supported by
current tar implementations.
-
diff --git a/contrib/libarchive/build/ci/github_actions/install-macos-dependencies.sh b/contrib/libarchive/build/ci/github_actions/install-macos-dependencies.sh
new file mode 100755
index 000000000000..2aa4823fc3d0
--- /dev/null
+++ b/contrib/libarchive/build/ci/github_actions/install-macos-dependencies.sh
@@ -0,0 +1,19 @@
+#!/bin/sh
+set -eux
+
+# Uncommenting these adds a full minute to the CI time
+#brew update > /dev/null
+#brew upgrade > /dev/null
+
+# This does an upgrade if the package is already installed
+brew install \
+ autoconf \
+ automake \
+ libtool \
+ pkg-config \
+ cmake \
+ xz \
+ lz4 \
+ zstd \
+ libxml2 \
+ openssl
diff --git a/contrib/libarchive/cpio/cpio.c b/contrib/libarchive/cpio/cpio.c
index 6bc6eb22e967..2bf1bfa2985a 100644
--- a/contrib/libarchive/cpio/cpio.c
+++ b/contrib/libarchive/cpio/cpio.c
@@ -1206,7 +1206,7 @@ list_item_verbose(struct cpio *cpio, struct archive_entry *entry)
else
strcpy(date, "invalid mtime");
- fprintf(out, "%s%3d %-8s %-8s %8s %12s %s",
+ fprintf(out, "%s%3u %-8s %-8s %8s %12s %s",
archive_entry_strmode(entry),
archive_entry_nlink(entry),
uname, gname, size, date,
diff --git a/contrib/libarchive/cpio/test/test_format_newc.c b/contrib/libarchive/cpio/test/test_format_newc.c
index 884b6c9c4da7..33aa16d07a81 100644
--- a/contrib/libarchive/cpio/test/test_format_newc.c
+++ b/contrib/libarchive/cpio/test/test_format_newc.c
@@ -189,10 +189,10 @@ DEFINE_TEST(test_format_newc)
gid = from_hex(e + 30, 8); /* gid */
assertEqualMem(e + 38, "00000003", 8); /* nlink */
t = from_hex(e + 46, 8); /* mtime */
- failure("t=%#08jx now=%#08jx=%jd", (intmax_t)t, (intmax_t)now,
+ failure("t=%#08jx now=%#08jx=%jd", (uintmax_t)t, (uintmax_t)now,
(intmax_t)now);
assert(t <= now); /* File wasn't created in future. */
- failure("t=%#08jx now - 2=%#08jx=%jd", (intmax_t)t, (intmax_t)now - 2,
+ failure("t=%#08jx now - 2=%#08jx=%jd", (uintmax_t)t, (uintmax_t)now - 2,
(intmax_t)now - 2);
assert(t >= now - 2); /* File was created w/in last 2 secs. */
failure("newc format stores body only with last appearance of a link\n"
@@ -219,7 +219,7 @@ DEFINE_TEST(test_format_newc)
assert(is_hex(e, 110));
assertEqualMem(e + 0, "070701", 6); /* Magic */
assert(is_hex(e + 6, 8)); /* ino */
-#if defined(_WIN32) && !defined(CYGWIN)
+#if defined(_WIN32) && !defined(__CYGWIN__)
/* Mode: Group members bits and others bits do not work. */
assertEqualInt(0xa180, from_hex(e + 14, 8) & 0xffc0);
#else
@@ -230,7 +230,7 @@ DEFINE_TEST(test_format_newc)
assertEqualMem(e + 38, "00000001", 8); /* nlink */
t2 = from_hex(e + 46, 8); /* mtime */
failure("First entry created at t=%#08jx this entry created"
- " at t2=%#08jx", (intmax_t)t, (intmax_t)t2);
+ " at t2=%#08jx", (uintmax_t)t, (uintmax_t)t2);
assert(t2 == t || t2 == t + 1); /* Almost same as first entry. */
assertEqualMem(e + 54, "00000005", 8); /* File size */
fs = (uint64_t)from_hex(e + 54, 8);
@@ -266,7 +266,7 @@ DEFINE_TEST(test_format_newc)
#endif
t2 = from_hex(e + 46, 8); /* mtime */
failure("First entry created at t=%#08jx this entry created at"
- "t2=%#08jx", (intmax_t)t, (intmax_t)t2);
+ "t2=%#08jx", (uintmax_t)t, (uintmax_t)t2);
assert(t2 == t || t2 == t + 1); /* Almost same as first entry. */
assertEqualMem(e + 54, "00000000", 8); /* File size */
fs = (uint64_t)from_hex(e + 54, 8);
@@ -300,7 +300,7 @@ DEFINE_TEST(test_format_newc)
assertEqualMem(e + 38, "00000003", 8); /* nlink */
t2 = from_hex(e + 46, 8); /* mtime */
failure("First entry created at t=%#08jx this entry created at"
- "t2=%#08jx", (intmax_t)t, (intmax_t)t2);
+ "t2=%#08jx", (uintmax_t)t, (uintmax_t)t2);
assert(t2 == t || t2 == t + 1); /* Almost same as first entry. */
assertEqualInt(10, from_hex(e + 54, 8)); /* File size */
fs = (uint64_t)from_hex(e + 54, 8);
diff --git a/contrib/libarchive/cpio/test/test_option_a.c b/contrib/libarchive/cpio/test/test_option_a.c
index e6b87948c65a..28e5b73765d7 100644
--- a/contrib/libarchive/cpio/test/test_option_a.c
+++ b/contrib/libarchive/cpio/test/test_option_a.c
@@ -52,7 +52,7 @@ test_create(void)
* #ifdef this section out. Most of the test below is
* still valid. */
memset(×, 0, sizeof(times));
-#if defined(_WIN32) && !defined(CYGWIN)
+#if defined(_WIN32) && !defined(__CYGWIN__)
times.actime = 86400;
times.modtime = 86400;
#else
diff --git a/contrib/libarchive/cpio/test/test_option_c.c b/contrib/libarchive/cpio/test/test_option_c.c
index e8748449514b..2414a4658bb1 100644
--- a/contrib/libarchive/cpio/test/test_option_c.c
+++ b/contrib/libarchive/cpio/test/test_option_c.c
@@ -18,7 +18,7 @@ is_octal(const char *p, size_t l)
return (1);
}
-static long long int
+static unsigned long long int
from_octal(const char *p, size_t l)
{
long long int r = 0;
@@ -117,7 +117,7 @@ DEFINE_TEST(test_option_c)
gid = (int)from_octal(e + 30, 6);
assertEqualMem(e + 36, "000001", 6); /* nlink */
failure("file entries should not have rdev set (dev field was 0%o)",
- dev);
+ (unsigned int)dev);
assertEqualMem(e + 42, "000000", 6); /* rdev */
t = from_octal(e + 48, 11); /* mtime */
assert(t <= now); /* File wasn't created in future. */
@@ -133,7 +133,7 @@ DEFINE_TEST(test_option_c)
assert(is_octal(e, 76)); /* Entire header is octal digits. */
assertEqualMem(e + 0, "070707", 6); /* Magic */
assertEqualInt(dev, from_octal(e + 6, 6)); /* dev */
- assert(ino != from_octal(e + 12, 6)); /* ino */
+ assert(ino != (int)from_octal(e + 12, 6)); /* ino */
#if !defined(_WIN32) || defined(__CYGWIN__)
/* On Windows, symbolic link and group members bits and
* others bits do not work. */
@@ -163,7 +163,7 @@ DEFINE_TEST(test_option_c)
assertEqualInt(dev, from_octal(e + 6, 6));
/* Ino must be different from first entry. */
assert(is_octal(e + 12, 6)); /* ino */
- assert(ino != from_octal(e + 12, 6));
+ assert(ino != (int)from_octal(e + 12, 6));
#if defined(_WIN32) && !defined(__CYGWIN__)
/* Group members bits and others bits do not work. */
assertEqualMem(e + 18, "040777", 6); /* Mode */
diff --git a/contrib/libarchive/libarchive/archive.h b/contrib/libarchive/libarchive/archive.h
index 5b65475f61e2..002190a24663 100644
--- a/contrib/libarchive/libarchive/archive.h
+++ b/contrib/libarchive/libarchive/archive.h
@@ -34,12 +34,15 @@
* assert that ARCHIVE_VERSION_NUMBER >= 2012108.
*/
/* Note: Compiler will complain if this does not match archive_entry.h! */
-#define ARCHIVE_VERSION_NUMBER 3007007
+#define ARCHIVE_VERSION_NUMBER 3008001
#include <sys/stat.h>
#include <stddef.h> /* for wchar_t */
#include <stdio.h> /* For FILE * */
+#if ARCHIVE_VERSION_NUMBER < 4000000
+/* time_t is slated to be removed from public includes in 4.0 */
#include <time.h> /* For time_t */
+#endif
/*
* Note: archive.h is for use outside of libarchive; the configuration
@@ -63,12 +66,15 @@
#define __LA_INT64_T_DEFINED
# if defined(_WIN32) && !defined(__CYGWIN__) && !defined(__WATCOMC__)
typedef __int64 la_int64_t;
+typedef unsigned __int64 la_uint64_t;
# else
# include <unistd.h> /* ssize_t */
# if defined(_SCO_DS) || defined(__osf__)
typedef long long la_int64_t;
+typedef unsigned long long la_uint64_t;
# else
typedef int64_t la_int64_t;
+typedef uint64_t la_uint64_t;
# endif
# endif
#endif
@@ -94,6 +100,22 @@ typedef ssize_t la_ssize_t;
# endif
#endif
+#if ARCHIVE_VERSION_NUMBER < 4000000
+/* Use the platform types for time_t */
+#define __LA_TIME_T time_t
+#else
+/* Use 64-bits integer types for time_t */
+#define __LA_TIME_T la_int64_t
+#endif
+
+#if ARCHIVE_VERSION_NUMBER < 4000000
+/* Use the platform types for dev_t */
+#define __LA_DEV_T dev_t
+#else
+/* Use 64-bits integer types for dev_t */
+#define __LA_DEV_T la_int64_t
+#endif
+
/* Large file support for Android */
#if defined(__LIBARCHIVE_BUILD) && defined(__ANDROID__)
#include "android_lf.h"
@@ -132,7 +154,7 @@ typedef ssize_t la_ssize_t;
#define __LA_PRINTF(fmtarg, firstvararg) /* nothing */
#endif
-#if defined(__GNUC__) && __GNUC__ >= 3 && __GNUC_MINOR__ >= 1
+#if defined(__GNUC__) && (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1))
# define __LA_DEPRECATED __attribute__((deprecated))
#else
# define __LA_DEPRECATED
@@ -155,7 +177,7 @@ __LA_DECL int archive_version_number(void);
/*
* Textual name/version of the library, useful for version displays.
*/
-#define ARCHIVE_VERSION_ONLY_STRING "3.7.7"
+#define ARCHIVE_VERSION_ONLY_STRING "3.8.1"
#define ARCHIVE_VERSION_STRING "libarchive " ARCHIVE_VERSION_ONLY_STRING
__LA_DECL const char * archive_version_string(void);
@@ -178,6 +200,23 @@ __LA_DECL const char * archive_liblzma_version(void);
__LA_DECL const char * archive_bzlib_version(void);
__LA_DECL const char * archive_liblz4_version(void);
__LA_DECL const char * archive_libzstd_version(void);
+__LA_DECL const char * archive_liblzo2_version(void);
+__LA_DECL const char * archive_libexpat_version(void);
+__LA_DECL const char * archive_libbsdxml_version(void);
+__LA_DECL const char * archive_libxml2_version(void);
+__LA_DECL const char * archive_mbedtls_version(void);
+__LA_DECL const char * archive_nettle_version(void);
+__LA_DECL const char * archive_openssl_version(void);
+__LA_DECL const char * archive_libmd_version(void);
+__LA_DECL const char * archive_commoncrypto_version(void);
+__LA_DECL const char * archive_cng_version(void);
+__LA_DECL const char * archive_wincrypt_version(void);
+__LA_DECL const char * archive_librichacl_version(void);
+__LA_DECL const char * archive_libacl_version(void);
+__LA_DECL const char * archive_libattr_version(void);
+__LA_DECL const char * archive_libiconv_version(void);
+__LA_DECL const char * archive_libpcre_version(void);
+__LA_DECL const char * archive_libpcre2_version(void);
/* Declare our basic types. */
struct archive;
@@ -449,6 +488,8 @@ __LA_DECL int archive_read_support_format_by_code(struct archive *, int);
__LA_DECL int archive_read_support_format_cab(struct archive *);
__LA_DECL int archive_read_support_format_cpio(struct archive *);
__LA_DECL int archive_read_support_format_empty(struct archive *);
+/* archive_read_support_format_gnutar() is an alias for historical reasons
+ * of archive_read_support_format_tar(). */
__LA_DECL int archive_read_support_format_gnutar(struct archive *);
__LA_DECL int archive_read_support_format_iso9660(struct archive *);
__LA_DECL int archive_read_support_format_lha(struct archive *);
@@ -828,6 +869,10 @@ __LA_DECL int archive_write_set_format_filter_by_ext(struct archive *a, const ch
__LA_DECL int archive_write_set_format_filter_by_ext_def(struct archive *a, const char *filename, const char * def_ext);
__LA_DECL int archive_write_zip_set_compression_deflate(struct archive *);
__LA_DECL int archive_write_zip_set_compression_store(struct archive *);
+__LA_DECL int archive_write_zip_set_compression_lzma(struct archive *);
+__LA_DECL int archive_write_zip_set_compression_xz(struct archive *);
+__LA_DECL int archive_write_zip_set_compression_bzip2(struct archive *);
+__LA_DECL int archive_write_zip_set_compression_zstd(struct archive *);
/* Deprecated; use archive_write_open2 instead */
__LA_DECL int archive_write_open(struct archive *, void *,
archive_open_callback *, archive_write_callback *,
@@ -1083,6 +1128,10 @@ __LA_DECL int archive_compression(struct archive *)
__LA_DEPRECATED;
#endif
+/* Parses a date string relative to the current time.
+ * NOTE: This is not intended for general date parsing, and the resulting timestamp should only be used for libarchive. */
+__LA_DECL time_t archive_parse_date(time_t now, const char *datestr);
+
__LA_DECL int archive_errno(struct archive *);
__LA_DECL const char *archive_error_string(struct archive *);
__LA_DECL const char *archive_format_name(struct archive *);
@@ -1201,8 +1250,10 @@ __LA_DECL int archive_match_include_gname_w(struct archive *,
const wchar_t *);
/* Utility functions */
+#if ARCHIVE_VERSION_NUMBER < 4000000
/* Convenience function to sort a NULL terminated list of strings */
__LA_DECL int archive_utility_string_sort(char **);
+#endif
#ifdef __cplusplus
}
diff --git a/contrib/libarchive/libarchive/archive_acl.c b/contrib/libarchive/libarchive/archive_acl.c
index bbb085afe7af..9e71f5ee5610 100644
--- a/contrib/libarchive/libarchive/archive_acl.c
+++ b/contrib/libarchive/libarchive/archive_acl.c
@@ -1185,8 +1185,13 @@ archive_acl_from_text_w(struct archive_acl *acl, const wchar_t *text,
/* Set remaining fields to blank. */
for (n = fields; n < numfields; ++n)
field[n].start = field[n].end = NULL;
+
+ if (field[0].start == NULL || field[0].end == NULL) {
+ /* This should never happen */
+ return (ARCHIVE_FATAL);
+ }
- if (field[0].start != NULL && *(field[0].start) == L'#') {
+ if (*(field[0].start) == L'#') {
/* Comment, skip entry */
continue;
}
@@ -1676,7 +1681,12 @@ archive_acl_from_text_nl(struct archive_acl *acl, const char *text,
for (n = fields; n < numfields; ++n)
field[n].start = field[n].end = NULL;
- if (field[0].start != NULL && *(field[0].start) == '#') {
+ if (field[0].start == NULL || field[0].end == NULL) {
+ /* This should never happen */
+ return (ARCHIVE_FATAL);
+ }
+
+ if (*(field[0].start) == '#') {
/* Comment, skip entry */
continue;
}
diff --git a/contrib/libarchive/libarchive/archive_acl_private.h b/contrib/libarchive/libarchive/archive_acl_private.h
index 2c9b5053430e..54e4439692ed 100644
--- a/contrib/libarchive/libarchive/archive_acl_private.h
+++ b/contrib/libarchive/libarchive/archive_acl_private.h
@@ -80,4 +80,4 @@ int archive_acl_from_text_l(struct archive_acl *, const char * /* text */,
int archive_acl_from_text_nl(struct archive_acl *, const char * /* text */,
size_t /* size of text */, int /* type */, struct archive_string_conv *);
-#endif /* ARCHIVE_ENTRY_PRIVATE_H_INCLUDED */
+#endif /* !ARCHIVE_ACL_PRIVATE_H_INCLUDED */
diff --git a/contrib/libarchive/libarchive/archive_cmdline.c b/contrib/libarchive/libarchive/archive_cmdline.c
index 2e5428cae516..23bb05d6424a 100644
--- a/contrib/libarchive/libarchive/archive_cmdline.c
+++ b/contrib/libarchive/libarchive/archive_cmdline.c
@@ -71,7 +71,7 @@ get_argument(struct archive_string *as, const char *p)
archive_string_empty(as);
/* Skip beginning space characters. */
- while (*s != '\0' && *s == ' ')
+ while (*s == ' ')
s++;
/* Copy non-space characters. */
while (*s != '\0' && *s != ' ') {
diff --git a/contrib/libarchive/libarchive/archive_cryptor_private.h b/contrib/libarchive/libarchive/archive_cryptor_private.h
index c13f29260a07..4b3c6c161433 100644
--- a/contrib/libarchive/libarchive/archive_cryptor_private.h
+++ b/contrib/libarchive/libarchive/archive_cryptor_private.h
@@ -64,6 +64,7 @@ typedef struct {
#elif defined(_WIN32) && !defined(__CYGWIN__) && defined(HAVE_BCRYPT_H) && _WIN32_WINNT >= _WIN32_WINNT_VISTA
#include <bcrypt.h>
+#define ARCHIVE_CRYPTOR_USE_CNG 1
/* Common in other bcrypt implementations, but missing from VS2008. */
#ifndef BCRYPT_SUCCESS
@@ -86,6 +87,7 @@ typedef struct {
#include <mbedtls/aes.h>
#include <mbedtls/md.h>
#include <mbedtls/pkcs5.h>
+#define ARCHIVE_CRYPTOR_USE_MBED 1
#define AES_MAX_KEY_SIZE 32
#define AES_BLOCK_SIZE 16
@@ -105,6 +107,7 @@ typedef struct {
#endif
#include <nettle/aes.h>
#include <nettle/version.h>
+#define ARCHIVE_CRYPTOR_USE_NETTLE 1
typedef struct {
#if NETTLE_VERSION_MAJOR < 3
@@ -125,6 +128,7 @@ typedef struct {
#elif defined(HAVE_LIBCRYPTO)
#include "archive_openssl_evp_private.h"
+#define ARCHIVE_CRYPTOR_USE_OPENSSL 1
#define AES_BLOCK_SIZE 16
#define AES_MAX_KEY_SIZE 32
@@ -140,6 +144,10 @@ typedef struct {
#else
+#if defined(_WIN32) && !defined(__CYGWIN__) && !(defined(HAVE_BCRYPT_H) && _WIN32_WINNT >= _WIN32_WINNT_VISTA)
+#define ARCHIVE_CRYPTOR_USE_WINCRYPT 1
+#endif
+
#define AES_BLOCK_SIZE 16
#define AES_MAX_KEY_SIZE 32
typedef int archive_crypto_ctx;
diff --git a/contrib/libarchive/libarchive/archive_digest.c b/contrib/libarchive/libarchive/archive_digest.c
index 3776831b21c9..45fc36af1145 100644
--- a/contrib/libarchive/libarchive/archive_digest.c
+++ b/contrib/libarchive/libarchive/archive_digest.c
@@ -196,6 +196,13 @@ __archive_md5final(archive_md5_ctx *ctx, void *md)
#elif defined(ARCHIVE_CRYPTO_MD5_LIBSYSTEM)
+// These functions are available in macOS 10.4 and later, but deprecated from 10.15 onwards.
+// We need to continue supporting this feature regardless, so suppress the warnings.
+#if defined(__clang__)
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+#endif
+
static int
__archive_md5init(archive_md5_ctx *ctx)
{
@@ -218,13 +225,46 @@ __archive_md5final(archive_md5_ctx *ctx, void *md)
return (ARCHIVE_OK);
}
+#if defined(__clang__)
+#pragma clang diagnostic pop
+#endif
+
+#elif defined(ARCHIVE_CRYPTO_MD5_WIN)
+
+static int
+__archive_md5init(archive_md5_ctx *ctx)
+{
+#if defined(HAVE_BCRYPT_H) && _WIN32_WINNT >= _WIN32_WINNT_VISTA
+ return (win_crypto_init(ctx, BCRYPT_MD5_ALGORITHM));
+#else
+ return (win_crypto_init(ctx, PROV_RSA_FULL, CALG_MD5));
+#endif
+}
+
+static int
+__archive_md5update(archive_md5_ctx *ctx, const void *indata,
+ size_t insize)
+{
+ return (win_crypto_Update(ctx, indata, insize));
+}
+
+static int
+__archive_md5final(archive_md5_ctx *ctx, void *md)
+{
+ return (win_crypto_Final(md, 16, ctx));
+}
+
#elif defined(ARCHIVE_CRYPTO_MD5_MBEDTLS)
static int
__archive_md5init(archive_md5_ctx *ctx)
{
mbedtls_md5_init(ctx);
+#if MBEDTLS_VERSION_NUMBER > 0x03000000
+ if (mbedtls_md5_starts(ctx) == 0)
+#else
if (mbedtls_md5_starts_ret(ctx) == 0)
+#endif
return (ARCHIVE_OK);
else
return (ARCHIVE_FATAL);
@@ -234,7 +274,11 @@ static int
__archive_md5update(archive_md5_ctx *ctx, const void *indata,
size_t insize)
{
+#if MBEDTLS_VERSION_NUMBER > 0x03000000
+ if (mbedtls_md5_update(ctx, indata, insize) == 0)
+#else
if (mbedtls_md5_update_ret(ctx, indata, insize) == 0)
+#endif
return (ARCHIVE_OK);
else
return (ARCHIVE_FATAL);
@@ -243,7 +287,11 @@ __archive_md5update(archive_md5_ctx *ctx, const void *indata,
static int
__archive_md5final(archive_md5_ctx *ctx, void *md)
{
+#if MBEDTLS_VERSION_NUMBER > 0x03000000
+ if (mbedtls_md5_finish(ctx, md) == 0) {
+#else
if (mbedtls_md5_finish_ret(ctx, md) == 0) {
+#endif
mbedtls_md5_free(ctx);
return (ARCHIVE_OK);
} else {
@@ -311,31 +359,6 @@ __archive_md5final(archive_md5_ctx *ctx, void *md)
return (ARCHIVE_OK);
}
-#elif defined(ARCHIVE_CRYPTO_MD5_WIN)
-
-static int
-__archive_md5init(archive_md5_ctx *ctx)
-{
-#if defined(HAVE_BCRYPT_H) && _WIN32_WINNT >= _WIN32_WINNT_VISTA
- return (win_crypto_init(ctx, BCRYPT_MD5_ALGORITHM));
-#else
- return (win_crypto_init(ctx, PROV_RSA_FULL, CALG_MD5));
-#endif
-}
-
-static int
-__archive_md5update(archive_md5_ctx *ctx, const void *indata,
- size_t insize)
-{
- return (win_crypto_Update(ctx, indata, insize));
-}
-
-static int
-__archive_md5final(archive_md5_ctx *ctx, void *md)
-{
- return (win_crypto_Final(md, 16, ctx));
-}
-
#else
static int
@@ -420,7 +443,11 @@ static int
__archive_ripemd160init(archive_rmd160_ctx *ctx)
{
mbedtls_ripemd160_init(ctx);
+#if MBEDTLS_VERSION_NUMBER > 0x03000000
+ if (mbedtls_ripemd160_starts(ctx) == 0)
+#else
if (mbedtls_ripemd160_starts_ret(ctx) == 0)
+#endif
return (ARCHIVE_OK);
else
return (ARCHIVE_FATAL);
@@ -430,7 +457,11 @@ static int
__archive_ripemd160update(archive_rmd160_ctx *ctx, const void *indata,
size_t insize)
{
+#if MBEDTLS_VERSION_NUMBER > 0x03000000
+ if (mbedtls_ripemd160_update(ctx, indata, insize) == 0)
+#else
if (mbedtls_ripemd160_update_ret(ctx, indata, insize) == 0)
+#endif
return (ARCHIVE_OK);
else
return (ARCHIVE_FATAL);
@@ -439,7 +470,11 @@ __archive_ripemd160update(archive_rmd160_ctx *ctx, const void *indata,
static int
__archive_ripemd160final(archive_rmd160_ctx *ctx, void *md)
{
+#if MBEDTLS_VERSION_NUMBER > 0x03000000
+ if (mbedtls_ripemd160_finish(ctx, md) == 0) {
+#else
if (mbedtls_ripemd160_finish_ret(ctx, md) == 0) {
+#endif
mbedtls_ripemd160_free(ctx);
return (ARCHIVE_OK);
} else {
@@ -605,13 +640,42 @@ __archive_sha1final(archive_sha1_ctx *ctx, void *md)
return (ARCHIVE_OK);
}
+#elif defined(ARCHIVE_CRYPTO_SHA1_WIN)
+
+static int
+__archive_sha1init(archive_sha1_ctx *ctx)
+{
+#if defined(HAVE_BCRYPT_H) && _WIN32_WINNT >= _WIN32_WINNT_VISTA
+ return (win_crypto_init(ctx, BCRYPT_SHA1_ALGORITHM));
+#else
+ return (win_crypto_init(ctx, PROV_RSA_FULL, CALG_SHA1));
+#endif
+}
+
+static int
+__archive_sha1update(archive_sha1_ctx *ctx, const void *indata,
+ size_t insize)
+{
+ return (win_crypto_Update(ctx, indata, insize));
+}
+
+static int
+__archive_sha1final(archive_sha1_ctx *ctx, void *md)
+{
+ return (win_crypto_Final(md, 20, ctx));
+}
+
#elif defined(ARCHIVE_CRYPTO_SHA1_MBEDTLS)
static int
__archive_sha1init(archive_sha1_ctx *ctx)
{
mbedtls_sha1_init(ctx);
+#if MBEDTLS_VERSION_NUMBER > 0x03000000
+ if (mbedtls_sha1_starts(ctx) == 0)
+#else
if (mbedtls_sha1_starts_ret(ctx) == 0)
+#endif
return (ARCHIVE_OK);
else
return (ARCHIVE_FATAL);
@@ -621,7 +685,11 @@ static int
__archive_sha1update(archive_sha1_ctx *ctx, const void *indata,
size_t insize)
{
+#if MBEDTLS_VERSION_NUMBER > 0x03000000
+ if (mbedtls_sha1_update(ctx, indata, insize) == 0)
+#else
if (mbedtls_sha1_update_ret(ctx, indata, insize) == 0)
+#endif
return (ARCHIVE_OK);
else
return (ARCHIVE_FATAL);
@@ -630,7 +698,11 @@ __archive_sha1update(archive_sha1_ctx *ctx, const void *indata,
static int
__archive_sha1final(archive_sha1_ctx *ctx, void *md)
{
+#if MBEDTLS_VERSION_NUMBER > 0x03000000
+ if (mbedtls_sha1_finish(ctx, md) == 0) {
+#else
if (mbedtls_sha1_finish_ret(ctx, md) == 0) {
+#endif
mbedtls_sha1_free(ctx);
return (ARCHIVE_OK);
} else {
@@ -698,31 +770,6 @@ __archive_sha1final(archive_sha1_ctx *ctx, void *md)
return (ARCHIVE_OK);
}
-#elif defined(ARCHIVE_CRYPTO_SHA1_WIN)
-
-static int
-__archive_sha1init(archive_sha1_ctx *ctx)
-{
-#if defined(HAVE_BCRYPT_H) && _WIN32_WINNT >= _WIN32_WINNT_VISTA
- return (win_crypto_init(ctx, BCRYPT_SHA1_ALGORITHM));
-#else
- return (win_crypto_init(ctx, PROV_RSA_FULL, CALG_SHA1));
-#endif
-}
-
-static int
-__archive_sha1update(archive_sha1_ctx *ctx, const void *indata,
- size_t insize)
-{
- return (win_crypto_Update(ctx, indata, insize));
-}
-
-static int
-__archive_sha1final(archive_sha1_ctx *ctx, void *md)
-{
- return (win_crypto_Final(md, 20, ctx));
-}
-
#else
static int
@@ -873,13 +920,42 @@ __archive_sha256final(archive_sha256_ctx *ctx, void *md)
return (ARCHIVE_OK);
}
+#elif defined(ARCHIVE_CRYPTO_SHA256_WIN)
+
+static int
+__archive_sha256init(archive_sha256_ctx *ctx)
+{
+#if defined(HAVE_BCRYPT_H) && _WIN32_WINNT >= _WIN32_WINNT_VISTA
+ return (win_crypto_init(ctx, BCRYPT_SHA256_ALGORITHM));
+#else
+ return (win_crypto_init(ctx, PROV_RSA_AES, CALG_SHA_256));
+#endif
+}
+
+static int
+__archive_sha256update(archive_sha256_ctx *ctx, const void *indata,
*** 35195 LINES SKIPPED ***